Skip to content

Releases: fornwall/spanner-adbc

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 12:01

What's Changed

  • feat(validation): rewrite the suite's dialect-sensitive SQL via RewriteSql — 30 more cases gate-enforced by @fornwall in #283
  • docs: document Spanner transactions and every gRPC call the driver makes by @fornwall in #336
  • perf(conversion): let pull_chunk's row Vec grow instead of reserving the cap (PERF-4) by @fornwall in #332
  • feat(partitions)!: remove the inert spanner.partition.max_count option by @fornwall in #337
  • refactor(statement): unify the three table-exists probe remaps (IDIO-9) by @fornwall in #333
  • fix(conversion): decode STRUCT fields positionally only (CONV-6) by @fornwall in #334
  • refactor(options): fold the four f64 seconds parsers into one helper (IDIO-4) by @fornwall in #326
  • fix(options): name the offending option key in every option error (IDIO-7) by @fornwall in #331
  • refactor(options): bundle the connection/statement config into one SharedConfig (IDIO-2) by @fornwall in #329
  • docs(review): resolve SPEC-4 — isolation promotion is conformant support, not a deviation by @fornwall in #338
  • feat(ingest): map UInt8/16/32 → INT64 and FixedSizeBinary → BYTES by @fornwall in #341
  • chore(fuzz): make fuzz/ a root-workspace member, dropping its second lock (TEST-13) by @fornwall in #339
  • test(validation): un-exclude SqlPrepareUpdate/Stream via apache/arrow-adbc#4534 by @fornwall in #343
  • fix(ingest): accept an empty (zero-batch) bulk-ingest stream by @fornwall in #340
  • docs(review): resolve UP-8 — prost's default recursion limit bounds hostile nested STRUCT metadata by @fornwall in #344
  • refactor(conversion): plain for loop instead of iter_mut().for_each (IDIO-19) by @fornwall in #345
  • docs(request): reword stale option-count in module doc count-free (IDIO-17) by @fornwall in #346
  • test(python): drive a vendor option through db_kwargs end-to-end (TEST-10) by @fornwall in #347
  • docs(conversion): document the CAST write-back workaround for ENUM/PROTO/INTERVAL/UUID (CONV-5) by @fornwall in #350
  • test(fuzz): add staleness, directed_read and URI parser fuzz targets (TEST-9) by @fornwall in #354
  • feat(request): carry priority on ExecuteBatchDml and BatchWrite (UP-4, UP-5, SPAN-8) by @fornwall in #355
  • fix(statistics): take discovery and per-table scans at one consistent snapshot (SPAN-5) by @fornwall in #353
  • test(fuzz): list all four partition seeds in the corpus oracle test by @fornwall in #356
  • ci: run the fuzzing-feature unit tests in CI by @fornwall in #357
  • fix(conversion): cap nested STRUCT/ARRAY type recursion depth (SEC-5) by @fornwall in #352
  • fix(ingest): fold same-chunk applied groups into the committed-rows annotation (COR-5) by @fornwall in #348
  • build(validation): compile the C++ harness with -Wall -Wextra -Werror by @fornwall in #358
  • fix(spec): align status codes for unsupported catalog/schema set and the execute_schema guard (SPEC-6) by @fornwall in #351
  • style(validation): enforce clang-format on the C++ harness by @fornwall in #359
  • docs(adbc): correct the ADBC guide against the code and add two diagrams by @fornwall in #360
  • chore(deps): update Cargo.lock to latest semver-compatible versions by @fornwall in #361
  • docs(options): correct the ingest-mode default, add the missing exec.incremental option, restructure by level by @fornwall in #363
  • docs(claude): correct how ErrorCompatibility is gated in the validation script by @fornwall in #364
  • docs(transactions): fix stale citations and correct two behaviour claims by @fornwall in #366
  • docs(dbt): correct the Spanner dialect claims in the design sketch by @fornwall in #365
  • fix(python): add missing typed option members + derive-based parity guard by @fornwall in #368
  • fix(fuzz): fuzz every target in CI (derived matrix); refresh docs/testing.md by @fornwall in #362
  • fix(python): reconcile option-parity test with the by-level docs restructure by @fornwall in #370
  • docs: trim verbose and redundant Rust comments by @fornwall in #367
  • docs(python): document ADC as a first-class auth method; fix visible test-skip markers by @fornwall in #369
  • fix(statement): zero-row bound query returns the query's real schema (COR-9) by @fornwall in #373
  • fix(statement): clear bound data on the bound-query error path (COR-12) by @fornwall in #372
  • fix(txn): recover poisoned TxnState mutex instead of bricking the connection (CON-4) by @fornwall in #371
  • fix(ingest): annotate later-chunk mutation-build failures with committed rows (COR-6) by @fornwall in #374
  • fix(ingest): flag ambiguous outcome for cancelled/timed-out chunk commit (CON-5) by @fornwall in #375
  • fix(spanner): honor spanner.read.staleness on get_objects and the execute_schema PLAN probe (SPAN-4) by @fornwall in #349
  • perf(conversion): prefetch bound-query chunks (PERF-1) by @fornwall in #376
  • perf(conversion): compute DATE epoch days in closed form (PERF-3) by @fornwall in #379
  • docs(review): resolve TEST-11 — PR clippy already gates bench compilation by @fornwall in #384
  • chore(validation): point the ADBC validation suite back at apache/arrow-adbc main by @fornwall in #385
  • chore(validation): bump the Foundry suite pin to current upstream main by @fornwall in #386
  • chore(deps): Bump tokio from 1.53.0 to 1.53.1 by @dependabot[bot] in #392
  • chore(deps): Bump serde_json from 1.0.150 to 1.0.151 by @dependabot[bot] in #391
  • chore(deps): Bump futures-util from 0.3.32 to 0.3.33 by @dependabot[bot] in #390
  • chore(deps): Bump pypa/gh-action-pypi-publish from 1.14.0 to 1.14.1 by @dependabot[bot] in #389
  • chore(deps): Bump taiki-e/install-action from 2.83.2 to 2.84.1 by @dependabot[bot] in #388
  • chore(deps): Bump actions/setup-python from 6 to 7 by @dependabot[bot] in #387
  • feat(request): expose spanner.transaction.exclude_from_change_streams (SPAN-9) by @fornwall in #383
  • test(mock): cover ExecuteBatchDml mid-batch failure and commit-ABORT replay (TEST-8) by @fornwall in #382
  • test(mock): assert request priority/tags reach the wire and metadata stays untagged (TEST-4) by @fornwall in #378
  • chore(deps): bump arrow-adbc to 3b3f123a and the foundry suite to 1c20ca4b (UP-9) by @fornwall in #394

