summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/query.cpp
diff options
context:
space:
mode:
authorflown4qqqq <[email protected]>2025-02-05 22:20:57 +0300
committerflown4qqqq <[email protected]>2025-02-05 22:40:05 +0300
commit2fafd6772a4b43efae52727fded1faa51113be46 (patch)
tree7ce383f52366f828d631a70f51a4330a27daf09a /yql/essentials/sql/v1/query.cpp
parent11b913e7a551a59247de97b626f909a5699ea8a1 (diff)
init commit
commit_hash:0564ecb94145bde9e411b0f6786c93e4e5d1d503
Diffstat (limited to 'yql/essentials/sql/v1/query.cpp')
-rw-r--r--yql/essentials/sql/v1/query.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/query.cpp b/yql/essentials/sql/v1/query.cpp
index f80398b6cee..0b8b7c07a7b 100644
--- a/yql/essentials/sql/v1/query.cpp
+++ b/yql/essentials/sql/v1/query.cpp
@@ -1314,6 +1314,72 @@ TNodePtr BuildCreateTable(TPosition pos, const TTableRef& tr, bool existingOk, b
return new TCreateTableNode(pos, tr, existingOk, replaceIfExists, params, std::move(values), scoped);
}
+class TAlterDatabaseNode final : public TAstListNode {
+public:
+ TAlterDatabaseNode(
+ TPosition pos,
+ const TString& service,
+ const TDeferredAtom& cluster,
+ const TAlterDatabaseParameters& params,
+ TScopedStatePtr scoped
+ )
+ : TAstListNode(pos)
+ , Params(params)
+ , Scoped(scoped)
+ , Cluster(cluster)
+ , Service(service)
+ {
+ scoped->UseCluster(service, cluster);
+ }
+
+ bool DoInit(TContext& ctx, ISource* src) override {
+ TNodePtr cluster = Scoped->WrapCluster(Cluster, ctx);
+
+ auto options = Y(Q(Y(Q("mode"), Q("alterDatabase"))));
+
+ options = L(options, Q(Y(Q("dbPath"), Q(Params.DbPath))));
+
+ if (Params.Owner.has_value()) {
+ options = L(options, Q(Y(Q("owner"), Q(Params.Owner.value().Build()))));
+ }
+
+ Add("block", Q(Y(
+ Y("let", "sink", Y("DataSink", BuildQuotedAtom(Pos, Service), cluster)),
+ Y("let", "world", Y(TString(WriteName), "world", "sink", Q(options))),
+ Y("return", ctx.PragmaAutoCommit ? Y(TString(CommitName), "world", "sink") : AstNode("world"))
+ )));
+
+ return TAstListNode::DoInit(ctx, src);
+ }
+
+ TPtr DoClone() const final {
+ return {};
+ }
+
+private:
+ const TAlterDatabaseParameters Params;
+ TScopedStatePtr Scoped;
+ TDeferredAtom Cluster;
+ TString Service;
+};
+
+TNodePtr BuildAlterDatabase(
+ TPosition pos,
+ const TString& service,
+ const TDeferredAtom& cluster,
+ const TAlterDatabaseParameters& params,
+ TScopedStatePtr scoped
+) {
+ return new TAlterDatabaseNode(
+ pos,
+ service,
+ cluster,
+ params,
+ scoped
+ );
+}
+
+
class TAlterTableNode final : public TAstListNode {
public:
TAlterTableNode(TPosition pos, const TTableRef& tr, const TAlterTableParameters& params, TScopedStatePtr scoped)