Repository navigation
Releases: gizmodata/hardcharger-adbc
Release list
v2.0.0
The first release, with Hardcharger 2.0.0: the ADBC driver for Hardcharger, speaking Warp SQL
protocol 1.0.0 through warp-sql-adbc 1.0.0, for Python (adbc-driver-hardcharger on PyPI), Go
(github.com/gizmodata/hardcharger-adbc/go/v2) and every other ADBC language through the shared
library. Earlier builds (0.1.0) were never published; the sections below are the whole history,
newest first, for anyone who installed one from git.
Changed
- Build on the released Warp SQL ADBC Go module v1.0.0 instead of an internal pseudo-version.
Fixed
- Python connections using a standard ADBC profile with
driver = "hardcharger"resolve the
installed driver manifest, avoiding a mismatch with the bundled library path. Named profiles,
profile://URIs and absolute paths are documented alongside generic driver-manager usage.
Added
- The Go module
github.com/gizmodata/hardcharger-adbc/go/v2is versioned bygo/vX.Y.Ztags on each
release's commit (go-module.ymlchecks the pair, refuses a pseudo-version of warp-sql-adbc, and
warms the module proxy);RELEASING.mdhas the order, warp-sql-adbc first. THIRD_PARTY_NOTICES(the Go runtime's and every linked Go module's license, warp-sql-adbc's
included), generated byscripts/third_party_notices.sh, checked by CI, inside every wheel and
library tarball.- Readable access tokens and expiry on Python connections, with session handoff examples.
- Attaching to an existing session, through warp-sql-adbc
ca7845d:connect(session_id=...)
(optionadbc.warp.session.id) uses that session instead of creating one, its open
transaction included;Connection.session_idreads a connection's.
connect(close_session_on_release=...)(optionadbc.warp.session.close_on_release, also a
connection option) says whether closing ends the session: by default yes for a session the
connection created, no for an attached one. A session the server doesn't have, or another
user's, isNotFoundwithwarp.codesession_not_found. With several replicas it works
only when routing reaches the replica that holds the session (the README says more). connect(subject_token=...): sign in with your identity provider's token (an OIDC ID token
or another JWT the server trusts), exchanged for a Hardcharger access token (Warp SQL's
token_exchangegrant, optionadbc.warp.auth.subject_token). It is refused beside
username,password,access_token,auth_type="external"or"client_certificate"
(also when the subject token comes throughdb_kwargs: the driver would silently use one
credential), and beside a differentdb_kwargsvalue for the same option.connect(tls_server_name=...): the server's host name for TLS when the URI's host isn't it
(an IP address, a tunnel, a load balancer), optionadbc.warp.tls.server_name. It is sent
as the TLS server name (SNI) on every connection, result partitions and ingest parts too,
and the certificate is checked against it: GizmoSQL'stls_override_hostname. The tests
read the SNI off the wire through a recording proxy.
Changed
- A shared browser sign-in whose token the server refuses with
token_revoked,
credentials_changedorprincipal_droppedno longer starts another browser sign-in on its
own (Warp SQL §4.2): the error says why. Without a reason, aftertoken_expired, or with a
reason the driver doesn't know, it signs in again once, as before. - Warp SQL protocol 1.0.0, through warp-sql-adbc
b8f6cdd(needs a Hardcharger server that
speaks 1.0.0, from itsspec/v1.0branch; the driver has no fallbacks for the draft's names).
What changes for Hardcharger users: a server that requires client certificates and gets a
connection without one is the refusalcertificate_required(UNAUTHENTICATED; it was
client_certificate_required, or an unreachable server,IO); codes the driver makes up
start withclient_(client_protocol_error, andclient_http_errorfor an error status
without a problem document); errors carrywarp.reason/warp.cancel_reasonwhen the server
gave one; afterinvalid_tokenwithtoken_revoked,credentials_changedor
principal_droppedthe driver no longer signs in again on its own; a statement cancelled by
the time the server answers isCANCELLED; unknown states and reasons are accepted (§12); a
partitioned ingest commits withpart_count;adbc.warp.statement.query_tagis sent compact
and ASCII-escaped, at most 4,096 bytes. The README names the codes. - Browser sign-in (
auth_type=external) is Warp SQL's (spec §4.3), on the server's own port and
URL, run by the Warp SQL driver (warpsql.BrowserSignIn, warp-sql-adbc 6ee3a73): the driver
creates a flow, opens the identity provider's page, polls the flow with its secret and gets
the server's own access token, which it uses asadbc.warp.auth.access_token(the identity
provider's ID token never reaches the client). A server without browser sign-in is refused
before any browser opens ("does not offer browser sign-in",UNAUTHENTICATED); a refusal
carries the server's code (access_denied,invalid_credentials,identity_provider_error)
and detail. A shared sign-in (share_sign_in) now shares the access token, renewed from its
expires_in; its key no longer has a sign-in server URL. The token can't be renewed: once it
expires, a connection's requests are refused (token_expired) and a new connection signs in
again. Needs a Hardcharger server with browser sign-in on its main port.
Removed
- The client of GizmoSQL 1.x's separate sign-in server (
/oauth/initiate,/oauth/token/…on
port 31339): the optionsadbc.hardcharger.oauth.urlandadbc.hardcharger.oauth.port
(refused now as unknown options), Go'sDefaultOAuthPort, Python'sconnect(oauth_url=..., oauth_port=...),DEFAULT_OAUTH_PORT,DatabaseOptions.OAUTH_URLandOAUTH_PORT.
Documentation
- The README banner is the new Hardcharger™ logo, the bull mascot lockup in a light and a dark
version that follows the reader's color scheme, in place of the GizmoData banner card. - Trademark notices: Hardcharger™ and GizmoData™ on the README titles and first mentions, package
metadata and the footer, which says both are trademarks of GizmoData LLC.
Added
adbc.warp.session.transaction(read-only, connection; Python
ConnectionOptions.SESSION_TRANSACTION): the session's transaction as the server reports it
(none,open,aborted,unknown), which sees SQLBEGINandROLLBACKtoo. Live tests
(Go, Python) for it and forcertificate_requiredat the handshake; both fail with the
previous warp-sql-adbc.- The live-test servers (Go and Python) run with a
HOMEof their own. The Python ingest tests'
recording proxy listens with a backlog of 64: with the default 5, on macOS, a part upload was
sometimes reset and sent again, and the request count came out one too high (about 1 run in
10 under load; 0 in 120 after). The Go ingest tests drop their table first, so the live suite
runs with-count. - One browser sign-in for many connections:
adbc.hardcharger.oauth.share_sign_in=true(Python
connect(auth_type="external", share_sign_in=True)) shares a browser sign-in among the
process's databases that sign in to the same server, through the same sign-in server, with the
same TLS trust and the sameadbc.hardcharger.oauth.sign_in_key(Python:share_sign_in="name").
The first to open a connection signs in and concurrent ones wait for it; the rest reuse its ID
token (each exchanging it for its own access token) until a minute (or a quarter of a shorter
lifetime) before it expires, then the next one signs in again; a shared token the server refuses
is dropped and that database signs in again, once. Go:ForgetSharedSignIns(). Onedbt run
opened a browser window per connection (five for one model); dbt-hardcharger had to share a
driver-manager database throughadbc_driver_managerinternals instead. Sharing needs
auth_type=externaland is refused otherwise. Live tests (Go, Python) against
hardcharger-serverwith a mock identity provider: 5 sequential and 8 (Go) or 6 (Python, from
threads) concurrent connections sign in once; without sharing each signs in; another key or
server signs in separately; a token close to its expiry is not handed out and the next
connection signs in again; a refused token is replaced (and a failed sign-in after it fails,
with no loop). - Client certificate sign-in (mutual TLS, Warp SQL §4.4):
adbc.hardcharger.auth_type=client_certificate
(alsomtls), Pythonconnect(auth_type="client_certificate", tls_client_cert=..., tls_client_key=...).
It is the Warp SQL driver'sadbc.warp.auth.type: the certificate is the credential, the token is
bound to it, and result partitions and ingest parts present it too. Needs a server with
--mtls-ca-certand--mtls-certificate-sign-in. Live tests in Go and Python against
hardcharger-server: sign-in (an e-mail identity matching--mtls-admin-identitiesignoring
case), a split result and a partitioned ingest (row count, distinct keys and sum checked
exactly), an unknown identity (unknown_certificate_identity), a bound token over another
certificate (certificate_mismatch) and its twin, a password beside the certificate, and a server
with certificate sign-in off (capabilitymtls_identity) with its password twin.
Changed
- Built on warp-sql-adbc
56483f5(fix/driver-polish: the plain-HTTP hint and best-effort close),
fromb74dfe2(client certificate sign-in), fromb3d2ab8.
Fixed
- A user's SQL that failed while running (
execution_error, HTTP 422: a division by zero, a failed
conversion,error()) was ADBC statusINTERNAL, so Python raisedInternalError, which says
the driver or server is broken. It is nowINVALID_ARGUMENT(ProgrammingError), like a SQL
error bef...
adbc-driver-hardcharger 0.1.0 (internal pre-release rc2)
Internal pre-release: not for distribution. Org-only build of adbc-driver-hardcharger 0.1.0 for GizmoData Cloud's API until the public PyPI release at Hardcharger GA.
- Commit: a825708 (branch
fix/session-attach, pinned to warp-sql-adbc 45968357): Warp SQL 1.0 + ADBC error statuses + session attach (session_id=/close_session_on_release=), readable access token (Connection.access_token/.access_token_expires_at),subject_token=/tls_server_name=kwargs. - Built by
release.ymlrun 39458668918 (workflow_dispatch: tests + wheels, no publish). - Verified on
python:3.14.7linux/arm64 against Hardcharger 2.0.0-rc.1 (query + readable token), withadbc-driver-gizmosql>=2.0.14(pip checkclean). - Checksums:
SHA256SUMS.
adbc-driver-hardcharger 0.1.0 (internal pre-release rc1)
Internal pre-release: not for distribution. Org-only build of adbc-driver-hardcharger 0.1.0 for GizmoData Cloud's API until the public PyPI release at Hardcharger GA.
- Commit: 3d1cbc6 (branch
fix/adbc-error-status): Warp SQL 1.0 (warp-sql-adbc 15ff0499) + ADBC error-status mapping. - Built by
release.ymlrun 39432960220 (workflow_dispatch: tests + wheels, no publish). - Wheels:
py3-nonefor manylinux x86_64 (glibc 2.5+) / aarch64 (glibc 2.17+), macOS x86_64/arm64, Windows amd64. Verified onpython:3.14.7(linux/arm64: install + query against Hardcharger 2.0.0-rc.1; linux/amd64: install + import), coexisting withadbc-driver-gizmosql>=2.0.14(pip checkclean; adbc-driver-manager 1.12.0). - Checksums:
SHA256SUMS.