diff --git a/ydb/core/kqp/compile_service/kqp_compile_service.cpp b/ydb/core/kqp/compile_service/kqp_compile_service.cpp index ff52fe2277f9..b032b21bec75 100644 --- a/ydb/core/kqp/compile_service/kqp_compile_service.cpp +++ b/ydb/core/kqp/compile_service/kqp_compile_service.cpp @@ -528,6 +528,8 @@ class TKqpCompileService : public TActorBootstrapped { bool enableCreateTableAs = TableServiceConfig.GetEnableCreateTableAs(); auto blockChannelsMode = TableServiceConfig.GetBlockChannelsMode(); + bool enableImplicitQueryParameterTypes = TableServiceConfig.GetEnableImplicitQueryParameterTypes(); + auto mkqlHeavyLimit = TableServiceConfig.GetResourceManager().GetMkqlHeavyProgramMemoryLimit(); bool enableQueryServiceSpilling = TableServiceConfig.GetEnableQueryServiceSpilling(); @@ -558,7 +560,8 @@ class TKqpCompileService : public TActorBootstrapped { TableServiceConfig.GetExtractPredicateRangesLimit() != rangesLimit || TableServiceConfig.GetResourceManager().GetMkqlHeavyProgramMemoryLimit() != mkqlHeavyLimit || TableServiceConfig.GetIdxLookupJoinPointsLimit() != idxLookupPointsLimit || - TableServiceConfig.GetEnableQueryServiceSpilling() != enableQueryServiceSpilling) { + TableServiceConfig.GetEnableQueryServiceSpilling() != enableQueryServiceSpilling || + TableServiceConfig.GetEnableImplicitQueryParameterTypes() != enableImplicitQueryParameterTypes) { QueryCache.Clear(); diff --git a/ydb/core/kqp/session_actor/kqp_query_state.h b/ydb/core/kqp/session_actor/kqp_query_state.h index 38447c484c8c..30b313fe9a7d 100644 --- a/ydb/core/kqp/session_actor/kqp_query_state.h +++ b/ydb/core/kqp/session_actor/kqp_query_state.h @@ -67,8 +67,7 @@ class TKqpQueryState : public TNonCopyable { , StartedAt(startedAt) { RequestEv.reset(ev->Release().Release()); - - if (AppData()->FeatureFlags.GetEnableImplicitQueryParameterTypes() && !RequestEv->GetYdbParameters().empty()) { + if (tableServiceConfig.GetEnableImplicitQueryParameterTypes() && !RequestEv->GetYdbParameters().empty()) { QueryParameterTypes = std::make_shared>(); for (const auto& [name, typedValue] : RequestEv->GetYdbParameters()) { QueryParameterTypes->insert({name, typedValue.Gettype()}); diff --git a/ydb/core/kqp/ut/query/kqp_params_ut.cpp b/ydb/core/kqp/ut/query/kqp_params_ut.cpp index 86094d3a61e6..d265a84b62fd 100644 --- a/ydb/core/kqp/ut/query/kqp_params_ut.cpp +++ b/ydb/core/kqp/ut/query/kqp_params_ut.cpp @@ -103,8 +103,12 @@ Y_UNIT_TEST_SUITE(KqpParams) { } Y_UNIT_TEST(ImplicitParameterTypes) { - TKikimrRunner kikimr; - kikimr.GetTestServer().GetRuntime()->GetAppData(0).FeatureFlags.SetEnableImplicitQueryParameterTypes(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableImplicitQueryParameterTypes(true); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({NKikimrKqp::TKqpSetting()}); + TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -127,8 +131,12 @@ Y_UNIT_TEST_SUITE(KqpParams) { Y_UNIT_TEST(CheckQueryCacheForPreparedQuery) { // All params are declared in the text - TKikimrRunner kikimr; - kikimr.GetTestServer().GetRuntime()->GetAppData(0).FeatureFlags.SetEnableImplicitQueryParameterTypes(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableImplicitQueryParameterTypes(true); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({NKikimrKqp::TKqpSetting()}); + TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -164,8 +172,12 @@ Y_UNIT_TEST_SUITE(KqpParams) { Y_UNIT_TEST(CheckQueryCacheForUnpreparedQuery) { // Some params are declared in text, some by user - TKikimrRunner kikimr; - kikimr.GetTestServer().GetRuntime()->GetAppData(0).FeatureFlags.SetEnableImplicitQueryParameterTypes(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableImplicitQueryParameterTypes(true); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({NKikimrKqp::TKqpSetting()}); + TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -284,8 +296,12 @@ Y_UNIT_TEST_SUITE(KqpParams) { Y_UNIT_TEST(CheckQueryCacheForExecuteAndPreparedQueries) { // All params are declared in the text - TKikimrRunner kikimr; - kikimr.GetTestServer().GetRuntime()->GetAppData(0).FeatureFlags.SetEnableImplicitQueryParameterTypes(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableImplicitQueryParameterTypes(true); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({NKikimrKqp::TKqpSetting()}); + TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -493,8 +509,12 @@ Y_UNIT_TEST_SUITE(KqpParams) { } Y_UNIT_TEST(ImplicitSameParameterTypesQueryCacheCheck) { - TKikimrRunner kikimr; - kikimr.GetTestServer().GetRuntime()->GetAppData(0).FeatureFlags.SetEnableImplicitQueryParameterTypes(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableImplicitQueryParameterTypes(true); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({NKikimrKqp::TKqpSetting()}); + TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); @@ -519,8 +539,12 @@ Y_UNIT_TEST_SUITE(KqpParams) { } Y_UNIT_TEST(ImplicitDifferentParameterTypesQueryCacheCheck) { - TKikimrRunner kikimr; - kikimr.GetTestServer().GetRuntime()->GetAppData(0).FeatureFlags.SetEnableImplicitQueryParameterTypes(true); + NKikimrConfig::TAppConfig appConfig; + appConfig.MutableTableServiceConfig()->SetEnableImplicitQueryParameterTypes(true); + auto serverSettings = TKikimrSettings() + .SetAppConfig(appConfig) + .SetKqpSettings({NKikimrKqp::TKqpSetting()}); + TKikimrRunner kikimr(serverSettings); auto db = kikimr.GetTableClient(); auto session = db.CreateSession().GetValueSync().GetSession(); diff --git a/ydb/core/protos/feature_flags.proto b/ydb/core/protos/feature_flags.proto index 49d3096b7dd6..ee7e48609ffb 100644 --- a/ydb/core/protos/feature_flags.proto +++ b/ydb/core/protos/feature_flags.proto @@ -105,7 +105,7 @@ message TFeatureFlags { optional bool EnableSeparationComputeActorsFromRead = 90 [default = false]; optional bool EnablePQConfigTransactionsAtSchemeShard = 91 [default = false]; optional bool EnableScriptExecutionOperations = 92 [default = true]; - optional bool EnableImplicitQueryParameterTypes = 93 [default = false]; + reserved 93; // optional bool EnableImplicitQueryParameterTypes = 93 [default = true]; optional bool EnableForceImmediateEffectsExecution = 94 [default = false]; optional bool EnableTopicSplitMerge = 95 [default = false]; optional bool EnableChangefeedDynamoDBStreamsFormat = 96 [default = true]; diff --git a/ydb/core/protos/table_service_config.proto b/ydb/core/protos/table_service_config.proto index 144ee16e31c2..33d8a1442bf8 100644 --- a/ydb/core/protos/table_service_config.proto +++ b/ydb/core/protos/table_service_config.proto @@ -294,4 +294,6 @@ message TTableServiceConfig { optional uint64 QueryReplayCacheUploadTTLSec = 62 [default = 36000]; optional bool EnableQueryServiceSpilling = 63 [ default = true ]; + + optional bool EnableImplicitQueryParameterTypes = 66 [ default = true ]; };