Changeset: d38466ad88b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d38466ad88b6
Modified Files:
        sql/server/rel_psm.c
        sql/test/miscellaneous/Tests/simple_selects.sql
        sql/test/miscellaneous/Tests/simple_selects.stable.err
        sql/test/pg_regress/Tests/alter_table.stable.err
        sql/test/subquery/Tests/subquery4.sql
Branch: Jun2020
Log Message:

Small bug fix, on SELECT INTO, the number of variables must match the projected 
columns. I found another crash as well


diffs (64 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -520,6 +520,8 @@ rel_select_into( sql_query *query, symbo
        r = rel_subquery(query, NULL, sq, ek);
        if (!r) 
                return NULL;
+       if (list_length(r->exps) != dlist_length(into))
+               return sql_error(sql, 02, SQLSTATE(21S01) "SELECT INTO: number 
of values doesn't match number of variables to set");
        nl = sa_list(sql->sa);
        append(nl, exp_rel(sql, r));
        for (m = r->exps->h, n = into->h; m && n; m = m->next, n = n->next) {
diff --git a/sql/test/miscellaneous/Tests/simple_selects.sql 
b/sql/test/miscellaneous/Tests/simple_selects.sql
--- a/sql/test/miscellaneous/Tests/simple_selects.sql
+++ b/sql/test/miscellaneous/Tests/simple_selects.sql
@@ -133,3 +133,5 @@ create table x (a int GENERATED ALWAYS A
 alter table x alter a drop default; --ok, remove sequence
 SELECT CAST(COUNT(*) - myvar AS BIGINT) FROM sequences; --the total count, 
cannot change
 drop table x;
+
+SELECT 1, 2 INTO myvar; --error, number of variables don't match
diff --git a/sql/test/miscellaneous/Tests/simple_selects.stable.err 
b/sql/test/miscellaneous/Tests/simple_selects.stable.err
--- a/sql/test/miscellaneous/Tests/simple_selects.stable.err
+++ b/sql/test/miscellaneous/Tests/simple_selects.stable.err
@@ -161,6 +161,10 @@ MAPI  = (monetdb) /var/tmp/mtest-374801/
 QUERY = create table x (a int default '1' GENERATED ALWAYS AS IDENTITY); 
--error, multiple default values
 ERROR = !The default value for a column should be passed as most once
 CODE  = 42000
+MAPI  = (monetdb) /var/tmp/mtest-106925/.s.monetdb.39578
+QUERY = SELECT 1, 2 INTO myvar; --error, number of variables don't match
+ERROR = !SELECT INTO: number of values doesn't match number of variables to set
+CODE  = 21S01
 
 # 17:31:38 >  
 # 17:31:38 >  "Done."
diff --git a/sql/test/pg_regress/Tests/alter_table.stable.err 
b/sql/test/pg_regress/Tests/alter_table.stable.err
--- a/sql/test/pg_regress/Tests/alter_table.stable.err
+++ b/sql/test/pg_regress/Tests/alter_table.stable.err
@@ -593,9 +593,9 @@ ERROR = !CREATE INDEX: no such column '.
 CODE  = 42S22
 MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
 QUERY = select * into test2 from atacc1;
-ERROR = !SELECT INTO: variable 'test2' unknown
-CODE  = 42000
-MAPI  = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685
+ERROR = !SELECT INTO: number of values doesn't match number of variables to set
+CODE  = 21S01
+MAPI  = (monetdb) /var/tmp/mtest-106925/.s.monetdb.39578
 QUERY = select * from test2;
 ERROR = !SELECT: no such table 'test2'
 CODE  = 42S02
diff --git a/sql/test/subquery/Tests/subquery4.sql 
b/sql/test/subquery/Tests/subquery4.sql
--- a/sql/test/subquery/Tests/subquery4.sql
+++ b/sql/test/subquery/Tests/subquery4.sql
@@ -192,6 +192,9 @@ SELECT i1.i, i2.i FROM integers i1, inte
 SELECT 1 IN ((SELECT MIN(col2)), (SELECT SUM(col4))) FROM another_t;
        -- False
 
+DECLARE myvar INT;
+SELECT (SELECT i) INTO myvar FROM integers; --error, one row max
+
 UPDATE another_T SET col1 = MIN(col1); --error, aggregates not allowed in 
update set clause
 UPDATE another_T SET col2 = 1 WHERE col1 = SUM(col2); --error, aggregates not 
allowed in update set clause
 UPDATE another_T SET col3 = (SELECT MAX(col5)); --error, aggregates not 
allowed in update set clause
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to