Skip to content

Releases

v0.47.0

Choose a tag to compare

@rustyconover rustyconover released this 08 Nov 21:43

Protocol vgi.v3 3.2.0: filtered scan planning (TableInfo.scan_planning, pushdown_filters on catalog_table_scan_branches_get, ScanBranch row_count/column_statistics). 3.1 peers are rejected.

Java API: Worker.registerPlannedTable(stub, ScanPlanning, ScanBranchesPlanner), Worker.scanBranchesPlanner(..), ScanBranchesPlanner (DEFAULT serves the 3.1 branches), ScanBranchesResult, ScanPlanningFilters (decode(), mayMatch(statistics)), ScanBranch.withStatistics(rowCount, columnStatistics), TableInfo.scan_planning, client ScanBranchesDecoder. The generated VgiService.catalog_table_scan_branches_get gains a trailing pushdown_filters parameter (pass null from clients that cannot defer planning).

v0.46.4

Choose a tag to compare

@rustyconover rustyconover released this 08 Nov 18:34

Secret ATTACH options now follow the cross-SDK spec (docs).

  • The AEAD key is HKDF-SHA256(root, info "vgi.attach_secret_options.v1"); the configured signing key, HTTP sealing key or host-local key is never used directly.
  • Encrypted blob is version(0x01) || nonce || ciphertext || tag, AAD-bound to the attach uuid.
  • A blob that does not open (another deployment, deleted/rotated host key file, moved blob) is refused with the uniform attach_opaque_data not recognized error (INVALID_ARGUMENT / opaque_data_not_recognized) instead of secrets silently reading as absent.
  • Host-local key file path matches every SDK: $VGI_ATTACH_SECRET_KEY_FILE, else $XDG_RUNTIME_DIR/vgi/attach-secret-options.key, else <$TMPDIR or java.io.tmpdir>/vgi-<user>/attach-secret-options.key.
  • New AttachOptions.open(attachId): producers and exchanges keep only the attach id in their state and re-open the options (secret ones included) while producing.
  • txfix fixture: whoami().token_in_attach_data; CI runs vgi v2.0 22140b0.

Attaches made by a 0.46.3 worker that carried secret options must be re-attached after upgrading.

v0.46.3

Choose a tag to compare

@rustyconover rustyconover released this 08 Nov 17:39

Writable tables, transaction hooks and ATTACH options for the main catalog (docs).

  • Writable catalog tables: CatalogTable.Builder#insertFunction/updateFunction/deleteFunction/writeResultMode; TableInfo advertises them and catalog_table_{insert,update,delete}_function_get now answer. New farm.query.vgi.write package: WriteOptions, WriteResultMode, WriteOperation, WriteResults (rowIdField, resultSchema, resultBatch, ...).
  • Constraint enforcement: a writable table with constraint records negotiates vgi.constraint.enforce.v1 automatically; a provider advertising enforce without records-read is no longer dropped.
  • Worker.onAttach(AttachHook) returns AttachSettings (per-attach supports_transactions / supports_time_travel); Worker.supportsTransactions(boolean) / supportsTimeTravel(boolean) set the worker-wide defaults (still true).
  • Worker.transactionHooks(TransactionHooks): begin mints the plaintext transaction id; commit (throw to fail COMMIT) and rollback get the same bytes on every transport, HTTP included. CatalogInterface gains the same hooks.
  • Functions get transactionId() and attachOptions() (AttachOptions, secret options included) on table and table in-out bind/init params; TableInOutInitParams also gets attachId() and bindOpaqueData().
  • Secret ATTACH options reach functions: they are encrypted into attach_opaque_data (configured signing key, else HTTP sealing key, else a per-user host key file shared by pooled/stdio processes), never plaintext.
  • The main catalog's resolved data version now survives on a process that never served the ATTACH.
  • FunctionMetadata.withStability, Schemas.serialize; TransactionStorage docs corrected.
  • txfix fixture worker; CI runs the vgi writable_tx suite (vgi c4a9fea) on launch, shm and http.

v0.46.2

Choose a tag to compare

@rustyconover rustyconover released this 07 Nov 22:11

Secret-lookup conformance fix.

  • Secrets.lookup(type), lookupNamed(type, name), require(type): select by the secret's type field (columns are keyed by secret name, e.g. __default_<type>), with column-name fallback only for secrets lacking a type field; require errors name the type, never a value.
  • FunctionRequiredSecret rejects a blank type and gains ofType/scoped/named factories; a null declaration fails the listing instead of being dropped.
  • requiredSecrets() moved to FunctionDescriptor: scalar, table-in-out and buffering functions can now declare required secrets (previously silently advertised as empty).
  • Example worker implements the five secret-lookup conformance fixtures; CI runs the vgi 5575cff suite with VGI_SECRET_LOOKUP_FIXTURES=1.

v0.46.1

Choose a tag to compare

@rustyconover rustyconover released this 07 Nov 04:00