Full Changelog: v0.7.0...v0.8.0

v0.7.0

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
  • ...
Read more

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 08 Jul 01:22

What's Changed

  • Map Spanner gRPC status codes to specific ADBC statuses by @fornwall in #20
  • Auto-detect credential type from keyfile JSON type field by @fornwall in #23
  • Rename vendor option prefix adbc.spanner.* to spanner.* by @fornwall in #24
  • Accept all Arrow timestamp units in bind, preserving nanosecond precision by @fornwall in #22
  • Scaffold the ADBC Driver Foundry validation harness (non-gating) by @fornwall in #25
  • Read TIMESTAMP at nanosecond precision (matches the bind/write path) by @fornwall in #27
  • Add PyPI/build badges to the Python package README by @fornwall in #26
  • Tag JSON columns with the arrow.json extension type by @fornwall in #29
  • Bind parameters positionally; make the Foundry type/bind suite pass by @fornwall in #28
  • Add service-account impersonation (spanner.impersonate.* options) by @fornwall in #30
  • Port the Foundry type/select suite to Spanner (dialect overrides + skips) by @fornwall in #31
  • Add Polars/pandas dataframe usability tests against the emulator by @fornwall in #32
  • Implement create-mode bulk ingest; port the Foundry ingest suite by @fornwall in #33
  • Add differential (oracle) test for the Spanner->Arrow type mapping by @fornwall in #34
  • Pin Linux wheel builds to glibc 2.35 and enforce the manylinux tag by @fornwall in #35
  • Make cancellation sticky so a cancel between stream chunks is not lost by @fornwall in #36
  • Fix most Foundry connection/statement metadata cases by @fornwall in #38
  • Add Toxiproxy transport-fault resilience harness by @fornwall in #37
  • Support ARRAY parameter binding and bulk-ingest by @fornwall in #39
  • Error on undecodable wire values instead of fabricating NULLs by @fornwall in #41
  • Declare all four ingest modes in the validation quirks; re-gate the two skipped tests by @fornwall in #42
  • Report DriverArrowVersion in get_info by @fornwall in #43
  • Implement the Foundry sample_ddl_constraints hook; report non-FK constraint_column_usage as NULL by @fornwall in #44
  • Return rows from DML with THEN RETURN instead of discarding them by @fornwall in #45
  • Lex GoogleSQL raw and triple-quoted strings in the SQL scanners by @fornwall in #46
  • Quote identifiers with GoogleSQL escapes; decouple ingest param names by @fornwall in #47
  • Port the Foundry type/literal suite to Spanner (dialect overrides + skips) by @fornwall in #48
  • Classify statements behind leading @{...} statement hints by @fornwall in #49
  • Tolerate trailing semicolons on queries; gate SqlQueryTrailingSemicolons by @fornwall in #51
  • Preserve the gRPC code in vendor_code; map ABORTED to IO, not Internal by @fornwall in #50
  • Cover the autocommit-toggle commit of buffered DML with a real test by @fornwall in #52
  • Download only the library artifacts in the release job by @fornwall in #53
  • Pin release-path actions to commit SHAs; least-privilege workflow tokens by @fornwall in #54
  • Make the emulator scripts fail fast instead of falling through by @fornwall in #55
  • Add an actionlint job to CI by @fornwall in #56
  • Bind Utf8View/BinaryView, Int8 and Date64 parameters by @fornwall in #57
  • Group statistics columns once; harden the metadata batch builders by @fornwall in #58
  • Python packaging polish: license in the wheel, version floors, _version.py sync by @fornwall in #59
  • Test/fuzz upkeep: scratch-table cleanup, JSON/FLOAT32 coverage, fuzz-corpus caching by @fornwall in #60
  • Enforce the macOS deployment target; bump x86-64 to 10.15 by @fornwall in #61
  • Keep the buffered DML when a manual-transaction commit fails by @fornwall in #62
  • Align get_table_types with the vocabulary get_objects reports by @fornwall in #63
  • Build Utf8 columns with a StringBuilder in the read hot path by @fornwall in #64
  • Resolve bind parameter names once per batch, not per row by @fornwall in #65
  • Drop comment-only segments in split_statements by @fornwall in #66
  • Accept the standard isolation-level connection option by @fornwall in #67
  • Map ingest-append failures to the spec-mandated error statuses by @fornwall in #68
  • docs: fix README Rust quickstart deps and document all ingest modes by @fornwall in #69
  • Accept adbc.ingest.target_db_schema and target_catalog by @fornwall in #71
  • perf: group get_objects INFORMATION_SCHEMA batches into HashMaps by @fornwall in #72
  • Add spanner.read.staleness / spanner.read.timestamp options (stale reads) by @fornwall in #73
  • Trigger bulk ingest through execute(), not just execute_update() by @fornwall in #70
  • ci: inspect wheels before publishing to PyPI by @fornwall in #74
  • Make build.rs fall back gracefully when Cargo.lock is missing by @fornwall in #76
  • Document the adbc.connection.readonly connection option by @fornwall in #78
  • Add offline unit tests for statement.rs option-coercion helpers by @fornwall in #77
  • Cap streamed chunks by an approximate byte budget, not just row count by @fornwall in #75
  • Gate tag→publish on tests and green CI (REVIEW.md P1 #4) by @fornwall in #79
  • test: cover adbc.connection.readonly enforcement by @fornwall in #82
  • docs: correct CLAUDE.md against ground truth by @fornwall in #80
  • test: fail loud instead of self-skipping when target env is missing by @fornwall in #81
  • refactor: extract shared src/options.rs for option parsing by @fornwall in #83
  • docs: document ingest modes, emulator port-9010, and manual-mode None in README by @fornwall in #84
  • docs: document read_partition executable-descriptor trust caveat by @fornwall in #87
  • ci: hoist tag-vs-version check into a shared version-gate job by @fornwall in #86
  • test: cover create_append ingest and create-on-existing error path by @fornwall in #85
  • refactor: move INFORMATION_SCHEMA collectors into feature modules by @fornwall in #88
  • fix: drop parse_int64 f64 fallback that lost precision above 2^53 by @fornwall in #92
  • docs: single revert-checklist anchor for the two git-pin revs by @fornwall in #90
  • fix: bounds-check str_col to avoid panic on zero-column metadata batch by @fornwall in #89
  • perf: run get_statistics per-table scans with bounded concurrency by @fornwall in #93
  • fix: exclude TOKENLIST/PROTO columns from get_statistics distinct counts by @fornwall in #91
  • docs: spell out manual-transaction no-read-your-writes and DML/DDL reordering by @fornwall in #96
  • Accept adbc.ingest.temporary=false as a no-op by @fornwall in #95
  • Fix is_dml_returning false positive on CASE ... THEN return by @fornwall in #94
  • Fix autocommit-enable race that could strand concurrently buffered DML by @fornwall in #97
  • Chunk bulk-ingest DML under Spanner's per-commit limits (REVIEW.md P1 #3, stage a) ...
Read more

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 07 Jul 10:28

What's Changed

  • Add a Python package (adbc-driver-spanner) with PyPI trusted publishing by @fornwall in #18
  • Implement partitioned execution (execute_partitions/read_partition) + Data Boost by @fornwall in #17
  • Add a verified Python cookbook (pyarrow/polars/DuckDB/ingest) + LargeUtf8 bind by @fornwall in #19

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 22:33

What's Changed

  • Strengthen fuzz oracles, add options target and seed corpus by @fornwall in #1
  • Add property-based round-trip tests against the emulator by @fornwall in #2
  • ci(libraries): publish a SHA256SUMS asset with each release by @fornwall in #3
  • Buffer parameterized DML and bulk ingest in manual transactions by @fornwall in #4
  • Support binding DATE / TIMESTAMP / NUMERIC parameters by @fornwall in #5
  • Implement get_info and add a driver-manager conformance test by @fornwall in #6
  • Round-trip statement options and implement get_parameter_schema by @fornwall in #7
  • Add the canonical ADBC C++ validation suite as a CI job by @fornwall in #8
  • Gate passing StatementTest cases; fix prepare() and ingest identifier quoting by @fornwall in #9
  • Pin adbc_core/adbc_ffi to a fork with two fixes; bump arrow to 59 by @fornwall in #11
  • Enable the named-schema validation test (Spanner CREATE SCHEMA) by @fornwall in #12
  • Emit foreign-key constraint_column_usage in get_objects by @fornwall in #13
  • Implement best-effort statement/connection cancellation by @fornwall in #14
  • Compute real statistics in get_statistics by @fornwall in #15
  • Stream query results instead of materialising them eagerly by @fornwall in #16

New Contributors

Full Changelog: v0.3.9...v0.4.0

v0.3.9

Choose a tag to compare

@github-actions github-actions released this 05 Jul 11:09

Full Changelog: v0.2.0...v0.3.9

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 10:48

Full Changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 09:11