Skip to content

feat(exasol): add Exasol database provider - #320

Merged
Maxteabag merged 8 commits into
Maxteabag:mainfrom
abdullah094:feat/exasol-provider
Sep 5, 2026
Merged

feat(exasol): add Exasol database provider#320
Maxteabag merged 8 commits into
Maxteabag:mainfrom
abdullah094:feat/exasol-provider

Conversation

@abdullah094

@abdullah094 abdullah094 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Adds Exasol support through pyexasol for local/on-premises databases and Exasol SaaS. Includes schemas, tables, views, columns, primary keys, scripts, queries, and row limits.

The provider preserves pyexasol's verified TLS default, distinguishes verify-ca from verify-full, and matches metadata identifiers exactly so names containing underscores or percent signs cannot return another table's columns. OpenID token fields use sqlit's existing protected credential slot, including save/load/rename, legacy migration, auth-mode changes, and driver-restart redaction. SaaS PATs work through username/password authentication with the connection-details username.

Verification at 3d9807cf24ace4035a02992f777b74fab836f15f:

  • 178 focused local tests passed; fourteen skips cover unsupported database features and cases for the other provider.
  • All 22 GitHub CI checks passed, including the required Exasol Docker lane.
  • The real Docker suite passed 24 tests, with eight documented skips. It includes literal table/schema-name regressions and actual TLS certificate/hostname checks.
  • The opt-in SaaS regression passed through CLI creation via stdin, OS-keyring storage, a separate CLI query, metadata/row limits, and a query after rename. Temporary schemas and credentials are cleaned up.
  • The dedicated CI lane sets EXASOL_REQUIRE_LIVE=1: unavailable drivers, failed readiness, and schema-setup errors fail the run instead of hiding behind skips.

CONTRIBUTING.md documents the Docker and cloud regression commands. OpenID access/refresh-token handling has unit/UI coverage; live SaaS coverage uses a PAT as the password. Ordinary CI requires no cloud secrets.

abdullah094 and others added 8 commits August 27, 2026 18:54
Add Exasol support via pyexasol, Exasol's native WebSocket client.
Since pyexasol is not DB-API 2.0, ExasolAdapter subclasses
DatabaseAdapter directly rather than CursorBasedAdapter, matching the
ClickHouse provider. Installed through a new "exasol" extra, also
folded into "all".

The connection schema covers on-prem username/password auth and Exasol
SaaS token auth (access token / refresh token), modeled on the existing
Snowflake schema. Default port is 8563.

Unit tests run against mocked connections and import no driver, so they
work in the driver-free CI job; pyexasol is imported lazily inside the
fixtures to keep the conftest star-import safe when the extra is not
installed. Integration tests run against exasol/docker-db, wired into
the existing enterprise compose profile and a new test-exasol CI job.

Re-locking also corrects pre-existing drift: pyproject.toml declares
mariadb = ["PyMySQL>=1.1.0"] but the committed lock still pinned the
mariadb C-extension at 1.1.14.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@Maxteabag
Maxteabag merged commit 6b72981 into Maxteabag:main Sep 5, 2026
23 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants