@@ -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