DanielLeens commented on PR #12005:
URL: https://github.com/apache/seatunnel/pull/12005#issuecomment-6594367294
Addressed the two remaining items from the review of `b1c450488e` in
`ac77d864c9`.
**Issue 2 (Oracle metadata identity)** -
`OracleDialect.validateStringRangeSplit` /
`validateStringRangeSplitColumnMetadata`
- Oracle parses `table_path` schema-first, so `APP.ORDERS` has schema `APP`
and no database. The guard now requires the schema component instead of the
database component, and the `ALL_TAB_COLUMNS` lookup binds `OWNER = schemaName`
(the database slot of a three-part path is the service name, never an owner).
- Table and column names are no longer upper-cased. They are bound exactly
as `quoteIdentifier` renders them in the split SQL (owner verbatim,
table/column through the configured `field_ide` rule), so a quoted mixed-case
target can no longer be vouched for by a different upper-case object.
- An unqualified `table_path` now fails closed (explicit `range` rejects,
`auto` falls back), because Oracle resolves it through `CURRENT_SCHEMA` or
synonyms and the validator cannot pin it to one metadata row. EN/ZH docs state
the schema-qualified requirement.
- Unit tests: the fixture is now built with `new
OracleDialect().parse("APP.ORDERS")` instead of the synthetic database=APP
path. Added `testColumnMetadataLookupBindsTheExactObjectReadBySplitSql`
(three-part `ORCLPDB1.App_Owner.Orders`, column `Order_Id`: asserts the binds
are `App_Owner` / `Orders` / `Order_Id` and that sampling reads
`"App_Owner"."Orders"`) and `testRejectsTablePathWithoutSchema`. The first one
fails against the previous code, which bound `ORCLPDB1` / `ORDERS` / `ORDER_ID`.
**Issue 3 (existing Oracle IT)** -
`JdbcOracleIT.testStringRangeSplitReadsEverySchemaQualifiedRow`
- Reuses the existing Oracle Free container. Creates
`TESTUSER.E2E_STRING_RANGE_SPLIT` with a `NOT NULL` `VARCHAR2(4)` key and a
nullable column holding the same 300 fixed-length ASCII values.
- Resolves `table_path = TESTUSER.E2E_STRING_RANGE_SPLIT` through
`JdbcCatalogUtils.getTables` (the production catalog path), then runs
`FixedChunkSplitter` and executes every split through `generateSplitStatement`,
so the real session, encoding, collation/nullability metadata and the
reader-side session check are all exercised.
- Asserts: explicit `range` on the NOT NULL key yields several range
(non-hash) splits and reads all 300 keys exactly once; explicit `range` on the
nullable column throws with the nullable reason; `auto` on the nullable column
falls back to 4 hash splits and still reads all 300 keys exactly once.
- The nullable column intentionally holds no NULL values, so the AUTO
assertion measures the fallback itself and is independent of how hash splits
treat NULL keys.
CI: the only failure on `b1c450488e` was the Kafka JDK 17 job, where the
Maven wrapper download got repeated HTTP 429 from repo.maven.apache.org before
any test ran; the new push triggers a fresh run on the current head. Nothing
was compiled or run locally (spotless only); the fork CI run on `ac77d864c9` is
the verification.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]