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

Reply via email to