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]