diff options
author | aneporada <[email protected]> | 2025-06-26 11:41:28 +0300 |
---|---|---|
committer | aneporada <[email protected]> | 2025-06-26 12:27:29 +0300 |
commit | 7cca9edd2f296f16025a8c7d3238e8469cbfbd8a (patch) | |
tree | 8b6c3646fa9f6f7532be19010aecb21b368ea17f | |
parent | 9862e1947bb5258751618ee2f2a992ba5d6ae2a3 (diff) |
Do not generate empty Or in ExtractCommonPredicatesFromLogicalOps
commit_hash:7a57d8950e16c8237574833f4289a25ed54226bf
5 files changed, 45 insertions, 2 deletions
diff --git a/yql/essentials/core/common_opt/yql_co_simple2.cpp b/yql/essentials/core/common_opt/yql_co_simple2.cpp index e7628c076cb..40a534c39da 100644 --- a/yql/essentials/core/common_opt/yql_co_simple2.cpp +++ b/yql/essentials/core/common_opt/yql_co_simple2.cpp @@ -748,8 +748,10 @@ TExprNode::TPtr ApplyOrDistributive(const TExprNode::TPtr& node, TExprContext& c newGroup.emplace_back(ctx.ChangeChildren(*childAnd, std::move(preds))); } } - auto restPreds = ctx.NewCallable(node->Pos(), "Or", std::move(newGroup)); - commonPreds.push_back(restPreds); + if (!newGroup.empty()) { + auto restPreds = ctx.NewCallable(node->Pos(), "Or", std::move(newGroup)); + commonPreds.push_back(restPreds); + } newChildren.push_back(ctx.NewCallable(node->Pos(), "And", std::move(commonPreds))); } else { for (auto& idx : group) { diff --git a/yql/essentials/tests/sql/minirun/part0/canondata/result.json b/yql/essentials/tests/sql/minirun/part0/canondata/result.json index 2204df8bbbd..c5f89e9e3a3 100644 --- a/yql/essentials/tests/sql/minirun/part0/canondata/result.json +++ b/yql/essentials/tests/sql/minirun/part0/canondata/result.json @@ -876,6 +876,20 @@ "uri": "https://{canondata_backend}/1597364/388cf5920d17fb9690dc3f4d18ce7c82ae3bce7f/resource.tar.gz#test.test_optimizers-unordered_over_extract_members_topsort-default.txt-Results_/results.txt" } ], + "test.test[optimizers-yql-20117_empty_or-default.txt-Debug]": [ + { + "checksum": "e511f96dbd615dbcd89146ff1c241d48", + "size": 530, + "uri": "https://{canondata_backend}/1942100/6c2a774c208067888b3de8f1ff9dff571453fb04/resource.tar.gz#test.test_optimizers-yql-20117_empty_or-default.txt-Debug_/opt.yql" + } + ], + "test.test[optimizers-yql-20117_empty_or-default.txt-Results]": [ + { + "checksum": "be2e16c994a7bc241e89b4667b9b9799", + "size": 1090, + "uri": "https://{canondata_backend}/1942100/6c2a774c208067888b3de8f1ff9dff571453fb04/resource.tar.gz#test.test_optimizers-yql-20117_empty_or-default.txt-Results_/results.txt" + } + ], "test.test[params-struct--Debug]": [ { "checksum": "f9dc205de4d3652a1c45c5c40e79d4ca", diff --git a/yql/essentials/tests/sql/sql2yql/canondata/result.json b/yql/essentials/tests/sql/sql2yql/canondata/result.json index 32f341070c7..b8e9166185b 100644 --- a/yql/essentials/tests/sql/sql2yql/canondata/result.json +++ b/yql/essentials/tests/sql/sql2yql/canondata/result.json @@ -4668,6 +4668,13 @@ "uri": "https://{canondata_backend}/1942173/99e88108149e222741552e7e6cddef041d6a2846/resource.tar.gz#test_sql2yql.test_optimizers-yql-16134_/sql.yql" } ], + "test_sql2yql.test[optimizers-yql-20117_empty_or]": [ + { + "checksum": "2fef0528b56efa5c88812451b06df822", + "size": 1528, + "uri": "https://{canondata_backend}/1942100/3a10d26ef7a070d46fa88c8dd9331e21543d4c65/resource.tar.gz#test_sql2yql.test_optimizers-yql-20117_empty_or_/sql.yql" + } + ], "test_sql2yql.test[optimizers-yson_dup_serialize]": [ { "checksum": "c4d71b8c49a1202b8b7d0b439671a102", @@ -10964,6 +10971,11 @@ "uri": "file://test_sql_format.test_optimizers-yql-16134_/formatted.sql" } ], + "test_sql_format.test[optimizers-yql-20117_empty_or]": [ + { + "uri": "file://test_sql_format.test_optimizers-yql-20117_empty_or_/formatted.sql" + } + ], "test_sql_format.test[optimizers-yson_dup_serialize]": [ { "uri": "file://test_sql_format.test_optimizers-yson_dup_serialize_/formatted.sql" diff --git a/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_optimizers-yql-20117_empty_or_/formatted.sql b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_optimizers-yql-20117_empty_or_/formatted.sql new file mode 100644 index 00000000000..ecaf925aeb4 --- /dev/null +++ b/yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_optimizers-yql-20117_empty_or_/formatted.sql @@ -0,0 +1,10 @@ +PRAGMA config.flags('OptimizerFlags', 'ExtractCommonPredicatesFromLogicalOps'); + +$between_5_and_10 = ($x) -> ($x >= 5 AND $x <= 10 OR $x <= 10 AND $x >= 5); + +SELECT + x, + $between_5_and_10(x) +FROM + as_table([<|x: 1|>, <|x: 7|>]) +; diff --git a/yql/essentials/tests/sql/suites/optimizers/yql-20117_empty_or.sql b/yql/essentials/tests/sql/suites/optimizers/yql-20117_empty_or.sql new file mode 100644 index 00000000000..75697f869f1 --- /dev/null +++ b/yql/essentials/tests/sql/suites/optimizers/yql-20117_empty_or.sql @@ -0,0 +1,5 @@ +pragma config.flags("OptimizerFlags","ExtractCommonPredicatesFromLogicalOps"); + +$between_5_and_10 = ($x) -> ($x >= 5 and $x <= 10 or $x <= 10 and $x >= 5); + +select x, $between_5_and_10(x) from as_table([<|x:1|>, <|x:7|>]); |