Changeset: 7d459ebe5c26 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7d459ebe5c26
Added Files:
sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.err
sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.out
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2008/Tests/count_with_order_by_and_limit_crashes.SF-2229936.stable.err
sql/test/LSST/Tests/dbQuery036.stable.err
sql/test/Tests/marcin3.stable.err
Branch: Jul2017
Log Message:
fixed bug 6431
diffs (180 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
@@ -1025,7 +1025,7 @@ rel_column_ref(mvc *sql, sql_rel **rel,
return rel_var_ref(sql, name, 0);
}
if (!exp && !var) {
- if (rel && *rel && (*rel)->card == CARD_AGGR && f ==
sql_sel) {
+ if (rel && *rel && (*rel)->card <= CARD_AGGR && f ==
sql_sel) {
sql_rel *gb = *rel;
while(gb->l && !is_groupby(gb->op))
@@ -1033,6 +1033,8 @@ rel_column_ref(mvc *sql, sql_rel **rel,
if (gb && gb->l && rel_bind_column(sql, gb->l,
name, f))
return sql_error(sql, 02, "SELECT:
cannot use non GROUP BY column '%s' in query results without an aggregate
function", name);
}
+ if (f == sql_having)
+ return sql_error(sql, 02, "SELECT: cannot use
non GROUP BY column '%s' in query results without an aggregate function", name);
return sql_error(sql, 02, "SELECT: identifier '%s'
unknown", name);
}
@@ -1053,11 +1055,7 @@ rel_column_ref(mvc *sql, sql_rel **rel,
*rel = rel_crossproduct(sql->sa, *rel,
v, op_join);
else
*rel = v;
- /*
- exp = rel_bind_column(sql, *rel, cname, f);
- if (!exp)
- */
- exp = rel_bind_column2(sql, *rel,
tname, cname, f);
+ exp = rel_bind_column2(sql, *rel, tname, cname,
f);
}
}
if (!exp) {
@@ -1069,6 +1067,8 @@ rel_column_ref(mvc *sql, sql_rel **rel,
if (gb && is_groupby(gb->op) && gb->l &&
rel_bind_column2(sql, gb->l, tname, cname, f))
return sql_error(sql, 02, "SELECT:
cannot use non GROUP BY column '%s.%s' in query results without an aggregate
function", tname, cname);
}
+ if (f == sql_having)
+ return sql_error(sql, 02, "SELECT: cannot use
non GROUP BY column '%s.%s' in query results without an aggregate function",
tname, cname);
return sql_error(sql, 02, "42S22!SELECT: no such column
'%s.%s'", tname, cname);
}
} else if (dlist_length(l) >= 3) {
@@ -4858,8 +4858,9 @@ rel_select_exp(mvc *sql, sql_rel *rel, S
if (sn->having) {
/* having implies group by, ie if not supplied do a group by */
if (rel->op != op_groupby)
- rel = rel_groupby(sql, rel, NULL);
+ rel = rel_groupby(sql, rel, NULL);
aggr = 1;
+ if (rel) set_processed(rel);
}
n = sn->selection->h;
diff --git
a/sql/test/BugTracker-2008/Tests/count_with_order_by_and_limit_crashes.SF-2229936.stable.err
b/sql/test/BugTracker-2008/Tests/count_with_order_by_and_limit_crashes.SF-2229936.stable.err
---
a/sql/test/BugTracker-2008/Tests/count_with_order_by_and_limit_crashes.SF-2229936.stable.err
+++
b/sql/test/BugTracker-2008/Tests/count_with_order_by_and_limit_crashes.SF-2229936.stable.err
@@ -84,7 +84,7 @@ stderr of test 'count_with_order_by_and_
MAPI = (monetdb) /var/tmp/mtest-27483/.s.monetdb.35395
QUERY = select count(subtotal) from bigramlex order by subtotal;
-ERROR = !SELECT: identifier 'subtotal' unknown
+ERROR = !SELECT: cannot use non GROUP BY column 'subtotal' in query results
without an aggregate function
# 18:44:11 >
# 18:44:11 > Done.
diff --git
a/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.err
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.err
new file mode 100644
--- /dev/null
+++
b/sql/test/BugTracker-2017/Tests/sqlitelogictest-aggregation-distinct-coalesce.Bug-6431.stable.err
@@ -0,0 +1,37 @@
+stderr of test 'sqlitelogictest-agg