Changeset: 955cddafcc5d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/955cddafcc5d
Added Files:
        sql/test/BugTracker-2024/Tests/add-partition-crash-7437.test
        sql/test/BugTracker-2024/Tests/aggr-exp-copy-crash-7435.test
        sql/test/BugTracker-2024/Tests/exp-bin-crash-7434.test
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/server/rel_exp.c
        sql/server/rel_propagate.c
        sql/test/BugTracker-2024/Tests/All
Branch: Dec2023
Log Message:

fixes for issue #7437, #7435 and #7434

check in exp_copy for window functions with single (order by) arguments
check for errors in rel_alter_table_add_partition_list
check for relation in exp_bin for window functions


diffs (88 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1570,7 +1570,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l
                                /*if (rows && en == exps->h && f->func->type != 
F_LOADER)
                                        es = stmt_const(be, rows, es);*/
                                else if (f->func->type == F_ANALYTIC && 
es->nrcols == 0) {
-                                       if (en == exps->h && left->nrcols)
+                                       if (en == exps->h && left && 
left->nrcols)
                                                es = stmt_const(be, 
bin_find_smallest_column(be, left), es); /* ensure the first argument is a 
column */
                                        if (!f->func->s && 
!strcmp(f->func->base.name, "window_bound")
                                                && exps->h->next && 
list_length(f->func->ops) == 6 && en == exps->h->next && left->nrcols)
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2881,8 +2881,11 @@ exp_copy(mvc *sql, sql_exp * e)
                        ne = exp_aggr(sql->sa, l, e->f, need_distinct(e), 
need_no_nil(e), e->card, has_nil(e));
                if (e->r) { /* copy obe and gbe lists */
                        list *er = (list*) e->r;
-                       assert(list_length(er) == 2);
-                       ne->r = list_append(list_append(sa_list(sql->sa), 
exps_copy(sql, er->h->data)), exps_copy(sql, er->h->next->data));
+                       assert(list_length(er) <= 2);
+                       if (list_length(er) == 2)
+                               ne->r = 
list_append(list_append(sa_list(sql->sa), exps_copy(sql, er->h->data)), 
exps_copy(sql, er->h->next->data));
+                       else
+                               ne->r = list_append(sa_list(sql->sa), 
exps_copy(sql, er->h->data));
                }
                break;
        }
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -410,6 +410,8 @@ rel_alter_table_add_partition_list(sql_q
                        symbol* next = dn->data.sym;
                        sql_exp *pnext = generate_partition_limits(query, 
&rel_psm, next, tpe, true);
 
+                       if (!pnext)
+                               return NULL;
                        if (next->token == SQL_NULL)
                                return sql_error(sql, 02, SQLSTATE(42000) 
"ALTER TABLE: a list value cannot be null");
                        append(lvals, pnext);
diff --git a/sql/test/BugTracker-2024/Tests/All 
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -5,7 +5,10 @@ where-case-null-issue-7429
 create-index-query-issue-7430
 alloc-overflow-7432
 rewrite-count-crash-7433
+exp-bin-crash-7434
+aggr-exp-copy-crash-7435
 count-unnest-crash-7436
+add-partition-crash-7437
 bind-exps-crash-7438
 exps-cards-crash-7439
 gc-col-crash-7440
diff --git a/sql/test/BugTracker-2024/Tests/add-partition-crash-7437.test 
b/sql/test/BugTracker-2024/Tests/add-partition-crash-7437.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/add-partition-crash-7437.test
@@ -0,0 +1,8 @@
+statement ok
+CREATE MERGE TABLE testagain (a int, b varchar(32)) PARTITION BY VALUES ON (a)
+
+statement ok
+CREATE TABLE sublimits2 (a int, b varchar(32))
+
+statement error 42000!SELECT: no such unary operator 'addtwo'(tinyint)
+ALTER TABLE testagain ADD TABLE sublimits2 AS PARTITION IN (-100 * 2, '-90', 
'120', addtwo(55), 11.2)
diff --git a/sql/test/BugTracker-2024/Tests/aggr-exp-copy-crash-7435.test 
b/sql/test/BugTracker-2024/Tests/aggr-exp-copy-crash-7435.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/aggr-exp-copy-crash-7435.test
@@ -0,0 +1,5 @@
+statement ok
+CREATE TABLE v0 ( v1 , v2 ) as ( select i , cast ( i as string ) from 
generate_series ( 1 , 1000 ) as t ( i ) )
+
+statement ok
+DELETE FROM v0 WHERE NOT ( v1 = ( SELECT 3 WHERE v2 = ( SELECT sum ( v2 ) OVER 
( ) ) GROUP BY 7 ))
diff --git a/sql/test/BugTracker-2024/Tests/exp-bin-crash-7434.test 
b/sql/test/BugTracker-2024/Tests/exp-bin-crash-7434.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/exp-bin-crash-7434.test
@@ -0,0 +1,5 @@
+statement ok
+CREATE TABLE v0 ( v1 REAL )
+
+statement error conversion of string '<js>null</js>' to type hge failed.
+SELECT ( NULL IN ( ( SELECT median ( 1 ) ) , ntile ( '<js>null</js>' ) OVER ( 
) ) ) AS new_column FROM v0
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to