diff options
author | deminds <[email protected]> | 2025-06-04 12:36:47 +0300 |
---|---|---|
committer | deminds <[email protected]> | 2025-06-04 12:51:33 +0300 |
commit | 14c42c6f9a85a081cde9ba58db0b008b3ade11f7 (patch) | |
tree | 7d76d30ab6610e938b0399956cd45fcc5105854b /yql/essentials/sql/v1/query.cpp | |
parent | 62b27c7d93a63b7c2ab41fe6882cbcbdfc5218a6 (diff) |
support database settings in ALTER DATABASE
The main goal is to enable setting SchemeLimits (ShardsLimit and PathsLimit) via YQL.
Issue:
- https://github.com/ydb-platform/ydb/issues/16742
commit_hash:e873849e3b4bb494e349ccebbb1ff6d51655c5d1
Diffstat (limited to 'yql/essentials/sql/v1/query.cpp')
-rw-r--r-- | yql/essentials/sql/v1/query.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/yql/essentials/sql/v1/query.cpp b/yql/essentials/sql/v1/query.cpp index 40caf8b34de..631aa097b58 100644 --- a/yql/essentials/sql/v1/query.cpp +++ b/yql/essentials/sql/v1/query.cpp @@ -1317,6 +1317,19 @@ TNodePtr BuildCreateTable(TPosition pos, const TTableRef& tr, bool existingOk, b return new TCreateTableNode(pos, tr, existingOk, replaceIfExists, params, std::move(values), scoped); } +namespace { + +bool InitDatabaseSettings(TContext& ctx, ISource* src, const THashMap<TString, TNodePtr>& settings) { + for (const auto& [setting, value] : settings) { + if (!value || !value->Init(ctx, src)) { + return false; + } + } + return true; +} + +} + class TAlterDatabaseNode final : public TAstListNode { public: TAlterDatabaseNode( @@ -1343,6 +1356,10 @@ public: if (Params.Owner.has_value()) { options = L(options, Q(Y(Q("owner"), Params.Owner.value().Build()))); } + if (!InitDatabaseSettings(ctx, src, Params.DatabaseSettings)) { + return false; + } + AddDatabaseSettings(options, Params.DatabaseSettings); Add("block", Q(Y( Y("let", "sink", Y("DataSink", BuildQuotedAtom(Pos, Service), cluster)), @@ -1362,6 +1379,13 @@ private: TScopedStatePtr Scoped; TDeferredAtom Cluster; TString Service; + + void AddDatabaseSettings(TNodePtr& options, const THashMap<TString, TNodePtr>& settings) { + for (const auto& [setting, value] : settings) { + options = L(options, Q(Y(BuildQuotedAtom(Pos, setting), value))); + } + } + }; TNodePtr BuildAlterDatabase( |