summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/query.cpp
diff options
context:
space:
mode:
authorAlexander Smirnov <[email protected]>2025-02-06 12:45:05 +0000
committerAlexander Smirnov <[email protected]>2025-02-06 12:45:05 +0000
commit877eef3e6cb697bdc2fa280c8a87a65a9ed98d51 (patch)
tree1e9a34db7a9b777ea1cbfcb071009da9da1232d7 /yql/essentials/sql/v1/query.cpp
parent60b0993921e4b80febdd8b09dee27c04484f18f3 (diff)
parent25f0f292fefc390b49ac937c2e2326fb576b62c2 (diff)
Merge pull request #14243 from ydb-platform/merge-libs-250206-0050
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)