summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/query.cpp
diff options
context:
space:
mode:
authordeminds <[email protected]>2025-06-04 12:36:47 +0300
committerdeminds <[email protected]>2025-06-04 12:51:33 +0300
commit14c42c6f9a85a081cde9ba58db0b008b3ade11f7 (patch)
tree7d76d30ab6610e938b0399956cd45fcc5105854b /yql/essentials/sql/v1/query.cpp
parent62b27c7d93a63b7c2ab41fe6882cbcbdfc5218a6 (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.cpp24
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(