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]

Reply via email to