Changeset: 70353a47a547 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/70353a47a547
Modified Files:
sql/server/rel_updates.c
sql/test/2024/Tests/returning.test
Branch: returning
Log Message:
allow aggregates in returning clauses
diffs (80 lines):
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
@@ -697,14 +697,14 @@ insert_into(sql_query *query, dlist *qna
mvc *sql = query->sql;
sql->type = Q_TABLE;
list *pexps = sa_list(sql->sa);
+ sql_rel* inner = ins->l;
for (dnode *n = opt_returning->h; n; n = n->next) {
- sql_rel* inner = ins->l;
- sql_exp *ce = rel_column_exp(query, &inner,
n->data.sym, sql_sel | sql_no_subquery | sql_update_set);
+ sql_exp *ce = rel_column_exp(query, &inner,
n->data.sym, sql_sel | sql_no_subquery);
if (ce == NULL)
return NULL;
pexps = append(pexps, ce);
}
- ins->attr = pexps;
+ ins->attr = is_groupby(inner->op) ? inner->exps : pexps;
}
return ins;
@@ -1265,14 +1265,14 @@ update_table(sql_query *query, dlist *qn
if (opt_returning) {
sql->type = Q_TABLE;
list *pexps = sa_list(sql->sa);
+ sql_rel* inner = r->l;
for (dnode *n = opt_returning->h; n; n = n->next) {
- sql_rel* inner = r->l;
- sql_exp *ce = rel_column_exp(query, &inner,
n->data.sym, sql_sel | sql_no_subquery | sql_update_set);
+ sql_exp *ce = rel_column_exp(query, &inner,
n->data.sym, sql_sel | sql_no_subquery);
if (ce == NULL)
return NULL;
pexps = append(pexps, ce);
}
- r->attr = pexps;
+ r->attr = is_groupby(inner->op) ? inner->exps : pexps;
}
return r;
@@ -1345,14 +1345,14 @@ delete_table(sql_query *query, dlist *qn
if (opt_returning) {
sql->type = Q_TABLE;
list *pexps = sa_list(sql->sa);
+ sql_rel* inner = r->l;
for (dnode *n = opt_returning->h; n; n = n->next) {
- sql_rel* inner = r->l;
sql_exp *ce = rel_column_exp(query, &inner,
n->data.sym, sql_sel | sql_no_subquery | sql_update_set);
if (ce == NULL)
return NULL;
pexps = append(pexps, ce);
}
- r->attr = pexps;
+ r->attr = is_groupby(inner->op) ? inner->exps : pexps;
}
return r;
}
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
@@ -52,15 +52,17 @@ 10
20
30
+query I nosort
+update foo set i = -i returning sum(j)
+----
+-60
+
statement error 42000!SELECT: identifier 'k' unknown
update foo set i = -i returning k
statement error 42000!SELECT: identifier 'k' unknown
delete from foo where i > 0 returning k
-statement error 42000!SUM: aggregate functions not allowed in SET, WHILE, IF,
ELSE, CASE, WHEN, RETURN, ANALYZE, RETURNING clauses (use subquery)
-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)
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]