NOTICE: This repo will be merging with the googleapis/google-cloud-cpp monorepo around June 1, 2020. This change should not break any users who are using a released version. We expect this new monorepo organization to be better for our existing and new customers going forward. Please see googleapis/google-cloud-cpp#3612 for more details.
BREAKING CHANGES
No breaking changes in this release.
OTHER CHANGES
- feat: moved quickstart/ -> google/cloud/spanner/ (#1479)
-
Breaking Changes
- NONE
-
Other Changes
- feat: announce move to monorepo (#1455)
- feat: allow for the emulator in ClientIntegrationTest.QueryOptionsWork (#1453)
- docs: add snippets for methods and classes in keys.h (#1451)
- doc: add mention of GOOGLE_CLOUD_CPP_TRACING_OPTIONS env var (#1448)
- test: write integration test for SessionPool (#1442)
- doc: snippets for admin clients with custom policies (#1440)
- testing: improvements for Backup related tests (#1438)
- refactor: use g-c-cpp-common's async retry loop (#1441)
- feat: add overloads to admin connections for specifying policies (#1439)
- feat: change quickstart to use recommended build target (#1436)
-
Breaking Changes
- feat!: add support for QueryOptions (#1351), this is a breaking
change for any developers that used
Connection::SqlParams::placeholder_do_not_use_name_will_change
. - feat!: implement SessionPool session refresh (#1425), this is a
breaking change as the return type for
SessionOptions::keep_alive_interval
changed fromstd::chrono::minutes
tostd::chrono::seconds
.
- feat!: add support for QueryOptions (#1351), this is a breaking
change for any developers that used
We believe the risk of developers being impacted by these changes is small, but do apologize if this impacts you.
-
Other Changes
-
feat: add Managed Backup feature (#1358)
-
feat: sessions are automatically created and refreshed by background threads as described in: https://cloud.google.com/spanner/docs/sessions#best_practices
-
We made multiple improvements (detailed below) to the documentation and code samples.
-
fix: polling policy stops after 'too many' successes (#1427)
-
feat: clean up main doxygen page (#1404)
-
feat: implement async session creation (#1405)
-
fix: avoid deadlocks during shutdown (#1397)
-
feat: streaming Value STRING only quotes in aggregates (#1401)
-
doc: small improvements to Client samples (#1398)
-
doc: link existing example for ExecuteBatchDml (#1395)
-
doc: update snippets for all mutation types (#1394)
-
fix: Value::op==() correctly handles Date and Timestamp (#1386)
-
feat: taught Date how to stream itself (#1385)
-
feat: escape non-printable bytes in Value::op<< (#1371)
-
docs: add snippets for Commit() with a mutator or mutations (#1374)
-
docs: updated snippets and samples for profile and analyze methods (#1364)
-
feat: Value streaming respects io manipulators (#1362)
-
feat: SqlStatement uses
op<<(Value)
(#1361) -
cleanup: make use of the new Client::Commit(Mutations) overload (#1359)
-
feat: add ostream operator for Value (#1336)
-
feat: refactor and enhance session creation logic (#1343)
-
doc: link to the style guide in the common repo (#1348)
-
fix: associate each
Session
with aChannel
(#1346) -
feat: moved INSTALL.md -> doc/packaging.md (#1341)
-
fix: use correct quickstart URL (#1339)
-
feat: simplify README.md (#1338)
-
doc: add more snippets to documentation (#1331)
-
doc: an example of spanner::GetSingularRow (#1327)
-
Breaking Changes
- There are no API breaking changes in this release.
-
Other Changes
- cleanup: change to common's {Connection,Tracing}Options (#1279) - this is not an API breaking change, but does change the ABI.
- cleanup: use common's PaginationRange (#1278) - this is not an API breaking change, but does change the ABI.
- feat: implement quickstart example (#1318) - shows how to use
google-cloud-cpp-spanner
from a larger project, both with CMake and Bazel. - feat: do not rethrow
RuntimeStatusError
from aCommit()
mutator (#1320) - allows applications to useStatusOr<T>::value()
inside aCommit()
mutator. - feat: add a
Commit()
helper that takes theMutations
directly (#1319) - a simpler API to commit a vector ofspanner::Mutation
. - feat: support environment-variable override of default endpoint (#1283)
- feat: make emulator endpoint/credentials changes as late as possible (#1277)
-
Breaking Changes
- refactor!: use
BackgroundThreads
fromcommon
(#1262) - refactor!: prepare for new field in SqlParams (#1265)
- refactor!: expand SqlParams members into PartitionQueryParams (#1263)
- refactor!: remove c'tors from Connection::* param structs (#1257)
- refactor!: use
-
Other Changes
- chore: add some async methods to
SpannerStub
(#1270) - feat: environment-variable override of the spanner endpoint (#1269)
- doc: improve instructions for WORKSPACE files (#1254)
- doc: simplify install instructions (#1268)
- refactor: Migrate away from
grpc_utils
namespace (#1266) - doc: small tweaks to Doxygen documentation (#1267)
- feat: use
BackgroundThreads
inSessionPool
(#1259) - chore: upgrade dep to g-c-c-common v0.19 (#1258)
- chore: upgrade to cpp-cmakefiles v0.4.1 (#1253)
- doc: fix INSTALL instructions for Bazel (#1226)
- ci: upgrade protobuf to v3.11.3 (#1247)
- chore: add some async methods to
-
Breaking Changes
- fix!: avoid single-arg forwarding c'tor (#1233)
- chore!: prep cleanup for enabling clang-tidy in headers (#1222)
-
Other Changes
- docs: add summary of result classes (#1243)
- feat: const qualify ConnectionOptions::background_threads_factory() (#1240)
- doc: document how to run samples using Bazel (#1228)
- feat: implement query and update timestamp samples (#1223)
- feat: add CommitTimestamp support (#1225)
- doc: add skeletons for *_with_timestamp_column (#1220)
- doc: add spanner_create_user_defined_struct example (#1214)
- style: cleanup use of
noexcept
,explicit
and= default
(#1209) - doc: exclude benchmarks for doxygen docs (#1208)
- docs: specify how Commit(mutator, ...) handles exceptions (#1198)
- feat: use 1 client with multiple channels for the benchmark (#1194)
- fix: remove unnecessary dependency on bigtable (#1195)
- feat: support truncation of strings/bytes fields in protobuf logging (#1192)
- feat: a small script to plot benchmark results (#1189)
- fix: complete test coverage for g:c:spanner::Timestamp (#1190)
- fix: only check for per-thread rusage in the benchmark that requires it (#1186)
- docs: Tighten up some documentation for g:c:spanner::Client::Commit() (#1173)
- feat: remove internal::TimestampFromCounts() (#1183)
-
Breaking Changes
- feat!: remove Timestamp::Min() and Timestamp::Max() (#1182)
-
Other Changes
- feat: allow re-using a database across benchmark runs (#1174)
- fix: clean up / fix ClientCount logic (#1175)
-
Breaking Changes
- fix!: support full TIMESTAMP range in g::c::spanner::Timestamp (#1166)
- refactor!: make
SessionPoolOptions
a class (#1130)
-
Other Changes
- fix: avoid deadlock waiting for Session allocation (#1170)
- bug: number of channels was inadvertently limited to 1 (#1169)
- bug: deflake rollback integration test (#1164)
- feat: add optimistic concurrency control loop for IAM (#1162)
- feat: add build to check API breakage (#1155)
- feat: add CMake option to disable -Werror/-WX (#1150)
- feat: commit begins transaction if not already begun (#1143)
- feat: delete bad sessions from pool (#1142)
- feat: handle session-not-found in all connection_impl methods (#1141)
- bug: set "sticky" I/O format flags before forking threads (#1128)
-
Breaking Changes
- feat!: replaces PartitionOptions proto with struct (#1035)
- refactor!: drop support for compile-time preprocessor config (#1086)
-
Other Changes
- feat: add
SessionPoolOptions
with labels toMakeConnection()
(#1109) - fix: tell
clang-format
to leave doxygen@copydoc
directives alone (#1122) - feat: allow users to configure retry policies (#1111)
- feat: optimize passing
Bytes
toValue
(#1104) - feat: change
GetCurrentRow
toGetSingularRow
(#1092) - feat: update the pool options to match the design (#1089)
- feat: support multiple channels in
SessionPool
(#1063) - bug: fix year formatting in
spanner::Date
(#1085) - fix: execute each rerun of an aborted transaction in the same session (#1079)
- feat: add function to get a single row from a range (#1074)
- feat: add some plumbing to enable multiple channels (#1050)
- feat: attempt to speed up hot loop in
NextRow
(#1052) - feat: associate
SpannerStub
with aSession
(#1041) - add and update several examples, benchmarks, and tests.
- feat: add
-
Breaking Changes
- feat!: class templates removed from keys.h (#936)
- feat!: change result return types (#942)
- refactor!: replaced Row<...> with std::tuple<...> (#967)
- feat!: support for select-star queries (#976)
- feat!: replace RunTransaction() with Client::Commit(functor) (#975)
- chore!: renamed QueryResult to RowStream (#978)
- chore!: renamed ExecuteSqlParams to SqlParams (#986)
- cleanup: depend on google-cloud-cpp-common (#940)
-
feat: configurable strategy for background threads (#955)
-
feat: add Profile and Analyze methods (#961)
-
feat: adds efficient move to support to Value:get() (#980)
-
feat: add efficient move support to mutation builder temporaries (#989)
-
bug: only install the required headers (#993)
-
bug: install the headers for mocking (#997)
-
Breaking Changes
- refactor
Read
to returnReadResult
; removeResultSet
(#935) - removed
Row<>
from mutations API (#938). Removes theAddRow(Row<Ts...>)
member function on theWriteMutation
API. In place of this method there is now anAddRow(std::vector<Value>)
method. - Change
Value::Bytes
togoogle::cloud::spanner::Bytes
(#920) - implement
CreateInstanceRequestBuilder
(#933). Changed the function signature ofInstanceAdminClient::CreateInstance()
. - Replace
ExecuteSql
withExecuteQuery
andExecuteDml
(#927) - Changed
RowParser
to require aRow<Ts...>
template param (#653).ResultSet::Rows
used to be a variadic template that took the individual C++ types for each row. With this change that function is now a template with one parameter, which must be aRow<...>
type. - Implements
Database
in terms ofInstance
(#652). This PR removes renames some accessors likeInstanceId
->instance_id
due to their trivial nature now (style guide). It also removes some methods likeDatabase::ParentName()
, which is now replaced byDatabase::instance()
. - Fixes inconsistent naming of the Batch DML params struct. (#650). This struct has been renamed, so any code using this struct will need to be updated.
- refactor
-
Feature changes
- implement
InstanceAdminClient
methodsCreateInstance
,UpdateInstance
,DeleteInstance
,ListInstanceConfigs
,GetInstanceConfig
,SetIamPolicy
. - implement
DatabaseAdminClient
methodsTestIamPermissions
,SetIamPolicy
,GetIamPolicy
. - implement retries for
Commit()
,PartitionRead
,PartitionQuery
,ExecuteBatchDml
,CreateSession
,Rollback
. - implement
PartialResultSetRead
with resumes (#693) - use separate policies for retry vs. rerun (#667)
- implement
DatabaseAdminConnection
(#638) - implement overloads on
UpdateInstanceRequestBuilder
(#921) - implement metadata decorator for
InstanceAdminStub
. (#678) - implement logging wrapper for
InstanceAdminStub
. (#676) - support install components for the library (#659)
- implement
-
Bug fixes
- fix runtime install directory (#658)
- give sample programs a long timeout time. (#622)
- use RunTransaction for read write transaction sample (#654)
- This is the initial Alpha release of the library.
- While this version is not recommended for production workloads it is stable enough to use in experimental code. We welcome feedback about the library through GitHub issues.
- The API is expected to undergo incompatible changes before Beta and GA.
- The library supports all the operations to read and write data into Cloud Spanner.
- The library supports some administrative operations such as creating, updating, and dropping databases.