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