Changeset: fa5a8c711e21 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fa5a8c711e21
Modified Files:
        sql/server/rel_psm.c
        sql/server/rel_select.c
        sql/server/rel_sequence.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

When parsing a function argument, pass sql_farg flag. Also pass a possible 
has_no_nil flag to an aggregation function call


diffs (74 lines):

diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -129,7 +129,7 @@ psm_set_exp(sql_query *query, dnode *n)
                        if (v->card > CARD_AGGR) {
                                sql_subaggr *zero_or_one = 
sql_bind_aggr(sql->sa, sql->session->schema, "zero_or_one", exp_subtype(v));
                                assert(zero_or_one);
-                               v = exp_aggr1(sql->sa, v, zero_or_one, 0, 0, 
CARD_ATOM, 0);
+                               v = exp_aggr1(sql->sa, v, zero_or_one, 0, 0, 
CARD_ATOM, has_nil(v));
                        }
                        append(b, exp_set(sql->sa, vname, v, level));
                }
@@ -552,7 +552,7 @@ rel_select_into( sql_query *query, symbo
                if (v->card > CARD_AGGR) {
                        sql_subaggr *zero_or_one = sql_bind_aggr(sql->sa, 
sql->session->schema, "zero_or_one", exp_subtype(v));
                        assert(zero_or_one);
-                       v = exp_aggr1(sql->sa, v, zero_or_one, 0, 0, CARD_ATOM, 
0);
+                       v = exp_aggr1(sql->sa, v, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(v));
                }
                tpe = stack_find_type(sql, nme);
                level = stack_find_frame(sql, nme);
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
@@ -2771,7 +2771,7 @@ rel_unop(sql_query *query, sql_rel **rel
                sql->session->status = 0;
                sql->errstr[0] = '\0';
        }
-       e = rel_value_exp(query, rel, l->next->data.sym, fs, iek);
+       e = rel_value_exp(query, rel, l->next->data.sym, fs|sql_farg, iek);
        if (!e) {
                if (!f && *rel && (*rel)->card == CARD_AGGR) {
                        if (is_sql_having(fs) || is_sql_orderby(fs))
@@ -3150,7 +3150,7 @@ rel_nop(sql_query *query, sql_rel **rel,
        int err = 0;
 
        for (; ops; ops = ops->next, nr_args++) {
-               sql_exp *e = rel_value_exp(query, rel, ops->data.sym, fs, iek);
+               sql_exp *e = rel_value_exp(query, rel, ops->data.sym, 
fs|sql_farg, iek);
                sql_subtype *tpe;
 
                if (!e) 
@@ -3375,7 +3375,6 @@ static sql_exp *
                return e;
        } 
 
-
        /* use cnt as nils shouldn't be counted */
        no_nil = 1;
 
diff --git a/sql/server/rel_sequence.c b/sql/server/rel_sequence.c
--- a/sql/server/rel_sequence.c
+++ b/sql/server/rel_sequence.c
@@ -295,7 +295,7 @@ rel_alter_seq(
        }
        if (val && val->card > CARD_ATOM) {
                sql_subaggr *zero_or_one = sql_bind_aggr(sql->sa, 
sql->session->schema, "zero_or_one", exp_subtype(val));
-               val = exp_aggr1(sql->sa, val, zero_or_one, 0, 0, CARD_ATOM, 0);
+               val = exp_aggr1(sql->sa, val, zero_or_one, 0, 0, CARD_ATOM, 
has_nil(val));
        }
        return rel_seq(sql->sa, ddl_alter_seq, s->base.name, seq, r, val);
 }
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -2137,7 +2137,7 @@ rewrite_compare(mvc *sql, sql_rel *rel, 
 
                                        rsq = rel_groupby(sql, rsq, NULL); 
                                        a = sql_bind_aggr(sql->sa, NULL, 
"null", exp_subtype(re));
-                                       rnull = exp_aggr1(sql->sa, re, a, 0, 1, 
CARD_AGGR, 0);
+                                       rnull = exp_aggr1(sql->sa, re, a, 0, 1, 
CARD_AGGR, has_nil(re));
                                        rnull = rel_groupby_add_aggr(sql, rsq, 
rnull);
 
                                        if (is_notequal_func(sf))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to