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_than_2params.Bug-6385.sql +++ b/sql/test/BugTracker-2017/Tests/aggr_udf_with_more_than_2params.Bug-6385.sql @@ -40,4 +40,5 @@ SELECT groupnr, aggr2(value, value, valu DROP TABLE grouped_ints; DROP AGGREGATE aggr2; DROP AGGREGATE aggr3; +DROP AGGREGATE aggr4; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list