Skip to content

v0.7.0

Latest

Choose a tag to compare

@github-actions github-actions released this 16 Jul 00:24

What's Changed

  • Add fuzz targets for keyword lexing, parameter binding, and partition decode by @fornwall in #121
  • Refactor: parse adbc.ingest.mode into an enum once at set_option time by @fornwall in #117
  • Add background prefetch to the streaming result reader by @fornwall in #124
  • Enable #![warn(missing_docs)] by @fornwall in #116
  • ci: make the Foundry validation suite gate CI by @fornwall in #115
  • Expose Spanner request priority and request/transaction tags as driver options by @fornwall in #123
  • Fix get_option_int/get_option_double semantics (REVIEW.md P3) by @fornwall in #118
  • Accept spanner: connection URIs with query-parameter options by @fornwall in #122
  • Ship bulk ingest as native insert mutations instead of per-row INSERT DML by @fornwall in #125
  • docs: add complete options reference (docs/options.md) by @fornwall in #120
  • test: pin get_objects empty-list vs null semantics at every depth boundary by @fornwall in #126
  • test: zero-row schema fidelity across every mapped Spanner type by @fornwall in #127
  • Foundry validation: pin fork with the two suite fixes, drop all xfails by @fornwall in #138
  • Version-envelope partition descriptors and assert per-partition schema by @fornwall in #129
  • Add spanner.max_timestamp_precision option for full-range TIMESTAMP reads by @fornwall in #132
  • test: in-process mock Spanner gRPC server for deterministic logical-fault tests by @fornwall in #135
  • Add the adbc.statement.bind_by_name statement option by @fornwall in #136
  • perf: run get_objects metadata queries concurrently with pushed-down filters by @fornwall in #134
  • test: FFI / stream lifecycle battery for the driver-manager crash classes by @fornwall in #130
  • Fix build: pass TimestampPrecision to result_set_to_batch in objects.rs by @fornwall in #139
  • test: ingest edge-case matrix + error-surface fixes the tests exposed by @fornwall in #133
  • feat: RPC timeout options (spanner.rpc.timeout_seconds.{query,update,fetch}) by @fornwall in #131
  • Foundry validation no failures by @fornwall in #140
  • Forward google.rpc.Status details (RetryInfo etc.) into the ADBC error's details by @fornwall in #128
  • Migrate to Rust 2024 edition by @fornwall in #137
  • chore: add Dependabot for github-actions and cargo by @fornwall in #145
  • test: assert resilience suite runs single-threaded by @fornwall in #149
  • chore(deps): Bump actions/cache from 4 to 6 by @dependabot[bot] in #152
  • chore(deps): Bump actions/setup-python from 5 to 6 by @dependabot[bot] in #153
  • docs: remove dead crates.io/docs.rs badges from README by @fornwall in #146
  • test: drive spanner.rpc.timeout_seconds.update under a toxic by @fornwall in #143
  • chore(deps): Bump bytes from 1.12.0 to 1.12.1 by @dependabot[bot] in #155
  • Add retry-tuning options (spanner.retry.max_attempts / max_elapsed_seconds) by @fornwall in #151
  • test: e2e that a google.rpc.RetryInfo detail reaches Error.details by @fornwall in #144
  • chore(deps): Bump arrow-array from 59.0.0 to 59.1.0 by @dependabot[bot] in #154
  • docs: soften RetryInfo-on-ABORTED to one forwardable detail among many by @fornwall in #142
  • chore(deps): Bump arrow-buffer from 59.0.0 to 59.1.0 by @dependabot[bot] in #156
  • chore(deps): Bump libloading from 0.8.9 to 0.9.0 by @dependabot[bot] in #157
  • ci: add concurrency groups to auto-cancel superseded PR runs by @fornwall in #147
  • docs: note error-detail encoding divergence from Flight SQL driver by @fornwall in #141
  • chore(deps): Bump arrow-schema from 59.0.0 to 59.1.0 by @dependabot[bot] in #158
  • Bound DDL and driver-internal metadata queries with RPC timeouts by @fornwall in #150
  • docs: add CHANGELOG and CONTRIBUTING; document versioning policy by @fornwall in #148
  • security: scrub auth-crate Display from credential-build errors by @fornwall in #162
  • docs: document wheel platform floors in python/README by @fornwall in #160
  • ci: open a tracking issue on nightly fuzz/resilience failures by @fornwall in #159
  • ci: cache the arrow-adbc C++ validation build tree by @fornwall in #161
  • refactor: unify the three comment-skipping lexer walkers behind one tokenizer by @fornwall in #163
  • ci: fail the release build when the Windows import library is missing by @fornwall in #164
  • test: assert values, not just counts, in DDL-note and replace-ingest tests by @fornwall in #165
  • refactor: name the INFORMATION_SCHEMA column indices by @fornwall in #166
  • refactor: fold the bind_one/bind_list type-mapping duplication behind one visitor by @fornwall in #168
  • test: lock in null get_info VendorVersion, distinct from driver version by @fornwall in #169
  • ci: make Foundry validation fail loudly on a no-coverage run by @fornwall in #170
  • fix: reject PROTO/ENUM columns with a clean NotImplemented instead of a silent Utf8 mis-decode by @fornwall in #171
  • test(foundry): override synthetic-column tests instead of a shared-suite flag by @fornwall in #173
  • docs(python): rewrite PyPI README for end users by @fornwall in #176
  • feat(ingest): let spanner.ingest.primary_key key on existing columns by @fornwall in #175
  • ci: build a musl (Alpine) shared library and musllinux_1_2 wheel by @fornwall in #174
  • feat: OAuth access-token auth via spanner.access_token by @fornwall in #172
  • ci: derive wheel version via cargo metadata instead of positional Cargo.toml grep by @fornwall in #177
  • feat: query optimizer options (spanner.query.optimizer_version / optimizer_statistics_package) by @fornwall in #178
  • feat: MaxCommitDelay via spanner.max_commit_delay by @fornwall in #179
  • fuzz(partition): fix false-positive round-trip oracle on huge-integer descriptors by @fornwall in #181
  • refactor: consolidate scattered SQL-text helpers into one module by @fornwall in #180
  • feat: directed reads via spanner.directed_read by @fornwall in #182
  • test(auth): opt-in end-to-end keyfile/impersonation auth tests by @fornwall in #184
  • test(resilience): cover mid-stream disconnect and truncated streams by @fornwall in #186
  • feat(dml): set last_statement on single-statement autocommit DML by @fornwall in #185
  • feat: add commit-stats support via spanner.commit_stats by @fornwall in #187
  • chore(deps): move arrow-adbc pin to apache/arrow-adbc main, enable ErrorCompatibility by @fornwall in #190
  • fix(python): repair access_token NameError, correct BigQuery auth claims, add typed option enums by @fornwall in #189
  • ci: nightly non-gating workflow against real Cloud Spanner via WIF by @fornwall in #183
  • test: cover GQL graph queries end-to-end against the emulator by @fornwall in #192
  • refactor: move python/validation to top-level foundry-validation by @fornwall in #191
  • chore: add rust-toolchain.toml pinning the dev toolchain channel by @fornwall in #198
  • chore: build the ADBC validation harness out of the source tree by @fornwall in #197
  • feat(retry): add exponential-backoff tuning options by @fornwall in #193
  • feat(ingest): BatchWrite firehose transport behind spanner.ingest.batch_write by @fornwall in #196
  • docs: trim README option tables, point to docs/options.md as authoritative by @fornwall in #199
  • docs: add docs/testing.md as a single testing overview by @fornwall in #200
  • test: cover Spanner change streams via plain SQL against the emulator by @fornwall in #195
  • test: gate SpannerStatementTest.SqlIngestErrors in the ADBC validation subset by @fornwall in #201
  • docs(foundry): clarify timestamptz_s/_ms skip reason (unit, not range) by @fornwall in #203
  • ci(adbc-validation): enforce expected-failures instead of an allowlist by @fornwall in #202
  • test(adbc-validation): self-skip Transactions instead of excluding it by @fornwall in #210
  • fix(partition): stabilize descriptor round-trip for large floats by @fornwall in #208
  • ci(adbc-validation): stop stale build-cache from masking an arrow-adbc rev bump by @fornwall in #209
  • ci(foundry): guard the skip inventory against silent drift by @fornwall in #204
  • chore: raise MSRV to 1.97 by @fornwall in #211
  • fix(ingest): default bulk-ingest mode to create, matching the ADBC spec by @fornwall in #207
  • test(adbc-validation): bump suite to arrow-adbc main, gate SqlPartitionedInts by @fornwall in #213
  • test(adbc-validation): split the 10 self-skipping ingest cases by applicability by @fornwall in #212
  • ci: run the mock_spanner fault-injection suite in CI by @fornwall in #215
  • docs: fix CLAUDE.md revert-checklist README pointer by @fornwall in #224
  • ci: gate release/publish on ADBC conformance suites, not just ci.yml by @fornwall in #229
  • docs: drop dead crates.io link for the unpublished crate by @fornwall in #222
  • perf: remove a few avoidable per-item allocations in metadata paths by @fornwall in #233
  • test(mock_spanner): gate commit-stats mutation-count capture by @fornwall in #230
  • fix(ingest): remap create_append schema-mismatch to AlreadyExists by @fornwall in #226
  • fix(statement): strip trailing terminators on execute_schema/execute_partitions by @fornwall in #219
  • test(integration): cover cross-thread readonly-flag propagation by @fornwall in #228
  • fix(statement): clear bound rows after a DDL execute by @fornwall in #216
  • test(adbc-validation): ASan/UBSan leg for the C++ validation suite by @fornwall in #237
  • security: redact credential fields in SpannerDatabase Debug by @fornwall in #218
  • feat(connection): accept setting current_catalog/current_schema to "" as a no-op by @fornwall in #225
  • perf(conversion): drop the per-batch top-level column pointer matrix by @fornwall in #217
  • perf(bound-query): build multi-row bound-query statements lazily by @fornwall in #232
  • docs: add a from-first-principles ADBC driver guide by @fornwall in #235
  • test(named-schema): cover CREATE SCHEMA round-trip against the emulator by @fornwall in #238
  • feat(ingest): bisect-and-retry a chunk that overshoots Spanner's mutation limit by @fornwall in #234
  • fix(error): map gRPC UNIMPLEMENTED to Status::NotImplemented by @fornwall in #221
  • ci: SHA-pin third-party GitHub Actions in the gating workflows by @fornwall in #231
  • feat(auth): add spanner.auth.quota_project option by @fornwall in #240
  • refactor(options): consolidate credential options under spanner.auth.* by @fornwall in #244
  • refactor(options): rename spanner.data_boost_enabled to spanner.data_boost by @fornwall in #245
  • ci(adbc-validation): add a Rust-instrumented AddressSanitizer leg by @fornwall in #248
  • refactor(options): regroup flat spanner.max_* keys under subsystem namespaces by @fornwall in #246
  • refactor(options): merge spanner.read.timestamp into spanner.read.staleness by @fornwall in #247
  • bench: emulator benchmark of ADBC driver vs official Spanner client by @fornwall in #251
  • perf(conversion): decode DATE/TIMESTAMP/NUMERIC with direct scanners by @fornwall in #250
  • feat(error): append fixed IAM guidance to PERMISSION_DENIED errors by @fornwall in #241
  • refactor(uri): require the standard uri option with a spanner:// scheme (drop spanner.database) by @fornwall in #252
  • ci: remove the nightly real Cloud Spanner workflow by @fornwall in #254
  • refactor(python): drop friendly connect kwargs, use raw options in db_kwargs by @fornwall in #253
  • chore: cargo update to bump the lockfile by @fornwall in #255
  • ci: pin Rust to 1.97.0 with rust-toolchain.toml as the single source by @fornwall in #239
  • refactor(options): collapse duplicated option-dispatch glue by @fornwall in #243
  • chore(deps): Bump taiki-e/install-action from 2.83.0 to 2.83.2 by @dependabot[bot] in #256
  • Promote unsupported isolation levels instead of rejecting them by @fornwall in #257
  • docs: move Testing/Releasing to CONTRIBUTING.md and drop redundant License section by @fornwall in #258
  • feat: map Spanner ENUM to Arrow Int64 ordinal by @fornwall in #259
  • feat: map Spanner PROTO to Arrow Binary by @fornwall in #260
  • docs: sketch an autocommit-based dbt materialization strategy for Spanner by @fornwall in #261
  • test(proto): retry proto-bundle setup instead of silently swallowing failures by @fornwall in #264
  • test(validation): enable the float cases via RewriteSql FLOAT64 rewrite by @fornwall in #265
  • fix(fuzz): stop scan_timestamp_utc panic on trailing dot + fix values oracle by @fornwall in #267
  • feat(txn): error on read-your-writes in a manual transaction instead of silently missing buffered DML by @fornwall in #262
  • fix(options): reject oversized durations instead of panicking in parse_duration by @fornwall in #268
  • test(mock): assert spanner.read.staleness and spanner.directed_read reach the wire (TEST-1/TEST-2) by @fornwall in #273
  • fix(statement): route non-DML SQL in execute_update through the read-only query path (COR-3/SPEC-1) by @fornwall in #270
  • test(foundry): bump the pinned validation suite to latest upstream main by @fornwall in #276
  • feat(txn): kind-exclusive manual transactions — read-only snapshots and buffered DDL by @fornwall in #275
  • deps: move google-cloud-* git pins from the fornwall fork to upstream googleapis main by @fornwall in #277
  • chore(validation): bump ARROW_ADBC_TAG to 9be02985, adopt the QuoteIdentifier quirk by @fornwall in #278
  • feat(statement): real parameter-type inference in get_parameter_schema + accept Null-typed bind columns by @fornwall in #279
  • fix(cancel): per-operation cancel signals — a new operation can no longer un-cancel a live streamed reader (CON-2) by @fornwall in #272
  • fix(statement): repair the cancel-API semantic conflict between #272 and #275/#279 by @fornwall in #281
  • fix(bind): accept dictionary-encoded bind parameter columns (CONV-2) by @fornwall in #282
  • perf(driver): share one Spanner client stack across a database's connections (SPAN-1) by @fornwall in #271
  • fix(ingest): buffer manual-mode ingest mutations all-or-nothing (COR-2) by @fornwall in #269
  • perf(ddl): cache the Database Admin client instead of rebuilding it per DDL statement (SPAN-10) by @fornwall in #285
  • perf(txn): commit mutations-only manual transactions via the write-only path (SPAN-6) by @fornwall in #286
  • perf(dml): set last_statements for multi-statement autocommit batches (SPAN-7) by @fornwall in #284
  • perf(conversion): reuse a scratch buffer for BYTES base64 decoding (PERF-2) by @fornwall in #287
  • fix(auth): stop returning live secrets from get_option (SEC-1) by @fornwall in #289
  • fix(statistics): treat INTERVAL as non-groupable in get_statistics (CONV-3) by @fornwall in #288
  • perf: avoid per-candidate/per-lexeme allocations in LikeMatcher and is_raw_prefix (PERF-6, PERF-7) by @fornwall in #290
  • fix(conversion): reject non-canonical NUMERIC strings in parse_numeric_i128 (CONV-7) by @fornwall in #292
  • fix(conversion): use checked offset arithmetic in build_list (CONV-4) by @fornwall in #291
  • fix(statement): reject DML cleanly in execute_partitions (COR-11) by @fornwall in #293
  • chore: add #[must_use] to the builder-threading apply_to_* family (IDIO-10) by @fornwall in #295
  • docs(connection): fix stale run_batch_dml rustdoc (IDIO-8) by @fornwall in #296
  • refactor(sql): rewrite first_keyword over the shared lexer (IDIO-6) by @fornwall in #297
  • fix(statement): accept the spec-default incremental=false option (SPEC-2) by @fornwall in #294
  • fix(info): make get_info(None) cover every recognised code (SPEC-5) by @fornwall in #274
  • ci(fuzz): pass workflow_dispatch input via env, not shell interpolation (SEC-4) by @fornwall in #299
  • docs: fix quickstart connection-URI examples the driver rejects (IDIO-1) by @fornwall in #300
  • fix(statement): make execute_partitions consume bound data consistently (SPEC-3) by @fornwall in #302
  • fix(options): reject int-typed sets on boolean options (COR-4) by @fornwall in #301
  • fix(options)!: require exact lowercase option values everywhere (COR-7) by @fornwall in #298
  • perf(info): borrow static info strings; reuse the shared arrow_err (PERF-8) by @fornwall in #303
  • perf(metadata): drop per-cell String clones building metadata arrays (PERF-5) by @fornwall in #307
  • test(mock): assert spanner.commit.max_delay reaches the CommitRequest (TEST-5) by @fornwall in #304
  • fix(driver)!: refuse secret-bearing connection-URI query parameters (SEC-2) by @fornwall in #305
  • fix(connection)!: enforce adbc.connection.readonly on the commit paths (COR-10) by @fornwall in #306
  • fix(bind): honour the arrow.json tag through dictionary encoding; test null-in-dictionary-values by @fornwall in #308
  • chore(deps): Bump EmbarkStudios/cargo-deny-action from 2.0.20 to 2.1.1 by @dependabot[bot] in #315
  • chore(deps): Bump softprops/action-gh-release from 3.0.1 to 3.0.2 by @dependabot[bot] in #314
  • test(mock): assert isolation-level promotion reaches TransactionOptions (TEST-3) by @fornwall in #310
  • fix(error): forward google.rpc.Status details on the BatchWrite path (COR-8) by @fornwall in #311
  • docs: surface the partition-descriptor security caveat in the READMEs (SEC-3) by @fornwall in #309
  • fix(connection)!: map snapshot isolation to REPEATABLE_READ, not SERIALIZABLE (SPEC-7) by @fornwall in #316
  • test(timeout): make the rpc_timeouts DDL-deadline assertion deterministic (TEST-12) by @fornwall in #318
  • docs(retry): describe the client's actual attempt accounting (COR-13, UP-14) by @fornwall in #317
  • refactor(retry): drop the SpannerRetryPolicy copy for the client's export (UP-3) by @fornwall in #319
  • refactor(driver): express the access-token conflict as a filter over the credential ladder (IDIO-11) by @fornwall in #320
  • refactor(bind): collapse the six primitive bind arms into one generic (IDIO-15) by @fornwall in #321
  • refactor(options): route the four as_string copies through options::string_option (IDIO-5) by @fornwall in #322
  • refactor(objects): collapse the five Option-grouping blocks into a helper (IDIO-12) by @fornwall in #323
  • refactor(request,retry): emit the apply_to_* commit-builder pair from one body (IDIO-3) by @fornwall in #324
  • refactor(options): emit the typed option getters from one macro (IDIO-13) by @fornwall in #325
  • fix(statistics): drop the can't-happen unwrap from the scan collector (IDIO-16) by @fornwall in #330
  • refactor(driver,objects): extract the credential ladder and the object assemble pass (IDIO-18) by @fornwall in #328
  • refactor(visibility): make module-internal items private (IDIO-14) by @fornwall in #327

New Contributors

Full Changelog: v0.6.0...v0.7.0