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