summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/query.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'yql/essentials/sql/v1/query.cpp')
-rw-r--r--yql/essentials/sql/v1/query.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/query.cpp b/yql/essentials/sql/v1/query.cpp
index 6ec40c25ce5..0276df12534 100644
--- a/yql/essentials/sql/v1/query.cpp
+++ b/yql/essentials/sql/v1/query.cpp
@@ -490,6 +490,13 @@ INode::TPtr CreateEncodingsListSettings(const TVector<TEncoding>& columnEncoding
return encodingsList;
}
+INode::TPtr CreateGeneratedValue(const TGeneratedColumn& generated, TPosition pos, const INode& node) {
+ const ui32 flags = NYql::TAstNodeFlags::ArbitraryContent | NYql::TAstNodeFlags::UnstableFormat;
+ auto contextText = BuildQuotedAtom(pos, generated.ContextPrefix, flags);
+ auto exprText = BuildQuotedAtom(pos, generated.ExprBody, flags);
+ return node.Q(node.Y(contextText, exprText, node.Q(generated.Stored ? "stored" : "virtual")));
+}
+
} // namespace
class TPrepTableKeys: public ITableKeys {
@@ -1357,6 +1364,11 @@ public:
columnConstraints = L(columnConstraints, Q(Y(Q("default"), col.DefaultExpr)));
}
+ if (col.Generated) {
+ auto generatedValue = CreateGeneratedValue(*col.Generated, Pos_, *this);
+ columnConstraints = L(columnConstraints, Q(Y(Q("generated"), generatedValue)));
+ }
+
columnDesc = L(columnDesc, Q(Y(Q("columnConstrains"), Q(columnConstraints))));
if (col.Compression) {
@@ -1715,6 +1727,11 @@ public:
columnConstraints = L(columnConstraints, Q(Y(Q("default"), col.DefaultExpr)));
}
+ if (col.Generated) {
+ auto generatedValue = CreateGeneratedValue(*col.Generated, Pos_, *this);
+ columnConstraints = L(columnConstraints, Q(Y(Q("generated"), generatedValue)));
+ }
+
columnDesc = L(columnDesc, Q(Y(Q("columnConstrains"), Q(columnConstraints))));
if (col.Compression) {