Problem
Oracle is currently handled via the legacy generators.py path only. Every other dialect (postgres, snowflake) has moved to the plugin registry under packages/core_engine/src/datalex_core/dialects/, which is the supported extension point going forward.
Goal
Ship a first-class Oracle dialect plugin at datalex_core/dialects/oracle.py that:
- Implements the
DialectPlugin protocol in dialects/base.py.
- Maps DataLex logical types to Oracle physical types (
string → VARCHAR2, timestamp → TIMESTAMP WITH TIME ZONE, etc.).
- Emits
CREATE TABLE, ALTER TABLE ADD CONSTRAINT, CREATE INDEX matching Oracle's quoting and identifier-length rules (note: default 30-char identifier limit before 12.2).
- Registers itself via
registry.register("oracle", OracleDialect()).
Suggested approach
- Read
dialects/postgres.py as a working template.
- Stub out
oracle.py with the type map + render_type.
- Add a golden-file test under
tests/round_trip/test_oracle.py modelled on the Postgres tests.
- Remove Oracle branches from the legacy
generators.py once parity is verified.
Acceptance criteria
datalex emit ddl --dialect oracle <project> produces valid Oracle DDL.
- Round-trip test: DDL → connector-import → DDL emits byte-identical.
- Identifier-length policy enforced (truncation with warning, not silent corruption).
Why this is a good first issue
Mechanical, pattern-matched work against existing plugins. No async, no schema changes. You'll touch one new file plus tests.
Problem
Oracle is currently handled via the legacy
generators.pypath only. Every other dialect (postgres,snowflake) has moved to the plugin registry underpackages/core_engine/src/datalex_core/dialects/, which is the supported extension point going forward.Goal
Ship a first-class Oracle dialect plugin at
datalex_core/dialects/oracle.pythat:DialectPluginprotocol indialects/base.py.string→VARCHAR2,timestamp→TIMESTAMP WITH TIME ZONE, etc.).CREATE TABLE,ALTER TABLE ADD CONSTRAINT,CREATE INDEXmatching Oracle's quoting and identifier-length rules (note: default 30-char identifier limit before 12.2).registry.register("oracle", OracleDialect()).Suggested approach
dialects/postgres.pyas a working template.oracle.pywith the type map +render_type.tests/round_trip/test_oracle.pymodelled on the Postgres tests.generators.pyonce parity is verified.Acceptance criteria
datalex emit ddl --dialect oracle <project>produces valid Oracle DDL.Why this is a good first issue
Mechanical, pattern-matched work against existing plugins. No async, no schema changes. You'll touch one new file plus tests.