From 9f850526f9cea07d55a28f3cab6047074e994bac Mon Sep 17 00:00:00 2001 From: ermolovd Date: Wed, 17 Sep 2025 14:47:26 +0300 Subject: YT-15805: introduce tz-types into type info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### Добавление поддержки временных типов с часовым поясом (TZ-типы) 📝 - 🧱 Добавлены новые примитивные типы для представления даты, даты-времени и меток времени с часовым поясом: `TzDate32`, `TzDatetime64`, `TzTimestamp64`. - 🧪 В модульные тесты добавлены проверки корректности создания и идентификации новых временных типов. - 📦 Обновлена логика сериализации/десериализации: TZ-типы отображаются в строковый формат при работе с различными протоколами (Skiff, protobuf, JSON). - ⚠️ В местах чтения данных добавлена заглушка, которая выбрасывает исключение при попытке обработки новых типов — это временное решение до реализации полной поддержки. - 🔧 Упрощена иерархия классов примитивных типов за счёт использования шаблона `TPrimitiveTypeBase`. - 🗂️ Изменён подход к обработке неизвестных типов в нескольких компонентах: вместо явного перечисления всех поддерживаемых типов теперь используется `default` ветка с общим обработчиком. --- **Оценить качество описания можно [здесь](https://nda.ya.ru/t/_MxIaV0Q7FnCMG** Autodescription by Code Assistant commit_hash:265cf034372d36f60988238e273cbfe532c2a4e5 --- yt/cpp/mapreduce/interface/common.cpp | 44 ++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'yt/cpp/mapreduce/interface/common.cpp') 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 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 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"; -- cgit v1.3