Changeset: de5bbe98badf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/de5bbe98badf
Modified Files:
        sql/server/rel_optimize_exps.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/test/BugTracker-2025/Tests/7690-case_in_aggr.test
        sql/test/BugTracker-2025/Tests/7717-check-with-window.test
        sql/test/BugTracker-2025/Tests/7718-crash.test
        sql/test/BugTracker-2025/Tests/7719-crash-in-complex-query.test
        sql/test/BugTracker-2025/Tests/7720-coalesce.test
        sql/test/BugTracker-2025/Tests/7722-recusive-cte-with-error-crash.test
        sql/test/BugTracker-2025/Tests/7730-generate-series-month-int.test
        sql/test/BugTracker-2025/Tests/7732-table-exp-issue.test
        sql/test/BugTracker-2025/Tests/7734-epoch-missing-cast.test
        sql/test/BugTracker-2025/Tests/7735-crossproduct-update.test
        sql/test/BugTracker-2025/Tests/7736-scale-reduction-crash.test
        sql/test/BugTracker-2025/Tests/7737-join-order.test
        sql/test/BugTracker-2025/Tests/All
        sql/test/astro/Tests/astro.test
Branch: default
Log Message:

Merge with Mar2025 branch.


diffs (truncated from 321 to 300 lines):

diff --git a/sql/server/rel_optimize_exps.c b/sql/server/rel_optimize_exps.c
--- a/sql/server/rel_optimize_exps.c
+++ b/sql/server/rel_optimize_exps.c
@@ -381,11 +381,11 @@ bind_simplify_math(visitor *v, global_pr
  * types).
  */
 
