aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoramikish <111790456+amikish@users.noreply.github.com>2024-02-12 13:58:59 +0300
committerGitHub <noreply@github.com>2024-02-12 13:58:59 +0300
commitd4d07df13a73e1131d48063f58ac4c134dc7b5a2 (patch)
treeb8a9070c633c274a53a55600b9dabfc0d3ab4ec7
parenta089cfdbba7c21f3660db3eb3a6b92532ddbe2d6 (diff)
downloadydb-d4d07df13a73e1131d48063f58ac4c134dc7b5a2.tar.gz
YQL-17502 Bigdate from/to string conversions (#1447)
-rw-r--r--ydb/library/yql/core/sql_types/simple_types.cpp3
-rw-r--r--ydb/library/yql/core/yql_expr_type_annotation.cpp1
-rw-r--r--ydb/library/yql/core/yql_opt_utils.cpp3
-rw-r--r--ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp6
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp64
-rw-r--r--ydb/library/yql/minikql/mkql_type_ops.cpp299
-rw-r--r--ydb/library/yql/minikql/mkql_type_ops_ut.cpp64
-rw-r--r--ydb/library/yql/public/udf/udf_data_type.cpp25
-rw-r--r--ydb/library/yql/sql/v1/builtin.cpp7
-rw-r--r--ydb/library/yql/tests/sql/sql2yql/canondata/result.json102
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/bitcast_date32.sql14
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/compare_big_big.sql48
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/compare_big_small.sql120
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/compare_small_big.sql120
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/const_date32.sql20
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/default.cfg1
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/input_date32.sql31
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/int_literals.sql24
-rw-r--r--ydb/library/yql/tests/sql/suites/bigdate/output_date32.sql18
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json24
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json12
-rw-r--r--ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json12
26 files changed, 709 insertions, 357 deletions
diff --git a/ydb/library/yql/core/sql_types/simple_types.cpp b/ydb/library/yql/core/sql_types/simple_types.cpp
index 3901bf937d5..1e4612afd93 100644
--- a/ydb/library/yql/core/sql_types/simple_types.cpp
+++ b/ydb/library/yql/core/sql_types/simple_types.cpp
@@ -60,6 +60,9 @@ std::optional<std::string_view> LookupSimpleTypeBySqlAlias(const std::string_vie
{"tztimestamp", "TzTimestamp"},
{"date32", "Date32"},
+ {"datetime64", "Datetime64"},
+ {"timestamp64", "Timestamp64"},
+ {"interval64", "Interval64"},
};
// new types (or aliases) should be added here
diff --git a/ydb/library/yql/core/yql_expr_type_annotation.cpp b/ydb/library/yql/core/yql_expr_type_annotation.cpp
index 4c642b009f8..c18059f8ec0 100644
--- a/ydb/library/yql/core/yql_expr_type_annotation.cpp
+++ b/ydb/library/yql/core/yql_expr_type_annotation.cpp
@@ -5119,6 +5119,7 @@ TMaybe<ui32> GetDataFixedSize(const TTypeAnnotationNode* typeAnnotation) {
}
if (EDataSlot::Timestamp == dataSlot || EDataSlot::Uint64 == dataSlot || EDataSlot::Int64 == dataSlot
+ || EDataSlot::Datetime64 == dataSlot || EDataSlot::Timestamp64 == dataSlot || EDataSlot::Interval64 == dataSlot
|| EDataSlot::Double == dataSlot || EDataSlot::Interval == dataSlot) {
return 8;
}
diff --git a/ydb/library/yql/core/yql_opt_utils.cpp b/ydb/library/yql/core/yql_opt_utils.cpp
index a1599989dee..90cd077c913 100644
--- a/ydb/library/yql/core/yql_opt_utils.cpp
+++ b/ydb/library/yql/core/yql_opt_utils.cpp
@@ -1578,6 +1578,9 @@ ui64 GetTypeWeight(const TTypeAnnotationNode& type) {
case NUdf::EDataSlot::Int64:
case NUdf::EDataSlot::Uint64:
case NUdf::EDataSlot::Double:
+ case NUdf::EDataSlot::Datetime64:
+ case NUdf::EDataSlot::Timestamp64:
+ case NUdf::EDataSlot::Interval64:
case NUdf::EDataSlot::Timestamp:
case NUdf::EDataSlot::Interval: return 8;
diff --git a/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp b/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp
index 94392036461..12bf9e3c80d 100644
--- a/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp
+++ b/ydb/library/yql/minikql/computation/mkql_computation_node_pack.cpp
@@ -319,6 +319,9 @@ NUdf::TUnboxedValue UnpackFromChunkedBuffer(const TType* type, TChunkedInputBuff
case NUdf::EDataSlot::Timestamp:
return NUdf::TUnboxedValuePod(UnpackData<Fast, ui64>(buf));
case NUdf::EDataSlot::Interval:
+ case NUdf::EDataSlot::Datetime64:
+ case NUdf::EDataSlot::Timestamp64:
+ case NUdf::EDataSlot::Interval64:
return NUdf::TUnboxedValuePod(UnpackData<Fast, i64>(buf));
case NUdf::EDataSlot::TzDate: {
auto ret = NUdf::TUnboxedValuePod(UnpackData<Fast, ui16>(buf));
@@ -640,6 +643,9 @@ void PackImpl(const TType* type, TBuf& buffer, const NUdf::TUnboxedValuePod& val
PackData<Fast>(value.Get<ui64>(), buffer);
break;
case NUdf::EDataSlot::Interval:
+ case NUdf::EDataSlot::Datetime64:
+ case NUdf::EDataSlot::Timestamp64:
+ case NUdf::EDataSlot::Interval64:
PackData<Fast>(value.Get<i64>(), buffer);
break;
case NUdf::EDataSlot::Uuid: {
diff --git a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp
index 0eca50589c4..c793f996136 100644
--- a/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp
+++ b/ydb/library/yql/minikql/invoke_builtins/mkql_builtins_convert.cpp
@@ -882,6 +882,15 @@ void RegisterWideToBigDateCasts(IBuiltinFunctionRegistry& registry) {
RegisterWideToBigDateCastsImpl<NUdf::TDataType<i64>, NUdf::TDataType<NUdf::TDate32>, NUdf::MAX_DATE32, NUdf::MIN_DATE32>(registry);
RegisterWideToDateCastsImpl<NUdf::TDataType<ui32>, NUdf::TDataType<NUdf::TDate32>, NUdf::MAX_DATE32>(registry);
RegisterWideToDateCastsImpl<NUdf::TDataType<ui64>, NUdf::TDataType<NUdf::TDate32>, NUdf::MAX_DATE32>(registry);
+
+ RegisterWideToBigDateCastsImpl<NUdf::TDataType<i64>, NUdf::TDataType<NUdf::TDatetime64>, NUdf::MAX_DATETIME64, NUdf::MIN_DATETIME64>(registry);
+ RegisterWideToDateCastsImpl<NUdf::TDataType<ui64>, NUdf::TDataType<NUdf::TDatetime64>, NUdf::MAX_DATETIME64>(registry);
+
+ RegisterWideToBigDateCastsImpl<NUdf::TDataType<i64>, NUdf::TDataType<NUdf::TTimestamp64>, NUdf::MAX_TIMESTAMP64, NUdf::MIN_TIMESTAMP64>(registry);
+ RegisterWideToDateCastsImpl<NUdf::TDataType<ui64>, NUdf::TDataType<NUdf::TTimestamp64>, NUdf::MAX_TIMESTAMP64>(registry);
+
+ RegisterWideToBigDateCastsImpl<NUdf::TDataType<i64>, NUdf::TDataType<NUdf::TInterval64>, NUdf::MAX_INTERVAL64, -NUdf::MAX_INTERVAL64>(registry);
+ RegisterWideToDateCastsImpl<NUdf::TDataType<ui64>, NUdf::TDataType<NUdf::TInterval64>, NUdf::MAX_INTERVAL64>(registry);
}
void RegisterWideToTimestampCasts(IBuiltinFunctionRegistry& registry) {
@@ -937,11 +946,6 @@ void RegisterWideToShortIntegralCasts(IBuiltinFunctionRegistry& registry) {
RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate>, NUdf::TDataType<ui8>>(registry);
RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate>, NUdf::TDataType<i16>>(registry);
- RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<i8>>(registry);
- RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<ui8>>(registry);
- RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<i16>>(registry);
- RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<ui16>>(registry);
-
RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<i8>>(registry);
RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<ui8>>(registry);
RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTzDate>, NUdf::TDataType<i16>>(registry);
@@ -977,6 +981,29 @@ void RegisterWideToShortIntegralCasts(IBuiltinFunctionRegistry& registry) {
RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TInterval>, NUdf::TDataType<i32>>(registry);
RegisterWideToUnsignedCasts<NUdf::TDataType<NUdf::TInterval>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<i8>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<i16>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDate32>, NUdf::TDataType<i32>>(registry);
+ RegisterWideToUnsignedCasts<NUdf::TDataType<NUdf::TDate32>>(registry);
+
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDatetime64>, NUdf::TDataType<i8>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDatetime64>, NUdf::TDataType<i16>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDatetime64>, NUdf::TDataType<i32>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TDatetime64>, NUdf::TDataType<i64>>(registry);
+ RegisterWideToUnsignedCasts<NUdf::TDataType<NUdf::TDatetime64>>(registry);
+
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTimestamp64>, NUdf::TDataType<i8>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTimestamp64>, NUdf::TDataType<i16>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTimestamp64>, NUdf::TDataType<i32>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TTimestamp64>, NUdf::TDataType<i64>>(registry);
+ RegisterWideToUnsignedCasts<NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TInterval64>, NUdf::TDataType<i8>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TInterval64>, NUdf::TDataType<i16>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TInterval64>, NUdf::TDataType<i32>>(registry);
+ RegisterWideToShortCastsImpl<NUdf::TDataType<NUdf::TInterval64>, NUdf::TDataType<i64>>(registry);
+ RegisterWideToUnsignedCasts<NUdf::TDataType<NUdf::TInterval64>>(registry);
+
RegisterWideToDateCasts(registry);
RegisterWideToBigDateCasts(registry);
RegisterWideToDatetimeCasts(registry);
@@ -1034,6 +1061,27 @@ void RegisterToBigDateConvert(IBuiltinFunctionRegistry& registry) {
RegisterConvert<NUdf::TDataType<ui8>, NUdf::TDataType<NUdf::TDate32>>(registry);
RegisterConvert<NUdf::TDataType<i16>, NUdf::TDataType<NUdf::TDate32>>(registry);
RegisterConvert<NUdf::TDataType<ui16>, NUdf::TDataType<NUdf::TDate32>>(registry);
+
+ RegisterConvert<NUdf::TDataType<i8>, NUdf::TDataType<NUdf::TDatetime64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui8>, NUdf::TDataType<NUdf::TDatetime64>>(registry);
+ RegisterConvert<NUdf::TDataType<i16>, NUdf::TDataType<NUdf::TDatetime64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui16>, NUdf::TDataType<NUdf::TDatetime64>>(registry);
+ RegisterConvert<NUdf::TDataType<i32>, NUdf::TDataType<NUdf::TDatetime64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui32>, NUdf::TDataType<NUdf::TDatetime64>>(registry);
+
+ RegisterConvert<NUdf::TDataType<i8>, NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui8>, NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+ RegisterConvert<NUdf::TDataType<i16>, NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui16>, NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+ RegisterConvert<NUdf::TDataType<i32>, NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui32>, NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+
+ RegisterConvert<NUdf::TDataType<i8>, NUdf::TDataType<NUdf::TInterval64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui8>, NUdf::TDataType<NUdf::TInterval64>>(registry);
+ RegisterConvert<NUdf::TDataType<i16>, NUdf::TDataType<NUdf::TInterval64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui16>, NUdf::TDataType<NUdf::TInterval64>>(registry);
+ RegisterConvert<NUdf::TDataType<i32>, NUdf::TDataType<NUdf::TInterval64>>(registry);
+ RegisterConvert<NUdf::TDataType<ui32>, NUdf::TDataType<NUdf::TInterval64>>(registry);
}
template <typename TInput, typename TOutput, bool Tz = false>
@@ -1143,7 +1191,6 @@ void RegisterConvert(IBuiltinFunctionRegistry& registry) {
RegisterStringConvert<NUdf::TDataType<NUdf::TJson>, NUdf::TDataType<NUdf::TUtf8>>(registry);
RegisterFromDateConvert<NUdf::TDataType<NUdf::TDate>>(registry);
- RegisterFromDateConvert<NUdf::TDataType<NUdf::TDate32>>(registry);
RegisterFromDateConvert<NUdf::TDataType<NUdf::TDatetime>>(registry);
RegisterFromDateConvert<NUdf::TDataType<NUdf::TTimestamp>>(registry);
RegisterFromDateConvert<NUdf::TDataType<NUdf::TInterval>>(registry);
@@ -1151,6 +1198,11 @@ void RegisterConvert(IBuiltinFunctionRegistry& registry) {
RegisterFromDateConvert<NUdf::TDataType<NUdf::TTzDatetime>>(registry);
RegisterFromDateConvert<NUdf::TDataType<NUdf::TTzTimestamp>>(registry);
+ RegisterFromDateConvert<NUdf::TDataType<NUdf::TDate32>>(registry);
+ RegisterFromDateConvert<NUdf::TDataType<NUdf::TDatetime64>>(registry);
+ RegisterFromDateConvert<NUdf::TDataType<NUdf::TTimestamp64>>(registry);
+ RegisterFromDateConvert<NUdf::TDataType<NUdf::TInterval64>>(registry);
+
RegisterTzDateimeConvert(registry);
RegisterDatetimeRescale(registry);
RegisterToDateConvert(registry);
diff --git a/ydb/library/yql/minikql/mkql_type_ops.cpp b/ydb/library/yql/minikql/mkql_type_ops.cpp
index 6c2bc224803..801a9ff97cb 100644
--- a/ydb/library/yql/minikql/mkql_type_ops.cpp
+++ b/ydb/library/yql/minikql/mkql_type_ops.cpp
@@ -161,6 +161,7 @@ bool IsValidValue(NUdf::EDataSlot type, const NUdf::TUnboxedValuePod& value) {
}
bool IsLeapYear(i32 year) {
+ Y_ASSERT(year != 0);
if (Y_UNLIKELY(year < 0)) {
++year;
}
@@ -229,6 +230,7 @@ bool WriteDate32(IOutputStream& out, i32 value) {
}
void SplitTime(ui32 value, ui32& hour, ui32& min, ui32& sec) {
+ Y_ASSERT(value < 86400);
hour = value / 3600;
value -= hour * 3600;
min = value / 60;
@@ -260,6 +262,26 @@ bool WriteDatetime(IOutputStream& out, ui32 value) {
return true;
}
+bool WriteDatetime64(IOutputStream& out, i64 value) {
+ if (Y_UNLIKELY(NUdf::MIN_DATETIME64 > value || value > NUdf::MAX_DATETIME64)) {
+ return false;
+ }
+
+ auto date = value / 86400;
+ value -= date * 86400;
+ if (value < 0) {
+ date -= 1;
+ value += 86400;
+ }
+ if (!WriteDate32(out, date)) {
+ return false;
+ }
+
+ out << 'T';
+ WriteTime(out, value);
+ return true;
+}
+
void WriteUs(IOutputStream& out, ui32 value) {
if (value) {
out << '.';
@@ -285,10 +307,34 @@ bool WriteTimestamp(IOutputStream& out, ui64 value) {
return true;
}
+bool WriteTimestamp64(IOutputStream& out, i64 value) {
+ if (Y_UNLIKELY(NUdf::MIN_TIMESTAMP64 > value || value > NUdf::MAX_TIMESTAMP64)) {
+ return false;
+ }
+
+ auto date = value / 86400000000ll;
+ value -= date * 86400000000ll;
+ if (value < 0) {
+ date -= 1;
+ value += 86400000000ll;
+ }
+ if (!WriteDate32(out, date)) {
+ return false;
+ }
+
+ out << 'T';
+ const auto time = value / 1000000ull;
+ value -= time * 1000000ull;
+ WriteTime(out, time);
+ WriteUs(out, value);
+ return true;
+}
+
+template <i64 UpperBound>
bool WriteInterval(IOutputStream& out, i64 signedValue) {
ui64 value = signedValue < 0 ? -signedValue : signedValue;
- if (value >= NUdf::MAX_TIMESTAMP) {
+ if (value > UpperBound) {
return false;
}
@@ -405,12 +451,6 @@ NUdf::TUnboxedValuePod ValueToString(NUdf::EDataSlot type, NUdf::TUnboxedValuePo
}
break;
- case NUdf::EDataSlot::Date32:
- if (!WriteDate32(out, value.Get<i32>())) {
- return NUdf::TUnboxedValuePod();
- }
- break;
-
case NUdf::EDataSlot::Datetime:
if (!WriteDatetime(out, value.Get<ui32>())) {
return NUdf::TUnboxedValuePod();
@@ -426,7 +466,7 @@ NUdf::TUnboxedValuePod ValueToString(NUdf::EDataSlot type, NUdf::TUnboxedValuePo
break;
case NUdf::EDataSlot::Interval:
- if (!WriteInterval(out, value.Get<i64>())) {
+ if (!WriteInterval<NUdf::MAX_TIMESTAMP - 1>(out, value.Get<i64>())) {
return NUdf::TUnboxedValuePod();
}
break;
@@ -464,6 +504,32 @@ NUdf::TUnboxedValuePod ValueToString(NUdf::EDataSlot type, NUdf::TUnboxedValuePo
break;
}
+ case NUdf::EDataSlot::Date32:
+ if (!WriteDate32(out, value.Get<i32>())) {
+ return NUdf::TUnboxedValuePod();
+ }
+ break;
+
+ case NUdf::EDataSlot::Datetime64:
+ if (!WriteDatetime64(out, value.Get<i64>())) {
+ return NUdf::TUnboxedValuePod();
+ }
+ out << 'Z';
+ break;
+
+ case NUdf::EDataSlot::Timestamp64:
+ if (!WriteTimestamp64(out, value.Get<i64>())) {
+ return NUdf::TUnboxedValuePod();
+ }
+ out << 'Z';
+ break;
+
+ case NUdf::EDataSlot::Interval64:
+ if (!WriteInterval<NUdf::MAX_INTERVAL64>(out, value.Get<i64>())) {
+ return NUdf::TUnboxedValuePod();
+ }
+ break;
+
case NUdf::EDataSlot::DyNumber: {
out << NDyNumber::DyNumberToString(value.AsStringRef());
break;
@@ -769,13 +835,15 @@ public:
year += 1;
}
year -= NUdf::MIN_YEAR;
+ i32 val;
if (Y_LIKELY(year%SOLAR_CYCLE_YEARS >= 0)) {
- value = (year / SOLAR_CYCLE_YEARS) * SOLAR_CYCLE_DAYS + Years_[year % SOLAR_CYCLE_YEARS];
+ val = (year / SOLAR_CYCLE_YEARS) * SOLAR_CYCLE_DAYS + Years_[year % SOLAR_CYCLE_YEARS];
} else {
- value = (year / SOLAR_CYCLE_YEARS - 1) * SOLAR_CYCLE_DAYS + Years_[SOLAR_CYCLE_YEARS + year % SOLAR_CYCLE_YEARS];
+ val = (year / SOLAR_CYCLE_YEARS - 1) * SOLAR_CYCLE_DAYS + Years_[SOLAR_CYCLE_YEARS + year % SOLAR_CYCLE_YEARS];
}
- value += isLeap ? LeapMonths_[month] : Months_[month];
- value += day - 1;
+ val += isLeap ? LeapMonths_[month] : Months_[month];
+ val += day - 1;
+ value = val;
return true;
}
@@ -1086,9 +1154,8 @@ NUdf::TUnboxedValuePod ParseDate(NUdf::TStringRef buf) {
return NUdf::TUnboxedValuePod(value);
}
-NUdf::TUnboxedValuePod ParseDate32(NUdf::TStringRef buf) {
+bool ParseDate32(ui32& pos, NUdf::TStringRef buf, i32& value) {
ui32 year, month, day;
- ui32 pos = 0;
bool beforeChrist = false;
if (pos < buf.Size()) {
char c = buf.Data()[pos];
@@ -1101,27 +1168,35 @@ NUdf::TUnboxedValuePod ParseDate32(NUdf::TStringRef buf) {
}
if (!ParseNumber(pos, buf, year, 6) || pos == buf.Size() || buf.Data()[pos] != '-') {
- return NUdf::TUnboxedValuePod();
+ return false;
}
i32 iyear = beforeChrist ? -year : year;
// skip '-'
++pos;
if (!ParseNumber(pos, buf, month, 2) || pos == buf.Size() || buf.Data()[pos] != '-') {
- return NUdf::TUnboxedValuePod();
+ return false;
}
// skip '-'
++pos;
- if (!ParseNumber(pos, buf, day, 2) || pos != buf.Size()) {
- return NUdf::TUnboxedValuePod();
+ if (!ParseNumber(pos, buf, day, 2)) {
+ return false;
}
- i32 value;
if (Y_LIKELY(MakeDate32(iyear, month, day, value))) {
- return NUdf::TUnboxedValuePod(value);
+ return true;
}
+ return false;
+}
+
+NUdf::TUnboxedValuePod ParseDate32(NUdf::TStringRef buf) {
+ i32 value;
+ ui32 pos = 0;
+ if (Y_LIKELY(ParseDate32(pos, buf, value) && pos == buf.Size())) {
+ return NUdf::TUnboxedValuePod(value);
+ }
return NUdf::TUnboxedValuePod();
}
@@ -1163,6 +1238,106 @@ NUdf::TUnboxedValuePod ParseTzDate(NUdf::TStringRef str) {
return out;
}
+bool ParseTime(ui32& pos, NUdf::TStringRef buf, ui32& timeValue) {
+ if (pos == buf.Size() || buf.Data()[pos] != 'T') {
+ return false;
+ }
+ ui32 hour, minute, second;
+ // skip 'T'
+ ++pos;
+ if (!ParseNumber(pos, buf, hour, 2) || pos == buf.Size() || buf.Data()[pos] != ':') {
+ return false;
+ }
+
+ // skip ':'
+ ++pos;
+ if (!ParseNumber(pos, buf, minute, 2) || pos == buf.Size() || buf.Data()[pos] != ':') {
+ return false;
+ }
+
+ // skip ':'
+ ++pos;
+ if (!ParseNumber(pos, buf, second, 2) || pos == buf.Size()) {
+ return false;
+ }
+
+ if (!MakeTime(hour, minute, second, timeValue)) {
+ return false;
+ }
+ return true;
+}
+
+bool ParseTimezoneOffset(ui32& pos, NUdf::TStringRef buf, i32& offset) {
+ bool waiting_for_z = true;
+ ui32 offset_hours = 0;
+ ui32 offset_minutes = 0;
+ bool is_offset_negative = false;
+
+ if (buf.Data()[pos] == '+' || buf.Data()[pos] == '-') {
+ is_offset_negative = buf.Data()[pos] == '-';
+
+ // Skip sign
+ ++pos;
+
+ if (!ParseNumber(pos, buf, offset_hours, 2) ||
+ pos == buf.Size() || buf.Data()[pos] != ':')
+ {
+ return false;
+ }
+
+ // Skip ':'
+ ++pos;
+
+ if (!ParseNumber(pos, buf, offset_minutes, 2) || pos != buf.Size()) {
+ return false;
+ }
+
+ waiting_for_z = false;
+ }
+
+ if (waiting_for_z) {
+ if (pos == buf.Size() || buf.Data()[pos] != 'Z') {
+ return false;
+ }
+
+ // skip 'Z'
+ ++pos;
+ }
+
+ ui32 offset_value = ((offset_hours) * 60 + offset_minutes) * 60;
+ offset = is_offset_negative ? offset_value : -offset_value;
+ return true;
+}
+
+NUdf::TUnboxedValuePod ParseDatetime64(NUdf::TStringRef buf) {
+ i32 date;
+ ui32 pos = 0;
+ if (Y_UNLIKELY(!ParseDate32(pos, buf, date))) {
+ return NUdf::TUnboxedValuePod();
+ }
+
+ ui32 time;
+ if (Y_UNLIKELY(!ParseTime(pos, buf, time))) {
+ return NUdf::TUnboxedValuePod();
+ }
+
+ i32 zoneOffset = 0;
+ if (Y_UNLIKELY(!ParseTimezoneOffset(pos, buf, zoneOffset))) {
+ return NUdf::TUnboxedValuePod();
+ }
+ if (Y_UNLIKELY(pos != buf.Size())) {
+ return NUdf::TUnboxedValuePod();
+ }
+ i64 value = 86400;
+ value *= date;
+ value += time;
+ value += zoneOffset;
+ if (Y_UNLIKELY(NUdf::MIN_DATETIME64 > value || value > NUdf::MAX_DATETIME64)) {
+ return NUdf::TUnboxedValuePod();
+ }
+ return NUdf::TUnboxedValuePod(value);
+}
+
NUdf::TUnboxedValuePod ParseDatetime(NUdf::TStringRef buf) {
ui32 year, month, day;
ui32 pos = 0;
@@ -1330,6 +1505,66 @@ NUdf::TUnboxedValuePod ParseTzDatetime(NUdf::TStringRef str) {
return out;
}
+bool ParseMicroseconds(ui32& pos, NUdf::TStringRef buf, ui32& microseconds) {
+ if (buf.Data()[pos] == '.') {
+ ui32 ms = 0;
+ // Skip dot
+ ++pos;
+ ui32 prevPos = pos;
+ if (!ParseNumber(pos, buf, ms, 6)) {
+ return false;
+ }
+
+ prevPos = pos - prevPos;
+
+ while (prevPos < 6) {
+ ms *= 10;
+ ++prevPos;
+ }
+ microseconds = ms;
+
+ // Skip unused digits
+ while (pos < buf.Size() && '0' <= buf.Data()[pos] && buf.Data()[pos] <= '9') {
+ ++pos;
+ }
+ }
+ return true;
+}
+
+NUdf::TUnboxedValuePod ParseTimestamp64(NUdf::TStringRef buf) {
+ i32 date;
+ ui32 pos = 0;
+ if (Y_UNLIKELY(!ParseDate32(pos, buf, date))) {
+ return NUdf::TUnboxedValuePod();
+ }
+
+ ui32 time;
+ if (Y_UNLIKELY(!ParseTime(pos, buf, time))) {
+ return NUdf::TUnboxedValuePod();
+ }
+
+ ui32 microseconds = 0;
+ if (Y_UNLIKELY(!ParseMicroseconds(pos, buf, microseconds))) {
+ return NUdf::TUnboxedValuePod();
+ }
+
+ i32 zoneOffset = 0;
+ if (Y_UNLIKELY(!ParseTimezoneOffset(pos, buf, zoneOffset))) {
+ return NUdf::TUnboxedValuePod();
+ }
+ if (Y_UNLIKELY(pos != buf.Size())) {
+ return NUdf::TUnboxedValuePod();
+ }
+ i64 value = 86400000000ull;
+ value *= date;
+ value += (i32(time) + zoneOffset)*1000000ull;
+ value += microseconds;
+ if (Y_UNLIKELY(NUdf::MIN_TIMESTAMP64 > value || value > NUdf::MAX_TIMESTAMP64)) {
+ return NUdf::TUnboxedValuePod();
+ }
+ return NUdf::TUnboxedValuePod(value);
+}
+
NUdf::TUnboxedValuePod ParseTimestamp(NUdf::TStringRef buf) {
ui32 year, month, day;
ui32 pos = 0;
@@ -1553,7 +1788,7 @@ NUdf::TUnboxedValuePod ParseTzTimestamp(NUdf::TStringRef str) {
return out;
}
-template <bool DecimalPart = false>
+template <bool DecimalPart = false, i8 MaxDigits = 6>
bool ParseNumber(std::string_view::const_iterator& pos, const std::string_view& buf, ui32& value) {
value = 0U;
@@ -1561,7 +1796,7 @@ bool ParseNumber(std::string_view::const_iterator& pos, const std::string_view&
return false;
}
- auto digits = 6U;
+ auto digits = MaxDigits;
do {
value *= 10U;
value += *pos - '0';
@@ -1577,6 +1812,7 @@ bool ParseNumber(std::string_view::const_iterator& pos, const std::string_view&
return true;
}
+template <i64 UpperBound, ui32 MaxDays>
NUdf::TUnboxedValuePod ParseInterval(const std::string_view& buf) {
if (buf.empty()) {
return NUdf::TUnboxedValuePod();
@@ -1596,7 +1832,7 @@ NUdf::TUnboxedValuePod ParseInterval(const std::string_view& buf) {
ui32 num;
if (*pos != 'T') {
- if (!ParseNumber(pos, buf, num)) {
+ if (!ParseNumber<false, 9>(pos, buf, num)) {
return NUdf::TUnboxedValuePod();
}
@@ -1607,6 +1843,10 @@ NUdf::TUnboxedValuePod ParseInterval(const std::string_view& buf) {
}
}
+ if (days > MaxDays) {
+ return NUdf::TUnboxedValuePod();
+ }
+
if (buf.cend() != pos) {
if (*pos++ != 'T') {
return NUdf::TUnboxedValuePod();
@@ -1659,7 +1899,7 @@ NUdf::TUnboxedValuePod ParseInterval(const std::string_view& buf) {
+ seconds.value_or(0U) * 1000000ull
+ microseconds.value_or(0U);
- if (value >= NUdf::MAX_TIMESTAMP) {
+ if (value > UpperBound) {
return NUdf::TUnboxedValuePod();
}
@@ -1812,7 +2052,7 @@ NUdf::TUnboxedValuePod ValueFromString(NUdf::EDataSlot type, NUdf::TStringRef bu
return ParseTimestamp(buf);
case NUdf::EDataSlot::Interval:
- return ParseInterval(buf);
+ return ParseInterval<NUdf::MAX_TIMESTAMP - 1, 2*NUdf::MAX_DATE>(buf);
case NUdf::EDataSlot::TzDate:
return ParseTzDate(buf);
@@ -1845,16 +2085,13 @@ NUdf::TUnboxedValuePod ValueFromString(NUdf::EDataSlot type, NUdf::TStringRef bu
return ParseDate32(buf);
case NUdf::EDataSlot::Datetime64:
- //TODO
- return {};
+ return ParseDatetime64(buf);
case NUdf::EDataSlot::Timestamp64:
- //TODO
- return {};
+ return ParseTimestamp64(buf);
case NUdf::EDataSlot::Interval64:
- //TODO
- return {};
+ return ParseInterval<NUdf::MAX_INTERVAL64, NUdf::MAX_DATE32 - NUdf::MIN_DATE32>(buf);
case NUdf::EDataSlot::Decimal:
default:
diff --git a/ydb/library/yql/minikql/mkql_type_ops_ut.cpp b/ydb/library/yql/minikql/mkql_type_ops_ut.cpp
index 168dd69af95..814f52ea26b 100644
--- a/ydb/library/yql/minikql/mkql_type_ops_ut.cpp
+++ b/ydb/library/yql/minikql/mkql_type_ops_ut.cpp
@@ -1,6 +1,7 @@
#include <ydb/library/yql/parser/pg_wrapper/pg_compat.h>
#include "mkql_type_ops.h"
+#include "mkql_alloc.h"
#include <library/cpp/testing/unittest/registar.h>
@@ -8,8 +9,8 @@
#include <util/stream/str.h>
extern "C" {
-#include <datatype/timestamp.h>
-#include <utils/datetime.h>
+#include <ydb/library/yql/parser/pg_wrapper/postgresql/src/include/datatype/timestamp.h>
+#include <ydb/library/yql/parser/pg_wrapper/postgresql/src/include/utils/datetime.h>
}
using namespace NYql;
@@ -25,7 +26,6 @@ Y_UNIT_TEST_SUITE(TMiniKQLTypeOps) {
UNIT_ASSERT(IsLeapYear(-5));
UNIT_ASSERT(!IsLeapYear(-4));
UNIT_ASSERT(IsLeapYear(-1));
- UNIT_ASSERT(IsLeapYear(0));
UNIT_ASSERT(!IsLeapYear(1));
UNIT_ASSERT(IsLeapYear(4));
UNIT_ASSERT(!IsLeapYear(100));
@@ -41,13 +41,10 @@ Y_UNIT_TEST_SUITE(TMiniKQLTypeOps) {
UNIT_ASSERT(strDate16.HasValue());
auto value32 = ValueFromString(NUdf::EDataSlot::Date32, strDate16.AsStringRef());
UNIT_ASSERT(value32.HasValue());
- UNIT_ASSERT_EQUAL(value16, value32.Get<i32>());
+ UNIT_ASSERT_VALUES_EQUAL(value16, value32.Get<i32>());
const NUdf::TUnboxedValue& strDate32 = ValueToString(NUdf::EDataSlot::Date32, NUdf::TUnboxedValuePod(value32.Get<i32>()));
UNIT_ASSERT(strDate32.HasValue());
- UNIT_ASSERT_EQUAL(strDate16.AsStringRef(), strDate32.AsStringRef());
- auto val32 = ValueFromString(NUdf::EDataSlot::Date32, strDate32.AsStringRef());
- UNIT_ASSERT(val32.HasValue());
- UNIT_ASSERT_EQUAL(value16, val32.Get<i32>());
+ UNIT_ASSERT_VALUES_EQUAL(strDate16.AsStringRef(), strDate32.AsStringRef());
}
}
@@ -61,7 +58,7 @@ Y_UNIT_TEST_SUITE(TMiniKQLTypeOps) {
if (year < 0) {
year++;
}
- UNIT_ASSERT_EQUAL(value, date2j(year, month, day) - UNIX_EPOCH_JDATE);
+ UNIT_ASSERT_VALUES_EQUAL(value, date2j(year, month, day) - UNIX_EPOCH_JDATE);
}
}
@@ -74,13 +71,58 @@ Y_UNIT_TEST_SUITE(TMiniKQLTypeOps) {
year--;
}
UNIT_ASSERT(MakeDate32(year, static_cast<ui32>(month), static_cast<ui32>(day), date32));
- UNIT_ASSERT_EQUAL(date32, value - UNIX_EPOCH_JDATE);
+ UNIT_ASSERT_VALUES_EQUAL(date32, value - UNIX_EPOCH_JDATE);
if (date32 == NUdf::MAX_DATE32) {
break;
}
}
}
+ Y_UNIT_TEST(Datetime32vs64) {
+ TScopedAlloc alloc(__LOCATION__);
+ alloc.DisableStrictAllocationCheck();
+ for (ui32 v32 = 0; v32 <= 86400; ++v32) {
+ const auto str32 = ValueToString(NUdf::EDataSlot::Datetime, NUdf::TUnboxedValuePod(v32));
+ UNIT_ASSERT(str32.HasValue());
+ auto v64 = ValueFromString(NUdf::EDataSlot::Datetime64, str32.AsStringRef());
+ UNIT_ASSERT(v64.HasValue());
+ UNIT_ASSERT_VALUES_EQUAL(v32, v64.Get<i64>());
+ const auto str64 = ValueToString(NUdf::EDataSlot::Datetime64, NUdf::TUnboxedValuePod(v64.Get<i64>()));
+ UNIT_ASSERT(str64.HasValue());
+ UNIT_ASSERT_VALUES_EQUAL(str32.AsStringRef(), str64.AsStringRef());
+ }
+ }
+
+ Y_UNIT_TEST(TimestampOldVsNew) {
+ TScopedAlloc alloc(__LOCATION__);
+ alloc.DisableStrictAllocationCheck();
+ for (ui64 val = 0; val <= 86400000000; val += 1000003) {
+ const auto str32 = ValueToString(NUdf::EDataSlot::Timestamp, NUdf::TUnboxedValuePod(val));
+ UNIT_ASSERT(str32.HasValue());
+ auto v64 = ValueFromString(NUdf::EDataSlot::Timestamp64, str32.AsStringRef());
+ UNIT_ASSERT(v64.HasValue());
+ UNIT_ASSERT_VALUES_EQUAL(val, v64.Get<i64>());
+ const auto str64 = ValueToString(NUdf::EDataSlot::Timestamp64, NUdf::TUnboxedValuePod(v64.Get<i64>()));
+ UNIT_ASSERT(str64.HasValue());
+ UNIT_ASSERT_VALUES_EQUAL(str32.AsStringRef(), str64.AsStringRef());
+ }
+ }
+
+ Y_UNIT_TEST(IntervalOldVsNew) {
+ TScopedAlloc alloc(__LOCATION__);
+ alloc.DisableStrictAllocationCheck();
+ for (ui64 val = -86400000000; val <= 86400000000; val += 1000003) {
+ const auto str32 = ValueToString(NUdf::EDataSlot::Interval, NUdf::TUnboxedValuePod(val));
+ UNIT_ASSERT(str32.HasValue());
+ auto v64 = ValueFromString(NUdf::EDataSlot::Interval64, str32.AsStringRef());
+ UNIT_ASSERT(v64.HasValue());
+ UNIT_ASSERT_VALUES_EQUAL(val, v64.Get<i64>());
+ const auto str64 = ValueToString(NUdf::EDataSlot::Interval64, NUdf::TUnboxedValuePod(v64.Get<i64>()));
+ UNIT_ASSERT(str64.HasValue());
+ UNIT_ASSERT_VALUES_EQUAL(str32.AsStringRef(), str64.AsStringRef());
+ }
+ }
+
Y_UNIT_TEST(DateInOut) {
ui32 year = 1970;
ui32 month = 1;
@@ -178,7 +220,7 @@ Y_UNIT_TEST_SUITE(TMiniKQLTypeOps) {
return ValueFromString(NUdf::EDataSlot::Timestamp, buf);
}
- Y_UNIT_TEST(TimestampSeriailization) {
+ Y_UNIT_TEST(TimestampSerialization) {
UNIT_ASSERT(!ParseTimestamp("2020-07-28T21:46:05.55045#"));
UNIT_ASSERT(!ParseTimestamp("2020-07-28T21:46:05.55045"));
UNIT_ASSERT(!ParseTimestamp("2020-07-28T21:46:05."));
diff --git a/ydb/library/yql/public/udf/udf_data_type.cpp b/ydb/library/yql/public/udf/udf_data_type.cpp
index 185830be869..2a85c2131ce 100644
--- a/ydb/library/yql/public/udf/udf_data_type.cpp
+++ b/ydb/library/yql/public/udf/udf_data_type.cpp
@@ -29,20 +29,20 @@ static const std::array<std::array<std::optional<TCastResultOptions>, DataSlotCo
// Bool, Int8 ----integrals---- Uint64 Floats, Strings, YJsons, Uuid, DateTimes, Interval, TzDateTimes, Decimal, DyNumber, JsonDocument
{{ OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO }}, // Bool
- {{ LD, OK, MF, OK, MF, OK, MF, OK, MF, OK, OK, OK, OK, NO, NO, NO, MF, MF, MF, OK, MF, MF, MF, UN, NO, NO, OK }}, // Int8
- {{ LD, MF, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, NO, NO, NO, OK, OK, OK, OK, OK, OK, OK, UN, NO, NO, OK }}, // Uint8
- {{ LD, MF, MF, OK, MF, OK, MF, OK, MF, OK, OK, OK, OK, NO, NO, NO, MF, MF, MF, OK, MF, MF, MF, UN, NO, NO, OK }}, // Int16
- {{ LD, MF, MF, MF, OK, OK, OK, OK, OK, OK, OK, OK, OK, NO, NO, NO, MF, OK, OK, OK, MF, OK, OK, UN, NO, NO, OK }}, // Uint16
- {{ LD, MF, MF, MF, MF, OK, MF, OK, MF, OK, LD, OK, OK, NO, NO, NO, MF, MF, MF, OK, MF, MF, MF, UN, NO, NO, MF }}, // Int32
- {{ LD, MF, MF, MF, MF, MF, OK, OK, OK, OK, LD, OK, OK, NO, NO, NO, MF, MF, OK, OK, MF, MF, OK, UN, NO, NO, MF }}, // Uint32
- {{ LD, MF, MF, MF, MF, MF, MF, OK, MF, LD, LD, OK, OK, NO, NO, NO, MF, MF, MF, MF, MF, MF, MF, UN, NO, NO, MF }}, // Int64
- {{ LD, MF, MF, MF, MF, MF, MF, MF, OK, LD, LD, OK, OK, NO, NO, NO, MF, MF, MF, MF, MF, MF, MF, UN, NO, NO, MF }}, // Uint64
+ {{ LD, OK, MF, OK, MF, OK, MF, OK, MF, OK, OK, OK, OK, NO, NO, NO, MF, MF, MF, OK, MF, MF, MF, UN, NO, NO, OK, OK, OK, OK }}, // Int8
+ {{ LD, MF, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, OK, NO, NO, NO, OK, OK, OK, OK, OK, OK, OK, UN, NO, NO, OK, OK, OK, OK }}, // Uint8
+ {{ LD, MF, MF, OK, MF, OK, MF, OK, MF, OK, OK, OK, OK, NO, NO, NO, MF, MF, MF, OK, MF, MF, MF, UN, NO, NO, OK, OK, OK, OK }}, // Int16
+ {{ LD, MF, MF, MF, OK, OK, OK, OK, OK, OK, OK, OK, OK, NO, NO, NO, MF, OK, OK, OK, MF, OK, OK, UN, NO, NO, OK, OK, OK, OK }}, // Uint16
+ {{ LD, MF, MF, MF, MF, OK, MF, OK, MF, OK, LD, OK, OK, NO, NO, NO, MF, MF, MF, OK, MF, MF, MF, UN, NO, NO, MF, OK, OK, OK }}, // Int32
+ {{ LD, MF, MF, MF, MF, MF, OK, OK, OK, OK, LD, OK, OK, NO, NO, NO, MF, MF, OK, OK, MF, MF, OK, UN, NO, NO, MF, OK, OK, OK }}, // Uint32
+ {{ LD, MF, MF, MF, MF, MF, MF, OK, MF, LD, LD, OK, OK, NO, NO, NO, MF, MF, MF, MF, MF, MF, MF, UN, NO, NO, MF, MF, MF, MF }}, // Int64
+ {{ LD, MF, MF, MF, MF, MF, MF, MF, OK, LD, LD, OK, OK, NO, NO, NO, MF, MF, MF, MF, MF, MF, MF, UN, NO, NO, MF, MF, MF, MF }}, // Uint64
{{ FL, FL, FL, FL, FL, FL, FL, FL, FL, OK, LD, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO }}, // Double
{{ FL, FL, FL, FL, FL, FL, FL, FL, FL, OK, OK, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO }}, // Float
- {{ MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, OK, MF, MF, MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, MF, MF }}, // String
- {{ MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, OK, OK, MF, MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, MF, MF }}, // Utf8
+ {{ MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, OK, MF, MF, MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, MF, MF, MF, MF, MF }}, // String
+ {{ MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, OK, OK, MF, MF, MF, MF, MF, MF, MF, MF, MF, MF, FL, FL, MF, MF, MF, MF, MF }}, // Utf8
{{ NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK, NO, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO }}, // Yson
{{ NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK, OK, NO, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK }}, // Json
@@ -65,7 +65,10 @@ static const std::array<std::array<std::optional<TCastResultOptions>, DataSlotCo
{{ NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK, OK, NO, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK }}, // JsonDocument
- {{ NO, MF, MF, MF, MF, OK, MF, OK, OK, LD, OK, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK }}, // Date32
+ {{ NO, MF, MF, MF, MF, OK, MF, OK, OK, LD, OK, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK, OK, OK, NO }}, // Date32
+ {{ NO, MF, MF, MF, MF, MF, MF, OK, MF, LD, LD, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, LD, OK, OK, NO }}, // Datetime64
+ {{ NO, MF, MF, MF, MF, MF, MF, OK, MF, LD, LD, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, LD, LD, OK, NO }}, // Timestamp64
+ {{ NO, MF, MF, MF, MF, MF, MF, OK, MF, LD, LD, OK, OK, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, NO, OK }}, // Interval64
}};
}
diff --git a/ydb/library/yql/sql/v1/builtin.cpp b/ydb/library/yql/sql/v1/builtin.cpp
index 4276cf8b8ed..21acf1fccdb 100644
--- a/ydb/library/yql/sql/v1/builtin.cpp
+++ b/ydb/library/yql/sql/v1/builtin.cpp
@@ -416,7 +416,12 @@ public:
case NUdf::EDataSlot::TzTimestamp:
value = ToString(out.Get<ui64>());
break;
+ case NUdf::EDataSlot::Datetime64:
+ case NUdf::EDataSlot::Timestamp64:
+ value = ToString(out.Get<i64>());
+ break;
case NUdf::EDataSlot::Interval:
+ case NUdf::EDataSlot::Interval64:
value = ToString(out.Get<i64>());
if ('T' == atom->back()) {
ctx.Error(Pos) << "Time prefix 'T' at end of interval constant. The designator 'T' shall be absent if all of the time components are absent.";
@@ -1229,7 +1234,7 @@ TString NormalizeTypeString(const TString& str) {
static const TSet<TString> AvailableDataTypes = {"Bool", "String", "Uint32", "Uint64", "Int32", "Int64", "Float", "Double", "Utf8", "Yson", "Json", "JsonDocument",
"Date", "Datetime", "Timestamp", "Interval", "Uint8", "Int8", "Uint16", "Int16", "TzDate", "TzDatetime", "TzTimestamp", "Uuid", "Decimal", "DyNumber",
- "Date32"};
+ "Date32", "Datetime64", "Timestamp64", "Interval64", };
TNodePtr GetDataTypeStringNode(TContext& ctx, TCallNode& node, unsigned argNum, TString* outTypeStrPtr = nullptr) {
auto errMsgFunc = [&node, argNum]() {
static std::array<TString, 2> numToName = {{"first", "second"}};
diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
index b95a431d449..a5c95f4ac3f 100644
--- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
+++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json
@@ -2654,58 +2654,58 @@
],
"test_sql2yql.test[bigdate-bitcast_date32]": [
{
- "checksum": "5439ef15615eb00e8b35fa9872072246",
- "size": 2382,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql2yql.test_bigdate-bitcast_date32_/sql.yql"
+ "checksum": "40fa86bec0225d342385bca9f1e28a26",
+ "size": 3468,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-bitcast_date32_/sql.yql"
}
],
"test_sql2yql.test[bigdate-compare_big_big]": [
{
- "checksum": "cd3f40db7ee0f5ac319ae175be176836",
- "size": 5304,
- "uri": "https://{canondata_backend}/1936842/00a3d89e94649090e202464d6be9c603f08a8fd9/resource.tar.gz#test_sql2yql.test_bigdate-compare_big_big_/sql.yql"
+ "checksum": "b258e0353ca2f0644fa15f1f7862254f",
+ "size": 9041,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-compare_big_big_/sql.yql"
}
],
"test_sql2yql.test[bigdate-compare_big_small]": [
{
- "checksum": "25aef244f99e4cd3724af085d209a9e0",
- "size": 12264,
- "uri": "https://{canondata_backend}/1936842/00a3d89e94649090e202464d6be9c603f08a8fd9/resource.tar.gz#test_sql2yql.test_bigdate-compare_big_small_/sql.yql"
+ "checksum": "9b29b282e4db0e5917cfde492f9d38e8",
+ "size": 21618,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-compare_big_small_/sql.yql"
}
],
"test_sql2yql.test[bigdate-compare_small_big]": [
{
- "checksum": "c2370bc4fc8300e6d409df04fdbf9fa4",
- "size": 12264,
- "uri": "https://{canondata_backend}/1936842/00a3d89e94649090e202464d6be9c603f08a8fd9/resource.tar.gz#test_sql2yql.test_bigdate-compare_small_big_/sql.yql"
+ "checksum": "fb56da308f26532a5baa31e3a0b2f8b8",
+ "size": 21618,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-compare_small_big_/sql.yql"
}
],
"test_sql2yql.test[bigdate-const_date32]": [
{
- "checksum": "ee057c09a2c27a96f66167599769ab25",
- "size": 9642,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql2yql.test_bigdate-const_date32_/sql.yql"
+ "checksum": "6802ae37119fed97965c2a7f17c75f81",
+ "size": 11193,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-const_date32_/sql.yql"
}
],
"test_sql2yql.test[bigdate-input_date32]": [
{
- "checksum": "ee49348e46f13e5f3a70bc4abfd53632",
- "size": 15370,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql2yql.test_bigdate-input_date32_/sql.yql"
+ "checksum": "0b6c00f5356ec08678e058ef5c995405",
+ "size": 17701,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-input_date32_/sql.yql"
}
],
"test_sql2yql.test[bigdate-int_literals]": [
{
- "checksum": "d934a39b488e1a3d24fbd410d663ccc1",
- "size": 2933,
- "uri": "https://{canondata_backend}/1946324/8bef2b737d91e7857292403ea9453c501cba1fec/resource.tar.gz#test_sql2yql.test_bigdate-int_literals_/sql.yql"
+ "checksum": "cf1a44d37f942e29705f26d871a4f57e",
+ "size": 4798,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-int_literals_/sql.yql"
}
],
"test_sql2yql.test[bigdate-output_date32]": [
{
- "checksum": "d98ccd4b8b135bd4e1668daa13c73d3a",
- "size": 3049,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql2yql.test_bigdate-output_date32_/sql.yql"
+ "checksum": "df7e72600cdb9157115eeb7f46a7694c",
+ "size": 4445,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql2yql.test_bigdate-output_date32_/sql.yql"
}
],
"test_sql2yql.test[binding-anon_table_binding]": [
@@ -20161,58 +20161,58 @@
],
"test_sql_format.test[bigdate-bitcast_date32]": [
{
- "checksum": "f7c40499e0d71375bad74b7522df2171",
- "size": 429,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql_format.test_bigdate-bitcast_date32_/formatted.sql"
+ "checksum": "c547a5b3cc24431ced0dba81baba08aa",
+ "size": 479,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-bitcast_date32_/formatted.sql"
}
],
"test_sql_format.test[bigdate-compare_big_big]": [
{
- "checksum": "17c6e0635762b3a91eb9ecbe69890eb4",
- "size": 1580,
- "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_bigdate-compare_big_big_/formatted.sql"
+ "checksum": "9e80ea7c508beef620e68325d7527844",
+ "size": 1765,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-compare_big_big_/formatted.sql"
}
],
"test_sql_format.test[bigdate-compare_big_small]": [
{
- "checksum": "2303ba2d12931a0f5ab91077c934cd12",
- "size": 4249,
- "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_bigdate-compare_big_small_/formatted.sql"
+ "checksum": "9facea94b561fbe5f2c164349173b6c4",
+ "size": 4723,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-compare_big_small_/formatted.sql"
}
],
"test_sql_format.test[bigdate-compare_small_big]": [
{
- "checksum": "ab55e110218e29cf96ff144fa9ba9b35",
- "size": 4249,
- "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_bigdate-compare_small_big_/formatted.sql"
+ "checksum": "ca4fdc457e42baa058e6e1c9d3e20525",
+ "size": 4723,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-compare_small_big_/formatted.sql"
}
],
"test_sql_format.test[bigdate-const_date32]": [
{
- "checksum": "aa8a03e194f2068bbbec2f91873d8837",
- "size": 751,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql_format.test_bigdate-const_date32_/formatted.sql"
+ "checksum": "11ec20d3f9102fee840afe764dc23ea8",
+ "size": 822,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-const_date32_/formatted.sql"
}
],
"test_sql_format.test[bigdate-input_date32]": [
{
- "checksum": "87aefeeea14b89547cf33edd149876c0",
- "size": 1400,
- "uri": "https://{canondata_backend}/1946324/4573e00a34144acc906bfe280b319b93a4a0e6eb/resource.tar.gz#test_sql_format.test_bigdate-input_date32_/formatted.sql"
+ "checksum": "94eeb6ef70d2a30441c1d00a96597707",
+ "size": 1476,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-input_date32_/formatted.sql"
}
],
"test_sql_format.test[bigdate-int_literals]": [
{
- "checksum": "0bfe8c368f9c4d093be89020879b9ae3",
- "size": 556,
- "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_bigdate-int_literals_/formatted.sql"
+ "checksum": "d628067a58fa95a38b4752a0352bea27",
+ "size": 645,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-int_literals_/formatted.sql"
}
],
"test_sql_format.test[bigdate-output_date32]": [
{
- "checksum": "bc52d862664f66a4a9506ee95bb28437",
- "size": 452,
- "uri": "https://{canondata_backend}/1942100/8b39817b8614465bc64c3a062eb7dc55140dc163/resource.tar.gz#test_sql_format.test_bigdate-output_date32_/formatted.sql"
+ "checksum": "ed56d56864b71dd5b9309cb0ca8e9792",
+ "size": 516,
+ "uri": "https://{canondata_backend}/937458/c3af15142702eefc3615e5d898a940130b60e95e/resource.tar.gz#test_sql_format.test_bigdate-output_date32_/formatted.sql"
}
],
"test_sql_format.test[binding-anon_table_binding]": [
@@ -32782,9 +32782,9 @@
],
"test_sql_negative.test[weak_field-weak_field_list_type-default.txt]": [
{
- "checksum": "af6041c3bc57bbfd3cdf7a976d723cbe",
- "size": 461,
- "uri": "https://{canondata_backend}/1871002/864ac674c01be9895e2e9ce7022765a6dfbeed08/resource.tar.gz#test_sql_negative.test_weak_field-weak_field_list_type-default.txt_/err_file.out"
+ "checksum": "6130b3da2d0753b09f44f0da00d041b5",
+ "size": 498,
+ "uri": "https://{canondata_backend}/1931696/93d9f24986a9421972c6f6815c259f08a25a26cc/resource.tar.gz#test_sql_negative.test_weak_field-weak_field_list_type-default.txt_/err_file.out"
}
],
"test_sql_negative.test[window-table_funcs_spec_win_func-default.txt]": [
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/bitcast_date32.sql b/ydb/library/yql/tests/sql/suites/bigdate/bitcast_date32.sql
index 6b2810c44ab..45870eac39f 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/bitcast_date32.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/bitcast_date32.sql
@@ -1,10 +1,10 @@
pragma warning("disable","4510");
select bitcast(Yql::Date32(AsAtom("1")) as Uint8)
-, bitcast(Yql::Date32(AsAtom("1")) as Int8)
-, bitcast(Yql::Date32(AsAtom("1")) as Uint16)
-, bitcast(Yql::Date32(AsAtom("1")) as Int16)
-, bitcast(Yql::Date32(AsAtom("1")) as Uint32)
-, bitcast(Yql::Date32(AsAtom("1")) as Int32)
-, bitcast(Yql::Date32(AsAtom("1")) as Uint64)
-, bitcast(Yql::Date32(AsAtom("1")) as Int64);
+, 4, bitcast(Yql::Date32(AsAtom("1")) as Int8)
+, 5, bitcast(Yql::Date32(AsAtom("1")) as Uint16)
+, 6, bitcast(Yql::Date32(AsAtom("1")) as Int16)
+, 7, bitcast(Yql::Date32(AsAtom("1")) as Uint32)
+, 8, bitcast(Yql::Date32(AsAtom("1")) as Int32)
+, 9, bitcast(Yql::Date32(AsAtom("1")) as Uint64)
+, 10, bitcast(Yql::Date32(AsAtom("1")) as Int64);
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/compare_big_big.sql b/ydb/library/yql/tests/sql/suites/bigdate/compare_big_big.sql
index 28829705750..d160bcb31a7 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/compare_big_big.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/compare_big_big.sql
@@ -1,26 +1,26 @@
pragma warning("disable","4510");
select
- Yql::Date32(AsAtom("0")) = Yql::Date32(AsAtom("1")),
- Yql::Datetime64(AsAtom("0")) = Yql::Datetime64(AsAtom("1")),
- Yql::Timestamp64(AsAtom("0")) = Yql::Timestamp64(AsAtom("1")),
- Yql::Interval64(AsAtom("0")) = Yql::Interval64(AsAtom("1")),
- Yql::Date32(AsAtom("0")) < Yql::Date32(AsAtom("1")),
- Yql::Datetime64(AsAtom("0")) < Yql::Datetime64(AsAtom("1")),
- Yql::Timestamp64(AsAtom("0")) < Yql::Timestamp64(AsAtom("1")),
- Yql::Interval64(AsAtom("0")) < Yql::Interval64(AsAtom("1")),
- Yql::Date32(AsAtom("0")) > Yql::Date32(AsAtom("1")),
- Yql::Datetime64(AsAtom("0")) > Yql::Datetime64(AsAtom("1")),
- Yql::Timestamp64(AsAtom("0")) > Yql::Timestamp64(AsAtom("1")),
- Yql::Interval64(AsAtom("0")) > Yql::Interval64(AsAtom("1")),
- Yql::Date32(AsAtom("0")) != Yql::Date32(AsAtom("1")),
- Yql::Datetime64(AsAtom("0")) != Yql::Datetime64(AsAtom("1")),
- Yql::Timestamp64(AsAtom("0")) != Yql::Timestamp64(AsAtom("1")),
- Yql::Interval64(AsAtom("0")) != Yql::Interval64(AsAtom("1")),
- Yql::Date32(AsAtom("0")) <= Yql::Date32(AsAtom("1")),
- Yql::Datetime64(AsAtom("0")) <= Yql::Datetime64(AsAtom("1")),
- Yql::Timestamp64(AsAtom("0")) <= Yql::Timestamp64(AsAtom("1")),
- Yql::Interval64(AsAtom("0")) <= Yql::Interval64(AsAtom("1")),
- Yql::Date32(AsAtom("0")) >= Yql::Date32(AsAtom("1")),
- Yql::Datetime64(AsAtom("0")) >= Yql::Datetime64(AsAtom("1")),
- Yql::Timestamp64(AsAtom("0")) >= Yql::Timestamp64(AsAtom("1")),
- Yql::Interval64(AsAtom("0")) >= Yql::Interval64(AsAtom("1")), \ No newline at end of file
+ 3, Yql::Date32(AsAtom("0")) = Yql::Date32(AsAtom("1")),
+ 4, Yql::Datetime64(AsAtom("0")) = Yql::Datetime64(AsAtom("1")),
+ 5, Yql::Timestamp64(AsAtom("0")) = Yql::Timestamp64(AsAtom("1")),
+ 6, Yql::Interval64(AsAtom("0")) = Yql::Interval64(AsAtom("1")),
+ 7, Yql::Date32(AsAtom("0")) < Yql::Date32(AsAtom("1")),
+ 8, Yql::Datetime64(AsAtom("0")) < Yql::Datetime64(AsAtom("1")),
+ 9, Yql::Timestamp64(AsAtom("0")) < Yql::Timestamp64(AsAtom("1")),
+ 10, Yql::Interval64(AsAtom("0")) < Yql::Interval64(AsAtom("1")),
+ 11, Yql::Date32(AsAtom("0")) > Yql::Date32(AsAtom("1")),
+ 12, Yql::Datetime64(AsAtom("0")) > Yql::Datetime64(AsAtom("1")),
+ 13, Yql::Timestamp64(AsAtom("0")) > Yql::Timestamp64(AsAtom("1")),
+ 14, Yql::Interval64(AsAtom("0")) > Yql::Interval64(AsAtom("1")),
+ 15, Yql::Date32(AsAtom("0")) != Yql::Date32(AsAtom("1")),
+ 16, Yql::Datetime64(AsAtom("0")) != Yql::Datetime64(AsAtom("1")),
+ 17, Yql::Timestamp64(AsAtom("0")) != Yql::Timestamp64(AsAtom("1")),
+ 18, Yql::Interval64(AsAtom("0")) != Yql::Interval64(AsAtom("1")),
+ 19, Yql::Date32(AsAtom("0")) <= Yql::Date32(AsAtom("1")),
+ 20, Yql::Datetime64(AsAtom("0")) <= Yql::Datetime64(AsAtom("1")),
+ 21, Yql::Timestamp64(AsAtom("0")) <= Yql::Timestamp64(AsAtom("1")),
+ 22, Yql::Interval64(AsAtom("0")) <= Yql::Interval64(AsAtom("1")),
+ 23, Yql::Date32(AsAtom("0")) >= Yql::Date32(AsAtom("1")),
+ 24, Yql::Datetime64(AsAtom("0")) >= Yql::Datetime64(AsAtom("1")),
+ 25, Yql::Timestamp64(AsAtom("0")) >= Yql::Timestamp64(AsAtom("1")),
+ 26, Yql::Interval64(AsAtom("0")) >= Yql::Interval64(AsAtom("1")),
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/compare_big_small.sql b/ydb/library/yql/tests/sql/suites/bigdate/compare_big_small.sql
index c0a84101cbd..6f444bdec19 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/compare_big_small.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/compare_big_small.sql
@@ -1,85 +1,85 @@
pragma warning("disable","4510");
select
- Yql::Date32(AsAtom("1")) = Yql::Date(AsAtom("1")),
- Yql::Datetime64(AsAtom("86400")) = Yql::Date(AsAtom("1")),
- Yql::Timestamp64(AsAtom("86400000000")) = Yql::Date(AsAtom("1")),
+ 3, Yql::Date32(AsAtom("1")) = Yql::Date(AsAtom("1")),
+ 4, Yql::Datetime64(AsAtom("86400")) = Yql::Date(AsAtom("1")),
+ 5, Yql::Timestamp64(AsAtom("86400000000")) = Yql::Date(AsAtom("1")),
- Yql::Date32(AsAtom("1")) = Yql::Datetime(AsAtom("86400")),
- Yql::Datetime64(AsAtom("86400")) = Yql::Datetime(AsAtom("86400")),
- Yql::Timestamp64(AsAtom("86400000000")) = Yql::Datetime(AsAtom("86400")),
+ 7, Yql::Date32(AsAtom("1")) = Yql::Datetime(AsAtom("86400")),
+ 8, Yql::Datetime64(AsAtom("86400")) = Yql::Datetime(AsAtom("86400")),
+ 9, Yql::Timestamp64(AsAtom("86400000000")) = Yql::Datetime(AsAtom("86400")),
- Yql::Date32(AsAtom("1")) = Yql::Timestamp(AsAtom("86400000000")),
- Yql::Datetime64(AsAtom("86400")) = Yql::Timestamp(AsAtom("86400000000")),
- Yql::Timestamp64(AsAtom("86400000000")) = Yql::Timestamp(AsAtom("86400000000")),
+ 11, Yql::Date32(AsAtom("1")) = Yql::Timestamp(AsAtom("86400000000")),
+ 12, Yql::Datetime64(AsAtom("86400")) = Yql::Timestamp(AsAtom("86400000000")),
+ 13, Yql::Timestamp64(AsAtom("86400000000")) = Yql::Timestamp(AsAtom("86400000000")),
- Yql::Interval64(AsAtom("1")) = Yql::Interval(AsAtom("1")),
+ 15, Yql::Interval64(AsAtom("1")) = Yql::Interval(AsAtom("1")),
- Yql::Date32(AsAtom("1")) < Yql::Date(AsAtom("1")),
- Yql::Datetime64(AsAtom("86400")) < Yql::Date(AsAtom("1")),
- Yql::Timestamp64(AsAtom("86400000000")) < Yql::Date(AsAtom("1")),
+ 17, Yql::Date32(AsAtom("1")) < Yql::Date(AsAtom("1")),
+ 18, Yql::Datetime64(AsAtom("86400")) < Yql::Date(AsAtom("1")),
+ 19, Yql::Timestamp64(AsAtom("86400000000")) < Yql::Date(AsAtom("1")),
- Yql::Date32(AsAtom("1")) < Yql::Datetime(AsAtom("86400")),
- Yql::Datetime64(AsAtom("86400")) < Yql::Datetime(AsAtom("86400")),
- Yql::Timestamp64(AsAtom("86400000000")) < Yql::Datetime(AsAtom("86400")),
+ 21, Yql::Date32(AsAtom("1")) < Yql::Datetime(AsAtom("86400")),
+ 22, Yql::Datetime64(AsAtom("86400")) < Yql::Datetime(AsAtom("86400")),
+ 23, Yql::Timestamp64(AsAtom("86400000000")) < Yql::Datetime(AsAtom("86400")),
- Yql::Date32(AsAtom("1")) < Yql::Timestamp(AsAtom("86400000000")),
- Yql::Datetime64(AsAtom("86400")) < Yql::Timestamp(AsAtom("86400000000")),
- Yql::Timestamp64(AsAtom("86400000000")) < Yql::Timestamp(AsAtom("86400000000")),
+ 25, Yql::Date32(AsAtom("1")) < Yql::Timestamp(AsAtom("86400000000")),
+ 26, Yql::Datetime64(AsAtom("86400")) < Yql::Timestamp(AsAtom("86400000000")),
+ 27, Yql::Timestamp64(AsAtom("86400000000")) < Yql::Timestamp(AsAtom("86400000000")),
- Yql::Interval64(AsAtom("1")) < Yql::Interval(AsAtom("1")),
+ 29, Yql::Interval64(AsAtom("1")) < Yql::Interval(AsAtom("1")),
- Yql::Date32(AsAtom("1")) <= Yql::Date(AsAtom("1")),
- Yql::Datetime64(AsAtom("86400")) <= Yql::Date(AsAtom("1")),
- Yql::Timestamp64(AsAtom("86400000000")) <= Yql::Date(AsAtom("1")),
+ 31, Yql::Date32(AsAtom("1")) <= Yql::Date(AsAtom("1")),
+ 32, Yql::Datetime64(AsAtom("86400")) <= Yql::Date(AsAtom("1")),
+ 33, Yql::Timestamp64(AsAtom("86400000000")) <= Yql::Date(AsAtom("1")),
- Yql::Date32(AsAtom("1")) <= Yql::Datetime(AsAtom("86400")),
- Yql::Datetime64(AsAtom("86400")) <= Yql::Datetime(AsAtom("86400")),
- Yql::Timestamp64(AsAtom("86400000000")) <= Yql::Datetime(AsAtom("86400")),
+ 35, Yql::Date32(AsAtom("1")) <= Yql::Datetime(AsAtom("86400")),
+ 36, Yql::Datetime64(AsAtom("86400")) <= Yql::Datetime(AsAtom("86400")),
+ 37, Yql::Timestamp64(AsAtom("86400000000")) <= Yql::Datetime(AsAtom("86400")),
- Yql::Date32(AsAtom("1")) <= Yql::Timestamp(AsAtom("86400000000")),
- Yql::Datetime64(AsAtom("86400")) <= Yql::Timestamp(AsAtom("86400000000")),
- Yql::Timestamp64(AsAtom("86400000000")) <= Yql::Timestamp(AsAtom("86400000000")),
+ 39, Yql::Date32(AsAtom("1")) <= Yql::Timestamp(AsAtom("86400000000")),
+ 40, Yql::Datetime64(AsAtom("86400")) <= Yql::Timestamp(AsAtom("86400000000")),
+ 41, Yql::Timestamp64(AsAtom("86400000000")) <= Yql::Timestamp(AsAtom("86400000000")),
- Yql::Interval64(AsAtom("1")) <= Yql::Interval(AsAtom("1")),
+ 43, Yql::Interval64(AsAtom("1")) <= Yql::Interval(AsAtom("1")),
- Yql::Date32(AsAtom("1")) > Yql::Date(AsAtom("1")),
- Yql::Datetime64(AsAtom("86400")) > Yql::Date(AsAtom("1")),
- Yql::Timestamp64(AsAtom("86400000000")) > Yql::Date(AsAtom("1")),
+ 45, Yql::Date32(AsAtom("1")) > Yql::Date(AsAtom("1")),
+ 46, Yql::Datetime64(AsAtom("86400")) > Yql::Date(AsAtom("1")),
+ 47, Yql::Timestamp64(AsAtom("86400000000")) > Yql::Date(AsAtom("1")),
- Yql::Date32(AsAtom("1")) > Yql::Datetime(AsAtom("86400")),
- Yql::Datetime64(AsAtom("86400")) > Yql::Datetime(AsAtom("86400")),
- Yql::Timestamp64(AsAtom("86400000000")) > Yql::Datetime(AsAtom("86400")),
+ 49, Yql::Date32(AsAtom("1")) > Yql::Datetime(AsAtom("86400")),
+ 50, Yql::Datetime64(AsAtom("86400")) > Yql::Datetime(AsAtom("86400")),
+ 51, Yql::Timestamp64(AsAtom("86400000000")) > Yql::Datetime(AsAtom("86400")),
- Yql::Date32(AsAtom("1")) > Yql::Timestamp(AsAtom("86400000000")),
- Yql::Datetime64(AsAtom("86400")) > Yql::Timestamp(AsAtom("86400000000")),
- Yql::Timestamp64(AsAtom("86400000000")) > Yql::Timestamp(AsAtom("86400000000")),
+ 53, Yql::Date32(AsAtom("1")) > Yql::Timestamp(AsAtom("86400000000")),
+ 54, Yql::Datetime64(AsAtom("86400")) > Yql::Timestamp(AsAtom("86400000000")),
+ 55, Yql::Timestamp64(AsAtom("86400000000")) > Yql::Timestamp(AsAtom("86400000000")),
- Yql::Interval64(AsAtom("1")) > Yql::Interval(AsAtom("1")),
+ 57, Yql::Interval64(AsAtom("1")) > Yql::Interval(AsAtom("1")),
- Yql::Date32(AsAtom("1")) >= Yql::Date(AsAtom("1")),
- Yql::Datetime64(AsAtom("86400")) >= Yql::Date(AsAtom("1")),
- Yql::Timestamp64(AsAtom("86400000000")) >= Yql::Date(AsAtom("1")),
+ 59, Yql::Date32(AsAtom("1")) >= Yql::Date(AsAtom("1")),
+ 60, Yql::Datetime64(AsAtom("86400")) >= Yql::Date(AsAtom("1")),
+ 61, Yql::Timestamp64(AsAtom("86400000000")) >= Yql::Date(AsAtom("1")),
- Yql::Date32(AsAtom("1")) >= Yql::Datetime(AsAtom("86400")),
- Yql::Datetime64(AsAtom("86400")) >= Yql::Datetime(AsAtom("86400")),
- Yql::Timestamp64(AsAtom("86400000000")) >= Yql::Datetime(AsAtom("86400")),
+ 63, Yql::Date32(AsAtom("1")) >= Yql::Datetime(AsAtom("86400")),
+ 64, Yql::Datetime64(AsAtom("86400")) >= Yql::Datetime(AsAtom("86400")),
+ 65, Yql::Timestamp64(AsAtom("86400000000")) >= Yql::Datetime(AsAtom("86400")),
- Yql::Date32(AsAtom("1")) >= Yql::Timestamp(AsAtom("86400000000")),
- Yql::Datetime64(AsAtom("86400")) >= Yql::Timestamp(AsAtom("86400000000")),
- Yql::Timestamp64(AsAtom("86400000000")) >= Yql::Timestamp(AsAtom("86400000000")),
+ 67, Yql::Date32(AsAtom("1")) >= Yql::Timestamp(AsAtom("86400000000")),
+ 68, Yql::Datetime64(AsAtom("86400")) >= Yql::Timestamp(AsAtom("86400000000")),
+ 69, Yql::Timestamp64(AsAtom("86400000000")) >= Yql::Timestamp(AsAtom("86400000000")),
- Yql::Interval64(AsAtom("1")) >= Yql::Interval(AsAtom("1")),
+ 71, Yql::Interval64(AsAtom("1")) >= Yql::Interval(AsAtom("1")),
- Yql::Date32(AsAtom("1")) != Yql::Date(AsAtom("1")),
- Yql::Datetime64(AsAtom("86400")) != Yql::Date(AsAtom("1")),
- Yql::Timestamp64(AsAtom("86400000000")) != Yql::Date(AsAtom("1")),
+ 73, Yql::Date32(AsAtom("1")) != Yql::Date(AsAtom("1")),
+ 74, Yql::Datetime64(AsAtom("86400")) != Yql::Date(AsAtom("1")),
+ 75, Yql::Timestamp64(AsAtom("86400000000")) != Yql::Date(AsAtom("1")),
- Yql::Date32(AsAtom("1")) != Yql::Datetime(AsAtom("86400")),
- Yql::Datetime64(AsAtom("86400")) != Yql::Datetime(AsAtom("86400")),
- Yql::Timestamp64(AsAtom("86400000000")) != Yql::Datetime(AsAtom("86400")),
+ 77, Yql::Date32(AsAtom("1")) != Yql::Datetime(AsAtom("86400")),
+ 78, Yql::Datetime64(AsAtom("86400")) != Yql::Datetime(AsAtom("86400")),
+ 79, Yql::Timestamp64(AsAtom("86400000000")) != Yql::Datetime(AsAtom("86400")),
- Yql::Date32(AsAtom("1")) != Yql::Timestamp(AsAtom("86400000000")),
- Yql::Datetime64(AsAtom("86400")) != Yql::Timestamp(AsAtom("86400000000")),
- Yql::Timestamp64(AsAtom("86400000000")) != Yql::Timestamp(AsAtom("86400000000")),
+ 81, Yql::Date32(AsAtom("1")) != Yql::Timestamp(AsAtom("86400000000")),
+ 82, Yql::Datetime64(AsAtom("86400")) != Yql::Timestamp(AsAtom("86400000000")),
+ 83, Yql::Timestamp64(AsAtom("86400000000")) != Yql::Timestamp(AsAtom("86400000000")),
- Yql::Interval64(AsAtom("1")) != Yql::Interval(AsAtom("1"));
+ 85, Yql::Interval64(AsAtom("1")) != Yql::Interval(AsAtom("1"));
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/compare_small_big.sql b/ydb/library/yql/tests/sql/suites/bigdate/compare_small_big.sql
index f58ecb63f1f..3e4834aba2d 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/compare_small_big.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/compare_small_big.sql
@@ -1,85 +1,85 @@
pragma warning("disable","4510");
select
- Yql::Date(AsAtom("1")) = Yql::Date32(AsAtom("1")),
- Yql::Date(AsAtom("1")) = Yql::Datetime64(AsAtom("86400")),
- Yql::Date(AsAtom("1")) = Yql::Timestamp64(AsAtom("86400000000")),
+ 3, Yql::Date(AsAtom("1")) = Yql::Date32(AsAtom("1")),
+ 4, Yql::Date(AsAtom("1")) = Yql::Datetime64(AsAtom("86400")),
+ 5, Yql::Date(AsAtom("1")) = Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Datetime(AsAtom("86400")) = Yql::Date32(AsAtom("1")),
- Yql::Datetime(AsAtom("86400")) = Yql::Datetime64(AsAtom("86400")),
- Yql::Datetime(AsAtom("86400")) = Yql::Timestamp64(AsAtom("86400000000")),
+ 7, Yql::Datetime(AsAtom("86400")) = Yql::Date32(AsAtom("1")),
+ 8, Yql::Datetime(AsAtom("86400")) = Yql::Datetime64(AsAtom("86400")),
+ 9, Yql::Datetime(AsAtom("86400")) = Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Timestamp(AsAtom("86400000000")) = Yql::Date32(AsAtom("1")),
- Yql::Timestamp(AsAtom("86400000000")) = Yql::Datetime64(AsAtom("86400")),
- Yql::Timestamp(AsAtom("86400000000")) = Yql::Timestamp64(AsAtom("86400000000")),
+ 11, Yql::Timestamp(AsAtom("86400000000")) = Yql::Date32(AsAtom("1")),
+ 12, Yql::Timestamp(AsAtom("86400000000")) = Yql::Datetime64(AsAtom("86400")),
+ 13, Yql::Timestamp(AsAtom("86400000000")) = Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Interval(AsAtom("1")) = Yql::Interval64(AsAtom("1")),
+ 15, Yql::Interval(AsAtom("1")) = Yql::Interval64(AsAtom("1")),
- Yql::Date(AsAtom("1")) < Yql::Date32(AsAtom("1")),
- Yql::Date(AsAtom("1")) < Yql::Datetime64(AsAtom("86400")),
- Yql::Date(AsAtom("1")) < Yql::Timestamp64(AsAtom("86400000000")),
+ 17, Yql::Date(AsAtom("1")) < Yql::Date32(AsAtom("1")),
+ 18, Yql::Date(AsAtom("1")) < Yql::Datetime64(AsAtom("86400")),
+ 19, Yql::Date(AsAtom("1")) < Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Datetime(AsAtom("86400")) < Yql::Date32(AsAtom("1")),
- Yql::Datetime(AsAtom("86400")) < Yql::Datetime64(AsAtom("86400")),
- Yql::Datetime(AsAtom("86400")) < Yql::Timestamp64(AsAtom("86400000000")),
+ 21, Yql::Datetime(AsAtom("86400")) < Yql::Date32(AsAtom("1")),
+ 22, Yql::Datetime(AsAtom("86400")) < Yql::Datetime64(AsAtom("86400")),
+ 23, Yql::Datetime(AsAtom("86400")) < Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Timestamp(AsAtom("86400000000")) < Yql::Date32(AsAtom("1")),
- Yql::Timestamp(AsAtom("86400000000")) < Yql::Datetime64(AsAtom("86400")),
- Yql::Timestamp(AsAtom("86400000000")) < Yql::Timestamp64(AsAtom("86400000000")),
+ 25, Yql::Timestamp(AsAtom("86400000000")) < Yql::Date32(AsAtom("1")),
+ 26, Yql::Timestamp(AsAtom("86400000000")) < Yql::Datetime64(AsAtom("86400")),
+ 27, Yql::Timestamp(AsAtom("86400000000")) < Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Interval(AsAtom("1")) < Yql::Interval64(AsAtom("1")),
+ 29, Yql::Interval(AsAtom("1")) < Yql::Interval64(AsAtom("1")),
- Yql::Date(AsAtom("1")) <= Yql::Date32(AsAtom("1")),
- Yql::Date(AsAtom("1")) <= Yql::Datetime64(AsAtom("86400")),
- Yql::Date(AsAtom("1")) <= Yql::Timestamp64(AsAtom("86400000000")),
+ 31, Yql::Date(AsAtom("1")) <= Yql::Date32(AsAtom("1")),
+ 32, Yql::Date(AsAtom("1")) <= Yql::Datetime64(AsAtom("86400")),
+ 33, Yql::Date(AsAtom("1")) <= Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Datetime(AsAtom("86400")) <= Yql::Date32(AsAtom("1")),
- Yql::Datetime(AsAtom("86400")) <= Yql::Datetime64(AsAtom("86400")),
- Yql::Datetime(AsAtom("86400")) <= Yql::Timestamp64(AsAtom("86400000000")),
+ 35, Yql::Datetime(AsAtom("86400")) <= Yql::Date32(AsAtom("1")),
+ 36, Yql::Datetime(AsAtom("86400")) <= Yql::Datetime64(AsAtom("86400")),
+ 37, Yql::Datetime(AsAtom("86400")) <= Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Timestamp(AsAtom("86400000000")) <= Yql::Date32(AsAtom("1")),
- Yql::Timestamp(AsAtom("86400000000")) <= Yql::Datetime64(AsAtom("86400")),
- Yql::Timestamp(AsAtom("86400000000")) <= Yql::Timestamp64(AsAtom("86400000000")),
+ 39, Yql::Timestamp(AsAtom("86400000000")) <= Yql::Date32(AsAtom("1")),
+ 40, Yql::Timestamp(AsAtom("86400000000")) <= Yql::Datetime64(AsAtom("86400")),
+ 41, Yql::Timestamp(AsAtom("86400000000")) <= Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Interval(AsAtom("1")) <= Yql::Interval64(AsAtom("1")),
+ 43, Yql::Interval(AsAtom("1")) <= Yql::Interval64(AsAtom("1")),
- Yql::Date(AsAtom("1")) > Yql::Date32(AsAtom("1")),
- Yql::Date(AsAtom("1")) > Yql::Datetime64(AsAtom("86400")),
- Yql::Date(AsAtom("1")) > Yql::Timestamp64(AsAtom("86400000000")),
+ 45, Yql::Date(AsAtom("1")) > Yql::Date32(AsAtom("1")),
+ 46, Yql::Date(AsAtom("1")) > Yql::Datetime64(AsAtom("86400")),
+ 47, Yql::Date(AsAtom("1")) > Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Datetime(AsAtom("86400")) > Yql::Date32(AsAtom("1")),
- Yql::Datetime(AsAtom("86400")) > Yql::Datetime64(AsAtom("86400")),
- Yql::Datetime(AsAtom("86400")) > Yql::Timestamp64(AsAtom("86400000000")),
+ 49, Yql::Datetime(AsAtom("86400")) > Yql::Date32(AsAtom("1")),
+ 50, Yql::Datetime(AsAtom("86400")) > Yql::Datetime64(AsAtom("86400")),
+ 51, Yql::Datetime(AsAtom("86400")) > Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Timestamp(AsAtom("86400000000")) > Yql::Date32(AsAtom("1")),
- Yql::Timestamp(AsAtom("86400000000")) > Yql::Datetime64(AsAtom("86400")),
- Yql::Timestamp(AsAtom("86400000000")) > Yql::Timestamp64(AsAtom("86400000000")),
+ 53, Yql::Timestamp(AsAtom("86400000000")) > Yql::Date32(AsAtom("1")),
+ 54, Yql::Timestamp(AsAtom("86400000000")) > Yql::Datetime64(AsAtom("86400")),
+ 55, Yql::Timestamp(AsAtom("86400000000")) > Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Interval(AsAtom("1")) > Yql::Interval64(AsAtom("1")),
+ 57, Yql::Interval(AsAtom("1")) > Yql::Interval64(AsAtom("1")),
- Yql::Date(AsAtom("1")) >= Yql::Date32(AsAtom("1")),
- Yql::Date(AsAtom("1")) >= Yql::Datetime64(AsAtom("86400")),
- Yql::Date(AsAtom("1")) >= Yql::Timestamp64(AsAtom("86400000000")),
+ 59, Yql::Date(AsAtom("1")) >= Yql::Date32(AsAtom("1")),
+ 60, Yql::Date(AsAtom("1")) >= Yql::Datetime64(AsAtom("86400")),
+ 61, Yql::Date(AsAtom("1")) >= Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Datetime(AsAtom("86400")) >= Yql::Date32(AsAtom("1")),
- Yql::Datetime(AsAtom("86400")) >= Yql::Datetime64(AsAtom("86400")),
- Yql::Datetime(AsAtom("86400")) >= Yql::Timestamp64(AsAtom("86400000000")),
+ 63, Yql::Datetime(AsAtom("86400")) >= Yql::Date32(AsAtom("1")),
+ 64, Yql::Datetime(AsAtom("86400")) >= Yql::Datetime64(AsAtom("86400")),
+ 65, Yql::Datetime(AsAtom("86400")) >= Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Timestamp(AsAtom("86400000000")) >= Yql::Date32(AsAtom("1")),
- Yql::Timestamp(AsAtom("86400000000")) >= Yql::Datetime64(AsAtom("86400")),
- Yql::Timestamp(AsAtom("86400000000")) >= Yql::Timestamp64(AsAtom("86400000000")),
+ 67, Yql::Timestamp(AsAtom("86400000000")) >= Yql::Date32(AsAtom("1")),
+ 68, Yql::Timestamp(AsAtom("86400000000")) >= Yql::Datetime64(AsAtom("86400")),
+ 69, Yql::Timestamp(AsAtom("86400000000")) >= Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Interval(AsAtom("1")) >= Yql::Interval64(AsAtom("1")),
+ 71, Yql::Interval(AsAtom("1")) >= Yql::Interval64(AsAtom("1")),
- Yql::Date(AsAtom("1")) != Yql::Date32(AsAtom("1")),
- Yql::Date(AsAtom("1")) != Yql::Datetime64(AsAtom("86400")),
- Yql::Date(AsAtom("1")) != Yql::Timestamp64(AsAtom("86400000000")),
+ 73, Yql::Date(AsAtom("1")) != Yql::Date32(AsAtom("1")),
+ 74, Yql::Date(AsAtom("1")) != Yql::Datetime64(AsAtom("86400")),
+ 75, Yql::Date(AsAtom("1")) != Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Datetime(AsAtom("86400")) != Yql::Date32(AsAtom("1")),
- Yql::Datetime(AsAtom("86400")) != Yql::Datetime64(AsAtom("86400")),
- Yql::Datetime(AsAtom("86400")) != Yql::Timestamp64(AsAtom("86400000000")),
+ 77, Yql::Datetime(AsAtom("86400")) != Yql::Date32(AsAtom("1")),
+ 78, Yql::Datetime(AsAtom("86400")) != Yql::Datetime64(AsAtom("86400")),
+ 79, Yql::Datetime(AsAtom("86400")) != Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Timestamp(AsAtom("86400000000")) != Yql::Date32(AsAtom("1")),
- Yql::Timestamp(AsAtom("86400000000")) != Yql::Datetime64(AsAtom("86400")),
- Yql::Timestamp(AsAtom("86400000000")) != Yql::Timestamp64(AsAtom("86400000000")),
+ 81, Yql::Timestamp(AsAtom("86400000000")) != Yql::Date32(AsAtom("1")),
+ 82, Yql::Timestamp(AsAtom("86400000000")) != Yql::Datetime64(AsAtom("86400")),
+ 83, Yql::Timestamp(AsAtom("86400000000")) != Yql::Timestamp64(AsAtom("86400000000")),
- Yql::Interval(AsAtom("1")) != Yql::Interval64(AsAtom("1"));
+ 85, Yql::Interval(AsAtom("1")) != Yql::Interval64(AsAtom("1"));
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/const_date32.sql b/ydb/library/yql/tests/sql/suites/bigdate/const_date32.sql
index 7f920d92d03..8e31b971811 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/const_date32.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/const_date32.sql
@@ -1,10 +1,10 @@
-select date32("-144169-01-01"), cast(date32("-144169-01-01") as string);
-select date32("-1-1-1"), cast(date32("-1-1-1") as string);
-select date32("1-1-1"), cast(date32("1-1-1") as string);
-select date32("1969-12-31"), cast(date32("1969-12-31") as string);
-select date32("1970-01-01"), cast(date32("1970-01-01") as string);
-select date32("2000-04-05"), cast(date32("2000-04-05") as string);
-select date32("2100-03-01"), cast(date32("2100-03-01") as string);
-select date32("2105-12-31"), cast(date32("2105-12-31") as string);
-select date32("2106-01-01"), cast(date32("2106-01-01") as string);
-select date32("148107-12-31"), cast(date32("148107-12-31") as string);
+select 1, date32("-144169-01-01"), cast(date32("-144169-01-01") as string);
+select 2, date32("-1-1-1"), cast(date32("-1-1-1") as string);
+select 3, date32("1-1-1"), cast(date32("1-1-1") as string);
+select 4, date32("1969-12-31"), cast(date32("1969-12-31") as string);
+select 5, date32("1970-01-01"), cast(date32("1970-01-01") as string);
+select 6, date32("2000-04-05"), cast(date32("2000-04-05") as string);
+select 7, date32("2100-03-01"), cast(date32("2100-03-01") as string);
+select 8, date32("2105-12-31"), cast(date32("2105-12-31") as string);
+select 9, date32("2106-01-01"), cast(date32("2106-01-01") as string);
+select 10, date32("148107-12-31"), cast(date32("148107-12-31") as string);
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/default.cfg b/ydb/library/yql/tests/sql/suites/bigdate/default.cfg
index e69de29bb2d..bb349dd8abd 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/default.cfg
+++ b/ydb/library/yql/tests/sql/suites/bigdate/default.cfg
@@ -0,0 +1 @@
+providers yt
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/input_date32.sql b/ydb/library/yql/tests/sql/suites/bigdate/input_date32.sql
index e18dc1bd018..44e7f22b243 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/input_date32.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/input_date32.sql
@@ -1,16 +1,15 @@
-/* hybridfile can not YQL-17763 */
-select cast("-144170-12-31" as date32), cast(cast("-144170-12-31" as date32) as string);
-select cast("-144169-01-01" as date32), cast(cast("-144169-01-01" as date32) as string);
-select cast("-1-1-1" as date32), cast(cast("-1-1-1" as date32) as string);
-select cast("0-1-1" as date32), cast(cast("0-1-1" as date32) as string);
-select cast("1-1-1" as date32), cast(cast("1-1-1" as date32) as string);
-select cast("1-02-29" as date32), cast(cast("1-02-29" as date32) as string);
-select cast("1969-12-31" as date32), cast(cast("1969-12-31" as date32) as string);
-select cast("1970-01-01" as date32), cast(cast("1970-01-01" as date32) as string);
-select cast("2000-04-05" as date32), cast(cast("2000-04-05" as date32) as string);
-select cast("2100-02-29" as date32), cast(cast("2100-02-29" as date32) as string);
-select cast("2100-03-01" as date32), cast(cast("2100-03-01" as date32) as string);
-select cast("2105-12-31" as date32), cast(cast("2105-12-31" as date32) as string);
-select cast("2106-01-01" as date32), cast(cast("2106-01-01" as date32) as string);
-select cast("148107-12-31" as date32), cast(cast("148107-12-31" as date32) as string);
-select cast("148108-01-01" as date32), cast(cast("148108-01-01" as date32) as string);
+select 1, cast("-144170-12-31" as date32), cast(cast("-144170-12-31" as date32) as string);
+select 2, cast("-144169-01-01" as date32), cast(cast("-144169-01-01" as date32) as string);
+select 3, cast("-1-1-1" as date32), cast(cast("-1-1-1" as date32) as string);
+select 4, cast("0-1-1" as date32), cast(cast("0-1-1" as date32) as string);
+select 5, cast("1-1-1" as date32), cast(cast("1-1-1" as date32) as string);
+select 6, cast("1-02-29" as date32), cast(cast("1-02-29" as date32) as string);
+select 7, cast("1969-12-31" as date32), cast(cast("1969-12-31" as date32) as string);
+select 8, cast("1970-01-01" as date32), cast(cast("1970-01-01" as date32) as string);
+select 9, cast("2000-04-05" as date32), cast(cast("2000-04-05" as date32) as string);
+select 10, cast("2100-02-29" as date32), cast(cast("2100-02-29" as date32) as string);
+select 11, cast("2100-03-01" as date32), cast(cast("2100-03-01" as date32) as string);
+select 12, cast("2105-12-31" as date32), cast(cast("2105-12-31" as date32) as string);
+select 13, cast("2106-01-01" as date32), cast(cast("2106-01-01" as date32) as string);
+select 14, cast("148107-12-31" as date32), cast(cast("148107-12-31" as date32) as string);
+select 15, cast("148108-01-01" as date32), cast(cast("148108-01-01" as date32) as string);
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/int_literals.sql b/ydb/library/yql/tests/sql/suites/bigdate/int_literals.sql
index cd897479873..9b3c2edfc3c 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/int_literals.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/int_literals.sql
@@ -1,14 +1,14 @@
pragma warning("disable","4510");
select
- Yql::Date32(AsAtom("0")),
- Yql::Datetime64(AsAtom("0")),
- Yql::Timestamp64(AsAtom("0")),
- Yql::Interval64(AsAtom("0")),
- Yql::Date32(AsAtom("-53375809")),
- Yql::Date32(AsAtom("53375807")),
- Yql::Datetime64(AsAtom("-4611669897600")),
- Yql::Datetime64(AsAtom("4611669811199")),
- Yql::Timestamp64(AsAtom("-4611669897600000000")),
- Yql::Timestamp64(AsAtom("4611669811199999999")),
- Yql::Interval64(AsAtom("-9223339708799999999")),
- Yql::Interval64(AsAtom("9223339708799999999"));
+ 3, Yql::Date32(AsAtom("0")),
+ 4, Yql::Datetime64(AsAtom("0")),
+ 5, Yql::Timestamp64(AsAtom("0")),
+ 6, Yql::Interval64(AsAtom("0")),
+ 7, Yql::Date32(AsAtom("-53375809")),
+ 8, Yql::Date32(AsAtom("53375807")),
+ 9, Yql::Datetime64(AsAtom("-4611669897600")),
+ 10, Yql::Datetime64(AsAtom("4611669811199")),
+ 11, Yql::Timestamp64(AsAtom("-4611669897600000000")),
+ 12, Yql::Timestamp64(AsAtom("4611669811199999999")),
+ 13, Yql::Interval64(AsAtom("-9223339708799999999")),
+ 14, Yql::Interval64(AsAtom("9223339708799999999"));
diff --git a/ydb/library/yql/tests/sql/suites/bigdate/output_date32.sql b/ydb/library/yql/tests/sql/suites/bigdate/output_date32.sql
index 702df14e6e7..2de16e8bb16 100644
--- a/ydb/library/yql/tests/sql/suites/bigdate/output_date32.sql
+++ b/ydb/library/yql/tests/sql/suites/bigdate/output_date32.sql
@@ -1,10 +1,10 @@
select cast(cast(-53375810 as date32) as string)
-, cast(cast(-53375809 as date32) as string)
-, cast(cast(-1 as date32) as string)
-, cast(cast(0 as date32) as string)
-, cast(cast(1 as date32) as string)
-, cast(cast(18000u as date32) as string)
-, cast(cast(49673u - 1u as date32) as string)
-, cast(cast(49673u as date32) as string)
-, cast(cast(53375807ul as date32) as string)
-, cast(cast(53375808ul as date32) as string); \ No newline at end of file
+, 2, cast(cast(-53375809 as date32) as string)
+, 3, cast(cast(-1 as date32) as string)
+, 4, cast(cast(0 as date32) as string)
+, 5, cast(cast(1 as date32) as string)
+, 6, cast(cast(18000u as date32) as string)
+, 7, cast(cast(49673u - 1u as date32) as string)
+, 8, cast(cast(49673u as date32) as string)
+, 9, cast(cast(53375807ul as date32) as string)
+, 10, cast(cast(53375808ul as date32) as string);
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
index 8e2215468e4..2dbff9266f1 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json
@@ -473,9 +473,9 @@
],
"test.test[bigdate-const_date32-default.txt-Debug]": [
{
- "checksum": "dabd4d5e3a105f4417a3a557383a5820",
- "size": 1674,
- "uri": "https://{canondata_backend}/1817427/e1fdfee05105880c7ae55cc98212a4ded0458bae/resource.tar.gz#test.test_bigdate-const_date32-default.txt-Debug_/opt.yql"
+ "checksum": "6cfb2cbcc1a30e78061a24fcad2089e5",
+ "size": 1970,
+ "uri": "https://{canondata_backend}/937458/890192732530b07df949d3be30d1372892ccb44b/resource.tar.gz#test.test_bigdate-const_date32-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-const_date32-default.txt-Plan]": [
@@ -487,9 +487,9 @@
],
"test.test[bigdate-const_date32-default.txt-Results]": [
{
- "checksum": "d1bf668ad8ae01c6b1ec52017293143e",
- "size": 9716,
- "uri": "https://{canondata_backend}/1817427/e1fdfee05105880c7ae55cc98212a4ded0458bae/resource.tar.gz#test.test_bigdate-const_date32-default.txt-Results_/results.txt"
+ "checksum": "a9a7f45c337ac4e0dd0df18509806b5a",
+ "size": 12647,
+ "uri": "https://{canondata_backend}/937458/890192732530b07df949d3be30d1372892ccb44b/resource.tar.gz#test.test_bigdate-const_date32-default.txt-Results_/results.txt"
}
],
"test.test[binding-bind_cast-default.txt-Debug]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json
index 42e253c0590..31de3914606 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part12/canondata/result.json
@@ -284,9 +284,9 @@
],
"test.test[bigdate-bitcast_date32-default.txt-Debug]": [
{
- "checksum": "3caa80bd32de5994e8881c96f493b129",
- "size": 732,
- "uri": "https://{canondata_backend}/1936947/69045d48565e9ccf7af4df75e0a5aa34ac5031d6/resource.tar.gz#test.test_bigdate-bitcast_date32-default.txt-Debug_/opt.yql"
+ "checksum": "6aed28c598993d0598116170a7d5bec5",
+ "size": 1009,
+ "uri": "https://{canondata_backend}/1937027/42b3d6dabf1d9a15bf7c94a34dc705e8f9211c96/resource.tar.gz#test.test_bigdate-bitcast_date32-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-bitcast_date32-default.txt-Plan]": [
@@ -298,9 +298,9 @@
],
"test.test[bigdate-bitcast_date32-default.txt-Results]": [
{
- "checksum": "471a1b91231b29b03425beeebb0538f3",
- "size": 2718,
- "uri": "https://{canondata_backend}/1936947/69045d48565e9ccf7af4df75e0a5aa34ac5031d6/resource.tar.gz#test.test_bigdate-bitcast_date32-default.txt-Results_/results.txt"
+ "checksum": "243ef3c6fa78038f7ef6d8b33e8f22a4",
+ "size": 4775,
+ "uri": "https://{canondata_backend}/1937027/42b3d6dabf1d9a15bf7c94a34dc705e8f9211c96/resource.tar.gz#test.test_bigdate-bitcast_date32-default.txt-Results_/results.txt"
}
],
"test.test[blocks-add_int16--Debug]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json
index 583bdf4e37b..6021d2b2a77 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part13/canondata/result.json
@@ -334,9 +334,9 @@
],
"test.test[bigdate-compare_small_big-default.txt-Debug]": [
{
- "checksum": "9027dc3ae0e3035df3d789d1067df794",
- "size": 2742,
- "uri": "https://{canondata_backend}/212715/e1bc1d6e31fa656365a738e65224a7c3f774bae6/resource.tar.gz#test.test_bigdate-compare_small_big-default.txt-Debug_/opt.yql"
+ "checksum": "ce406f51e5a6ab7e76df41ca7de3ea6a",
+ "size": 5236,
+ "uri": "https://{canondata_backend}/1784826/b64942934ae1a7d5ef0bd5c66f97a3833f524da8/resource.tar.gz#test.test_bigdate-compare_small_big-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-compare_small_big-default.txt-Plan]": [
@@ -348,9 +348,9 @@
],
"test.test[bigdate-compare_small_big-default.txt-Results]": [
{
- "checksum": "3708cce27cea5d168a78404918edee0f",
- "size": 18092,
- "uri": "https://{canondata_backend}/212715/e1bc1d6e31fa656365a738e65224a7c3f774bae6/resource.tar.gz#test.test_bigdate-compare_small_big-default.txt-Results_/results.txt"
+ "checksum": "327b2920952394290249aba4ac8ffa41",
+ "size": 35806,
+ "uri": "https://{canondata_backend}/1784826/b64942934ae1a7d5ef0bd5c66f97a3833f524da8/resource.tar.gz#test.test_bigdate-compare_small_big-default.txt-Results_/results.txt"
}
],
"test.test[binding-table_regexp_binding--Debug]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json
index 0032dd1c263..def03760f2d 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part16/canondata/result.json
@@ -351,9 +351,9 @@
],
"test.test[bigdate-compare_big_big-default.txt-Debug]": [
{
- "checksum": "53e6f56ed287e40279bc4fc2226c3370",
- "size": 1366,
- "uri": "https://{canondata_backend}/1924537/d66bfe69aa802f6a81aadbac897621b721f31b4b/resource.tar.gz#test.test_bigdate-compare_big_big-default.txt-Debug_/opt.yql"
+ "checksum": "76c72a815735285cd2d3fa3229abe115",
+ "size": 2343,
+ "uri": "https://{canondata_backend}/1936842/d87303bf0d7858eeaaf35950ca75728bda3c2388/resource.tar.gz#test.test_bigdate-compare_big_big-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-compare_big_big-default.txt-Plan]": [
@@ -365,9 +365,9 @@
],
"test.test[bigdate-compare_big_big-default.txt-Results]": [
{
- "checksum": "1f573e57510d52db5c1f8f7b2e106944",
- "size": 7454,
- "uri": "https://{canondata_backend}/1924537/d66bfe69aa802f6a81aadbac897621b721f31b4b/resource.tar.gz#test.test_bigdate-compare_big_big-default.txt-Results_/results.txt"
+ "checksum": "e537cc7edbb9a94c3b2a0fb13d4f2d4a",
+ "size": 14527,
+ "uri": "https://{canondata_backend}/1936842/d87303bf0d7858eeaaf35950ca75728bda3c2388/resource.tar.gz#test.test_bigdate-compare_big_big-default.txt-Results_/results.txt"
}
],
"test.test[blocks-combine_all_pg--Debug]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json
index 811dba6050f..43c5ea62fac 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part6/canondata/result.json
@@ -340,9 +340,9 @@
],
"test.test[bigdate-input_date32-default.txt-Debug]": [
{
- "checksum": "8e07467c0bdb81d7be3aad7624459808",
- "size": 2778,
- "uri": "https://{canondata_backend}/1775059/97f4df37c96c03d696d11405856b5a626322c84c/resource.tar.gz#test.test_bigdate-input_date32-default.txt-Debug_/opt.yql"
+ "checksum": "a4c35e7dd5514c254d9b6dbc16f153f7",
+ "size": 3215,
+ "uri": "https://{canondata_backend}/1937027/f0e3c90ccd553f2ac4bcaa86f06edc7fad895b99/resource.tar.gz#test.test_bigdate-input_date32-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-input_date32-default.txt-Plan]": [
@@ -354,16 +354,16 @@
],
"test.test[bigdate-input_date32-default.txt-Results]": [
{
- "checksum": "d304bb86e6465aac7c9bbbd559492cdc",
- "size": 19686,
- "uri": "https://{canondata_backend}/1775059/97f4df37c96c03d696d11405856b5a626322c84c/resource.tar.gz#test.test_bigdate-input_date32-default.txt-Results_/results.txt"
+ "checksum": "12f71c23bf964c65c494fd3c07bd2447",
+ "size": 24087,
+ "uri": "https://{canondata_backend}/1937027/f0e3c90ccd553f2ac4bcaa86f06edc7fad895b99/resource.tar.gz#test.test_bigdate-input_date32-default.txt-Results_/results.txt"
}
],
"test.test[bigdate-output_date32-default.txt-Debug]": [
{
- "checksum": "06be4d0a29468fa65dcf82024dcf4153",
- "size": 990,
- "uri": "https://{canondata_backend}/1775059/97f4df37c96c03d696d11405856b5a626322c84c/resource.tar.gz#test.test_bigdate-output_date32-default.txt-Debug_/opt.yql"
+ "checksum": "afeed4fe521307261e7cdcdedcc9090d",
+ "size": 1351,
+ "uri": "https://{canondata_backend}/1937027/f0e3c90ccd553f2ac4bcaa86f06edc7fad895b99/resource.tar.gz#test.test_bigdate-output_date32-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-output_date32-default.txt-Plan]": [
@@ -375,9 +375,9 @@
],
"test.test[bigdate-output_date32-default.txt-Results]": [
{
- "checksum": "afc38b6fd6fc53390ae4fbaba4d61a66",
- "size": 5193,
- "uri": "https://{canondata_backend}/1775059/97f4df37c96c03d696d11405856b5a626322c84c/resource.tar.gz#test.test_bigdate-output_date32-default.txt-Results_/results.txt"
+ "checksum": "89ebd96d7fd6e35febe737480a896956",
+ "size": 7840,
+ "uri": "https://{canondata_backend}/1937027/f0e3c90ccd553f2ac4bcaa86f06edc7fad895b99/resource.tar.gz#test.test_bigdate-output_date32-default.txt-Results_/results.txt"
}
],
"test.test[binding-table_regexp_strict_binding--Debug]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
index dd57ae3b036..4f58bad4b80 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part8/canondata/result.json
@@ -476,9 +476,9 @@
],
"test.test[bigdate-int_literals-default.txt-Debug]": [
{
- "checksum": "36cf598536ae19369a2a2c1a86e06f94",
- "size": 884,
- "uri": "https://{canondata_backend}/1937429/1914925fa1d1066153ccfe3f1aa344e59bcf5ad5/resource.tar.gz#test.test_bigdate-int_literals-default.txt-Debug_/opt.yql"
+ "checksum": "ec63d4a11d89989598be01edcb9024f5",
+ "size": 1369,
+ "uri": "https://{canondata_backend}/1931696/563fcc5de719d96eea42745004ff2b0455138d5e/resource.tar.gz#test.test_bigdate-int_literals-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-int_literals-default.txt-Plan]": [
@@ -490,9 +490,9 @@
],
"test.test[bigdate-int_literals-default.txt-Results]": [
{
- "checksum": "be4f0790238e02cd162cf0bb3b0d10be",
- "size": 4055,
- "uri": "https://{canondata_backend}/1937429/1914925fa1d1066153ccfe3f1aa344e59bcf5ad5/resource.tar.gz#test.test_bigdate-int_literals-default.txt-Results_/results.txt"
+ "checksum": "1c3b4abf9c4763447a429e79b67c20fa",
+ "size": 7588,
+ "uri": "https://{canondata_backend}/1931696/563fcc5de719d96eea42745004ff2b0455138d5e/resource.tar.gz#test.test_bigdate-int_literals-default.txt-Results_/results.txt"
}
],
"test.test[binding-insert_binding--Debug]": [
diff --git a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
index 82beb721bad..175d50b6834 100644
--- a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
+++ b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json
@@ -337,9 +337,9 @@
],
"test.test[bigdate-compare_big_small-default.txt-Debug]": [
{
- "checksum": "b2f9d7a9ee15249c25b2caf612a7f666",
- "size": 2742,
- "uri": "https://{canondata_backend}/1031349/a3d33de3e5d4ab8002d2eb0ccf81b6bb13aa6457/resource.tar.gz#test.test_bigdate-compare_big_small-default.txt-Debug_/opt.yql"
+ "checksum": "b38f2832b17445b92504b9b342d3011e",
+ "size": 5236,
+ "uri": "https://{canondata_backend}/1871002/01ab1553312aaa699d418cbfc0ca7f3dc6f9d523/resource.tar.gz#test.test_bigdate-compare_big_small-default.txt-Debug_/opt.yql"
}
],
"test.test[bigdate-compare_big_small-default.txt-Plan]": [
@@ -351,9 +351,9 @@
],
"test.test[bigdate-compare_big_small-default.txt-Results]": [
{
- "checksum": "3708cce27cea5d168a78404918edee0f",
- "size": 18092,
- "uri": "https://{canondata_backend}/1031349/a3d33de3e5d4ab8002d2eb0ccf81b6bb13aa6457/resource.tar.gz#test.test_bigdate-compare_big_small-default.txt-Results_/results.txt"
+ "checksum": "327b2920952394290249aba4ac8ffa41",
+ "size": 35806,
+ "uri": "https://{canondata_backend}/1871002/01ab1553312aaa699d418cbfc0ca7f3dc6f9d523/resource.tar.gz#test.test_bigdate-compare_big_small-default.txt-Results_/results.txt"
}
],
"test.test[blocks-combine_all_count--Debug]": [