Changeset: e47a467cfe7c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e47a467cfe7c Modified Files: sql/server/rel_select.c sql/test/subquery/Tests/subquery5.stable.err Branch: Jun2020 Log Message:
small fix (ie give error) for queries trying a single aggregate and a correlate aggregate where the outer column isn't aggregated or the groupby column. diffs (48 lines): diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -3346,9 +3346,10 @@ static sql_exp * exps = sa_list(sql->sa); if (args && args->data.sym) { + int ungrouped_col = -1, i; int all_aggr = query_has_outer(query); all_freevar = 1; - for ( ; args && args->data.sym; args = args->next ) { + for (i = 0; args && args->data.sym; args = args->next, i++) { int base = (!groupby || !is_project(groupby->op) || is_base(groupby->op) || is_processed(groupby)); sql_rel *gl = base?groupby:groupby->l, *ogl = gl; /* handle case of subqueries without correlation */ sql_exp *e = rel_value_exp(query, &gl, args->data.sym, (f | sql_aggr)& ~sql_farg, ek);//, *lu; @@ -3386,6 +3387,8 @@ static sql_exp * sql_exp *a = rel_find_exp(outer, e); if (a) aggr = is_aggr(a->type); + else if (outer->grouped) + ungrouped_col = i; } all_aggr &= aggr; } else { @@ -3440,6 +3443,9 @@ static sql_exp * if (uaname) GDKfree(uaname); return e; + } else if (!all_aggr && ungrouped_col >= 0) { + sql_exp *u = list_fetch(exps, ungrouped_col); + return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000) "SELECT: subquery uses ungrouped column \"%s.%s\" from outer query", exp_relname(u), exp_name(u)); } } } diff --git a/sql/test/subquery/Tests/subquery5.stable.err b/sql/test/subquery/Tests/subquery5.stable.err --- a/sql/test/subquery/Tests/subquery5.stable.err +++ b/sql/test/subquery/Tests/subquery5.stable.err @@ -62,6 +62,10 @@ MAPI = (monetdb) /var/tmp/mtest-2392594 QUERY = SELECT (SELECT i1.i IN (SELECT SUM(i1.i))) FROM integers i1; --error, subquery uses ungrouped column "i1.i" from outer query ERROR = !SELECT: subquery uses ungrouped column "i1.i" from outer query CODE = 42000 +MAPI = (monetdb) /var/tmp/mtest-3324560/.s.monetdb.33622 +QUERY = SELECT (SELECT SUM(i1.i) IN (SELECT CORR(i1.i, i2.i) FROM integers i2)) FROM integers i1; --error, subquery uses ungrouped column "i1.i" from outer query +ERROR = !SELECT: subquery uses ungrouped column "i1.i" from outer query +CODE = 42000 # 08:41:39 > # 08:41:39 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list