diff options
| author | Alexander Smirnov <[email protected]> | 2025-02-06 12:45:05 +0000 |
|---|---|---|
| committer | Alexander Smirnov <[email protected]> | 2025-02-06 12:45:05 +0000 |
| commit | 877eef3e6cb697bdc2fa280c8a87a65a9ed98d51 (patch) | |
| tree | 1e9a34db7a9b777ea1cbfcb071009da9da1232d7 /yql/essentials/sql/v1/query.cpp | |
| parent | 60b0993921e4b80febdd8b09dee27c04484f18f3 (diff) | |
| parent | 25f0f292fefc390b49ac937c2e2326fb576b62c2 (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.cpp | 66 |
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) |
