From 21cb7f775605fc16ba8d0d10f7cad03c370e4910 Mon Sep 17 00:00:00 2001 From: Kirill Kurdyukov Date: Thu, 10 Sep 2026 15:08:51 +0300 Subject: [PATCH] Restore BCE date predicate contract --- ydb-trino-adapter/ROADMAP.md | 4 +++- .../src/main/java/tech/ydb/trino/YdbClient.java | 8 +++++++- .../test/java/tech/ydb/trino/TestYdbConnectorTest.java | 6 ------ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/ydb-trino-adapter/ROADMAP.md b/ydb-trino-adapter/ROADMAP.md index 89fe9311..e85a052b 100644 --- a/ydb-trino-adapter/ROADMAP.md +++ b/ydb-trino-adapter/ROADMAP.md @@ -136,7 +136,9 @@ unsupported behavior, record: 2. an authoritative documentation link or tracked upstream issue; 3. a focused negative test that proves the connector fails clearly. -The existing negative-date overrides need this treatment. +The remaining negative-date overrides need this treatment. Date predicates with +BCE bounds stay in Trino as residual filters so they do not bind an unsupported +value to YDB. YDB `Date` starts at the Unix epoch; see [primitive types](https://ydb.tech/docs/en/yql/reference/types/primitive). CHAR is rejected with the focused inherited contract diff --git a/ydb-trino-adapter/src/main/java/tech/ydb/trino/YdbClient.java b/ydb-trino-adapter/src/main/java/tech/ydb/trino/YdbClient.java index ba7105e2..b9cf2cbb 100644 --- a/ydb-trino-adapter/src/main/java/tech/ydb/trino/YdbClient.java +++ b/ydb-trino-adapter/src/main/java/tech/ydb/trino/YdbClient.java @@ -374,7 +374,13 @@ private static ColumnMapping dateColumnMapping() { return ColumnMapping.longMapping( DATE, dateReadFunctionUsingLocalDate(), - dateWriteFunctionUsingLocalDate()); + dateWriteFunctionUsingLocalDate(), + (session, domain) -> domain.getValues().getRanges().getOrderedRanges().stream() + .anyMatch(range -> + (!range.isLowUnbounded() && (long) range.getLowBoundedValue() < 0) || + (!range.isHighUnbounded() && (long) range.getHighBoundedValue() < 0)) + ? DISABLE_PUSHDOWN.apply(session, domain) + : FULL_PUSHDOWN.apply(session, domain)); } private static ColumnMapping timestampColumnMapping() { diff --git a/ydb-trino-adapter/src/test/java/tech/ydb/trino/TestYdbConnectorTest.java b/ydb-trino-adapter/src/test/java/tech/ydb/trino/TestYdbConnectorTest.java index 11f8d34f..dca58db3 100644 --- a/ydb-trino-adapter/src/test/java/tech/ydb/trino/TestYdbConnectorTest.java +++ b/ydb-trino-adapter/src/test/java/tech/ydb/trino/TestYdbConnectorTest.java @@ -89,12 +89,6 @@ public void testInsertNegativeDate() { // YDB не поддерживает, negative daysSinceEpoch } - @Test - @Override - public void testDateYearOfEraPredicate() { - // YDB не поддерживает, negative daysSinceEpoch - } - @Test @Override public void testCreateTableAsSelectNegativeDate() {