-#define reduce_scale_tpe(tpe, uval) \
+#define reduce_scale_tpe(tpe, uval, scale) \
        do { \
                tpe v = uval; \
                if (v != 0) { \
-                       while( (v/10)*10 == v ) { \
+                       while(i < (int)scale && (v/10)*10 == v ) { \
                                i++; \
                                v /= 10; \
                        } \
@@ -406,17 +406,17 @@ reduce_scale(mvc *sql, atom *a)
 
 #ifdef HAVE_HGE
        if (a->data.vtype == TYPE_hge) {
-               reduce_scale_tpe(hge, a->data.val.hval);
+               reduce_scale_tpe(hge, a->data.val.hval, a->tpe.scale);
        } else
 #endif
        if (a->data.vtype == TYPE_lng) {
-               reduce_scale_tpe(lng, a->data.val.lval);
+               reduce_scale_tpe(lng, a->data.val.lval, a->tpe.scale);
        } else if (a->data.vtype == TYPE_int) {
-               reduce_scale_tpe(int, a->data.val.ival);
+               reduce_scale_tpe(int, a->data.val.ival, a->tpe.scale);
        } else if (a->data.vtype == TYPE_sht) {
-               reduce_scale_tpe(sht, a->data.val.shval);
+               reduce_scale_tpe(sht, a->data.val.shval, a->tpe.scale);
        } else if (a->data.vtype == TYPE_bte) {
-               reduce_scale_tpe(bte, a->data.val.btval);
+               reduce_scale_tpe(bte, a->data.val.btval, a->tpe.scale);
        }
        if (i) {
                na = atom_int(sql->sa, &a->tpe, nval);
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
@@ -495,7 +495,7 @@ exp_fix_scale(mvc *sql, sql_subtype *ct,
                int scale_diff = ((int) ct->scale - (int) et->scale);
 
                if (scale_diff) {
-                       if (scale_diff < 0)
+                       if (!ct->scale && scale_diff < 0)
                                return e;
                        sql_subtype st;
                        int scale = ct->scale;
@@ -3001,7 +3001,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/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1034,6 +1034,7 @@ update_generate_assignments(sql_query *q
                                r = rel_crossproduct(sql->sa, r, rel_val, 
op_left);
                                set_dependent(r);
                                set_processed(r);
+                               set_single(r);
                                if (single) {
                                        v = exp_column(sql->sa, NULL, 
exp_name(v), exp_subtype(v), v->card, has_nil(v), is_unique(v), is_intern(v));
                                        rel_val = NULL;
diff --git a/sql/test/BugTracker-2025/Tests/7690-case_in_aggr.test 
b/sql/test/BugTracker-2025/Tests/7690-case_in_aggr.test
--- a/sql/test/BugTracker-2025/Tests/7690-case_in_aggr.test
+++ b/sql/test/BugTracker-2025/Tests/7690-case_in_aggr.test
@@ -1,3 +1,6 @@
+statement ok
+set time zone interval '+02:00' hour to minute
+
 statement ok
 create table test(doc_num string, doc_type string, inserted timestamp)
 
diff --git a/sql/test/BugTracker-2025/Tests/7717-check-with-window.test 
b/sql/test/BugTracker-2025/Tests/7717-check-with-window.test
--- a/sql/test/BugTracker-2025/Tests/7717-check-with-window.test
+++ b/sql/test/BugTracker-2025/Tests/7717-check-with-window.test
@@ -1,2 +1,3 @@
 statement error 42000!STDDEV_SAMP: window function 'stddev_samp' not allowed 
in check constraints
-CREATE TABLE v0 ( v1 INT , v2 VARCHAR ( 77 ) NOT NULL CHECK ( CAST ( 
STDDEV_SAMP ( v1 / -1 ) OVER ( ORDER BY 15933342.000000 DESC ) AS INTEGER ))) 
+CREATE TABLE v0 ( v1 INT , v2 VARCHAR ( 77 ) NOT NULL CHECK ( CAST ( 
STDDEV_SAMP ( v1 / -1 ) OVER ( ORDER BY 15933342.000000 DESC ) AS INTEGER )))
+
diff --git a/sql/test/BugTracker-2025/Tests/7718-crash.test 
b/sql/test/BugTracker-2025/Tests/7718-crash.test
--- a/sql/test/BugTracker-2025/Tests/7718-crash.test
+++ b/sql/test/BugTracker-2025/Tests/7718-crash.test
@@ -4,6 +4,7 @@ CREATE TABLE v0 ( v1 INT PRIMARY KEY, v2
 statement ok rowcount 5
 INSERT INTO v0 VALUES (-1, 24), (51 , 43), (16 , 48901402.000000), (255, 
64438998.000000), (17, 20304169.000000)
 
-query R
+query R nosort
 SELECT v2 FROM v0 WHERE v2 IN ( SELECT v1 )
 ----
+
diff --git a/sql/test/BugTracker-2025/Tests/7719-crash-in-complex-query.test 
b/sql/test/BugTracker-2025/Tests/7719-crash-in-complex-query.test
--- a/sql/test/BugTracker-2025/Tests/7719-crash-in-complex-query.test
+++ b/sql/test/BugTracker-2025/Tests/7719-crash-in-complex-query.test
@@ -1,17 +1,18 @@
 statement ok
 CREATE TABLE v0 (v1 INT , v2 VARCHAR(71))
 
-query IITT
+query IITT nosort
 SELECT v1, v1, v2, LAST_VALUE(v2) OVER (PARTITION BY v1 RANGE BETWEEN CURRENT 
ROW AND UNBOUNDED FOLLOWING) FROM v0
 ----
 
 statement ok rowcount 1
 insert into v0 values(1,1)
 
-query IITT
+query IITT nosort
 SELECT v1, v1, v2, LAST_VALUE(v2) OVER (PARTITION BY v1 RANGE BETWEEN CURRENT 
ROW AND UNBOUNDED FOLLOWING) FROM v0
 ----
 1
 1
 1
 NULL
+
diff --git a/sql/test/BugTracker-2025/Tests/7720-coalesce.test 
b/sql/test/BugTracker-2025/Tests/7720-coalesce.test
--- a/sql/test/BugTracker-2025/Tests/7720-coalesce.test
+++ b/sql/test/BugTracker-2025/Tests/7720-coalesce.test
@@ -1,10 +1,11 @@
-query I
+query I nosort
 SELECT COALESCE ( 75 )
 ----
 75
 
 # bug 7721
-query I
+query I nosort
 SELECT ( coalesce ( ( SELECT 1 ) ) )
 ----
 1
+
diff --git 
a/sql/test/BugTracker-2025/Tests/7722-recusive-cte-with-error-crash.test 
b/sql/test/BugTracker-2025/Tests/7722-recusive-cte-with-error-crash.test
--- a/sql/test/BugTracker-2025/Tests/7722-recusive-cte-with-error-crash.test
+++ b/sql/test/BugTracker-2025/Tests/7722-recusive-cte-with-error-crash.test
@@ -1,2 +1,3 @@
 statement error
 SELECT ( WITH RECURSIVE x AS ( SELECT 1 UNION SELECT str_to_date ( 'int' , 
'X2014-10-25 UTC' ) ) SELECT ( 3 ) )
+
diff --git a/sql/test/BugTracker-2025/Tests/7730-generate-series-month-int.test 
b/sql/test/BugTracker-2025/Tests/7730-generate-series-month-int.test
--- a/sql/test/BugTracker-2025/Tests/7730-generate-series-month-int.test
+++ b/sql/test/BugTracker-2025/Tests/7730-generate-series-month-int.test
@@ -1,11 +1,12 @@
-query T 
-SELECT * FROM generate_series( '2025-03-01', '2025-04-25', INTERVAL '1' MONTH);
+query T nosort
+SELECT * FROM generate_series( '2025-03-01', '2025-04-25', INTERVAL '1' MONTH)
 ----
 2025-03-01
 2025-04-01
 
-query T 
-SELECT * FROM generate_series( '2025-03-01', '2025-04-26', INTERVAL '1' MONTH);
+query T nosort
+SELECT * FROM generate_series( '2025-03-01', '2025-04-26', INTERVAL '1' MONTH)
 ----
 2025-03-01
 2025-04-01
+
diff --git a/sql/test/BugTracker-2025/Tests/7732-table-exp-issue.test 
b/sql/test/BugTracker-2025/Tests/7732-table-exp-issue.test
--- a/sql/test/BugTracker-2025/Tests/7732-table-exp-issue.test
+++ b/sql/test/BugTracker-2025/Tests/7732-table-exp-issue.test
@@ -3,3 +3,4 @@ create table test (id integer primary ke
 
 statement error 42S22!SELECT: no such column 
'test.some_column_that_does_not_exist'
 select id, test."some_column_that_does_not_exist" from test order by id
+
diff --git a/sql/test/BugTracker-2025/Tests/7734-epoch-missing-cast.test 
b/sql/test/BugTracker-2025/Tests/7734-epoch-missing-cast.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7734-epoch-missing-cast.test
@@ -0,0 +1,13 @@
+statement ok
+set time zone interval '+02:00' hour to minute
+
+query T nosort
+select epoch(1234567890.456)
+----
+2009-02-14 01:31:30.456000+02:00
+
+query T nosort
+select epoch(1234567890.456000)
+----
+2009-02-14 01:31:30.456000+02:00
+
diff --git a/sql/test/BugTracker-2025/Tests/7735-crossproduct-update.test 
b/sql/test/BugTracker-2025/Tests/7735-crossproduct-update.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7735-crossproduct-update.test
@@ -0,0 +1,18 @@
+statement ok
+CREATE TABLE v0 ( v1 INT , v2 VARCHAR ( 4 ) )
+
+statement ok rowcount 1
+INSERT INTO v0 DEFAULT VALUES
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( 7 , 'x' )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( 18 , 'x' )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( 90 , NULL )
+
+statement error GDK reported error: BATsubcross: more than one match
+UPDATE v0 SET ( v2 , v1 ) = ( SELECT v1 + 90 , v1 FROM v0 )
+
diff --git a/sql/test/BugTracker-2025/Tests/7736-scale-reduction-crash.test 
b/sql/test/BugTracker-2025/Tests/7736-scale-reduction-crash.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7736-scale-reduction-crash.test
@@ -0,0 +1,30 @@
+statement ok
+CREATE TABLE v0 ( v1 INT , v2 VARCHAR ( 255 ) )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( 6249863.000000 , 34483237.000000 )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( 6314442.000000 , 45506563.000000 )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( NULL , 26065318.000000 )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( 58834911.000000 , NULL )
+
+statement ok rowcount 1
+INSERT INTO v0 VALUES ( NULL , NULL )
+
+query DI nosort
+SELECT DISTINCT 75472850.000000 * v1 , v1 + v1 FROM v0
+----
+471694972719550
+12499726
+476568933899700
+12628884
+NULL
+NULL
+4440438412666350
+117669822
+
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,39 @@
+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
+explain 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" ]
+| | ) [ (("test_base"."item") ! 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) "true") ]
+| ) [  ] [ "sys"."count"() as "%2"."%2" ]
+) [ "%2"."%2" ]
+
diff --git a/sql/test/BugTracker-2025/Tests/All 
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to