summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoraneporada <[email protected]>2025-06-26 11:41:28 +0300
committeraneporada <[email protected]>2025-06-26 12:27:29 +0300
commit7cca9edd2f296f16025a8c7d3238e8469cbfbd8a (patch)
tree8b6c3646fa9f6f7532be19010aecb21b368ea17f
parent9862e1947bb5258751618ee2f2a992ba5d6ae2a3 (diff)
Do not generate empty Or in ExtractCommonPredicatesFromLogicalOps
commit_hash:7a57d8950e16c8237574833f4289a25ed54226bf
-rw-r--r--yql/essentials/core/common_opt/yql_co_simple2.cpp6
-rw-r--r--yql/essentials/tests/sql/minirun/part0/canondata/result.json14
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/result.json12
-rw-r--r--yql/essentials/tests/sql/sql2yql/canondata/test_sql_format.test_optimizers-yql-20117_empty_or_/formatted.sql10
-rw-r--r--yql/essentials/tests/sql/suites/optimizers/yql-20117_empty_or.sql5
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|>]);