Changeset: 92b981706692 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/92b981706692
Added Files:
        sql/test/BugTracker-2025/Tests/7737-join-order.test
Modified Files:
        sql/server/rel_select.c
        sql/test/BugTracker-2025/Tests/All
Branch: Mar2025
Log Message:

fixed not-in performance degradation


diffs (63 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2965,7 +2965,7 @@ rel_logical_exp(sql_query *query, sql_re
                return rel_select_push_compare_exp_down(sql, rel, le, le->l, 
le->r, NULL, f);
        }
        case SQL_NOT: {
-               sql_exp *le = rel_value_exp(query, &rel, sc->data.sym, 
f|sql_farg, ek);
+               sql_exp *le = rel_value_exp(query, &rel, sc->data.sym, f, ek);
                sql_subtype bt;
 
                sql_find_subtype(&bt, "boolean", 0, 0);
diff --git a/sql/test/BugTracker-2025/Tests/7737-join-order.test 
b/sql/test/BugTracker-2025/Tests/7737-join-order.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7737-join-order.test
@@ -0,0 +1,38 @@
+statement ok
+create table test_base (item varchar(10))
+
+statement ok
+create procedure test_populate()
+begin
+  declare rowmax bigint;
+  set rowmax = 100000;
+  declare rowindex bigint;
+  set rowindex = 0;
+  while rowindex < rowmax do
+    insert into test_base (item) values (cast(10 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(11 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(12 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(13 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(14 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(15 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(16 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(17 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(18 * rowmax + rowindex as 
varchar(10)));
+    insert into test_base (item) values (cast(19 * rowmax + rowindex as 
varchar(10)));
+    set rowindex = rowindex + 1;
+  end while;
+end
+
+statement ok
+call test_populate()
+
+query T python .plan.filter                                                    
                                                                                
                               
+plan select count(*) from test_base  where item is null or not(item in 
('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'))
+----
+project (
+| group by (
+| | select (
+| | | table("sys"."test_base") [ "test_base"."item" NOT NULL ]
+| | ) [ (("test_base"."item" NOT NULL) in (varchar(10) "a", varchar(10) "b", 
varchar(10) "c", varchar(10) "d", varchar(10) "e", varchar(10) "f", varchar(10) 
"g", varchar(10) "h", varchar(10) "i", varchar(10) "j", varchar(10) "k", 
varchar(10) "l", varchar(10) "m", varchar(10) "n", varchar(10) "o", varchar(10) 
"p", varchar(10) "q", varchar(10) "r", varchar(10) "s", varchar(10) "t", 
varchar(10) "u", varchar(10) "v", varchar(10) "w", varchar(10) "x", varchar(10) 
"y", varchar(10) "z")) = (boolean(1) "false") ]
+| ) [  ] [ "sys"."count"() NOT NULL UNIQUE as "%2"."%2" ]
+) [ "%2"."%2" NOT NULL UNIQUE ]
diff --git a/sql/test/BugTracker-2025/Tests/All 
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -46,3 +46,4 @@ 7732-table-exp-issue
 7734-epoch-missing-cast
 7735-crossproduct-update
 7736-scale-reduction-crash
+7737-join-order
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to