Skip to content

Commit 3d691ab

Browse files
authored
parse TTL syntax with tiering on KQP (#11613)
1 parent a9441cb commit 3d691ab

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

ydb/core/kqp/provider/yql_kikimr_gateway.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ bool TTtlSettings::TryParse(const NNodes::TCoNameValueTupleList& node, TTtlSetti
102102
YQL_ENSURE(field.Value().Maybe<TCoAtom>());
103103
settings.ColumnName = field.Value().Cast<TCoAtom>().StringValue();
104104
} else if (name == "expireAfter") {
105+
// TODO (yentsovsemyon): remove this clause after extending TTL syntax in YQL
105106
YQL_ENSURE(field.Value().Maybe<TCoInterval>());
106107
auto value = FromString<i64>(field.Value().Cast<TCoInterval>().Literal().Value());
107108
if (value < 0) {
@@ -110,6 +111,33 @@ bool TTtlSettings::TryParse(const NNodes::TCoNameValueTupleList& node, TTtlSetti
110111
}
111112

112113
settings.ExpireAfter = TDuration::FromValue(value);
114+
} else if (name == "tiers") {
115+
YQL_ENSURE(field.Value().Maybe<TExprList>());
116+
auto listNode = field.Value().Cast<TExprList>();
117+
118+
for (size_t i = 0; i < listNode.Size(); ++i) {
119+
auto tierNode = listNode.Item(i);
120+
121+
YQL_ENSURE(tierNode.Maybe<TCoNameValueTupleList>());
122+
for (const auto& tierField : tierNode.Cast<TCoNameValueTupleList>()) {
123+
auto tierFieldName = tierField.Name().Value();
124+
if (tierFieldName == "storageName") {
125+
error = "TTL cannot contain tiered storage: tiering in TTL syntax is not supported";
126+
return false;
127+
} else if (tierFieldName == "evictionDelay") {
128+
YQL_ENSURE(tierField.Value().Maybe<TCoInterval>());
129+
auto value = FromString<i64>(tierField.Value().Cast<TCoInterval>().Literal().Value());
130+
if (value < 0) {
131+
error = "Interval value cannot be negative";
132+
return false;
133+
}
134+
settings.ExpireAfter = TDuration::FromValue(value);
135+
} else {
136+
error = TStringBuilder() << "Unknown field: " << tierFieldName;
137+
return false;
138+
}
139+
}
140+
}
113141
} else if (name == "columnUnit") {
114142
YQL_ENSURE(field.Value().Maybe<TCoAtom>());
115143
auto value = field.Value().Cast<TCoAtom>().StringValue();

0 commit comments

Comments
 (0)