Skip to content

feat: Oracle Connector + Tests + Docs#8906

Open
royendo wants to merge 11 commits intomainfrom
add-odbc-duckdb-support
Open

feat: Oracle Connector + Tests + Docs#8906
royendo wants to merge 11 commits intomainfrom
add-odbc-duckdb-support

Conversation

@royendo
Copy link
Contributor

@royendo royendo commented Feb 23, 2026

Adds Oracle as a new connector using the pure Go go-ora driver. Includes full backend implementation, frontend integration, documentation, and integration tests.

Backend (runtime/drivers/oracle/):

  • Driver registration, connection management, config parsing with DSN resolution
  • OLAP interface: query execution, dry run via EXPLAIN PLAN FOR, typed scan destinations
  • Information schema: list schemas/tables/columns via ALL_TABLES, ALL_VIEWS, ALL_TAB_COLUMNS
  • Warehouse interface: export query results to Parquet via Arrow

Frontend:

  • Multi-step form schema supporting both DSN and parameter-based connections
  • Oracle logo SVG icons and connector icon mapping

Integration tests:

  • Oracle testcontainer (gvenzl/oracle-free:slim-faststart) in testruntime/connectors.go
  • Init SQL with comprehensive Oracle data types (NUMBER, BINARY_FLOAT, BINARY_DOUBLE, INTEGER, VARCHAR2, NVARCHAR2, CHAR, CLOB, BLOB, RAW, DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, JSON)
  • OLAP tests: MapScan, empty rows, NULL handling, numeric/string/timestamp types, dry run, information schema, exec, DDL retrieval (16/16 pass)
  • Model executor test: Oracle → DuckDB data transfer via warehouse interface
  • Resolver integration test: Oracle → DuckDB materialization with column type verification

Checklist:

  • Covered by tests
  • Ran it and it works as intended
  • Reviewed the diff before requesting a review
  • Checked for unhandled edge cases
  • Linked the issues it closes
  • Checked if the docs need to be updated. If so, create a separate Linear DOCS issue
  • Intend to cherry-pick into the release branch
  • I'm proud of this work!

@royendo royendo changed the title draft: Oracle Connector draft: feat: Oracle Connector Feb 23, 2026
Add Oracle connector integration tests

Test infrastructure:
- Add Oracle testcontainer (gvenzl/oracle-free:slim-faststart) to testruntime/connectors.go
- Add oracle_init_data.sql with comprehensive Oracle data types (NUMBER, BINARY_FLOAT,
  BINARY_DOUBLE, INTEGER, VARCHAR2, NVARCHAR2, CHAR, CLOB, BLOB, RAW, DATE, TIMESTAMP,
  TIMESTAMP WITH TIME ZONE, JSON)

OLAP integration tests (runtime/drivers/oracle/olap_test.go):
- MapScan: NUMBER, BINARY_FLOAT, BINARY_DOUBLE, INTEGER, VARCHAR2 columns
- Empty rows with schema verification
- NULL value handling
- Numeric types (NUMBER, BINARY_FLOAT, BINARY_DOUBLE, INTEGER, SMALLINT)
- String types (VARCHAR2, NVARCHAR2, CHAR, CLOB)
- Timestamp types (DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE)
- Dry run (EXPLAIN PLAN FOR)
- Information schema Lookup
- Exec (CREATE TABLE, INSERT, SELECT, DROP)
- DDL retrieval via DBMS_METADATA (tables and views)

Model executor test (runtime/drivers/duckdb/model_executor_sqlstore_self_oracle_test.go):
- Oracle → DuckDB data transfer via warehouse interface
- Verifies row count after transfer

Resolver integration test (runtime/resolvers/testdata/connector_oracle.yaml):
- Oracle → DuckDB materialization with column type and row count verification

Results:
- Oracle OLAP tests: 16/16 PASS (19s)
- Oracle → DuckDB transfer: PASS (13s)
- Existing unit tests: PASS
@royendo royendo changed the title draft: feat: Oracle Connector draft: feat: Oracle Connector + Tests Feb 23, 2026
@royendo royendo changed the title draft: feat: Oracle Connector + Tests feat: Oracle Connector + Tests Feb 24, 2026
@royendo royendo marked this pull request as ready for review February 24, 2026 16:35
@royendo royendo changed the title feat: Oracle Connector + Tests feat: Oracle Connector + Tests + Docs Feb 24, 2026
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.

1 participant