summaryrefslogtreecommitdiffstats
path: root/yt/cpp/mapreduce/interface/common.cpp
diff options
context:
space:
mode:
authorermolovd <[email protected]>2025-09-17 14:47:26 +0300
committerermolovd <[email protected]>2025-09-17 15:41:40 +0300
commit9f850526f9cea07d55a28f3cab6047074e994bac (patch)
treeb73f764928ebb4e27f1942196dba288081a5264b /yt/cpp/mapreduce/interface/common.cpp
parent83cc51995c595f710b027094fcd4532535d1b8af (diff)
YT-15805: introduce tz-types into type info
#### Добавление поддержки временных типов с часовым поясом (TZ-типы) 📝 - 🧱 Добавлены новые примитивные типы для представления даты, даты-времени и меток времени с часовым поясом: `TzDate32`, `TzDatetime64`, `TzTimestamp64`. - 🧪 В модульные тесты добавлены проверки корректности создания и идентификации новых временных типов. - 📦 Обновлена логика сериализации/десериализации: TZ-типы отображаются в строковый формат при работе с различными протоколами (Skiff, protobuf, JSON). - ⚠️ В местах чтения данных добавлена заглушка, которая выбрасывает исключение при попытке обработки новых типов — это временное решение до реализации полной поддержки. - 🔧 Упрощена иерархия классов примитивных типов за счёт использования шаблона `TPrimitiveTypeBase`. - 🗂️ Изменён подход к обработке неизвестных типов в нескольких компонентах: вместо явного перечисления всех поддерживаемых типов теперь используется `default` ветка с общим обработчиком. --- **Оценить качество описания можно [здесь](https://nda.ya.ru/t/_MxIaV0Q7FnCMG** <a href="https://nda.ya.ru/t/qa0kX64r7DqvtN"><font size="2">Autodescription by Code Assistant</font></a> commit_hash:265cf034372d36f60988238e273cbfe532c2a4e5
Diffstat (limited to 'yt/cpp/mapreduce/interface/common.cpp')
-rw-r--r--yt/cpp/mapreduce/interface/common.cpp44
1 files changed, 43 insertions, 1 deletions
diff --git a/yt/cpp/mapreduce/interface/common.cpp b/yt/cpp/mapreduce/interface/common.cpp
index 7abbef91277..840ec3eda2b 100644
--- a/yt/cpp/mapreduce/interface/common.cpp
+++ b/yt/cpp/mapreduce/interface/common.cpp
@@ -185,6 +185,14 @@ static NTi::TTypePtr OldTypeToTypeV3(EValueType type)
return NTi::Datetime();
case VT_TIMESTAMP:
return NTi::Timestamp();
+
+ case VT_TZ_DATE:
+ return NTi::TzDate();
+ case VT_TZ_DATETIME:
+ return NTi::TzDatetime();
+ case VT_TZ_TIMESTAMP:
+ return NTi::TzTimestamp();
+
case VT_INTERVAL:
return NTi::Interval();
@@ -199,6 +207,14 @@ static NTi::TTypePtr OldTypeToTypeV3(EValueType type)
return NTi::Datetime64();
case VT_TIMESTAMP64:
return NTi::Timestamp64();
+
+ case VT_TZ_DATE32:
+ return NTi::TzDate32();
+ case VT_TZ_DATETIME64:
+ return NTi::TzDatetime64();
+ case VT_TZ_TIMESTAMP64:
+ return NTi::TzTimestamp64();
+
case VT_INTERVAL64:
return NTi::Interval64();
@@ -253,9 +269,11 @@ static std::pair<EValueType, bool> Simplify(const NTi::TTypePtr& type)
return {VT_INTERVAL, true};
case ETypeName::TzDate:
+ return {VT_TZ_DATE, true};
case ETypeName::TzDatetime:
+ return {VT_TZ_DATETIME, true};
case ETypeName::TzTimestamp:
- break;
+ return {VT_TZ_TIMESTAMP, true};
case ETypeName::Json:
return {VT_JSON, true};
@@ -272,6 +290,14 @@ static std::pair<EValueType, bool> Simplify(const NTi::TTypePtr& type)
return {VT_DATETIME64, true};
case ETypeName::Timestamp64:
return {VT_TIMESTAMP64, true};
+
+ case ETypeName::TzDate32:
+ return {VT_TZ_DATE32, true};
+ case ETypeName::TzDatetime64:
+ return {VT_TZ_DATETIME64, true};
+ case ETypeName::TzTimestamp64:
+ return {VT_TZ_TIMESTAMP64, true};
+
case ETypeName::Interval64:
return {VT_INTERVAL64, true};
@@ -689,6 +715,14 @@ TString ToString(EValueType type)
return "datetime";
case VT_TIMESTAMP:
return "timestamp";
+
+ case VT_TZ_DATE:
+ return "tz_date";
+ case VT_TZ_DATETIME:
+ return "tz_datetime";
+ case VT_TZ_TIMESTAMP:
+ return "tz_timestamp";
+
case VT_INTERVAL:
return "interval";
@@ -704,6 +738,14 @@ TString ToString(EValueType type)
return "datetime64";
case VT_TIMESTAMP64:
return "timestamp64";
+
+ case VT_TZ_DATE32:
+ return "tz_date32";
+ case VT_TZ_DATETIME64:
+ return "tz_datetime64";
+ case VT_TZ_TIMESTAMP64:
+ return "tz_timestamp64";
+
case VT_INTERVAL64:
return "interval64";