diff options
author | ssmike <ssmike@ydb.tech> | 2023-08-04 21:40:23 +0300 |
---|---|---|
committer | ssmike <ssmike@ydb.tech> | 2023-08-04 22:13:58 +0300 |
commit | a563c2cdaa73de61fe398c7fb2951292d26a844f (patch) | |
tree | b0d57c1bc0911152ab993284faeb6b31e3ef896e | |
parent | d48d3540fe69d14fb5e5f4b2c48dedd0f1319d3e (diff) | |
download | ydb-a563c2cdaa73de61fe398c7fb2951292d26a844f.tar.gz |
Don't use legacy optimizer by default
48 files changed, 529 insertions, 396 deletions
diff --git a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp index 9d9c723bf9..7549578202 100644 --- a/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp +++ b/ydb/core/kqp/opt/logical/kqp_opt_log_ranges_predext.cpp @@ -278,6 +278,7 @@ TExprBase KqpPushExtractedPredicateToReadTable(TExprBase node, TExprContext& ctx YQL_ENSURE(pointsExtractionResult.ComputeNode); prefixPointsExpr = BuildPointsList(pointsExtractionResult, pointKeys, ctx); YQL_CLOG(DEBUG, ProviderKqp) << "Points extracted: " << KqpExprToPrettyString(*prefixPointsExpr, ctx); + YQL_CLOG(DEBUG, ProviderKqp) << "Residual lambda: " << KqpExprToPrettyString(*pointsExtractionResult.PrunedLambda, ctx); } TExprNode::TPtr residualLambda = buildResult.PrunedLambda; @@ -386,7 +387,10 @@ TExprBase KqpPushExtractedPredicateToReadTable(TExprBase node, TExprContext& ctx .Done(); } } - } else if (buildResult.PointPrefixLen == tableDesc.Metadata->KeyColumnNames.size()) { + } else if (buildResult.PointPrefixLen == buildResult.UsedPrefixLen && + // readranges is better in case of one range because supports limits and lookupjoin + !(buildResult.ExpectedMaxRanges == TMaybe<size_t>(1) && buildResult.PointPrefixLen < tableDesc.Metadata->KeyColumnNames.size())) + { YQL_ENSURE(prefixPointsExpr); residualLambda = pointsExtractionResult.PrunedLambda; buildLookup(prefixPointsExpr, input); diff --git a/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp b/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp index 80bc55fc62..597bc523a3 100644 --- a/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp +++ b/ydb/core/kqp/ut/cost/kqp_cost_ut.cpp @@ -91,9 +91,9 @@ Y_UNIT_TEST_SUITE(KqpCost) { )", NYdb::FormatResultSetYson(result.GetResultSet(0))); auto stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 2); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().bytes(), 40); + size_t phase = stats.query_phases_size() - 1; + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).reads().rows(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).reads().bytes(), 40); } Y_UNIT_TEST_TWIN(RangeFullScan, SourceRead) { diff --git a/ydb/core/kqp/ut/effects/kqp_inplace_update_ut.cpp b/ydb/core/kqp/ut/effects/kqp_inplace_update_ut.cpp index 922ff220aa..1f85761e0c 100644 --- a/ydb/core/kqp/ut/effects/kqp_inplace_update_ut.cpp +++ b/ydb/core/kqp/ut/effects/kqp_inplace_update_ut.cpp @@ -381,11 +381,10 @@ Y_UNIT_TEST_TWIN(Negative_BatchUpdate, EnableInplaceUpdate) { // ASSERT_LITERAL_PHASE(stats, 1); // ASSERT_PHASE(stats, 2, "/Root/InplaceUpdate", 2, 2); // } else { - UNIT_ASSERT_VALUES_EQUAL_C(stats.query_phases().size(), 4, stats.DebugString()); + UNIT_ASSERT_VALUES_EQUAL_C(stats.query_phases().size(), 3, stats.DebugString()); ASSERT_LITERAL_PHASE(stats, 0); - ASSERT_LITERAL_PHASE(stats, 1); - ASSERT_PHASE(stats, 2, "/Root/InplaceUpdate", 2, 0); - ASSERT_PHASE(stats, 3, "/Root/InplaceUpdate", 0, 2); + ASSERT_PHASE(stats, 1, "/Root/InplaceUpdate", 2, 0); + ASSERT_PHASE(stats, 2, "/Root/InplaceUpdate", 0, 2); // } }); } diff --git a/ydb/core/kqp/ut/opt/CMakeLists.darwin-x86_64.txt b/ydb/core/kqp/ut/opt/CMakeLists.darwin-x86_64.txt index 6698f154e3..91f0546a6a 100644 --- a/ydb/core/kqp/ut/opt/CMakeLists.darwin-x86_64.txt +++ b/ydb/core/kqp/ut/opt/CMakeLists.darwin-x86_64.txt @@ -36,6 +36,7 @@ target_link_options(ydb-core-kqp-ut-opt PRIVATE ) target_sources(ydb-core-kqp-ut-opt PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_agg_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_kv_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_merge_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp diff --git a/ydb/core/kqp/ut/opt/CMakeLists.linux-aarch64.txt b/ydb/core/kqp/ut/opt/CMakeLists.linux-aarch64.txt index 7573c704e6..f0bda02f2f 100644 --- a/ydb/core/kqp/ut/opt/CMakeLists.linux-aarch64.txt +++ b/ydb/core/kqp/ut/opt/CMakeLists.linux-aarch64.txt @@ -39,6 +39,7 @@ target_link_options(ydb-core-kqp-ut-opt PRIVATE ) target_sources(ydb-core-kqp-ut-opt PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_agg_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_kv_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_merge_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp diff --git a/ydb/core/kqp/ut/opt/CMakeLists.linux-x86_64.txt b/ydb/core/kqp/ut/opt/CMakeLists.linux-x86_64.txt index a50261610f..714c0b37c8 100644 --- a/ydb/core/kqp/ut/opt/CMakeLists.linux-x86_64.txt +++ b/ydb/core/kqp/ut/opt/CMakeLists.linux-x86_64.txt @@ -40,6 +40,7 @@ target_link_options(ydb-core-kqp-ut-opt PRIVATE ) target_sources(ydb-core-kqp-ut-opt PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_agg_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_kv_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_merge_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp diff --git a/ydb/core/kqp/ut/opt/CMakeLists.windows-x86_64.txt b/ydb/core/kqp/ut/opt/CMakeLists.windows-x86_64.txt index fbe3b550fe..7d1c0599fa 100644 --- a/ydb/core/kqp/ut/opt/CMakeLists.windows-x86_64.txt +++ b/ydb/core/kqp/ut/opt/CMakeLists.windows-x86_64.txt @@ -29,6 +29,7 @@ target_link_libraries(ydb-core-kqp-ut-opt PUBLIC ) target_sources(ydb-core-kqp-ut-opt PRIVATE ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_agg_ut.cpp + ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_kv_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_merge_ut.cpp ${CMAKE_SOURCE_DIR}/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp diff --git a/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp b/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp new file mode 100644 index 0000000000..4497b63c81 --- /dev/null +++ b/ydb/core/kqp/ut/opt/kqp_extract_predicate_unpack_ut.cpp @@ -0,0 +1,271 @@ +#include <ydb/core/kqp/ut/common/kqp_ut_common.h> + +#include <ydb/public/sdk/cpp/client/ydb_proto/accessor.h> + +namespace NKikimr { +namespace NKqp { + +using namespace NYdb; +using namespace NYdb::NTable; + +void PrepareTablesToUnpack(TSession session) { + auto result1 = session.ExecuteSchemeQuery(R"( + CREATE TABLE `/Root/ComplexKey` ( + Key Int32, + Fk Int32, + Value String, + PRIMARY KEY (Key, Fk) + ); + CREATE TABLE `/Root/SimpleKey` ( + Key Int32, + Value String, + PRIMARY KEY (Key)); + )").GetValueSync(); + UNIT_ASSERT_C(result1.IsSuccess(), result1.GetIssues().ToString()); + + auto result2 = session.ExecuteDataQuery(R"( + REPLACE INTO `/Root/ComplexKey` (Key, Fk, Value) VALUES + (null, null, "NullValue"), + (1, 101, "Value1"), + (2, 102, "Value1"), + (2, 103, "Value3"), + (3, 103, "Value2"), + (4, 104, "Value2"), + (5, 105, "Value3"); + + REPLACE INTO `/Root/SimpleKey` (Key, Value) VALUES + (100, "Value20"), + (101, "Value21"), + (102, "Value22"), + (103, "Value23"); + )", TTxControl::BeginTx().CommitTx()).GetValueSync(); + UNIT_ASSERT_C(result2.IsSuccess(), result2.GetIssues().ToString()); + +} + +Y_UNIT_TEST_SUITE(KqpExtractPredicateLookup) { + +void Test(const TString& query, const TString& answer, bool noScans = true, bool checkForLookups = true) { + TKikimrSettings settings; + settings.SetDomainRoot(KikimrDefaultUtDomainRoot); + TKikimrRunner kikimr(settings); + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + PrepareTablesToUnpack(session); + + TExecDataQuerySettings execSettings; + execSettings.CollectQueryStats(ECollectQueryStatsMode::Basic); + + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx(), execSettings).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + UNIT_ASSERT_EQUAL(result.GetResultSets().size(), 1); + CompareYson(answer, FormatResultSetYson(result.GetResultSet(0))); + + auto explain = session.ExplainDataQuery(query).ExtractValueSync(); + if (checkForLookups) { + UNIT_ASSERT(explain.GetPlan().Contains("Lookup")); + } + if (noScans) { + UNIT_ASSERT(!explain.GetPlan().Contains("Scan")); + } +} + +void TestRange(const TString& query, const TString& answer, int stagesCount = 1) { + TKikimrSettings settings; + settings.SetDomainRoot(KikimrDefaultUtDomainRoot); + TKikimrRunner kikimr(settings); + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + + PrepareTablesToUnpack(session); + + TExecDataQuerySettings execSettings; + execSettings.CollectQueryStats(ECollectQueryStatsMode::Full); + + auto result = session.ExecuteDataQuery(query, TTxControl::BeginTx().CommitTx(), execSettings).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + + UNIT_ASSERT_EQUAL(result.GetResultSets().size(), 1); + CompareYson(answer, FormatResultSetYson(result.GetResultSet(0))); + + auto stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); + UNIT_ASSERT_EQUAL(stagesCount, stats.query_phases_size()); +} + +Y_UNIT_TEST(SimpleRange) { + TestRange( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key >= 101 AND Key < 104; + )", + R"([ + [[101];["Value21"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); + + TestRange( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key >= 101; + )", + R"([ + [[101];["Value21"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); + + TestRange( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key < 104; + )", + R"([ + [[100];["Value20"]];[[101];["Value21"]];[[102];["Value22"]];[[103];["Value23"]] + ])", + 2); + + TestRange( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key < 104 AND Key >= 0; + )", + R"([ + [[100];["Value20"]];[[101];["Value21"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); + + TestRange( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key >= 101 AND Key < 104u; + )", + R"([ + [[101];["Value21"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); +} + +Y_UNIT_TEST(ComplexRange) { + TestRange( + R"( + SELECT Key, Fk, Value FROM `/Root/ComplexKey` + WHERE Key >= 1 AND Key < 4 AND Fk >= 101 AND Fk < 104; + )", + R"([ + [[1];[101];["Value1"]];[[2];[102];["Value1"]];[[2];[103];["Value3"]];[[3];[103];["Value2"]] + ])"); + + TestRange( + R"( + SELECT Key, Fk, Value FROM `/Root/ComplexKey` + WHERE (Key, Fk) >= (1, 101) AND (Key, Fk) < (4, 104); + )", + R"([ + [[1];[101];["Value1"]];[[2];[102];["Value1"]];[[2];[103];["Value3"]];[[3];[103];["Value2"]] + ])"); + + TestRange( + R"( + SELECT Key, Fk, Value FROM `/Root/ComplexKey` + WHERE Key >= 3 and Key > 4; + )", + R"([ + [[5];[105];["Value3"]] + ])", + 2); + +} + +Y_UNIT_TEST(SqlIn) { + Test( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key IN AsList(100, 102, (100 + 3)) + ORDER BY Key; + )", + R"([ + [[100];["Value20"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); +} + +Y_UNIT_TEST(BasicLookup) { + Test( + R"( + SELECT * FROM `/Root/SimpleKey` + WHERE Key = 100 or Key = 102 or Key = 103 or Key = null; + )", + R"([ + [[100];["Value20"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); +} + +Y_UNIT_TEST(ComplexLookup) { + Test( + R"( + SELECT Key, Value FROM `/Root/SimpleKey` + WHERE Key = 100 or Key = 102 or Key = (100 + 3); + )", + R"([ + [[100];["Value20"]];[[102];["Value22"]];[[103];["Value23"]] + ])"); +} + +Y_UNIT_TEST(SqlInComplexKey) { + Test( + R"( + SELECT Key, Fk, Value FROM `/Root/ComplexKey` + WHERE (Key, Fk) IN AsList( + (1, 101), + (2, 102), + (2, 102 + 1), + ) + ORDER BY Key, Fk; + )", + R"([ + [[1];[101];["Value1"]];[[2];[102];["Value1"]];[[2];[103];["Value3"]] + ])"); +} + +Y_UNIT_TEST(BasicLookupComplexKey) { + Test( + R"( + SELECT Key, Fk, Value FROM `/Root/ComplexKey` + WHERE (Key = 1 and Fk = 101) OR + (2 = Key and 102 = Fk) OR + (2 = Key and 103 = Fk); + )", + R"([ + [[1];[101];["Value1"]];[[2];[102];["Value1"]];[[2];[103];["Value3"]] + ])"); +} + +Y_UNIT_TEST(ComplexLookupComplexKey) { + Test( + R"( + SELECT Key, Fk, Value FROM `/Root/ComplexKey` + WHERE (Key = 1 and Fk = 101) OR + (2 = Key and 102 = Fk) OR + (2 = Key and 102 + 1 = Fk); + )", + R"([ + [[1];[101];["Value1"]];[[2];[102];["Value1"]];[[2];[103];["Value3"]] + ])"); +} + +Y_UNIT_TEST(PointJoin) { + Test( + R"( + SELECT l.Key, l.Fk, l.Value, r.Key, r.Value FROM `/Root/SimpleKey` AS r + INNER JOIN `/Root/ComplexKey` AS l + ON l.Fk = r.Key + WHERE l.Key = 1 + 1 and l.Key = l.Key + ORDER BY r.Value + )", + R"([ + [[2];[102];["Value1"];[102];["Value22"]]; + [[2];[103];["Value3"];[103];["Value23"]] + ])", + /* noScans */ false); +} + +} // suite + +} // namespace NKqp +} // namespace NKikimr diff --git a/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp b/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp index ed6774f98f..78e566fa53 100644 --- a/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_ne_ut.cpp @@ -205,11 +205,7 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) { auto explainResult = session.ExplainDataQuery(query).GetValueSync(); UNIT_ASSERT_VALUES_EQUAL_C(explainResult.GetStatus(), EStatus::SUCCESS, explainResult.GetIssues().ToString()); - if (settings.AppConfig.GetTableServiceConfig().GetEnableKqpDataQuerySourceRead()) { - UNIT_ASSERT_C(explainResult.GetAst().Contains("KqpReadRangesSource"), explainResult.GetAst()); - } else { - UNIT_ASSERT_C(explainResult.GetAst().Contains("KqpLookupTable"), explainResult.GetAst()); - } + UNIT_ASSERT_C(explainResult.GetAst().Contains("KqpLookupTable"), explainResult.GetAst()); auto params = kikimr.GetTableClient().GetParamsBuilder() .AddParam("$group").OptionalUint32(1).Build() @@ -1225,17 +1221,24 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) { CompareYson(R"([[[1];[101u];["Value1"]];[[3];[301u];["Value1"]]])", FormatResultSetYson(result.GetResultSet(0))); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); // no literal phase + size_t phase = 0; + if (stats.query_phases().size() == 2) { + phase = 1; + } else if (stats.query_phases().size() == 0) { + phase = 0; + } else { + UNIT_ASSERT(false); + } - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access().size(), 1); if (!settings.AppConfig.GetTableServiceConfig().GetEnableKqpDataQueryStreamLookup()) { - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).affected_shards(), 2); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).partitions_count(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).affected_shards(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).partitions_count(), 2); } - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).name(), "/Root/EightShard"); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 2); - UNIT_ASSERT(stats.query_phases(0).table_access(0).reads().bytes() > 0); - UNIT_ASSERT(stats.query_phases(0).duration_us() > 0); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).name(), "/Root/EightShard"); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).reads().rows(), 2); + UNIT_ASSERT(stats.query_phases(phase).table_access(0).reads().bytes() > 0); + UNIT_ASSERT(stats.query_phases(phase).duration_us() > 0); } Y_UNIT_TEST(PrunePartitionsByExpr) { @@ -3257,7 +3260,6 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) { auto result = session.ExplainDataQuery(R"( --!syntax_v1 - PRAGMA kikimr.OptEnablePredicateExtract = 'false'; DECLARE $app AS Utf8; DECLARE $last_ts AS Int64; @@ -3543,10 +3545,11 @@ Y_UNIT_TEST_SUITE(KqpNewEngine) { UNIT_ASSERT(streamLookup.IsDefined()); auto stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).name(), "/Root/KeyValue"); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 0); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access(0).name(), "/Root/KeyValue"); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access(0).reads().rows(), 2); } } diff --git a/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp b/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp index 774f44c7f6..8215ab679a 100644 --- a/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_ranges_ut.cpp @@ -648,19 +648,24 @@ Y_UNIT_TEST_SUITE(KqpRanges) { UNIT_ASSERT(result.IsSuccess()); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); - - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).affected_shards(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).name(), "/Root/MultiShardTable"); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).partitions_count(), 2); + size_t readPhase = 0; + if (stats.query_phases().size() == 3) { + readPhase = 1; + } else { + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); + } - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).affected_shards(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access(0).name(), "/Root/MultiShardTable"); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access(0).updates().rows(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access(0).partitions_count(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase).affected_shards(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase).table_access(0).name(), "/Root/MultiShardTable"); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase).table_access(0).reads().rows(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase).table_access(0).partitions_count(), 1); + + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase + 1).affected_shards(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase + 1).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase + 1).table_access(0).name(), "/Root/MultiShardTable"); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase + 1).table_access(0).updates().rows(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(readPhase + 1).table_access(0).partitions_count(), 1); } } @@ -1050,12 +1055,8 @@ Y_UNIT_TEST_SUITE(KqpRanges) { auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).affected_shards(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 3); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).updates().rows(), 0); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).deletes().rows(), 0); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).partitions_count(), 3); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).affected_shards(), 0); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 0); UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).affected_shards(), 1); UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(1).table_access().size(), 1); @@ -1088,13 +1089,18 @@ Y_UNIT_TEST_SUITE(KqpRanges) { [[2];[403u];["Value3"]]])", FormatResultSetYson(result.GetResultSet(0))); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 3); + size_t phase = 0; + if (stats.query_phases().size() == 2) { + phase = 1; + } else { + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + } + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).reads().rows(), 3); if (!settings.AppConfig.GetTableServiceConfig().GetEnableKqpDataQueryStreamLookup()) { - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).affected_shards(), 4); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).partitions_count(), 4); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).affected_shards(), 4); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).partitions_count(), 4); } } @@ -1125,9 +1131,14 @@ Y_UNIT_TEST_SUITE(KqpRanges) { ])", FormatResultSetYson(result.GetResultSet(0))); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 3); + size_t phase = 0; + if (stats.query_phases().size() == 2) { + phase = 1; + } else { + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + } + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).reads().rows(), 3); } Y_UNIT_TEST(LiteralOrCompisiteCollision) { @@ -1157,9 +1168,14 @@ Y_UNIT_TEST_SUITE(KqpRanges) { ])", FormatResultSetYson(result.GetResultSet(0))); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access().size(), 1); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(0).table_access(0).reads().rows(), 3); + size_t phase = 0; + if (stats.query_phases().size() == 2) { + phase = 1; + } else { + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + } + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases(phase).table_access(0).reads().rows(), 3); } Y_UNIT_TEST(NoFullScanAtScanQuery) { diff --git a/ydb/core/kqp/ut/opt/kqp_sort_ut.cpp b/ydb/core/kqp/ut/opt/kqp_sort_ut.cpp index a2a1bf8082..f0867cd11b 100644 --- a/ydb/core/kqp/ut/opt/kqp_sort_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_sort_ut.cpp @@ -64,6 +64,9 @@ Y_UNIT_TEST_SUITE(KqpSort) { if (!node.IsDefined()) { node = FindPlanNodeByKv(plan, "Node Type", "Filter-TableRangeScan"); // without `Sort` } + if (!node.IsDefined()) { + node = FindPlanNodeByKv(plan, "Node Type", "Limit-TableRangeScan"); // without `Sort` + } UNIT_ASSERT_C(node.IsDefined(), result.GetPlan()); auto read = FindPlanNodeByKv(node, "Name", "TableRangeScan"); UNIT_ASSERT(read.IsDefined()); @@ -174,6 +177,9 @@ Y_UNIT_TEST_SUITE(KqpSort) { if (!node.IsDefined()) { node = FindPlanNodeByKv(plan, "Node Type", "Filter-TableRangeScan"); } + if (!node.IsDefined()) { + node = FindPlanNodeByKv(plan, "Node Type", "Limit-TableRangeScan"); + } UNIT_ASSERT_C(node.IsDefined(), result.GetPlan()); auto read = FindPlanNodeByKv(node, "Name", "TableRangeScan"); UNIT_ASSERT(read.IsDefined()); @@ -1059,16 +1065,20 @@ Y_UNIT_TEST_SUITE(KqpSort) { NJson::ReadJsonTree(result.GetPlan(), &plan, true); auto tableLookup = FindPlanNodeByKv(plan, "Node Type", "Limit-Filter-TablePointLookup"); + size_t lookupIndex = 2; + if (!tableLookup.IsDefined()) { + tableLookup = FindPlanNodeByKv(plan, "Node Type", "Limit-TablePointLookup"); + lookupIndex = 1; + } UNIT_ASSERT(tableLookup.IsDefined()); auto& limitOp = tableLookup.GetMapSafe().at("Operators").GetArraySafe().at(0).GetMapSafe(); UNIT_ASSERT_VALUES_EQUAL("Limit", limitOp.at("Name").GetStringSafe()); UNIT_ASSERT_VALUES_EQUAL("$limit", limitOp.at("Limit").GetStringSafe()); - auto& lookupOp = tableLookup.GetMapSafe().at("Operators").GetArraySafe().at(2).GetMapSafe(); + auto& lookupOp = tableLookup.GetMapSafe().at("Operators").GetArraySafe().at(lookupIndex).GetMapSafe(); UNIT_ASSERT_VALUES_EQUAL("TablePointLookup", lookupOp.at("Name").GetStringSafe()); UNIT_ASSERT_VALUES_EQUAL("index", lookupOp.at("Table").GetStringSafe()); - UNIT_ASSERT(!lookupOp.contains("ReadLimit")); } Y_UNIT_TEST(Offset) { diff --git a/ydb/core/kqp/ut/opt/kqp_sqlin_ut.cpp b/ydb/core/kqp/ut/opt/kqp_sqlin_ut.cpp index 23a36fa80d..9b6b4025b4 100644 --- a/ydb/core/kqp/ut/opt/kqp_sqlin_ut.cpp +++ b/ydb/core/kqp/ut/opt/kqp_sqlin_ut.cpp @@ -222,10 +222,10 @@ Y_UNIT_TEST_SUITE(KqpSqlIn) { }; test(DisableOpt, true /* optionalParam */, [](const TDataQueryResult& result) { - AssertTableReads(result, "/Root/Test", 3); // 3 rows have Group == 1 + AssertTableReads(result, "/Root/Test", 2); // 3 rows have Group == 1 }); test(DisableOpt, false /* optionalParam */, [](const TDataQueryResult& result) { - AssertTableReads(result, "/Root/Test", 3); + AssertTableReads(result, "/Root/Test", 2); }); test(EnableOpt, true /* optionalParam */, [](const TDataQueryResult& result) { @@ -329,7 +329,7 @@ Y_UNIT_TEST_SUITE(KqpSqlIn) { auto result = ExecQueryAndTestResult(session, query, params, R"([[[1u];["Anna"];[3500u];["None"]]; [[1u];["Jack"];[100500u];["Just Jack"]]])"); - AssertTableReads(result, "/Root/Test", 6); + AssertTableReads(result, "/Root/Test", 2); } Y_UNIT_TEST(KeyTypeMissmatch_Int) { @@ -779,8 +779,8 @@ Y_UNIT_TEST_SUITE(KqpSqlIn) { }); test(EnableOpt, [](const TDataQueryResult& result) { - AssertTableReads(result, "/Root/SecondaryComplexKeys/Index/indexImplTable", 2); - AssertTableReads(result, "/Root/SecondaryComplexKeys", 2); + AssertTableReads(result, "/Root/SecondaryComplexKeys/Index/indexImplTable", 1); + AssertTableReads(result, "/Root/SecondaryComplexKeys", 1); UNIT_ASSERT_C(result.GetIssues().Empty(), result.GetIssues().ToString()); }); } diff --git a/ydb/core/kqp/ut/opt/ya.make b/ydb/core/kqp/ut/opt/ya.make index 84332bad6d..ea57c02470 100644 --- a/ydb/core/kqp/ut/opt/ya.make +++ b/ydb/core/kqp/ut/opt/ya.make @@ -14,6 +14,7 @@ ENDIF() SRCS( kqp_agg_ut.cpp + kqp_extract_predicate_unpack_ut.cpp kqp_kv_ut.cpp kqp_merge_ut.cpp kqp_ne_ut.cpp diff --git a/ydb/core/kqp/ut/perf/kqp_query_perf_ut.cpp b/ydb/core/kqp/ut/perf/kqp_query_perf_ut.cpp index 34dd6cd967..bf4f7d5e39 100644 --- a/ydb/core/kqp/ut/perf/kqp_query_perf_ut.cpp +++ b/ydb/core/kqp/ut/perf/kqp_query_perf_ut.cpp @@ -770,7 +770,7 @@ Y_UNIT_TEST_SUITE(KqpQueryPerf) { CompareYson(R"([[7u]])", FormatResultSetYson(checkResult.GetResultSet(0))); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 3); AssertTableStats(result, "/Root/Join2", { .ExpectedReads = 3, diff --git a/ydb/core/kqp/ut/query/kqp_explain_ut.cpp b/ydb/core/kqp/ut/query/kqp_explain_ut.cpp index c43cc93f12..08e8c12adb 100644 --- a/ydb/core/kqp/ut/query/kqp_explain_ut.cpp +++ b/ydb/core/kqp/ut/query/kqp_explain_ut.cpp @@ -244,13 +244,18 @@ Y_UNIT_TEST_SUITE(KqpExplain) { UNIT_ASSERT(ValidatePlanNodeIds(plan)); auto node = FindPlanNodeByKv(plan, "Node Type", "TopSort-TableRangesScan"); + if (!node.IsDefined()) { + node = FindPlanNodeByKv(plan, "Node Type", "TopSort-TableRangeScan"); + } UNIT_ASSERT(node.IsDefined()); auto operators = node.GetMapSafe().at("Operators").GetArraySafe(); - UNIT_ASSERT(operators[1].GetMapSafe().at("Name") == "TableRangesScan"); - - auto& readRanges = operators[1].GetMapSafe().at("ReadRanges").GetArraySafe(); - UNIT_ASSERT(readRanges[0] == "Key [150, 266]"); + if (operators[1].GetMapSafe().at("Name") == "TableRangesScan") { + auto& readRanges = operators[1].GetMapSafe().at("ReadRanges").GetArraySafe(); + UNIT_ASSERT(readRanges[0] == "Key [150, 266]"); + } else { + UNIT_ASSERT(operators[1].GetMapSafe().at("Name") == "TableRangeScan"); + } } Y_UNIT_TEST(CompoundKeyRange) { @@ -260,7 +265,6 @@ Y_UNIT_TEST_SUITE(KqpExplain) { settings.Explain(true); auto it = db.StreamExecuteScanQuery(R"( - PRAGMA Kikimr.OptEnablePredicateExtract = "false"; SELECT * FROM `/Root/Logs` WHERE App = "new_app_1" AND Host < "xyz" AND Ts = (42+7) Limit 10; )", settings).GetValueSync(); @@ -448,7 +452,6 @@ Y_UNIT_TEST_SUITE(KqpExplain) { auto db = kikimr.GetTableClient(); auto query = R"( - PRAGMA Kikimr.OptEnablePredicateExtract = "false"; SELECT Key, Value FROM `/Root/KeyValue` WHERE Key IN (1, 2, 3, 42) ORDER BY Key )"; @@ -464,7 +467,11 @@ Y_UNIT_TEST_SUITE(KqpExplain) { UNIT_ASSERT(ValidatePlanNodeIds(plan)); auto unionNode = FindPlanNodeByKv(plan, "Node Type", "Sort-Union"); - UNIT_ASSERT_EQUAL(unionNode.GetMap().at("Plans").GetArraySafe().size(), 4); + if (unionNode.IsDefined()) { + UNIT_ASSERT_EQUAL(unionNode.GetMap().at("Plans").GetArraySafe().size(), 4); + } else { + UNIT_ASSERT(FindPlanNodeByKv(plan, "Node Type", "Merge").IsDefined()); + } } Y_UNIT_TEST(ExplainDataQuery) { @@ -528,12 +535,9 @@ Y_UNIT_TEST_SUITE(KqpExplain) { UNIT_ASSERT_VALUES_EQUAL(rangeScansCount, 1); ui32 lookupsCount = 0; - if (settings.AppConfig.GetTableServiceConfig().GetEnableKqpDataQuerySourceRead()) { - lookupsCount = CountPlanNodesByKv(plan, "Node Type", "Stage-TablePointLookup"); - } else { - lookupsCount = CountPlanNodesByKv(plan, "Node Type", "TablePointLookup-ConstantExpr"); - } - UNIT_ASSERT_VALUES_EQUAL(lookupsCount, 3); + lookupsCount = CountPlanNodesByKv(plan, "Node Type", "Stage-TablePointLookup"); + lookupsCount += CountPlanNodesByKv(plan, "Node Type", "TablePointLookup-ConstantExpr"); + UNIT_ASSERT_VALUES_EQUAL(lookupsCount, 1); /* check tables section */ const auto& tableInfo = plan.GetMapSafe().at("tables").GetArraySafe()[0].GetMapSafe(); diff --git a/ydb/core/kqp/ut/query/kqp_query_ut.cpp b/ydb/core/kqp/ut/query/kqp_query_ut.cpp index 8eb8f160d9..0e262f53d2 100644 --- a/ydb/core/kqp/ut/query/kqp_query_ut.cpp +++ b/ydb/core/kqp/ut/query/kqp_query_ut.cpp @@ -974,9 +974,10 @@ Y_UNIT_TEST_SUITE(KqpQuery) { UNIT_ASSERT(compile.cpu_time_us() > 0); totalCpuTimeUs += compile.cpu_time_us(); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 3); + totalCpuTimeUs += stats.query_phases(0).cpu_time_us(); - auto& phase0 = stats.query_phases(0); + auto& phase0 = stats.query_phases(1); UNIT_ASSERT(phase0.duration_us() > 0); UNIT_ASSERT(phase0.cpu_time_us() > 0); totalCpuTimeUs += phase0.cpu_time_us(); @@ -988,7 +989,7 @@ Y_UNIT_TEST_SUITE(KqpQuery) { UNIT_ASSERT(!phase0.table_access(0).has_updates()); UNIT_ASSERT(!phase0.table_access(0).has_deletes()); - auto& phase1 = stats.query_phases(1); + auto& phase1 = stats.query_phases(2); UNIT_ASSERT(phase1.duration_us() > 0); UNIT_ASSERT(phase1.cpu_time_us() > 0); totalCpuTimeUs += phase1.cpu_time_us(); diff --git a/ydb/core/kqp/ut/scan/kqp_scan_ut.cpp b/ydb/core/kqp/ut/scan/kqp_scan_ut.cpp index d7a4e97d3a..550145ef77 100644 --- a/ydb/core/kqp/ut/scan/kqp_scan_ut.cpp +++ b/ydb/core/kqp/ut/scan/kqp_scan_ut.cpp @@ -1281,9 +1281,8 @@ Y_UNIT_TEST_SUITE(KqpScan) { ])", res.ResultSetYson); UNIT_ASSERT(res.QueryStats); - UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases().size(), 2); - UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(0).affected_shards(), 0); - UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(1).affected_shards(), 1); + UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(res.QueryStats->query_phases(0).affected_shards(), 1); } Y_UNIT_TEST(TooManyComputeActors) { @@ -2230,7 +2229,6 @@ Y_UNIT_TEST_SUITE(KqpScan) { settings.CollectQueryStats(ECollectQueryStatsMode::Full); auto it = db.StreamExecuteScanQuery(R"( - PRAGMA kikimr.OptEnablePredicateExtract = "false"; SELECT * FROM `/Root/TestTable` WHERE Key1 = 1 AND Key2 = 10; )", settings).GetValueSync(); UNIT_ASSERT_C(it.IsSuccess(), it.GetIssues().ToString()); diff --git a/ydb/core/kqp/ut/scan/kqp_split_ut.cpp b/ydb/core/kqp/ut/scan/kqp_split_ut.cpp index 45f9da8e54..6b1df6beae 100644 --- a/ydb/core/kqp/ut/scan/kqp_split_ut.cpp +++ b/ydb/core/kqp/ut/scan/kqp_split_ut.cpp @@ -596,27 +596,6 @@ Y_UNIT_TEST_SUITE(KqpSplit) { UNIT_ASSERT_VALUES_EQUAL(Format(Canonize(s.CollectedKeys, Order)), ALL); } - Y_UNIT_TEST_SORT(AfterResolvePoints, Order) { - TTestSetup s; - auto shards = s.Shards(); - - auto* shim = new TReadActorPipeCacheStub(); - InterceptReadActorPipeCache(s.Runtime->Register(shim)); - shim->SetupCapture(0, 5); - s.SendScanQuery( - "PRAGMA Kikimr.OptEnablePredicateExtract=\"false\"; SELECT Key FROM `/Root/KeyValueLargePartition` where Key in (103, 302, 402, 502, 703)" + OrderBy(Order)); - - shim->ReadsReceived.WaitI(); - Cerr << "starting split -----------------------------------------------------------" << Endl; - s.Split(shards.at(0), 400); - Cerr << "resume evread -----------------------------------------------------------" << Endl; - shim->SkipAll(); - shim->SendCaptured(s.Runtime); - - s.AssertSuccess(); - UNIT_ASSERT_VALUES_EQUAL(Format(Canonize(s.CollectedKeys, Order)), ",103,302,402,502,703"); - } - Y_UNIT_TEST_SORT(IntersectionLosesRange, Order) { TTestSetup s; auto shards = s.Shards(); @@ -635,6 +614,28 @@ Y_UNIT_TEST_SUITE(KqpSplit) { s.AssertSuccess(); UNIT_ASSERT_VALUES_EQUAL(Format(Canonize(s.CollectedKeys, Order)), ",101,202,203,701,702,703"); } + + // TODO: rework test for stream lookups + //Y_UNIT_TEST_SORT(AfterResolvePoints, Order) { + // TTestSetup s; + // auto shards = s.Shards(); + + // auto* shim = new TReadActorPipeCacheStub(); + // InterceptReadActorPipeCache(s.Runtime->Register(shim)); + // shim->SetupCapture(0, 5); + // s.SendScanQuery( + // "PRAGMA Kikimr.OptEnablePredicateExtract=\"false\"; SELECT Key FROM `/Root/KeyValueLargePartition` where Key in (103, 302, 402, 502, 703)" + OrderBy(Order)); + + // shim->ReadsReceived.WaitI(); + // Cerr << "starting split -----------------------------------------------------------" << Endl; + // s.Split(shards.at(0), 400); + // Cerr << "resume evread -----------------------------------------------------------" << Endl; + // shim->SkipAll(); + // shim->SendCaptured(s.Runtime); + + // s.AssertSuccess(); + // UNIT_ASSERT_VALUES_EQUAL(Format(Canonize(s.CollectedKeys, Order)), ",103,302,402,502,703"); + //} } diff --git a/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp b/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp index 6bd42cf4cd..72f7828cbc 100644 --- a/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_query_service_ut.cpp @@ -207,7 +207,7 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); CompareYson(R"([ [[1];[202u];["Value2"]]; @@ -327,7 +327,7 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { UNIT_ASSERT(!result.GetStats()->GetPlan().Defined()); auto& stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 1); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); } Y_UNIT_TEST(ExecStatsPlan) { diff --git a/ydb/core/kqp/ut/tx/kqp_mvcc_ut.cpp b/ydb/core/kqp/ut/tx/kqp_mvcc_ut.cpp index 9924f1ddb4..bed632eee9 100644 --- a/ydb/core/kqp/ut/tx/kqp_mvcc_ut.cpp +++ b/ydb/core/kqp/ut/tx/kqp_mvcc_ut.cpp @@ -50,7 +50,7 @@ Y_UNIT_TEST_SUITE(KqpSnapshotRead) { if (result.GetStatus() == EStatus::SUCCESS) continue; - if (settings.AppConfig.GetTableServiceConfig().GetEnableKqpDataQuerySourceRead()) { + if (settings.AppConfig.GetTableServiceConfig().GetEnableKqpDataQuerySourceRead() && false) { UNIT_ASSERT_C(HasIssue(result.GetIssues(), NYql::TIssuesIds::DEFAULT_ERROR, [](const NYql::TIssue& issue){ return issue.GetMessage().Contains("has no snapshot at"); diff --git a/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp b/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp index f6ded80720..31a7df30bc 100644 --- a/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp +++ b/ydb/core/kqp/ut/yql/kqp_scripting_ut.cpp @@ -864,7 +864,7 @@ Y_UNIT_TEST_SUITE(KqpScripting) { auto stats = NYdb::TProtoAccessor::GetProto(*result.GetStats()); - UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 3); + UNIT_ASSERT_VALUES_EQUAL(stats.query_phases().size(), 2); for (const auto& phase : stats.query_phases()) { if (phase.table_access().size()) { if (phase.table_access(0).name() == "/Root/EightShard") { diff --git a/ydb/core/protos/config.proto b/ydb/core/protos/config.proto index 8625b661c1..abe69565f0 100644 --- a/ydb/core/protos/config.proto +++ b/ydb/core/protos/config.proto @@ -1339,7 +1339,7 @@ message TTableServiceConfig { optional EBindingsMode BindingsMode = 40 [default = BM_ENABLED]; optional TIteratorReadsRetrySettings IteratorReadsRetrySettings = 41; - optional bool PredicateExtract20 = 44 [default = false]; + optional bool PredicateExtract20 = 44 [default = true]; optional TIteratorReadQuotaSettings IteratorReadQuotaSettings = 45; }; diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_bool.sql-plan_/pk_predicate_pk_predicate_bool.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_bool.sql-plan_/pk_predicate_pk_predicate_bool.sql.plan index 4513fedff0..12e97a4d71 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_bool.sql-plan_/pk_predicate_pk_predicate_bool.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_bool.sql-plan_/pk_predicate_pk_predicate_bool.sql.plan @@ -9,41 +9,15 @@ "reads": [ { "columns": [ + "Key1", + "Key2", "Value" ], - "type": "Lookup" - }, - { - "columns": [ - "Value" - ], - "type": "Lookup" - }, - { - "columns": [ - "Value" - ], - "limit": "1001", - "lookup_by": [ - "Key1 (false)" - ], - "scan_by": [ - "Key2 (false, +\u221e)" - ], - "type": "Lookup" - }, - { - "columns": [ - "Value" - ], - "limit": "1001", - "lookup_by": [ - "Key1 (true)" - ], "scan_by": [ - "Key2 (-\u221e, true)" + "Key1 (-\u221e, +\u221e)", + "Key2 (-\u221e, +\u221e)" ], - "type": "Lookup" + "type": "FullScan" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi.sql-plan_/pk_predicate_pk_predicate_equi_multi.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi.sql-plan_/pk_predicate_pk_predicate_equi_multi.sql.plan index f2c60071ef..edd9da4184 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi.sql-plan_/pk_predicate_pk_predicate_equi_multi.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi.sql-plan_/pk_predicate_pk_predicate_equi_multi.sql.plan @@ -14,16 +14,11 @@ "Group", "Name" ], - "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" + "scan_by": [ + "Group [2, 2]", + "Group [4, 4]" ], - "type": "Lookup" + "type": "Scan" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp.sql.plan index 1e2d9dde88..8630c3197b 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp.sql.plan @@ -15,15 +15,6 @@ "Name" ], "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "type": "Lookup" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp_1.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp_1.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp_1.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp_1.sql.plan index 3871db22b6..99d5ddfc73 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp_1.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp_1.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_equi_multi_rp_1.sql-plan_/pk_predicate_pk_predicate_equi_multi_rp_1.sql.plan @@ -15,24 +15,6 @@ "Name" ], "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "type": "Lookup" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in.sql-plan_/pk_predicate_pk_predicate_in.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in.sql-plan_/pk_predicate_pk_predicate_in.sql.plan index 254e6f28cb..8800e380e7 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in.sql-plan_/pk_predicate_pk_predicate_in.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in.sql-plan_/pk_predicate_pk_predicate_in.sql.plan @@ -14,38 +14,6 @@ "Value2" ], "type": "Lookup" - }, - { - "columns": [ - "Key", - "Value1", - "Value2" - ], - "type": "Lookup" - }, - { - "columns": [ - "Key", - "Value1", - "Value2" - ], - "type": "Lookup" - }, - { - "columns": [ - "Key", - "Value1", - "Value2" - ], - "type": "Lookup" - }, - { - "columns": [ - "Key", - "Value1", - "Value2" - ], - "type": "Lookup" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_range.sql-plan_/pk_predicate_pk_predicate_in_range.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_range.sql-plan_/pk_predicate_pk_predicate_in_range.sql.plan index 705429c366..394f8a8032 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_range.sql-plan_/pk_predicate_pk_predicate_in_range.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_range.sql-plan_/pk_predicate_pk_predicate_in_range.sql.plan @@ -14,72 +14,6 @@ "Group", "Name" ], - "lookup_by": [ - "Group (1)" - ], - "scan_by": [ - "Name (-\u221e, +\u221e)" - ], - "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "lookup_by": [ - "Group (15)" - ], - "scan_by": [ - "Name (-\u221e, +\u221e)" - ], - "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "lookup_by": [ - "Group (3)" - ], - "scan_by": [ - "Name (-\u221e, +\u221e)" - ], - "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "lookup_by": [ - "Group (4)" - ], - "scan_by": [ - "Name (-\u221e, +\u221e)" - ], - "type": "Lookup" - }, - { - "columns": [ - "Amount", - "Comment", - "Group", - "Name" - ], - "lookup_by": [ - "Group (6)" - ], - "scan_by": [ - "Name (-\u221e, +\u221e)" - ], "type": "Lookup" } ] diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_rp.sql-plan_/pk_predicate_pk_predicate_in_rp.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_rp.sql-plan_/pk_predicate_pk_predicate_in_rp.sql.plan index 4458f0d81c..27f04a1407 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_rp.sql-plan_/pk_predicate_pk_predicate_in_rp.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_in_rp.sql-plan_/pk_predicate_pk_predicate_in_rp.sql.plan @@ -14,22 +14,6 @@ "Value2" ], "type": "Lookup" - }, - { - "columns": [ - "Key", - "Value1", - "Value2" - ], - "type": "Lookup" - }, - { - "columns": [ - "Key", - "Value1", - "Value2" - ], - "type": "Lookup" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_null.sql-plan_/pk_predicate_pk_predicate_null.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_null.sql-plan_/pk_predicate_pk_predicate_null.sql.plan index 498cef25f8..b190f77743 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_null.sql-plan_/pk_predicate_pk_predicate_null.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_null.sql-plan_/pk_predicate_pk_predicate_null.sql.plan @@ -19,7 +19,7 @@ "Group (0)" ], "scan_by": [ - "Name (-\u221e, \u00abName2\u00bb)" + "Name (\u00ab\u00bb, \u00abName2\u00bb)" ], "type": "Lookup" } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_point_range_rp.sql-plan_/pk_predicate_pk_predicate_point_range_rp.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_point_range_rp.sql-plan_/pk_predicate_pk_predicate_point_range_rp.sql.plan index e91a047285..a5fcb81ad8 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_point_range_rp.sql-plan_/pk_predicate_pk_predicate_point_range_rp.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_point_range_rp.sql-plan_/pk_predicate_pk_predicate_point_range_rp.sql.plan @@ -14,11 +14,13 @@ "Group", "Name" ], + "lookup_by": [ + "Group (1)" + ], "scan_by": [ - "Group [1, 1)", "Name [Name1, Name3)" ], - "type": "Scan" + "type": "Lookup" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_nonkey_rp.sql-plan_/pk_predicate_pk_predicate_range_nonkey_rp.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_nonkey_rp.sql-plan_/pk_predicate_pk_predicate_range_nonkey_rp.sql.plan index 62b43d7b55..2cca9acf4e 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_nonkey_rp.sql-plan_/pk_predicate_pk_predicate_range_nonkey_rp.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_nonkey_rp.sql-plan_/pk_predicate_pk_predicate_range_nonkey_rp.sql.plan @@ -15,7 +15,8 @@ "Name" ], "scan_by": [ - "Group (-\u221e, 4)" + "Group (0, 4)", + "Name (-\u221e, +\u221e)" ], "type": "Scan" } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp.sql-plan_/pk_predicate_pk_predicate_range_rp.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp.sql-plan_/pk_predicate_pk_predicate_range_rp.sql.plan index d8659d8331..9e499de66b 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp.sql-plan_/pk_predicate_pk_predicate_range_rp.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp.sql-plan_/pk_predicate_pk_predicate_range_rp.sql.plan @@ -15,7 +15,8 @@ "Name" ], "scan_by": [ - "Group [3, 6)" + "Group (3, 6)", + "Name (Name1, +\u221e)" ], "type": "Scan" } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp_1.sql-plan_/pk_predicate_pk_predicate_range_rp_1.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp_1.sql-plan_/pk_predicate_pk_predicate_range_rp_1.sql.plan index ce60883ac2..55643045f2 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp_1.sql-plan_/pk_predicate_pk_predicate_range_rp_1.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_rp_1.sql-plan_/pk_predicate_pk_predicate_range_rp_1.sql.plan @@ -15,7 +15,8 @@ "Name" ], "scan_by": [ - "Group [100001, +\u221e)" + "Group [100001, +\u221e)", + "Name [Name1, +\u221e)" ], "type": "Scan" } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_single_rp.sql-plan_/pk_predicate_pk_predicate_range_single_rp.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_single_rp.sql-plan_/pk_predicate_pk_predicate_range_single_rp.sql.plan index f20cc1658d..e73c7f5e89 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_single_rp.sql-plan_/pk_predicate_pk_predicate_range_single_rp.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_range_single_rp.sql-plan_/pk_predicate_pk_predicate_range_single_rp.sql.plan @@ -15,7 +15,8 @@ "Name" ], "scan_by": [ - "Group (1, 4]" + "Group (1, 4]", + "Name (-\u221e, +\u221e)" ], "type": "Scan" } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_reverse_1.sql-plan_/pk_predicate_pk_predicate_reverse_1.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_reverse_1.sql-plan_/pk_predicate_pk_predicate_reverse_1.sql.plan index 7bd9ec5467..0b94c6609e 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_reverse_1.sql-plan_/pk_predicate_pk_predicate_reverse_1.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_reverse_1.sql-plan_/pk_predicate_pk_predicate_reverse_1.sql.plan @@ -15,11 +15,13 @@ "Name" ], "limit": "1001", + "lookup_by": [ + "Group (10)" + ], "scan_by": [ - "Group [10, 10)", "Name [Name2, Name4)" ], - "type": "Scan" + "type": "Lookup" } ] } diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_subquery.sql-plan_/pk_predicate_pk_predicate_subquery.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_subquery.sql-plan_/pk_predicate_pk_predicate_subquery.sql.plan index f21c212c2a..ebdb26a994 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_subquery.sql-plan_/pk_predicate_pk_predicate_subquery.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_subquery.sql-plan_/pk_predicate_pk_predicate_subquery.sql.plan @@ -14,13 +14,8 @@ "Group", "Name" ], - "lookup_by": [ - "Group (n/a)" - ], - "scan_by": [ - "Name (-\u221e, +\u221e)" - ], - "type": "Lookup" + "limit": "1001", + "type": "Scan" } ] }, diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_utf8.sql-plan_/pk_predicate_pk_predicate_utf8.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_utf8.sql-plan_/pk_predicate_pk_predicate_utf8.sql.plan index e7c35b5cf2..f8817928a9 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_utf8.sql-plan_/pk_predicate_pk_predicate_utf8.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_pk_predicate_pk_predicate_utf8.sql-plan_/pk_predicate_pk_predicate_utf8.sql.plan @@ -13,26 +13,6 @@ "Type", "Value" ], - "lookup_by": [ - "Name (Anna)" - ], - "scan_by": [ - "Type (-\u221e, +\u221e)" - ], - "type": "Lookup" - }, - { - "columns": [ - "Name", - "Type", - "Value" - ], - "lookup_by": [ - "Name (Dmitry)" - ], - "scan_by": [ - "Type (-\u221e, +\u221e)" - ], "type": "Lookup" } ] diff --git a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_upsert.sql-plan_/write_upsert.sql.plan b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_upsert.sql-plan_/write_upsert.sql.plan index 6f7c578e12..bbb921e1fb 100644 --- a/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_upsert.sql-plan_/write_upsert.sql.plan +++ b/ydb/tests/functional/canonical/canondata/test_sql.TestCanonicalFolder1.test_case_write_upsert.sql-plan_/write_upsert.sql.plan @@ -13,7 +13,7 @@ "subkey" ], "scan_by": [ - "key (-\u221e, 5)", + "key (0, 5)", "subkey (-\u221e, +\u221e)" ], "type": "Scan" diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_4.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_4.plan index 4b6e463dd4..16be6d7474 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_4.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_4.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet_2", + "Node Type": "ResultSet_3", "PlanNodeId": 18, "PlanNodeType": "ResultSet", "Plans": [ @@ -42,11 +42,11 @@ "PlanNodeType": "Connection", "Plans": [ { - "CTE Name": "tx_result_binding_2_0", + "CTE Name": "tx_result_binding_3_0", "Node Type": "ConstantExpr", "Operators": [ { - "Iterator": "%kqp%tx_result_binding_0_0", + "Iterator": "%kqp%tx_result_binding_1_0", "Name": "Iterator" } ], @@ -69,7 +69,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "CTE Name": "tx_result_binding_2_0", + "CTE Name": "tx_result_binding_3_0", "Node Type": "Filter-TablePointLookup-ConstantExpr", "Operators": [ { @@ -84,7 +84,7 @@ "Table": "postgres_jointest/join3.test_plan/child" }, { - "Iterator": "%kqp%tx_result_binding_1_0", + "Iterator": "%kqp%tx_result_binding_2_0", "Name": "Iterator" } ], @@ -108,7 +108,7 @@ ] }, { - "Node Type": "Precompute_1", + "Node Type": "Precompute_2", "Parent Relationship": "InitPlan", "PlanNodeId": 7, "PlanNodeType": "Materialize", @@ -128,10 +128,10 @@ "PlanNodeId": 6 } ], - "Subplan Name": "CTE tx_result_binding_1_0" + "Subplan Name": "CTE tx_result_binding_2_0" }, { - "Node Type": "Precompute_0", + "Node Type": "Precompute_1", "Parent Relationship": "InitPlan", "PlanNodeId": 4, "PlanNodeType": "Materialize", @@ -146,18 +146,20 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TableRangeScan", + "CTE Name": "tx_result_binding_1_0", + "Node Type": "TablePointLookup-ConstantExpr", "Operators": [ { - "Name": "TableRangeScan", + "Name": "TablePointLookup", "ReadColumns": [ "k", "pd" ], - "ReadRange": [ - "k [2, 1]" - ], "Table": "postgres_jointest/join3.test_plan/parent" + }, + { + "Iterator": "%kqp%tx_result_binding_0_0", + "Name": "Iterator" } ], "PlanNodeId": 1, @@ -170,7 +172,7 @@ ] } ], - "Subplan Name": "CTE tx_result_binding_0_0" + "Subplan Name": "CTE tx_result_binding_1_0" } ] }, @@ -198,10 +200,7 @@ "k", "pd" ], - "scan_by": [ - "k [2, 1]" - ], - "type": "Scan" + "type": "Lookup" } ] } diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_5.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_5.plan index 8131a33e47..5a7c2ad822 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_5.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join3.test_/query_5.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet_4", + "Node Type": "ResultSet_5", "PlanNodeId": 26, "PlanNodeType": "ResultSet", "Plans": [ @@ -24,7 +24,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "CTE Name": "tx_result_binding_4_0", + "CTE Name": "tx_result_binding_5_0", "Node Type": "Limit-InnerJoin (MapJoin)-Filter-TablePointLookup-ConstantExpr", "Operators": [ { @@ -46,7 +46,7 @@ "Table": "postgres_jointest/join3.test_plan/parent" }, { - "Iterator": "%kqp%tx_result_binding_3_0", + "Iterator": "%kqp%tx_result_binding_4_0", "Name": "Iterator" } ], @@ -62,7 +62,7 @@ ] }, { - "Node Type": "Precompute_3", + "Node Type": "Precompute_4", "Parent Relationship": "InitPlan", "PlanNodeId": 21, "PlanNodeType": "Materialize", @@ -82,10 +82,10 @@ "PlanNodeId": 20 } ], - "Subplan Name": "CTE tx_result_binding_3_0" + "Subplan Name": "CTE tx_result_binding_4_0" }, { - "Node Type": "Precompute_2", + "Node Type": "Precompute_3", "Parent Relationship": "InitPlan", "PlanNodeId": 18, "PlanNodeType": "Materialize", @@ -114,11 +114,11 @@ "PlanNodeType": "Connection", "Plans": [ { - "CTE Name": "tx_result_binding_2_0", + "CTE Name": "tx_result_binding_3_0", "Node Type": "ConstantExpr", "Operators": [ { - "Iterator": "%kqp%tx_result_binding_0_0", + "Iterator": "%kqp%tx_result_binding_1_0", "Name": "Iterator" } ], @@ -141,7 +141,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "CTE Name": "tx_result_binding_2_0", + "CTE Name": "tx_result_binding_3_0", "Node Type": "Filter-TablePointLookup-ConstantExpr", "Operators": [ { @@ -156,7 +156,7 @@ "Table": "postgres_jointest/join3.test_plan/child" }, { - "Iterator": "%kqp%tx_result_binding_1_0", + "Iterator": "%kqp%tx_result_binding_2_0", "Name": "Iterator" } ], @@ -178,10 +178,10 @@ ] } ], - "Subplan Name": "CTE tx_result_binding_2_0" + "Subplan Name": "CTE tx_result_binding_3_0" }, { - "Node Type": "Precompute_1", + "Node Type": "Precompute_2", "Parent Relationship": "InitPlan", "PlanNodeId": 7, "PlanNodeType": "Materialize", @@ -201,10 +201,10 @@ "PlanNodeId": 6 } ], - "Subplan Name": "CTE tx_result_binding_1_0" + "Subplan Name": "CTE tx_result_binding_2_0" }, { - "Node Type": "Precompute_0", + "Node Type": "Precompute_1", "Parent Relationship": "InitPlan", "PlanNodeId": 4, "PlanNodeType": "Materialize", @@ -219,18 +219,20 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TableRangeScan", + "CTE Name": "tx_result_binding_1_0", + "Node Type": "TablePointLookup-ConstantExpr", "Operators": [ { - "Name": "TableRangeScan", + "Name": "TablePointLookup", "ReadColumns": [ "k", "pd" ], - "ReadRange": [ - "k [2, 1]" - ], "Table": "postgres_jointest/join3.test_plan/parent" + }, + { + "Iterator": "%kqp%tx_result_binding_0_0", + "Name": "Iterator" } ], "PlanNodeId": 1, @@ -243,7 +245,7 @@ ] } ], - "Subplan Name": "CTE tx_result_binding_0_0" + "Subplan Name": "CTE tx_result_binding_1_0" } ] }, @@ -268,17 +270,14 @@ "reads": [ { "columns": [ - "k", - "pd" - ], - "scan_by": [ - "k [2, 1]" + "k" ], - "type": "Scan" + "type": "Lookup" }, { "columns": [ - "k" + "k", + "pd" ], "type": "Lookup" } diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_1.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_1.plan index a5cce68894..ab6a1bb906 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_1.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_1.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet", + "Node Type": "ResultSet_1", "PlanNodeId": 4, "PlanNodeType": "ResultSet", "Plans": [ @@ -52,7 +52,7 @@ ], "ReadLimit": "1001", "ReadRange": [ - "unique1 (-\u221e, 10)", + "unique1 (0, 10)", "unique2 (-\u221e, +\u221e)" ], "Table": "postgres_select.test_plan/onek" @@ -103,7 +103,7 @@ ], "limit": "1001", "scan_by": [ - "unique1 (-\u221e, 10)", + "unique1 (0, 10)", "unique2 (-\u221e, +\u221e)" ], "type": "Scan" diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_2.plan index 85ea297190..3ba19f9990 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_2.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet", + "Node Type": "ResultSet_1", "PlanNodeId": 4, "PlanNodeType": "ResultSet", "Plans": [ @@ -38,7 +38,7 @@ ], "ReadLimit": "1001", "ReadRange": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "Reverse": true, @@ -77,7 +77,7 @@ "limit": "1001", "reverse": true, "scan_by": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "type": "Scan" diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_6.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_6.plan index 1a0578452c..a6f172f817 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_6.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_6.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet", + "Node Type": "ResultSet_1", "PlanNodeId": 4, "PlanNodeType": "ResultSet", "Plans": [ @@ -38,7 +38,7 @@ "unique1" ], "ReadRange": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "Table": "postgres_select.test_plan/onek" @@ -75,7 +75,7 @@ "unique1" ], "scan_by": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "type": "Scan" diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_7.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_7.plan index 069f9ae239..872d758d7f 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_7.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_7.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet", + "Node Type": "ResultSet_1", "PlanNodeId": 4, "PlanNodeType": "ResultSet", "Plans": [ @@ -38,7 +38,7 @@ "unique1" ], "ReadRange": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "Table": "postgres_select.test_plan/onek" @@ -75,7 +75,7 @@ "unique1" ], "scan_by": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "type": "Scan" diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_9.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_9.plan index d91ef934da..6b284a6c87 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_9.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_9.plan @@ -4,7 +4,7 @@ "PlanNodeType": "Query", "Plans": [ { - "Node Type": "ResultSet", + "Node Type": "ResultSet_1", "PlanNodeId": 4, "PlanNodeType": "ResultSet", "Plans": [ @@ -38,7 +38,7 @@ ], "ReadLimit": "1001", "ReadRange": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "Reverse": true, @@ -77,7 +77,7 @@ "limit": "1001", "reverse": true, "scan_by": [ - "unique1 (-\u221e, 20)", + "unique1 (0, 20)", "unique2 (-\u221e, +\u221e)" ], "type": "Scan" diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_100.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_100.plan index c6b7cadafb..1ad928748e 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_100.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_100.plan @@ -24,7 +24,7 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "TopSort-Filter-TableRangesScan", + "Node Type": "TopSort-Filter-TablePointLookup", "Operators": [ { "Limit": "1001", @@ -36,15 +36,18 @@ "Predicate": "item.d < 110 Or item.d > 150" }, { - "Name": "TableRangesScan", + "Name": "TablePointLookup", "ReadColumns": [ "a", "b", "d" ], - "ReadRangesExpectedSize": 1, - "ReadRangesKeys": [ - "a" + "ReadRange": [ + "a (0)", + "b (-\u221e, +\u221e)", + "c (-\u221e, +\u221e)", + "d (-\u221e, +\u221e)", + "e (-\u221e, +\u221e)" ], "Table": "sqllogictest_select2-4.test_plan/t1" } @@ -80,7 +83,16 @@ "b", "d" ], - "type": "Scan" + "lookup_by": [ + "a (0)" + ], + "scan_by": [ + "b (-\u221e, +\u221e)", + "c (-\u221e, +\u221e)", + "d (-\u221e, +\u221e)", + "e (-\u221e, +\u221e)" + ], + "type": "Lookup" } ] } diff --git a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_132.plan b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_132.plan index a1c7112d1a..efa6e9d7d0 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_132.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_sql_logic.TestSQLLogic.test_sql_suite_plan-select2-4.test_/query_132.plan @@ -33,7 +33,7 @@ }, { "Name": "Filter", - "Predicate": "item.e > item.a And item.e < item.b And Exist(item.b)" + "Predicate": "item.e > item.a And item.e < item.b" }, { "Name": "TablePointLookup", @@ -45,7 +45,7 @@ ], "ReadRange": [ "a (0)", - "b (-\u221e, +\u221e)", + "b (0, +\u221e)", "c (-\u221e, +\u221e)", "d (-\u221e, +\u221e)", "e (-\u221e, +\u221e)" @@ -93,7 +93,7 @@ "a (0)" ], "scan_by": [ - "b (-\u221e, +\u221e)", + "b (0, +\u221e)", "c (-\u221e, +\u221e)", "d (-\u221e, +\u221e)", "e (-\u221e, +\u221e)" |