Changeset: 517019db709e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=517019db709e
Modified Files:
sql/benchmarks/tpch/load.sh
sql/server/rel_select.c
sql/test/BugTracker-2017/Tests/All
sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.sql
Branch: Jul2017
Log Message:
fixes for bug 6385, ie check for a aggregate earlier (also improved the
error in case of a missing aggregate function)
diffs (120 lines):
diff --git a/sql/benchmarks/tpch/load.sh b/sql/benchmarks/tpch/load.sh
--- a/sql/benchmarks/tpch/load.sh
+++ b/sql/benchmarks/tpch/load.sh
@@ -24,8 +24,8 @@ SF='sf-0.01'
#SF='sf-5'
dir=`echo $SF | tr '[a-z]' '[A-Z]'`
-$SQL < c.sql
-#$SQL < c.sql-primary-foreign
-cat load-$SF-LOCKED.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
-#cat load-$SF.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
+#$SQL < c.sql
+$SQL < c.sql-primary-foreign
+#cat load-$SF-LOCKED.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
+cat load-$SF.sql$T | sed -e s+PWD+$PWD/$dir+ | $SQL
#$SQL < alter.sql
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
@@ -2944,8 +2944,15 @@ rel_unop(mvc *sql, sql_rel **rel, symbol
sql->session->status = 0;
sql->errstr[0] = '\0';
e = rel_value_exp(sql, rel, l->next->data.sym, fs, iek);
- if (!e)
+ if (!e) {
+ if (!f && *rel && (*rel)->card == CARD_AGGR) {
+ /* reset error */
+ sql->session->status = 0;
+ sql->errstr[0] = '\0';
+ return sql_error(sql, 02, "SELECT: no such aggregate
'%s'", fname);
+ }
return NULL;
+ }
t = exp_subtype(e);
if (!t) {
@@ -3229,8 +3236,14 @@ rel_binop(mvc *sql, sql_rel **rel, symbo
l = rel_value_exp(sql, rel, dl->next->data.sym, f, iek);
r = rel_value_exp(sql, rel, dl->next->next->data.sym, f, iek);
- if (!l && !r)
+ if (!l || !r)
sf = find_func(sql, s, fname, 2, F_AGGR, NULL);
+ if (!sf && (!l || !r) && *rel && (*rel)->card == CARD_AGGR) {
+ /* reset error */
+ sql->session->status = 0;
+ sql->errstr[0] = '\0';
+ return sql_error(sql, 02, "SELECT: no such aggregate '%s'",
fname);
+ }
if (!l && !r && sf) { /* possibly we cannot resolve the argument as the
function maybe an aggregate */
/* reset error */
sql->session->status = 0;
@@ -3294,26 +3307,43 @@ rel_nop(mvc *sql, sql_rel **rel, symbol
char *sname = qname_schema(l->data.lval);
sql_schema *s = sql->session->schema;
exp_kind iek = {type_value, card_column, FALSE};
+ int err = 0;
for (; ops; ops = ops->next, nr_args++) {
sql_exp *e = rel_value_exp(sql, rel, ops->data.sym, fs, iek);
sql_subtype *tpe;
if (!e)
- return NULL;
+ err = 1;
append(exps, e);
- tpe = exp_subtype(e);
- if (!nr_args)
- obj_type = tpe;
- append(tl, tpe);
+ if (e) {
+ tpe = exp_subtype(e);
+ if (!nr_args)
+ obj_type = tpe;
+ append(tl, tpe);
+ }
}
if (sname)
s = mvc_bind_schema(sql, sname);
/* first try aggregate */
f = find_func(sql, s, fname, nr_args, F_AGGR, NULL);
- if (f)
+ if (!f && err && *rel && (*rel)->card == CARD_AGGR) {
+ /* reset error */
+ sql->session->status = 0;
+ sql->errstr[0] = '\0';
+ return sql_error(sql, 02, "SELECT: no such aggregate '%s'",
fname);
+ }
+ if (f) {
+ if (err) {
+ /* reset error */
+ sql->session->status = 0;
+ sql->errstr[0] = '\0';
+ }
return _rel_aggr(sql, rel, 0, s, fname, l->next->data.lval->h,
fs);
+ }
+ if (err)
+ return NULL;
return _rel_nop(sql, s, fname, tl, exps, obj_type, nr_args, ek);
}
diff --git a/sql/test/BugTracker-2017/Tests/All
b/sql/test/BugTracker-2017/Tests/All
--- a/sql/test/BugTracker-2017/Tests/All
+++ b/sql/test/BugTracker-2017/Tests/All
@@ -62,4 +62,4 @@ crash-select_after_MAL_error.Bug-6332
handle-values-subqueries.Bug-6336
spurious_errors.Bug-6344
caching_stats_bug.6374
-aggr_udf_with_more_than_2params.Bug-6385
+HAVE_LIBPY?aggr_udf_with_more_than_2params.Bug-6385
diff --git
a/sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.sql
b/sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.sql
---
a/sql/test/BugTracker-2017/Tests/aggr_udf_with_more_th