Changeset: bfe9b09d1cd5 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/bfe9b09d1cd5 Modified Files: sql/backends/monet5/rel_bin.c sql/server/rel_updates.c sql/server/sql_parser.y sql/test/2024/Tests/returning.test Branch: returning Log Message:
fix DELETE ... RETURNING statements with no WHERE clause diffs (60 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 @@ -6699,8 +6699,8 @@ rel2bin_delete(backend *be, sql_rel *rel } if (rel->attr) { - sql_rel* sel = ((sql_rel*) rel->r)->l; - sql_rel* ret = rel_project(sql->sa, sel, rel->attr); + sql_rel* inner = rel->r?((sql_rel*) rel->r)->l:rel->l; + sql_rel* ret = rel_project(sql->sa, inner, rel->attr); s = subrel_bin(be, ret, refs); s = subrel_project(be, s, refs, rel); sql->type = Q_TABLE; 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 @@ -1331,9 +1331,11 @@ delete_table(sql_query *query, dlist *qn list *pexps = sa_list(sql->sa); for (dnode *n = opt_returning->h; n; n = n->next) { sql_rel* inner = r->l; - sql_rel* sel = ((sql_rel*) r->r)->l; - assert(is_select(sel->op)); - (void) rel_dup (sel); // required to prevent recalculating select in rel2bin_delete + if (r->r) { + sql_rel* sel = ((sql_rel*) r->r)->l; + assert(is_select(sel->op)); + (void) rel_dup (sel); // required to prevent recalculating select in rel2bin_delete + } sql_exp *ce = rel_column_exp(query, &inner, n->data.sym, sql_sel | sql_no_subquery | sql_update_set); if (ce == NULL) return sql_error(sql, 02, SQLSTATE(42000) "aggregate functions and subqueries are not allowed in RETURNING clause"); diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y --- a/sql/server/sql_parser.y +++ b/sql/server/sql_parser.y @@ -6107,7 +6107,6 @@ non_reserved_word: | NIL { $$ = sa_strdup(SA, "nil"); } | PASSING { $$ = sa_strdup(SA, "passing"); } | REF { $$ = sa_strdup(SA, "ref"); } -| RETURNING { $$ = sa_strdup(SA, "returning"); } | STRIP { $$ = sa_strdup(SA, "strip"); } | URI { $$ = sa_strdup(SA, "uri"); } | WHITESPACE { $$ = sa_strdup(SA, "whitespace"); } diff --git a/sql/test/2024/Tests/returning.test b/sql/test/2024/Tests/returning.test --- a/sql/test/2024/Tests/returning.test +++ b/sql/test/2024/Tests/returning.test @@ -63,3 +63,13 @@ update foo set i = -i returning sum(i) statement error 42000!SELECT: subquery not allowed update foo set i = -i returning i in (select j from foo) + +statement error 42000!SELECT: identifier 'k' unknown +delete from foo returning k + +query I nosort +delete from foo returning i*i +---- +1 +4 +9 _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org