From 464277e06a8d699291df23e6c8402d8c3a1366c7 Mon Sep 17 00:00:00 2001 From: Nikolay Shumkov Date: Wed, 4 Sep 2024 02:19:40 +0300 Subject: [PATCH 1/5] Initial commit --- .../kqp/compile_service/kqp_compile_actor.cpp | 4 +++- ydb/core/kqp/host/kqp_host.cpp | 3 ++- ydb/core/kqp/host/kqp_translate.cpp | 18 +++++++++--------- ydb/core/kqp/host/kqp_translate.h | 4 ++-- ydb/core/kqp/ut/common/kqp_ut_common.cpp | 1 + ydb/core/kqp/ut/pg/kqp_pg_ut.cpp | 2 +- ydb/core/protos/feature_flags.proto | 1 + ydb/core/testlib/basics/feature_flags.h | 1 + ydb/library/yql/sql/sql.cpp | 14 ++++++++++++-- ydb/library/yql/sql/sql.h | 4 ++-- 10 files changed, 34 insertions(+), 18 deletions(-) diff --git a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp index e3a4d7988ed4..84263c6f3e99 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp @@ -148,7 +148,9 @@ class TKqpCompileActor : public TActorBootstrapped { .SetApplicationName(ApplicationName) .SetQueryParameters(QueryId.QueryParameterTypes); - return ParseStatements(QueryId.Text, QueryId.Settings.Syntax, QueryId.IsSql(), settingsBuilder, PerStatementResult); + bool enablePgSyntax = AppData(ctx)->FeatureFlags.GetEnablePgSyntax(); + + return ParseStatements(QueryId.Text, QueryId.Settings.Syntax, QueryId.IsSql(), settingsBuilder, PerStatementResult, enablePgSyntax); } void ReplySplitResult(const TActorContext &ctx, IKqpHost::TSplitResult&& result) { diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp index 3b50e297c9c9..ec60b3977af0 100644 --- a/ydb/core/kqp/host/kqp_host.cpp +++ b/ydb/core/kqp/host/kqp_host.cpp @@ -1229,7 +1229,8 @@ class TKqpHost : public IKqpHost { .SetIsEnablePgConstsToParams(SessionCtx->Config().EnablePgConstsToParams) .SetQueryParameters(query.ParameterTypes) .SetApplicationName(ApplicationName); - auto astRes = ParseQuery(query.Text, isSql, sqlVersion, TypesCtx->DeprecatedSQL, ctx, settingsBuilder, result.KeepInCache, result.CommandTagName); + bool enablePgSyntax = SessionCtx->Config().FeatureFlags.GetEnablePgSyntax(); + auto astRes = ParseQuery(query.Text, isSql, sqlVersion, TypesCtx->DeprecatedSQL, ctx, settingsBuilder, result.KeepInCache, result.CommandTagName, enablePgSyntax); if (astRes.ActualSyntaxType == NYql::ESyntaxType::Pg) { SessionCtx->Config().IndexAutoChooserMode = NKikimrConfig::TTableServiceConfig_EIndexAutoChooseMode::TTableServiceConfig_EIndexAutoChooseMode_MAX_USED_PREFIX; } diff --git a/ydb/core/kqp/host/kqp_translate.cpp b/ydb/core/kqp/host/kqp_translate.cpp index 0384b3120606..dcf8c5ba822a 100644 --- a/ydb/core/kqp/host/kqp_translate.cpp +++ b/ydb/core/kqp/host/kqp_translate.cpp @@ -153,13 +153,13 @@ NSQLTranslation::TTranslationSettings TKqpTranslationSettingsBuilder::Build(NYql } NYql::TAstParseResult ParseQuery(const TString& queryText, bool isSql, TMaybe& sqlVersion, bool& deprecatedSQL, - NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName) { + NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName, bool enablePgSyntax) { NYql::TAstParseResult astRes; settingsBuilder.SetSqlVersion(sqlVersion); if (isSql) { auto settings = settingsBuilder.Build(ctx); NYql::TStmtParseInfo stmtParseInfo; - auto ast = NSQLTranslation::SqlToYql(queryText, settings, nullptr, &stmtParseInfo); + auto ast = NSQLTranslation::SqlToYql(queryText, settings, nullptr, &stmtParseInfo, enablePgSyntax); deprecatedSQL = (ast.ActualSyntaxType == NYql::ESyntaxType::YQLv0); sqlVersion = ast.ActualSyntaxType == NYql::ESyntaxType::YQLv1 ? 1 : 0; keepInCache = stmtParseInfo.KeepInCache; @@ -175,7 +175,7 @@ NYql::TAstParseResult ParseQuery(const TString& queryText, bool isSql, TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder) { +TQueryAst ParseQuery(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool enablePgSyntax) { bool deprecatedSQL; bool keepInCache; TMaybe commandTagName; @@ -185,19 +185,19 @@ TQueryAst ParseQuery(const TString& queryText, const TMaybe& } NYql::TExprContext ctx; - auto astRes = ParseQuery(queryText, isSql, sqlVersion, deprecatedSQL, ctx, settingsBuilder, keepInCache, commandTagName); + auto astRes = ParseQuery(queryText, isSql, sqlVersion, deprecatedSQL, ctx, settingsBuilder, keepInCache, commandTagName, enablePgSyntax); return TQueryAst(std::make_shared(std::move(astRes)), sqlVersion, deprecatedSQL, keepInCache, commandTagName); } TVector ParseStatements(const TString& queryText, bool isSql, TMaybe& sqlVersion, bool& deprecatedSQL, - NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder) { + NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool enablePgSyntax) { TVector result; settingsBuilder.SetSqlVersion(sqlVersion); if (isSql) { auto settings = settingsBuilder.Build(ctx); ui16 actualSyntaxVersion = 0; TVector stmtParseInfo; - auto astStatements = NSQLTranslation::SqlToAstStatements(queryText, settings, nullptr, &actualSyntaxVersion, &stmtParseInfo); + auto astStatements = NSQLTranslation::SqlToAstStatements(queryText, settings, nullptr, &actualSyntaxVersion, &stmtParseInfo, enablePgSyntax); deprecatedSQL = (actualSyntaxVersion == 0); sqlVersion = actualSyntaxVersion; YQL_ENSURE(astStatements.size() == stmtParseInfo.size()); @@ -211,9 +211,9 @@ TVector ParseStatements(const TString& queryText, bool isSql, TMaybe< } } -TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution) { +TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution, bool enablePgSyntax) { if (!perStatementExecution) { - return {ParseQuery(queryText, syntax, isSql, settingsBuilder)}; + return {ParseQuery(queryText, syntax, isSql, settingsBuilder, enablePgSyntax)}; } bool deprecatedSQL; TMaybe sqlVersion; @@ -222,7 +222,7 @@ TVector ParseStatements(const TString& queryText, const TMaybe& sqlVersion, bool& deprecatedSQL, - NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName); + NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName, bool enablePgSyntax = false); -TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution); +TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution, bool enablePgSyntax = false); } // namespace NKqp } // namespace NKikimr diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.cpp b/ydb/core/kqp/ut/common/kqp_ut_common.cpp index 78995b19f715..d887c530e825 100644 --- a/ydb/core/kqp/ut/common/kqp_ut_common.cpp +++ b/ydb/core/kqp/ut/common/kqp_ut_common.cpp @@ -132,6 +132,7 @@ TKikimrRunner::TKikimrRunner(const TKikimrSettings& settings) { ServerSettings->SetEnableMoveIndex(true); ServerSettings->SetUseRealThreads(settings.UseRealThreads); ServerSettings->SetEnableTablePgTypes(true); + ServerSettings->SetEnablePgSyntax(false); ServerSettings->S3ActorsFactory = settings.S3ActorsFactory; if (settings.Storage) { diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp index 73b420fd9070..b8c390b461ed 100644 --- a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp +++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp @@ -4851,4 +4851,4 @@ Y_UNIT_TEST_SUITE(KqpPg) { } } // namespace NKqp -} // namespace NKikimr +} // namespace NKikimr \ No newline at end of file diff --git a/ydb/core/protos/feature_flags.proto b/ydb/core/protos/feature_flags.proto index 6ed3025152d8..26a5ba5cc4f3 100644 --- a/ydb/core/protos/feature_flags.proto +++ b/ydb/core/protos/feature_flags.proto @@ -155,4 +155,5 @@ message TFeatureFlags { optional bool EnableOptionalColumnsInColumnShard = 136 [default = false]; optional bool EnableGranularTimecast = 137 [default = true]; optional bool EnableAlterShardingInColumnShard = 138 [default = false]; + optional bool EnablePgSyntax = 139 [default = true]; } diff --git a/ydb/core/testlib/basics/feature_flags.h b/ydb/core/testlib/basics/feature_flags.h index 95662f200d35..b2bfe23c95fb 100644 --- a/ydb/core/testlib/basics/feature_flags.h +++ b/ydb/core/testlib/basics/feature_flags.h @@ -64,6 +64,7 @@ class TTestFeatureFlagsHolder { FEATURE_FLAG_SETTER(EnableChangefeedsOnIndexTables) FEATURE_FLAG_SETTER(EnableBackupService) FEATURE_FLAG_SETTER(EnableGranularTimecast) + FEATURE_FLAG_SETTER(EnablePgSyntax) #undef FEATURE_FLAG_SETTER }; diff --git a/ydb/library/yql/sql/sql.cpp b/ydb/library/yql/sql/sql.cpp index bc643e8f1723..1c86b3b54b4a 100644 --- a/ydb/library/yql/sql/sql.cpp +++ b/ydb/library/yql/sql/sql.cpp @@ -15,7 +15,7 @@ namespace NSQLTranslation { NYql::TAstParseResult SqlToYql(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules, NYql::TStmtParseInfo* stmtParseInfo) + NYql::TWarningRules* warningRules, NYql::TStmtParseInfo* stmtParseInfo, bool enablePgSyntax) { NYql::TAstParseResult result; TTranslationSettings parsedSettings(settings); @@ -34,6 +34,11 @@ namespace NSQLTranslation { return result; } + if (parsedSettings.PgParser && enablePgSyntax) { + result.Issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR, + "PG syntax is disabled")); + } + if (parsedSettings.PgParser) { return NSQLTranslationPG::PGToYql(query, parsedSettings, stmtParseInfo); } @@ -160,7 +165,7 @@ namespace NSQLTranslation { } TVector SqlToAstStatements(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules, ui16* actualSyntaxVersion, TVector* stmtParseInfo) + NYql::TWarningRules* warningRules, ui16* actualSyntaxVersion, TVector* stmtParseInfo, bool enablePgSyntax) { TVector result; NYql::TIssues issues; @@ -184,6 +189,11 @@ namespace NSQLTranslation { return {}; } + if (parsedSettings.PgParser && enablePgSyntax) { + issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR, + "PG syntax is disabled")); + } + if (parsedSettings.PgParser) { return NSQLTranslationPG::PGToYqlStatements(query, parsedSettings, stmtParseInfo); } diff --git a/ydb/library/yql/sql/sql.h b/ydb/library/yql/sql/sql.h index f00252a5faec..af86a21d7c6e 100644 --- a/ydb/library/yql/sql/sql.h +++ b/ydb/library/yql/sql/sql.h @@ -16,12 +16,12 @@ namespace NSQLTranslation { NYql::TAstParseResult SqlToYql(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules = nullptr, NYql::TStmtParseInfo* stmtParseInfo = nullptr); + NYql::TWarningRules* warningRules = nullptr, NYql::TStmtParseInfo* stmtParseInfo = nullptr, bool enablePgSyntax = false); google::protobuf::Message* SqlAST(const TString& query, const TString& queryName, NYql::TIssues& issues, size_t maxErrors, const TTranslationSettings& settings = {}, ui16* actualSyntaxVersion = nullptr); ILexer::TPtr SqlLexer(const TString& query, NYql::TIssues& issues, const TTranslationSettings& settings = {}, ui16* actualSyntaxVersion = nullptr); NYql::TAstParseResult SqlASTToYql(const google::protobuf::Message& protoAst, const TSQLHints& hints, const TTranslationSettings& settings); TVector SqlToAstStatements(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules = nullptr, ui16* actualSyntaxVersion = nullptr, TVector* stmtParseInfo = nullptr); + NYql::TWarningRules* warningRules = nullptr, ui16* actualSyntaxVersion = nullptr, TVector* stmtParseInfo = nullptr, bool enablePgSyntax = false); } // namespace NSQLTranslationV0 From 3935637236ec4527725a231a201a636b4575a397 Mon Sep 17 00:00:00 2001 From: Nikolay Shumkov Date: Wed, 4 Sep 2024 03:20:30 +0300 Subject: [PATCH 2/5] Fixes --- ydb/core/kqp/ut/common/kqp_ut_common.cpp | 2 +- ydb/core/kqp/ut/pg/kqp_pg_ut.cpp | 3 ++- ydb/library/yql/sql/sql.cpp | 6 ++++-- ydb/tests/functional/postgresql/test_postgres.py | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ydb/core/kqp/ut/common/kqp_ut_common.cpp b/ydb/core/kqp/ut/common/kqp_ut_common.cpp index d887c530e825..8f21490f7db7 100644 --- a/ydb/core/kqp/ut/common/kqp_ut_common.cpp +++ b/ydb/core/kqp/ut/common/kqp_ut_common.cpp @@ -132,7 +132,7 @@ TKikimrRunner::TKikimrRunner(const TKikimrSettings& settings) { ServerSettings->SetEnableMoveIndex(true); ServerSettings->SetUseRealThreads(settings.UseRealThreads); ServerSettings->SetEnableTablePgTypes(true); - ServerSettings->SetEnablePgSyntax(false); + ServerSettings->SetEnablePgSyntax(true); ServerSettings->S3ActorsFactory = settings.S3ActorsFactory; if (settings.Storage) { diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp index b8c390b461ed..32dc3565721e 100644 --- a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp +++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp @@ -4801,7 +4801,8 @@ Y_UNIT_TEST_SUITE(KqpPg) { ui16 mbusport = tp.GetPort(2134); auto settings = Tests::TServerSettings(mbusport) .SetDomainName("Root") - .SetUseRealThreads(false); + .SetUseRealThreads(false) + .SetEnablePgSyntax(true); Tests::TServer::TPtr server = new Tests::TServer(settings); diff --git a/ydb/library/yql/sql/sql.cpp b/ydb/library/yql/sql/sql.cpp index 1c86b3b54b4a..fc2c00c97c4d 100644 --- a/ydb/library/yql/sql/sql.cpp +++ b/ydb/library/yql/sql/sql.cpp @@ -34,9 +34,10 @@ namespace NSQLTranslation { return result; } - if (parsedSettings.PgParser && enablePgSyntax) { + if (parsedSettings.PgParser && !enablePgSyntax) { result.Issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR, "PG syntax is disabled")); + return result; } if (parsedSettings.PgParser) { @@ -189,9 +190,10 @@ namespace NSQLTranslation { return {}; } - if (parsedSettings.PgParser && enablePgSyntax) { + if (parsedSettings.PgParser && !enablePgSyntax) { issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR, "PG syntax is disabled")); + return result; } if (parsedSettings.PgParser) { diff --git a/ydb/tests/functional/postgresql/test_postgres.py b/ydb/tests/functional/postgresql/test_postgres.py index 20fa592ed548..f1962ca9cc06 100644 --- a/ydb/tests/functional/postgresql/test_postgres.py +++ b/ydb/tests/functional/postgresql/test_postgres.py @@ -67,7 +67,7 @@ def setup_class(cls): 'KQP_COMPILE_REQUEST': LogLevels.DEBUG, 'KQP_PROXY': LogLevels.DEBUG }, - extra_feature_flags=['enable_table_pg_types', 'enable_temp_tables'], + extra_feature_flags=['enable_table_pg_types', 'enable_temp_tables', 'enable_pg_syntax'], )) cls.cluster.start() From 70ad76263207f11467bcb2b8cbb0cf0aa29a8de4 Mon Sep 17 00:00:00 2001 From: Nikolay Shumkov Date: Wed, 4 Sep 2024 06:27:25 +0300 Subject: [PATCH 3/5] Fixes --- ydb/library/yql/sql/sql.h | 4 ++-- ydb/tests/library/harness/kikimr_config.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/ydb/library/yql/sql/sql.h b/ydb/library/yql/sql/sql.h index af86a21d7c6e..4909b1378876 100644 --- a/ydb/library/yql/sql/sql.h +++ b/ydb/library/yql/sql/sql.h @@ -16,12 +16,12 @@ namespace NSQLTranslation { NYql::TAstParseResult SqlToYql(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules = nullptr, NYql::TStmtParseInfo* stmtParseInfo = nullptr, bool enablePgSyntax = false); + NYql::TWarningRules* warningRules = nullptr, NYql::TStmtParseInfo* stmtParseInfo = nullptr, bool enablePgSyntax = true); google::protobuf::Message* SqlAST(const TString& query, const TString& queryName, NYql::TIssues& issues, size_t maxErrors, const TTranslationSettings& settings = {}, ui16* actualSyntaxVersion = nullptr); ILexer::TPtr SqlLexer(const TString& query, NYql::TIssues& issues, const TTranslationSettings& settings = {}, ui16* actualSyntaxVersion = nullptr); NYql::TAstParseResult SqlASTToYql(const google::protobuf::Message& protoAst, const TSQLHints& hints, const TTranslationSettings& settings); TVector SqlToAstStatements(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules = nullptr, ui16* actualSyntaxVersion = nullptr, TVector* stmtParseInfo = nullptr, bool enablePgSyntax = false); + NYql::TWarningRules* warningRules = nullptr, ui16* actualSyntaxVersion = nullptr, TVector* stmtParseInfo = nullptr, bool enablePgSyntax = true); } // namespace NSQLTranslationV0 diff --git a/ydb/tests/library/harness/kikimr_config.py b/ydb/tests/library/harness/kikimr_config.py index d0b276686c08..937574993845 100644 --- a/ydb/tests/library/harness/kikimr_config.py +++ b/ydb/tests/library/harness/kikimr_config.py @@ -394,6 +394,7 @@ def __init__( self.yaml_config["table_service_config"]["index_auto_choose_mode"] = 'max_used_prefix' self.yaml_config["feature_flags"]['enable_temp_tables'] = True self.yaml_config["feature_flags"]['enable_table_pg_types'] = True + self.yaml_config['feature_flags']['enable_pg_syntax'] = True self.yaml_config['feature_flags']['enable_uniq_constraint'] = True if "local_pg_wire_config" not in self.yaml_config: self.yaml_config["local_pg_wire_config"] = {} From d958999d905a893c628b172a306bfc6d2f6d6cbc Mon Sep 17 00:00:00 2001 From: Nikolay Shumkov Date: Wed, 4 Sep 2024 20:03:23 +0300 Subject: [PATCH 4/5] Fixes --- .../kqp/compile_service/kqp_compile_actor.cpp | 7 +++---- ydb/core/kqp/host/kqp_host.cpp | 6 +++--- ydb/core/kqp/host/kqp_translate.cpp | 19 ++++++++++--------- ydb/core/kqp/host/kqp_translate.h | 10 ++++++++-- .../yql/sql/settings/translation_settings.cpp | 1 + .../yql/sql/settings/translation_settings.h | 1 + ydb/library/yql/sql/sql.cpp | 8 ++++---- ydb/library/yql/sql/sql.h | 4 ++-- 8 files changed, 32 insertions(+), 24 deletions(-) diff --git a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp index 84263c6f3e99..c3cee8822f21 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_actor.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_actor.cpp @@ -146,11 +146,10 @@ class TKqpCompileActor : public TActorBootstrapped { .SetIsEnableExternalDataSources(AppData(ctx)->FeatureFlags.GetEnableExternalDataSources()) .SetIsEnablePgConstsToParams(Config->EnablePgConstsToParams) .SetApplicationName(ApplicationName) - .SetQueryParameters(QueryId.QueryParameterTypes); + .SetQueryParameters(QueryId.QueryParameterTypes) + .SetIsEnablePgSyntax(AppData(ctx)->FeatureFlags.GetEnablePgSyntax()); - bool enablePgSyntax = AppData(ctx)->FeatureFlags.GetEnablePgSyntax(); - - return ParseStatements(QueryId.Text, QueryId.Settings.Syntax, QueryId.IsSql(), settingsBuilder, PerStatementResult, enablePgSyntax); + return ParseStatements(QueryId.Text, QueryId.Settings.Syntax, QueryId.IsSql(), settingsBuilder, PerStatementResult); } void ReplySplitResult(const TActorContext &ctx, IKqpHost::TSplitResult&& result) { diff --git a/ydb/core/kqp/host/kqp_host.cpp b/ydb/core/kqp/host/kqp_host.cpp index ec60b3977af0..7a7f1765c8ab 100644 --- a/ydb/core/kqp/host/kqp_host.cpp +++ b/ydb/core/kqp/host/kqp_host.cpp @@ -1228,9 +1228,9 @@ class TKqpHost : public IKqpHost { .SetIsEnableExternalDataSources(SessionCtx->Config().FeatureFlags.GetEnableExternalDataSources()) .SetIsEnablePgConstsToParams(SessionCtx->Config().EnablePgConstsToParams) .SetQueryParameters(query.ParameterTypes) - .SetApplicationName(ApplicationName); - bool enablePgSyntax = SessionCtx->Config().FeatureFlags.GetEnablePgSyntax(); - auto astRes = ParseQuery(query.Text, isSql, sqlVersion, TypesCtx->DeprecatedSQL, ctx, settingsBuilder, result.KeepInCache, result.CommandTagName, enablePgSyntax); + .SetApplicationName(ApplicationName) + .SetIsEnablePgSyntax(SessionCtx->Config().FeatureFlags.GetEnablePgSyntax()); + auto astRes = ParseQuery(query.Text, isSql, sqlVersion, TypesCtx->DeprecatedSQL, ctx, settingsBuilder, result.KeepInCache, result.CommandTagName); if (astRes.ActualSyntaxType == NYql::ESyntaxType::Pg) { SessionCtx->Config().IndexAutoChooserMode = NKikimrConfig::TTableServiceConfig_EIndexAutoChooseMode::TTableServiceConfig_EIndexAutoChooseMode_MAX_USED_PREFIX; } diff --git a/ydb/core/kqp/host/kqp_translate.cpp b/ydb/core/kqp/host/kqp_translate.cpp index dcf8c5ba822a..8607f5d87d36 100644 --- a/ydb/core/kqp/host/kqp_translate.cpp +++ b/ydb/core/kqp/host/kqp_translate.cpp @@ -86,6 +86,7 @@ NSQLTranslation::TTranslationSettings TKqpTranslationSettingsBuilder::Build(NYql settings.SaveWorldDependencies = true; } + settings.PGDisable = !IsEnablePgSyntax; settings.InferSyntaxVersion = true; settings.V0ForceDisable = false; settings.WarnOnV0 = false; @@ -153,13 +154,13 @@ NSQLTranslation::TTranslationSettings TKqpTranslationSettingsBuilder::Build(NYql } NYql::TAstParseResult ParseQuery(const TString& queryText, bool isSql, TMaybe& sqlVersion, bool& deprecatedSQL, - NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName, bool enablePgSyntax) { + NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName) { NYql::TAstParseResult astRes; settingsBuilder.SetSqlVersion(sqlVersion); if (isSql) { auto settings = settingsBuilder.Build(ctx); NYql::TStmtParseInfo stmtParseInfo; - auto ast = NSQLTranslation::SqlToYql(queryText, settings, nullptr, &stmtParseInfo, enablePgSyntax); + auto ast = NSQLTranslation::SqlToYql(queryText, settings, nullptr, &stmtParseInfo); deprecatedSQL = (ast.ActualSyntaxType == NYql::ESyntaxType::YQLv0); sqlVersion = ast.ActualSyntaxType == NYql::ESyntaxType::YQLv1 ? 1 : 0; keepInCache = stmtParseInfo.KeepInCache; @@ -175,7 +176,7 @@ NYql::TAstParseResult ParseQuery(const TString& queryText, bool isSql, TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool enablePgSyntax) { +TQueryAst ParseQuery(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder) { bool deprecatedSQL; bool keepInCache; TMaybe commandTagName; @@ -185,19 +186,19 @@ TQueryAst ParseQuery(const TString& queryText, const TMaybe& } NYql::TExprContext ctx; - auto astRes = ParseQuery(queryText, isSql, sqlVersion, deprecatedSQL, ctx, settingsBuilder, keepInCache, commandTagName, enablePgSyntax); + auto astRes = ParseQuery(queryText, isSql, sqlVersion, deprecatedSQL, ctx, settingsBuilder, keepInCache, commandTagName); return TQueryAst(std::make_shared(std::move(astRes)), sqlVersion, deprecatedSQL, keepInCache, commandTagName); } TVector ParseStatements(const TString& queryText, bool isSql, TMaybe& sqlVersion, bool& deprecatedSQL, - NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool enablePgSyntax) { + NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder) { TVector result; settingsBuilder.SetSqlVersion(sqlVersion); if (isSql) { auto settings = settingsBuilder.Build(ctx); ui16 actualSyntaxVersion = 0; TVector stmtParseInfo; - auto astStatements = NSQLTranslation::SqlToAstStatements(queryText, settings, nullptr, &actualSyntaxVersion, &stmtParseInfo, enablePgSyntax); + auto astStatements = NSQLTranslation::SqlToAstStatements(queryText, settings, nullptr, &actualSyntaxVersion, &stmtParseInfo); deprecatedSQL = (actualSyntaxVersion == 0); sqlVersion = actualSyntaxVersion; YQL_ENSURE(astStatements.size() == stmtParseInfo.size()); @@ -211,9 +212,9 @@ TVector ParseStatements(const TString& queryText, bool isSql, TMaybe< } } -TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution, bool enablePgSyntax) { +TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution) { if (!perStatementExecution) { - return {ParseQuery(queryText, syntax, isSql, settingsBuilder, enablePgSyntax)}; + return {ParseQuery(queryText, syntax, isSql, settingsBuilder)}; } bool deprecatedSQL; TMaybe sqlVersion; @@ -222,7 +223,7 @@ TVector ParseStatements(const TString& queryText, const TMaybe SqlAutoCommit = {}; TGUCSettings::TPtr GUCSettings; TMaybe ApplicationName = {}; @@ -85,9 +91,9 @@ NSQLTranslation::EBindingsMode RemapBindingsMode(NKikimrConfig::TTableServiceCon NYql::EKikimrQueryType ConvertType(NKikimrKqp::EQueryType type); NYql::TAstParseResult ParseQuery(const TString& queryText, bool isSql, TMaybe& sqlVersion, bool& deprecatedSQL, - NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName, bool enablePgSyntax = false); + NYql::TExprContext& ctx, TKqpTranslationSettingsBuilder& settingsBuilder, bool& keepInCache, TMaybe& commandTagName); -TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution, bool enablePgSyntax = false); +TVector ParseStatements(const TString& queryText, const TMaybe& syntax, bool isSql, TKqpTranslationSettingsBuilder& settingsBuilder, bool perStatementExecution); } // namespace NKqp } // namespace NKikimr diff --git a/ydb/library/yql/sql/settings/translation_settings.cpp b/ydb/library/yql/sql/settings/translation_settings.cpp index 6e113ba42fa4..1ab764a35bc6 100644 --- a/ydb/library/yql/sql/settings/translation_settings.cpp +++ b/ydb/library/yql/sql/settings/translation_settings.cpp @@ -58,6 +58,7 @@ namespace NSQLTranslation { , InferSyntaxVersion(false) , V0Behavior(EV0Behavior::Disable) , V0ForceDisable(InTestEnvironment()) + , PGDisable(false) , WarnOnV0(true) , V0WarnAsError(ISqlFeaturePolicy::MakeAlwaysDisallow()) , DqDefaultAuto(ISqlFeaturePolicy::MakeAlwaysDisallow()) diff --git a/ydb/library/yql/sql/settings/translation_settings.h b/ydb/library/yql/sql/settings/translation_settings.h index 8470bf09ae02..e27b000290d1 100644 --- a/ydb/library/yql/sql/settings/translation_settings.h +++ b/ydb/library/yql/sql/settings/translation_settings.h @@ -106,6 +106,7 @@ namespace NSQLTranslation { bool InferSyntaxVersion; EV0Behavior V0Behavior; bool V0ForceDisable; + bool PGDisable; bool WarnOnV0; ISqlFeaturePolicy::TPtr V0WarnAsError; ISqlFeaturePolicy::TPtr DqDefaultAuto; diff --git a/ydb/library/yql/sql/sql.cpp b/ydb/library/yql/sql/sql.cpp index fc2c00c97c4d..8aa214321690 100644 --- a/ydb/library/yql/sql/sql.cpp +++ b/ydb/library/yql/sql/sql.cpp @@ -15,7 +15,7 @@ namespace NSQLTranslation { NYql::TAstParseResult SqlToYql(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules, NYql::TStmtParseInfo* stmtParseInfo, bool enablePgSyntax) + NYql::TWarningRules* warningRules, NYql::TStmtParseInfo* stmtParseInfo) { NYql::TAstParseResult result; TTranslationSettings parsedSettings(settings); @@ -34,7 +34,7 @@ namespace NSQLTranslation { return result; } - if (parsedSettings.PgParser && !enablePgSyntax) { + if (parsedSettings.PgParser && parsedSettings.PGDisable) { result.Issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR, "PG syntax is disabled")); return result; @@ -166,7 +166,7 @@ namespace NSQLTranslation { } TVector SqlToAstStatements(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules, ui16* actualSyntaxVersion, TVector* stmtParseInfo, bool enablePgSyntax) + NYql::TWarningRules* warningRules, ui16* actualSyntaxVersion, TVector* stmtParseInfo) { TVector result; NYql::TIssues issues; @@ -190,7 +190,7 @@ namespace NSQLTranslation { return {}; } - if (parsedSettings.PgParser && !enablePgSyntax) { + if (parsedSettings.PgParser && parsedSettings.PGDisable) { issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR, "PG syntax is disabled")); return result; diff --git a/ydb/library/yql/sql/sql.h b/ydb/library/yql/sql/sql.h index 4909b1378876..f00252a5faec 100644 --- a/ydb/library/yql/sql/sql.h +++ b/ydb/library/yql/sql/sql.h @@ -16,12 +16,12 @@ namespace NSQLTranslation { NYql::TAstParseResult SqlToYql(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules = nullptr, NYql::TStmtParseInfo* stmtParseInfo = nullptr, bool enablePgSyntax = true); + NYql::TWarningRules* warningRules = nullptr, NYql::TStmtParseInfo* stmtParseInfo = nullptr); google::protobuf::Message* SqlAST(const TString& query, const TString& queryName, NYql::TIssues& issues, size_t maxErrors, const TTranslationSettings& settings = {}, ui16* actualSyntaxVersion = nullptr); ILexer::TPtr SqlLexer(const TString& query, NYql::TIssues& issues, const TTranslationSettings& settings = {}, ui16* actualSyntaxVersion = nullptr); NYql::TAstParseResult SqlASTToYql(const google::protobuf::Message& protoAst, const TSQLHints& hints, const TTranslationSettings& settings); TVector SqlToAstStatements(const TString& query, const TTranslationSettings& settings, - NYql::TWarningRules* warningRules = nullptr, ui16* actualSyntaxVersion = nullptr, TVector* stmtParseInfo = nullptr, bool enablePgSyntax = true); + NYql::TWarningRules* warningRules = nullptr, ui16* actualSyntaxVersion = nullptr, TVector* stmtParseInfo = nullptr); } // namespace NSQLTranslationV0 From d0dfa0c41ec31673116006e526220e151b678340 Mon Sep 17 00:00:00 2001 From: Nikolay Shumkov Date: Wed, 4 Sep 2024 20:19:46 +0300 Subject: [PATCH 5/5] Fixes --- ydb/core/kqp/ut/pg/kqp_pg_ut.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp index 32dc3565721e..f90933041582 100644 --- a/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp +++ b/ydb/core/kqp/ut/pg/kqp_pg_ut.cpp @@ -4852,4 +4852,4 @@ Y_UNIT_TEST_SUITE(KqpPg) { } } // namespace NKqp -} // namespace NKikimr \ No newline at end of file +} // namespace NKikimr