From 23bc78bac49a4e25490b19925cd4dcba807acbbb Mon Sep 17 00:00:00 2001 From: Mars Agliullin Date: Wed, 26 Jun 2024 12:35:28 +0300 Subject: [PATCH] Revert "Fix PG-syntax mixed-types joins (#5556)" (#5947) --- .../yql/core/common_opt/yql_co_pgselect.cpp | 5 - .../core/common_opt/yql_flatmap_over_join.cpp | 4 - .../sql/dq_file/part10/canondata/result.json | 22 ----- .../hybrid_file/part2/canondata/result.json | 14 --- .../tests/sql/sql2yql/canondata/result.json | 7 -- .../tests/sql/suites/pg/input_misc_types.txt | 3 - .../sql/suites/pg/input_misc_types.txt.attr | 5 - .../tests/sql/suites/pg/join_mixed_types.cfg | 1 - .../tests/sql/suites/pg/join_mixed_types.sql | 4 - .../part10/canondata/result.json | 21 ----- .../query_2.plan | 91 ++++++++----------- .../query_12.plan | 63 ++----------- 12 files changed, 45 insertions(+), 195 deletions(-) delete mode 100644 ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt delete mode 100644 ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt.attr delete mode 100644 ydb/library/yql/tests/sql/suites/pg/join_mixed_types.cfg delete mode 100644 ydb/library/yql/tests/sql/suites/pg/join_mixed_types.sql diff --git a/ydb/library/yql/core/common_opt/yql_co_pgselect.cpp b/ydb/library/yql/core/common_opt/yql_co_pgselect.cpp index 9d21052041b5..dd33fc5b3445 100644 --- a/ydb/library/yql/core/common_opt/yql_co_pgselect.cpp +++ b/ydb/library/yql/core/common_opt/yql_co_pgselect.cpp @@ -1765,11 +1765,6 @@ std::tuple, TExprNode::TListType> BuildJoinGroups(TPositionHandle break; } - if (left->GetTypeAnn() != right->GetTypeAnn()) { - bad = true; - break; - } - bool leftOnLeft; if (left->IsCallable("Member") && &left->Head() == &predicate->Head().Head()) { auto inputPtr = memberToInput.FindPtr(left->Child(1)->Content()); diff --git a/ydb/library/yql/core/common_opt/yql_flatmap_over_join.cpp b/ydb/library/yql/core/common_opt/yql_flatmap_over_join.cpp index 173412074ae0..e5c366d49cb5 100644 --- a/ydb/library/yql/core/common_opt/yql_flatmap_over_join.cpp +++ b/ydb/library/yql/core/common_opt/yql_flatmap_over_join.cpp @@ -855,10 +855,6 @@ TExprNode::TPtr DecayCrossJoinIntoInner(TExprNode::TPtr equiJoin, const TExprNod return equiJoin; } - if (left->GetTypeAnn() != right->GetTypeAnn()) { - return equiJoin; - } - TSet leftInputs, rightInputs; TSet usedFields; GatherJoinInputs(left, row, parentsMap, backRenameMap, labels, leftInputs, usedFields); diff --git a/ydb/library/yql/tests/sql/dq_file/part10/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part10/canondata/result.json index 0e2e6a4c8d4b..00d81ce39b27 100644 --- a/ydb/library/yql/tests/sql/dq_file/part10/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part10/canondata/result.json @@ -1877,28 +1877,6 @@ } ], "test.test[pg-aggregate_combine--Results]": [], - "test.test[pg-join_mixed_types--Analyze]": [ - { - "checksum": "5218503de8ae47338f8fb364127bedf9", - "size": 7433, - "uri": "https://{canondata_backend}/1925842/1afddaadfa4aa57d0e396b052de71d638933dcd4/resource.tar.gz#test.test_pg-join_mixed_types--Analyze_/plan.txt" - } - ], - "test.test[pg-join_mixed_types--Debug]": [ - { - "checksum": "0df0e7f9a4182bb4912483a5c1fe87db", - "size": 3066, - "uri": "https://{canondata_backend}/1925842/1afddaadfa4aa57d0e396b052de71d638933dcd4/resource.tar.gz#test.test_pg-join_mixed_types--Debug_/opt.yql_patched" - } - ], - "test.test[pg-join_mixed_types--Plan]": [ - { - "checksum": "5218503de8ae47338f8fb364127bedf9", - "size": 7433, - "uri": "https://{canondata_backend}/1925842/1afddaadfa4aa57d0e396b052de71d638933dcd4/resource.tar.gz#test.test_pg-join_mixed_types--Plan_/plan.txt" - } - ], - "test.test[pg-join_mixed_types--Results]": [], "test.test[pg-order_by_distinct_same_expr_agg_sublink-default.txt-Analyze]": [ { "checksum": "c1f2d837c3623c81dd596a9877913fb8", diff --git a/ydb/library/yql/tests/sql/hybrid_file/part2/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part2/canondata/result.json index f80e030b1d08..6bb56791df4d 100644 --- a/ydb/library/yql/tests/sql/hybrid_file/part2/canondata/result.json +++ b/ydb/library/yql/tests/sql/hybrid_file/part2/canondata/result.json @@ -1903,20 +1903,6 @@ "uri": "https://{canondata_backend}/1936842/5461a7f0f4d722c81cba2eff5dd1d41bf3a77f80/resource.tar.gz#test.test_pg-insert--Plan_/plan.txt" } ], - "test.test[pg-join_mixed_types--Debug]": [ - { - "checksum": "687483f04fd8a538dd4587f805e558d5", - "size": 5602, - "uri": "https://{canondata_backend}/1925842/b16a3fb835f9baf17f7c68e238f1ff3fa411b08e/resource.tar.gz#test.test_pg-join_mixed_types--Debug_/opt.yql_patched" - } - ], - "test.test[pg-join_mixed_types--Plan]": [ - { - "checksum": "569223ae3507b171c9b19d3fceefb315", - "size": 8853, - "uri": "https://{canondata_backend}/1925842/b16a3fb835f9baf17f7c68e238f1ff3fa411b08e/resource.tar.gz#test.test_pg-join_mixed_types--Plan_/plan.txt" - } - ], "test.test[pg-join_using6-default.txt-Debug]": [ { "checksum": "4ad19c912ddd72af2c79985283518a08", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 2e6c60740035..a3b98cdeb2f9 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -12053,13 +12053,6 @@ "uri": "https://{canondata_backend}/1881367/79a71c1478c556da1931a7565c12bdd14cc63567/resource.tar.gz#test_sql2yql.test_pg-join_groups_/sql.yql" } ], - "test_sql2yql.test[pg-join_mixed_types]": [ - { - "checksum": "b364a4a34d7f99a7ffb8ac6b4b3197f3", - "size": 1691, - "uri": "https://{canondata_backend}/1936997/14bc828ad4bae6165180fbcaed4d8486bbb77859/resource.tar.gz#test_sql2yql.test_pg-join_mixed_types_/sql.yql" - } - ], "test_sql2yql.test[pg-join_tree_order]": [ { "checksum": "ccdf19008cb38637422026d0ea06e9b8", diff --git a/ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt b/ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt deleted file mode 100644 index 097249d29eba..000000000000 --- a/ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt +++ /dev/null @@ -1,3 +0,0 @@ -{"id1"=0;"id2"=0}; -{"id1"=0;"id2"=1}; - diff --git a/ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt.attr b/ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt.attr deleted file mode 100644 index 0915c0d7d7cc..000000000000 --- a/ydb/library/yql/tests/sql/suites/pg/input_misc_types.txt.attr +++ /dev/null @@ -1,5 +0,0 @@ -{ - "_yql_row_spec"={ - "Type"=["StructType";[["id1";["PgType";"Int4";];];["id2";["PgType";"Int8";];];];]; - } -} diff --git a/ydb/library/yql/tests/sql/suites/pg/join_mixed_types.cfg b/ydb/library/yql/tests/sql/suites/pg/join_mixed_types.cfg deleted file mode 100644 index 4b8acaa90c94..000000000000 --- a/ydb/library/yql/tests/sql/suites/pg/join_mixed_types.cfg +++ /dev/null @@ -1 +0,0 @@ -in Input input_misc_types.txt diff --git a/ydb/library/yql/tests/sql/suites/pg/join_mixed_types.sql b/ydb/library/yql/tests/sql/suites/pg/join_mixed_types.sql deleted file mode 100644 index 229a430bb0b8..000000000000 --- a/ydb/library/yql/tests/sql/suites/pg/join_mixed_types.sql +++ /dev/null @@ -1,4 +0,0 @@ ---!syntax_pg -SELECT t1.* FROM plato."Input" t1 JOIN plato."Input" t2 ON (t1.id1=t2.id2); -SELECT t1.* FROM plato."Input" t1, plato."Input" t2 WHERE (t1.id1=t2.id2); - diff --git a/ydb/library/yql/tests/sql/yt_native_file/part10/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part10/canondata/result.json index 3e9bf0171711..6fe4e7c50e4b 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part10/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part10/canondata/result.json @@ -1857,27 +1857,6 @@ "uri": "https://{canondata_backend}/1809005/81aef895e3303f900cc0cb6245596fe9a0da6573/resource.tar.gz#test.test_pg-aggregate_combine--Results_/results.txt" } ], - "test.test[pg-join_mixed_types--Debug]": [ - { - "checksum": "87186caeeba9fdcbd4baa1e7b1d4415c", - "size": 5542, - "uri": "https://{canondata_backend}/1925842/a75b2a850dffc93078af24b6960712b9ee737f6e/resource.tar.gz#test.test_pg-join_mixed_types--Debug_/opt.yql" - } - ], - "test.test[pg-join_mixed_types--Plan]": [ - { - "checksum": "e61d62c499a0a562918ffa9a71d0abfa", - "size": 8853, - "uri": "https://{canondata_backend}/1925842/a75b2a850dffc93078af24b6960712b9ee737f6e/resource.tar.gz#test.test_pg-join_mixed_types--Plan_/plan.txt" - } - ], - "test.test[pg-join_mixed_types--Results]": [ - { - "checksum": "613fab0dfa1e220391713e252e265be9", - "size": 2314, - "uri": "https://{canondata_backend}/1925842/a75b2a850dffc93078af24b6960712b9ee737f6e/resource.tar.gz#test.test_pg-join_mixed_types--Results_/results.txt" - } - ], "test.test[pg-order_by_distinct_same_expr_agg_sublink-default.txt-Debug]": [ { "checksum": "add068636ef7667f017803290484353e", diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan index 28107bceba54..e32606a841c2 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-jointest_join0.test_/query_2.plan @@ -30,10 +30,25 @@ "Plans": [ { "CTE Name": "precompute_0_0", - "Node Type": "Limit-Filter-CrossJoin-TableFullScan-ConstantExpr-ConstantExpr-InnerJoin (JoinDict)-ConstantExpr-ConstantExpr-InnerJoin (JoinDict)-ConstantExpr", + "Node Type": "Limit-CrossJoin-InnerJoin (MapJoin)-ConstantExpr-Filter-TableFullScan-ConstantExpr", "Operators": [ { "Inputs": [ + { + "InternalOperatorId": 1 + }, + { + "InternalOperatorId": 1 + }, + { + "InternalOperatorId": 1 + }, + { + "InternalOperatorId": 1 + }, + { + "InternalOperatorId": 1 + }, { "InternalOperatorId": 1 }, @@ -54,84 +69,52 @@ "Inputs": [ { "InternalOperatorId": 2 + }, + { + "InternalOperatorId": 6 } ], - "Name": "Filter", - "Predicate": "item.b.Sum0 == item.t.thousand And item.a.f1 + item.b.Sum0 + 999 == item.t.tenthous" + "Name": "CrossJoin" }, { + "Condition": "thousand = Sum0", "Inputs": [ { - "InternalOperatorId": 3 - }, - { - "InternalOperatorId": 9 + "InternalOperatorId": 4 }, { - "InternalOperatorId": 9 + "InternalOperatorId": 3 } ], - "Name": "CrossJoin" + "Name": "InnerJoin (MapJoin)" }, { "Inputs": [], - "Name": "TableFullScan", - "ReadColumns": [ - "tenthous", - "thousand" - ], - "ReadRanges": [ - "unique1 (-\u221e, +\u221e)", - "unique2 (-\u221e, +\u221e)" - ], - "Scan": "Parallel", - "Table": "postgres_jointest/join0.test_plan/tenk1" - }, - { - "Inputs": [ - { - "InternalOperatorId": 5 - } - ], "Name": "ToFlow", "ToFlow": "precompute_0_0" }, - { - "Inputs": [], - "Member": "precompute_0_0", - "Name": "Member" - }, { "Inputs": [ { - "InternalOperatorId": 8 - }, - { - "InternalOperatorId": 10 + "InternalOperatorId": 5 } ], - "Name": "InnerJoin (JoinDict)" - }, - { - "Inputs": [], - "Name": "ToFlow", - "ToFlow": "precompute_0_0" + "Name": "Filter", + "Predicate": "Exist(item.thousand)" }, { "Inputs": [], - "Name": "ToFlow", - "ToFlow": "precompute_0_0" - }, - { - "Inputs": [ - { - "InternalOperatorId": 8 - }, - { - "InternalOperatorId": 10 - } + "Name": "TableFullScan", + "ReadColumns": [ + "tenthous", + "thousand" ], - "Name": "InnerJoin (JoinDict)" + "ReadRanges": [ + "unique1 (-\u221e, +\u221e)", + "unique2 (-\u221e, +\u221e)" + ], + "Scan": "Parallel", + "Table": "postgres_jointest/join0.test_plan/tenk1" }, { "Inputs": [], diff --git a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_12.plan b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_12.plan index 7b4adeddd30d..bd8df9cd5162 100644 --- a/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_12.plan +++ b/ydb/tests/functional/suite_tests/canondata/test_postgres.TestPGSQL.test_sql_suite_plan-select.test_/query_12.plan @@ -29,61 +29,10 @@ "PlanNodeType": "Connection", "Plans": [ { - "Node Type": "Limit-Filter-CrossJoin-TableFullScan", + "Node Type": "Limit-InnerJoin (MapJoin)-Filter-TableFullScan", "Operators": [ { "Inputs": [ - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, - { - "InternalOperatorId": 1 - }, { "InternalOperatorId": 1 } @@ -92,13 +41,16 @@ "Name": "Limit" }, { + "Condition": "unique1,stringu1 = i,j", "Inputs": [ { "InternalOperatorId": 2 + }, + { + "Other": "ConstantExpression" } ], - "Name": "Filter", - "Predicate": "item.onek.unique1 == item.v.i And item.onek.stringu1 == item.v.j" + "Name": "InnerJoin (MapJoin)" }, { "Inputs": [ @@ -106,7 +58,8 @@ "InternalOperatorId": 3 } ], - "Name": "CrossJoin" + "Name": "Filter", + "Predicate": "Exist(item.stringu1) And Exist(item.unique1)" }, { "Inputs": [],