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/sql_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/sql_query.cpp')
-rw-r--r-- | yql/essentials/sql/v1/sql_query.cpp | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/yql/essentials/sql/v1/sql_query.cpp b/yql/essentials/sql/v1/sql_query.cpp index 8ba4226d684..d852fee277f 100644 --- a/yql/essentials/sql/v1/sql_query.cpp +++ b/yql/essentials/sql/v1/sql_query.cpp @@ -1937,26 +1937,45 @@ bool TSqlQuery::Statement(TVector<TNodePtr>& blocks, const TRule_sql_stmt_core& break; } case TRule_sql_stmt_core::kAltSqlStmtCore61: { - // alter_database_stmt: ALTER DATABASE an_id_schema OWNER TO role_name - auto& node = core.GetAlt_sql_stmt_core61().GetRule_alter_database_stmt1(); - - TDeferredAtom roleName; - { - bool allowSystemRoles = true; - if (!RoleNameClause(node.GetRule_role_name6(), roleName, allowSystemRoles)) { - return false; + // alter_database_stmt: ALTER DATABASE an_id_schema alter_database_action + const auto& node = core.GetAlt_sql_stmt_core61().GetRule_alter_database_stmt1(); + const auto& action = node.GetRule_alter_database_action4(); + + TAlterDatabaseParameters params; + params.DbPath = TDeferredAtom(Ctx.Pos(), Id(node.GetRule_an_id_schema3(), *this)); + + switch (action.GetAltCase()) { + case TRule_alter_database_action::kAltAlterDatabaseAction1: { + // OWNER TO role_name + const auto& ownerAction = action.GetAlt_alter_database_action1(); + TDeferredAtom roleName; + { + bool allowSystemRoles = true; + if (!RoleNameClause(ownerAction.GetRule_role_name3(), roleName, allowSystemRoles)) { + return false; + } + } + params.Owner = roleName; + break; } + case TRule_alter_database_action::kAltAlterDatabaseAction2: { + // SET ( database_settings ) + const auto& settings = action.GetAlt_alter_database_action2().GetRule_set_database_settings1().GetRule_database_settings3(); + if (!ParseDatabaseSettings(settings, params.DatabaseSettings)) { + return false; + } + break; + } + case TRule_alter_database_action::ALT_NOT_SET: + AltNotImplemented("alter_database_action", action); + return false; } - TAlterDatabaseParameters alterDatabaseParams; - alterDatabaseParams.Owner = roleName; - alterDatabaseParams.DbPath = TDeferredAtom(Ctx.Pos(), Id(node.GetRule_an_id_schema3(), *this)); - const TPosition pos = Ctx.Pos(); TString service = Ctx.Scoped->CurrService; TDeferredAtom cluster = Ctx.Scoped->CurrCluster; - auto stmt = BuildAlterDatabase(pos, service, cluster, alterDatabaseParams, Ctx.Scoped); + auto stmt = BuildAlterDatabase(pos, service, cluster, params, Ctx.Scoped); AddStatementToBlocks(blocks, stmt); break; } |