Member Junction
    Preparing search index...

    Databricks SQL Warehouse driver for External Data Sources. Read-only, live-proxied access to a Databricks SQL warehouse over Unity Catalog via the official @databricks/sql SDK. Structurally mirrors the Snowflake driver (the other "cloud warehouse behind an HTTPS SDK") — ANSI SQL, LIMIT/OFFSET paging — but with backtick identifier quoting and Unity Catalog information_schema introspection including informational PK/FK constraints.

    One connected DBSQLClient per ExternalDataSource.ID (race-safe in-flight-promise cache); each statement opens a short-lived session so concurrent reads don't serialize. Auth is PAT (authType: 'access-token') or OAuth M2M service principal (authType: 'databricks-oauth') depending on the resolved credential. Numeric fidelity is handled SDK-side via preserveBigNumericPrecision (DECIMAL → exact string, BIGINT → JS bigint), which the base normalizer then renders JSON-safe. Registered as DatabricksExternalDriver.

    Hierarchy (View Summary)

    Index

    Constructors

    Methods

    • Secure-transport gate for SQL-style drivers. Refuses to connect to a NON-LOCAL host over an unencrypted connection unless the caller explicitly opted in via allowInsecureTransport. Only explicit loopback literals (localhost / *.localhost / 127.0.0.0/8 / ::1) are treated as local. It fails closed: an empty or unparseable host is NOT assumed local — that would be a plaintext-leak hole (an unset host can still resolve to a remote default), so it is refused unless TLS or the explicit opt-out is set. Detection is name-based (no DNS resolution), which is a deliberate trade-off: a name that resolves to loopback but isn't a recognized literal is refused rather than silently allowed. Drivers whose transport is always encrypted (e.g. Snowflake HTTPS) don't call this.

      Parameters

      • opts: {
            allowInsecure: boolean;
            dataSourceName: string;
            host: string;
            tlsEnabled: boolean;
        }

      Returns void

    • Build the COUNT(*) SQL for a paginated view — honoring BOTH the caller's filter AND the structured incrementalSince bound via effectiveWhere, so totalRowCount is consistent with the rows the matching SELECT returns. Centralized here (rather than each driver hand-rolling WHERE ${params.filter}) so a driver can't forget the incremental bound. The cnt alias reads back per-dialect case (Oracle / Snowflake uppercase it to CNT).

      Parameters

      Returns string

    • Build a quoted, parameter-bound WHERE clause for a (possibly composite) primary key. Each key identifier is quoted via quoteIdent (so mixed-case / reserved-word PK columns work on case-sensitive dialects), and each value is returned separately for binding — never interpolated. placeholder(i) supplies the dialect's bind token for the i-th value ($1 / ? / :1 / @pk0). Returns the clause and the values in bind order.

      Parameters

      Returns { clause: string; values: (string | number | boolean | Date)[] }

    • Public entry point to close (and evict) the cached connection/pool for a data source — used by ExternalDataSourceRouter.ClearCache so evicting a driver actually releases its live remote connections rather than orphaning the pool. Thin wrapper over the protected invalidateConnection; safe to call when nothing is cached for the id.

      Parameters

      • dataSourceId: string

      Returns Promise<void>

    • Render an arbitrary thrown value as a human-readable message string. Shared by all drivers.

      Parameters

      • e: unknown

      Returns string

    • Format the incremental bound value as a dialect SQL literal. Default: a plain single-quoted string — SQL Server / PostgreSQL / Snowflake implicitly parse an ISO-8601 timestamp string, so no wrapping is needed. Dialects whose default parser rejects the ISO T/Z form override this (e.g. the Oracle driver wraps an ISO timestamp in TO_TIMESTAMP with a matching format mask).

      Parameters

      • value: string

      Returns string

    • Evict (and close) the cached connection/pool for a data source so the next operation re-resolves its credential and reconnects. Called by withConnectionRetry on an auth failure. Implementations must be safe to call when nothing is cached for the id.

      expectedIdentity (when provided) is the exact cached handle the caller observed failing — from peekConnection. Implementations MUST only evict if the currently-cached handle is still that same identity; otherwise a concurrent request already replaced the pool with a fresh, healthy one and evicting it would cause needless reconnect churn (the H1 identity race). When expectedIdentity is undefined (explicit cache-clear, or a cold failure), evict unconditionally.

      Parameters

      • dataSourceId: string
      • OptionalexpectedIdentity: unknown

      Returns Promise<void>

    • Databricks auth failures carry phrases/status the base isAuthError (PG/MySQL/SQL Server/Oracle) doesn't recognize. Without this override withConnectionRetry never self-heals a rotated PAT or an expired OAuth token. Match ONLY genuine AUTHENTICATION signals — HTTP 401 and the stable Databricks bad-credential phrases. Deliberately NOT 403 / PERMISSION_DENIED: those are AUTHORIZATION failures (valid credential, insufficient privilege) that a reconnect can't fix — retrying them just wastes a round-trip and needlessly evicts the shared client for other users. This mirrors the base's documented choice to drop the false-positive-prone 'password'/'permission denied' substrings. ('unauthorized' is likewise left to the base, which already matches the 'authoriz' substring.)

      Parameters

      • e: unknown

      Returns boolean

    • True when a host refers to the local machine (loopback) — the only case where a plaintext connection is accepted by assertSecureTransport. Normalizes case and strips IPv6 brackets ([::1]::1). Shared so multi-address / multi-host connection strings (Oracle TNS descriptors, MongoDB replica-set seed lists) can classify EACH host consistently with the single-host gate.

      Parameters

      • host: string

      Returns boolean

    • Neutralize :name named-parameter markers to a literal 1 for STRUCTURE analysis ONLY (the original SQL + named binds still execute). The ANSI/PostgreSQL screen grammar happens to accept :name, but we still neutralize as belt-and-suspenders against any grammar edge case, matching the base's hook intent.

      The (?<!:) negative lookbehind is important: it skips the SECOND colon of a Databricks :: type cast (col::int), which the ANSI grammar parses fine — without it, col::intcol:1 and the fail-closed screen would wrongly reject a legitimate cast. :name is only ever a bind marker in our usage (Spark SQL uses ./[] for member access), so this never turns a write into a read. (Casts to Databricks-only type names, e.g. col::string, are still rejected by the ANSI grammar regardless — use CAST(... AS ...) in native queries for those; that's an inherent limitation of the shared ANSI read-only screen.)

      Parameters

      • sql: string

      Returns string

    • Normalize a raw remote value into an MJ-safe primitive so it round-trips losslessly and matches the type CodeGen assigns the field. Native DB drivers return values that don't survive the JS/JSON boundary: high-precision numbers as lossy numbers, JSON/complex columns as JS objects, MongoDB bson wrappers as objects. This converts:

      • BigInt → decimal string (never a lossy Number)
      • MongoDB bson Long/Decimal128 → their exact string; ObjectId → hex string; Binary → Buffer; other bson scalars → their JS value
      • plain object / array → JSON string (matches the nvarchar(MAX) CodeGen maps json/variant/nested to)
      • everything else (string/number/boolean/Date/Buffer/null) passes through unchanged. Drivers additionally configure their SDK to return large numeric COLUMNS as strings (this catches the residual cases the SDK still hands back as objects/BigInt).

      Parameters

      • v: unknown

      Returns unknown

    • Quote a string literal for safe inline use in a screened WHERE fragment (single-quote escaped).

      Parameters

      • value: string

      Returns string

    • Strip credentials from any connection-string-like scheme://user:pass@host embedded in a message. Driver SDKs (notably MongoDB) echo the connection URI in their errors; when a caller supplied a URI with inline credentials (e.g. mongodb://user:pass@host) those secrets would otherwise leak into logs and API error responses. Redacts the entire userinfo portion, leaving the host intact.

      Parameters

      • message: string

      Returns string

    • SQL object-name resolution: schema-qualify a bare name with the entity's SchemaName so an object in a NON-default schema (e.g. medallion bronze/silver/gold, or any multi-schema source) resolves correctly — qualifyObject then splits on '.' and quotes each part. An already schema-qualified name (contains '.') or an entity with no SchemaName is returned unchanged (qualifyObject falls back to the source DefaultSchema for the bare case). SchemaName is the same value CodeGen used to introspect the object, so the read path and introspection stay consistent. This override is why the qualification never reaches a non-SQL driver (e.g. MongoDB), which treats the name as literal.

      Parameters

      Returns string

    • Re-screen a caller-supplied WHERE / ORDER-BY fragment at the driver boundary (defense in depth) before it is interpolated into a SELECT — the engine does not rely on an upstream caller having screened it. Fail-closed; see assertReadOnlyClause.

      Parameters

      • clause: string
      • kind: "where" | "orderby"

      Returns void

    • Enforce the read-only contract on a native-query string before it executes. Concrete SQL drivers MUST call this at the top of RunNativeQuery — EDS is read-only, but rendered Query SQL runs verbatim on a read/write connection and is not covered by the provider-layer Save/Delete backstop. Fail-closed: throws on stacked statements, unparseable SQL, or any write/DDL. See assertReadOnlyNativeQuery.

      Parameters

      • sql: string

      Returns void

    • Parser dialect used to screen native-query text for read-only safety (see screenReadOnlyNativeQuery). Defaults to 'ansi' (PostgreSQL grammar), which covers PostgreSQL / MySQL / Oracle / Snowflake; the SQL Server driver overrides this to 'sqlserver' so T-SQL specifics (brackets, TOP, @vars) parse correctly.

      Returns SqlDialectKey

    • Runs a read operation and, if it fails with what looks like an auth/credential error, evicts the cached connection (so the retry re-resolves the credential and reconnects) and retries exactly once. This self-heals the common "credential rotated / token expired while a pooled connection was cached" case without a process restart. Safe because external reads are idempotent; non-auth errors propagate immediately with no retry.

      Type Parameters

      • T

      Parameters

      Returns Promise<T>