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]