diff --git a/ydb/core/kqp/provider/yql_kikimr_gateway.cpp b/ydb/core/kqp/provider/yql_kikimr_gateway.cpp index dd5c74574881..2244519c28ad 100644 --- a/ydb/core/kqp/provider/yql_kikimr_gateway.cpp +++ b/ydb/core/kqp/provider/yql_kikimr_gateway.cpp @@ -102,6 +102,7 @@ bool TTtlSettings::TryParse(const NNodes::TCoNameValueTupleList& node, TTtlSetti YQL_ENSURE(field.Value().Maybe()); settings.ColumnName = field.Value().Cast().StringValue(); } else if (name == "expireAfter") { + // TODO (yentsovsemyon): remove this clause after extending TTL syntax in YQL YQL_ENSURE(field.Value().Maybe()); auto value = FromString(field.Value().Cast().Literal().Value()); if (value < 0) { @@ -110,6 +111,33 @@ bool TTtlSettings::TryParse(const NNodes::TCoNameValueTupleList& node, TTtlSetti } settings.ExpireAfter = TDuration::FromValue(value); + } else if (name == "tiers") { + YQL_ENSURE(field.Value().Maybe()); + auto listNode = field.Value().Cast(); + + for (size_t i = 0; i < listNode.Size(); ++i) { + auto tierNode = listNode.Item(i); + + YQL_ENSURE(tierNode.Maybe()); + for (const auto& tierField : tierNode.Cast()) { + auto tierFieldName = tierField.Name().Value(); + if (tierFieldName == "storageName") { + error = "TTL cannot contain tiered storage: tiering in TTL syntax is not supported"; + return false; + } else if (tierFieldName == "evictionDelay") { + YQL_ENSURE(tierField.Value().Maybe()); + auto value = FromString(tierField.Value().Cast().Literal().Value()); + if (value < 0) { + error = "Interval value cannot be negative"; + return false; + } + settings.ExpireAfter = TDuration::FromValue(value); + } else { + error = TStringBuilder() << "Unknown field: " << tierFieldName; + return false; + } + } + } } else if (name == "columnUnit") { YQL_ENSURE(field.Value().Maybe()); auto value = field.Value().Cast().StringValue();