Skip to content

Commit bea5f8c

Browse files
authored
Add EnablePgSyntax flag (#8764)
1 parent 8b46f5b commit bea5f8c

File tree

11 files changed

+29
-12
lines changed

11 files changed

+29
-12
lines changed

ydb/core/kqp/compile_service/kqp_compile_actor.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,9 @@ class TKqpCompileActor : public TActorBootstrapped<TKqpCompileActor> {
134134
NSQLTranslation::EBindingsMode bindingsMode = Config->BindingsMode;
135135
bool isEnableExternalDataSources = AppData(ctx)->FeatureFlags.GetEnableExternalDataSources();
136136
bool isEnablePgConstsToParams = Config->EnablePgConstsToParams;
137+
bool isPgSyntaxEnable = AppData(ctx)->FeatureFlags.GetEnablePgSyntax();
137138

138-
auto astResult = ParseQuery(ConvertType(QueryId.Settings.QueryType), QueryId.Settings.Syntax, QueryId.Text, QueryId.QueryParameterTypes, QueryId.IsSql(), cluster, kqpTablePathPrefix, kqpYqlSyntaxVersion, bindingsMode, isEnableExternalDataSources, isEnablePgConstsToParams);
139+
auto astResult = ParseQuery(ConvertType(QueryId.Settings.QueryType), QueryId.Settings.Syntax, QueryId.Text, QueryId.QueryParameterTypes, QueryId.IsSql(), cluster, kqpTablePathPrefix, kqpYqlSyntaxVersion, bindingsMode, isEnableExternalDataSources, isEnablePgConstsToParams, isPgSyntaxEnable);
139140
YQL_ENSURE(astResult.Ast);
140141
if (astResult.Ast->IsOk()) {
141142
AstResult = std::move(astResult);

ydb/core/kqp/host/kqp_host.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,8 @@ class TKqpHost : public IKqpHost {
11021102
query.Text, query.ParameterTypes, isSql, sqlAutoCommit, sqlVersion, TypesCtx->DeprecatedSQL,
11031103
Cluster, SessionCtx->Config()._KqpTablePathPrefix.Get().GetRef(),
11041104
SessionCtx->Config()._KqpYqlSyntaxVersion.Get().GetRef(), SessionCtx->Config().BindingsMode,
1105-
SessionCtx->Config().FeatureFlags.GetEnableExternalDataSources(), ctx, SessionCtx->Config().EnablePgConstsToParams);
1105+
SessionCtx->Config().FeatureFlags.GetEnableExternalDataSources(), ctx, SessionCtx->Config().EnablePgConstsToParams,
1106+
SessionCtx->Config().FeatureFlags.GetEnablePgSyntax());
11061107
queryAst = std::make_shared<NYql::TAstParseResult>(std::move(astRes));
11071108
} else {
11081109
queryAst = query.AstResult->Ast;

ydb/core/kqp/host/kqp_translate.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ NYql::EKikimrQueryType ConvertType(NKikimrKqp::EQueryType type) {
5656
NSQLTranslation::TTranslationSettings GetTranslationSettings(NYql::EKikimrQueryType queryType, const TMaybe<bool>& usePgParser, bool sqlAutoCommit,
5757
const TString& queryText, std::shared_ptr<std::map<TString, Ydb::Type>> queryParameters, TMaybe<ui16>& sqlVersion, TString cluster,
5858
TString kqpTablePathPrefix, ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources,
59-
NYql::TExprContext& ctx, bool isEnablePgConstsToParams) {
59+
NYql::TExprContext& ctx, bool isEnablePgConstsToParams, bool isEnablePgSyntax) {
6060
NSQLTranslation::TTranslationSettings settings{};
6161

6262
if (usePgParser) {
@@ -89,6 +89,7 @@ NSQLTranslation::TTranslationSettings GetTranslationSettings(NYql::EKikimrQueryT
8989
settings.BindingsMode = bindingsMode;
9090
}
9191

92+
settings.PGDisable = !isEnablePgSyntax;
9293
settings.InferSyntaxVersion = true;
9394
settings.V0ForceDisable = false;
9495
settings.WarnOnV0 = false;
@@ -148,10 +149,10 @@ NYql::TAstParseResult ParseQuery(NYql::EKikimrQueryType queryType, const TMaybe<
148149
std::shared_ptr<std::map<TString, Ydb::Type>> queryParameters, bool isSql, bool sqlAutoCommit,
149150
TMaybe<ui16>& sqlVersion, bool& deprecatedSQL, TString cluster, TString kqpTablePathPrefix,
150151
ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources,
151-
NYql::TExprContext& ctx, bool isEnablePgConstsToParams) {
152+
NYql::TExprContext& ctx, bool isEnablePgConstsToParams, bool isEnablePgSyntax) {
152153
NYql::TAstParseResult astRes;
153154
if (isSql) {
154-
auto settings = GetTranslationSettings(queryType, usePgParser, sqlAutoCommit, queryText, queryParameters, sqlVersion, cluster, kqpTablePathPrefix, kqpYqlSyntaxVersion, bindingsMode, isEnableExternalDataSources, ctx, isEnablePgConstsToParams);
155+
auto settings = GetTranslationSettings(queryType, usePgParser, sqlAutoCommit, queryText, queryParameters, sqlVersion, cluster, kqpTablePathPrefix, kqpYqlSyntaxVersion, bindingsMode, isEnableExternalDataSources, ctx, isEnablePgConstsToParams, isEnablePgSyntax);
155156
ui16 actualSyntaxVersion = 0;
156157
auto ast = NSQLTranslation::SqlToYql(queryText, settings, nullptr, &actualSyntaxVersion);
157158
deprecatedSQL = (actualSyntaxVersion == 0);
@@ -168,7 +169,7 @@ NYql::TAstParseResult ParseQuery(NYql::EKikimrQueryType queryType, const TMaybe<
168169
}
169170

170171
TQueryAst ParseQuery(NYql::EKikimrQueryType queryType, const TMaybe<Ydb::Query::Syntax>& syntax, const TString& queryText, std::shared_ptr<std::map<TString, Ydb::Type>> queryParameters, bool isSql,
171-
TString cluster, TString kqpTablePathPrefix, ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources, bool isEnablePgConstsToParams) {
172+
TString cluster, TString kqpTablePathPrefix, ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources, bool isEnablePgConstsToParams, bool isEnablePgSyntax) {
172173
bool deprecatedSQL;
173174
TMaybe<ui16> sqlVersion;
174175
TMaybe<bool> usePgParser;
@@ -191,7 +192,7 @@ TQueryAst ParseQuery(NYql::EKikimrQueryType queryType, const TMaybe<Ydb::Query::
191192
} else {
192193
sqlAutoCommit = false;
193194
}
194-
auto astRes = ParseQuery(queryType, usePgParser, queryText, queryParameters, isSql, sqlAutoCommit, sqlVersion, deprecatedSQL, cluster, kqpTablePathPrefix, kqpYqlSyntaxVersion, bindingsMode, isEnableExternalDataSources, ctx, isEnablePgConstsToParams);
195+
auto astRes = ParseQuery(queryType, usePgParser, queryText, queryParameters, isSql, sqlAutoCommit, sqlVersion, deprecatedSQL, cluster, kqpTablePathPrefix, kqpYqlSyntaxVersion, bindingsMode, isEnableExternalDataSources, ctx, isEnablePgConstsToParams, isEnablePgSyntax);
195196
return TQueryAst(std::make_shared<NYql::TAstParseResult>(std::move(astRes)), sqlVersion, deprecatedSQL);
196197
}
197198

ydb/core/kqp/host/kqp_translate.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,16 @@ NYql::EKikimrQueryType ConvertType(NKikimrKqp::EQueryType type);
1313
NSQLTranslation::TTranslationSettings GetTranslationSettings(NYql::EKikimrQueryType queryType, const TMaybe<bool>& usePgParser, bool sqlAutoCommit,
1414
const TString& queryText, std::shared_ptr<std::map<TString, Ydb::Type>> queryParameters, TMaybe<ui16>& sqlVersion, TString cluster,
1515
TString kqpTablePathPrefix, ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources, NYql::TExprContext& ctx,
16-
bool isEnablePgConstsToParams);
16+
bool isEnablePgConstsToParams, bool isEnablePgSyntax);
1717

1818
NYql::TAstParseResult ParseQuery(NYql::EKikimrQueryType queryType, const TMaybe<bool>& usePgParser, const TString& queryText,
1919
std::shared_ptr<std::map<TString, Ydb::Type>> queryParameters, bool isSql, bool sqlAutoCommit, TMaybe<ui16>& sqlVersion,
2020
bool& deprecatedSQL, TString cluster, TString kqpTablePathPrefix, ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode,
21-
bool isEnableExternalDataSources, NYql::TExprContext& ctx, bool isEnablePgConstsToParams);
21+
bool isEnableExternalDataSources, NYql::TExprContext& ctx, bool isEnablePgConstsToParams, bool isEnablePgSyntax);
2222

2323
TQueryAst ParseQuery(NYql::EKikimrQueryType queryType, const TMaybe<Ydb::Query::Syntax>& syntax, const TString& queryText,
2424
std::shared_ptr<std::map<TString, Ydb::Type>> queryParameters, bool isSql, TString cluster, TString kqpTablePathPrefix,
25-
ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources, bool isEnablePgConstsToParams);
25+
ui16 kqpYqlSyntaxVersion, NSQLTranslation::EBindingsMode bindingsMode, bool isEnableExternalDataSources, bool isEnablePgConstsToParams, bool isEnablePgSyntax);
2626

2727
} // namespace NKqp
2828
} // namespace NKikimr

ydb/core/kqp/ut/common/kqp_ut_common.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ TKikimrRunner::TKikimrRunner(const TKikimrSettings& settings) {
130130
ServerSettings->SetEnableUniqConstraint(true);
131131
ServerSettings->SetUseRealThreads(settings.UseRealThreads);
132132
ServerSettings->SetEnableTablePgTypes(true);
133+
ServerSettings->SetEnablePgSyntax(true);
133134

134135
if (settings.Storage) {
135136
ServerSettings->SetCustomDiskParams(*settings.Storage);

ydb/core/protos/feature_flags.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,4 +133,5 @@ message TFeatureFlags {
133133
optional bool EnableStableNodeNames = 122 [default = false];
134134
optional bool EnableVolatileTransactionArbiters = 124 [default = false];
135135
optional bool EnableChangefeedsOnIndexTables = 134 [default = false];
136+
optional bool EnablePgSyntax = 139 [default = false];
136137
}

ydb/core/testlib/basics/feature_flags.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ class TTestFeatureFlagsHolder {
6060
FEATURE_FLAG_SETTER(EnableReplaceIfExistsForExternalEntities)
6161
FEATURE_FLAG_SETTER(EnableCMSRequestPriorities)
6262
FEATURE_FLAG_SETTER(EnableChangefeedsOnIndexTables)
63+
FEATURE_FLAG_SETTER(EnablePgSyntax)
6364

6465
#undef FEATURE_FLAG_SETTER
6566
};

ydb/library/yql/sql/settings/translation_settings.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ namespace NSQLTranslation {
5353
, InferSyntaxVersion(false)
5454
, V0Behavior(EV0Behavior::Disable)
5555
, V0ForceDisable(InTestEnvironment())
56+
, PGDisable(false)
5657
, WarnOnV0(true)
5758
, V0WarnAsError(ISqlFeaturePolicy::MakeAlwaysDisallow())
5859
, DqDefaultAuto(ISqlFeaturePolicy::MakeAlwaysDisallow())

ydb/library/yql/sql/settings/translation_settings.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ namespace NSQLTranslation {
100100
bool InferSyntaxVersion;
101101
EV0Behavior V0Behavior;
102102
bool V0ForceDisable;
103+
bool PGDisable;
103104
bool WarnOnV0;
104105
ISqlFeaturePolicy::TPtr V0WarnAsError;
105106
ISqlFeaturePolicy::TPtr DqDefaultAuto;

ydb/library/yql/sql/sql.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ namespace NSQLTranslation {
3838
return result;
3939
}
4040

41+
if (parsedSettings.PgParser && parsedSettings.PGDisable) {
42+
result.Issues.AddIssue(NYql::YqlIssue(NYql::TPosition(), NYql::TIssuesIds::DEFAULT_ERROR,
43+
"PG syntax is disabled"));
44+
return result;
45+
}
46+
4147
if (parsedSettings.PgParser) {
4248
return NSQLTranslationPG::PGToYql(query, parsedSettings);
4349
}

ydb/tests/functional/postgresql/test_postgres.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ def setup_class(cls):
8282
'KQP_COMPILE_ACTOR': LogLevels.DEBUG,
8383
'KQP_COMPILE_REQUEST': LogLevels.DEBUG,
8484
'KQP_PROXY': LogLevels.DEBUG
85-
}
85+
},
86+
extra_feature_flags=['enable_pg_syntax']
8687
))
8788
cls.cluster.start()
8889

@@ -94,7 +95,9 @@ def teardown_class(cls):
9495
class TestPgwireSidecar(object):
9596
@classmethod
9697
def setup_class(cls):
97-
cls.cluster = kikimr_cluster_factory()
98+
cls.cluster = kikimr_cluster_factory(KikimrConfigGenerator(
99+
extra_feature_flags=['enable_pg_syntax']
100+
))
98101
cls.cluster.start()
99102
cls.endpoint = '%s:%s' % (cls.cluster.nodes[1].host, cls.cluster.nodes[1].port)
100103
cls.pgwireListenPort = pm.get_port()

0 commit comments

Comments
 (0)