Bug-fix release (no wire or API changes).

  • Constraints on named-only arguments (ArgSpec.named) are now enforced against the named value; they no longer consume positional slots. Varargs consts check every value.
  • pattern constraints are an unanchored search (like JSON Schema / ECMA, Rust, Go). Anchor with ^/$ for a full match.
  • HTTP: with no explicit tokenKey, the stream-state token key is derived from VGI_SIGNING_KEY / Worker.signingKey (HKDF-SHA256, label vgi.http.state_token_key.v1), so table-function streams resume across replicas and restarts. Without a signing key a warning is logged at startup.
  • Catalog listing: a function whose onBind throws on the empty-argument probe no longer breaks ATTACH; it is advertised with an empty output schema and validated at the real bind.

vgi-java 0.46.0

Choose a tag to compare

@rustyconover rustyconover released this 06 Nov 01:58

Protocol 3.1 release adding typed key grouping and range partitioning metadata, strict distribution validation, authoritative-schema filter decoding, and expanded planning/client coverage.

v0.45.1

Choose a tag to compare

@rustyconover rustyconover released this 30 Oct 04:29

VGI protocol v3 (vgi.v3) fixes: public canonical constraint record builder and decoder; automatic constraint read-profile negotiation; Arrow nullability relaxed automatically for columns no NOT_NULL/PRIMARY KEY record names; SDK-side validation matching the DuckDB extension's ATTACH rules; generated-column rules checked and legacy generated_expression metadata translated; legacy constraint fields deprecated. See the commit log for language-specific fixes.
Java: versioned tables re-own their constraint records (AT VERSION no longer throws); viewCreate override chain restored; capability hooks for hosted and extra catalogs; public virtualGenerated and MacroInfo.of helpers.

v0.45.0

Choose a tag to compare

@rustyconover rustyconover released this 28 Oct 15:45

VGI Java 0.45.0 introduces the VGI 3.0.0 wire protocol under vgi.v3, including the consolidated catalog, metadata, typed query parameters and explicit remote-query contracts prepared for DuckDB 2.0.

Upgrade native clients and workers together: vgi.v2 peers are incompatible. This release requires farm.query:vgirpc:0.33.2, now available from Maven Central, which preserves catalog record dictionary annotations.

Validation includes the full Java test suites, publication Javadoc checks and worker distribution against the published RPC artifact with local source substitution disabled. The candidate also passed the prior DuckDB 1.5 and DuckDB 2.0 native integration qualification, including the HTTP matrix. CI pins the immutable VGI 3 native 1.5 runner.

v0.44.0

Choose a tag to compare

@rustyconover rustyconover released this 23 Oct 23:08

This release adds continued table-in-out output and input_rows_per_call. It requires the vgi DuckDB extension at or after fc3e08f (Query-farm/vgi main, published to the haybarn community channel as 454fefa). The wire stays vgi.v2 2.2.0.

  • A table-in-out exchange can answer one input batch with several replies: it emits each reply but the last with TableInOutExchangeState.withMoreOutput(true, metadata) (vgi.status: HAVE_MORE_OUTPUT), and the framework answers the client's zero-row CONTINUE ticks through the exchange's resume(). The exchange object is the resume state; its pending flag rides the HTTP state token. A continuing function declares its exchange class through TableInOutFunction.continuationState().
  • RowTransformFunction.inputRowsPerCall() sets the new nullable FunctionInfo.input_rows_per_call (regenerated protocol code, new contract hash).
  • New framework refusals: a table-in-out turn (onInputBatch or resume) that emits no batch now fails instead of leaving the pipe client waiting forever; ticks with nothing pending or with rows, real input while output is pending, cache control on a tick's reply, "more" without resume() and "more" from a table producer are refused. At startup (and again on the exchange's runtime class) a continuation state without resume(), a no-arg constructor or fields of its own, a PortableStreamState, or a function with maxWorkers() of 1 is refused.
  • A turn that throws releases what it emitted before failing.
  • Adds the standard blended_paged, blended_sliced and paged_explode fixtures.

Requires farm.query:vgirpc:0.33.1 (unchanged).

Release validation: the Maven-only build (VGI_RPC_JAVA_DIR=/nonexistent ./gradlew :vgi:test :vgi:javadoc) passed with sibling RPC source disabled.

v0.43.0

Choose a tag to compare

@rustyconover rustyconover released this 21 Oct 16:10

This release upgrades catalog metadata to VGI wire 2.2.0 (vgi.v2). Native clients and workers must both speak wire 2.2.x; wire 2.1 clients are incompatible, so upgrade them together.

  • catalog_contents batches every metadata object type into six catalog-wide Arrow IPC streams spanning schema boundaries. Readers handle every row, multiple batches, and dictionary replacement.
  • Function argument schemas, output schemas, and parameter defaults share binary dictionary entries without changing the byte-array authoring API.
  • Optional catalog publication supports durable S3/R2 manifests, validated externalized results, recovery after restart, scoped authentication, ETags, bounded caches, expiry, renewal, conditional invalidation, and concurrent publication per identity.
  • SchemaInfo no longer includes attachment bytes. Actual attachment requests/results and function state remain unchanged.

Requires farm.query:vgirpc:0.33.1, published separately to Maven Central. CI and release builds use the public package rather than an RPC source override.

See catalog metadata and publication for configuration and migration details.

Release validation: the Maven-only build, all 637 SDK tests (635 passed, 2 skipped), Javadoc, example-worker distribution, and generated package metadata passed with sibling RPC source disabled. Package metadata pins RPC 0.33.1.