Changeset: 5b7f832d1e58 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b7f832d1e58
Modified Files:
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/sql_partition.c
Branch: default
Log Message:
The input parameter list to a function may be null if there are no parameters.
Do the proper check
diffs (93 lines):
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -2960,18 +2960,15 @@ exp_set_type_recurse(mvc *sql, sql_subty
exp_set_type_recurse(sql, type, e->l, relname,
expname);
}
} break;
+ case e_aggr:
case e_func: {
- for(node *n = ((list*)e->l)->h ; n ; n = n->next)
- exp_set_type_recurse(sql, type, (sql_exp*)
n->data, relname, expname);
- if (e->r)
- for(node *n = ((list*)e->r)->h ; n ; n =
n->next)
- exp_set_type_recurse(sql, type,
(sql_exp*) n->data, relname, expname);
- } break;
- case e_aggr: {
if (e->l)
for(node *n = ((list*)e->l)->h ; n ; n =
n->next)
exp_set_type_recurse(sql, type,
(sql_exp*) n->data, relname, expname);
- } break;
+ if (e->type == e_func && e->r)
+ for(node *n = ((list*)e->r)->h ; n ; n =
n->next)
+ exp_set_type_recurse(sql, type,
(sql_exp*) n->data, relname, expname);
+ } break;
case e_cmp: {
if (e->flag == cmp_in || e->flag == cmp_notin) {
exp_set_type_recurse(sql, type, e->l, relname,
expname);
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -9157,6 +9157,8 @@ static void replace_column_references_wi
static void
replace_column_references_with_nulls_1(mvc *sql, list* crefs, list* exps) {
+ if (list_empty(exps))
+ return;
for(node* n = exps->h; n; n=n->next) {
sql_exp* e = n->data;
replace_column_references_with_nulls_2(sql, crefs, e);
diff --git a/sql/server/rel_propagate.c b/sql/server/rel_propagate.c
--- a/sql/server/rel_propagate.c
+++ b/sql/server/rel_propagate.c
@@ -458,18 +458,15 @@ exp_change_column_table(mvc *sql, sql_ex
} break;
case e_atom:
break;
+ case e_aggr:
case e_func: {
- for (node *n = ((list*)e->l)->h ; n ; n = n->next)
- n->data = exp_change_column_table(sql,
(sql_exp*) n->data, oldt, newt);
- if (e->r)
- for (node *n = ((list*)e->r)->h ; n ; n =
n->next)
- n->data = exp_change_column_table(sql,
(sql_exp*) n->data, oldt, newt);
- } break;
- case e_aggr: {
if (e->l)
for (node *n = ((list*)e->l)->h ; n ; n =
n->next)
n->data = exp_change_column_table(sql,
(sql_exp*) n->data, oldt, newt);
- } break;
+ if (e->type == e_func && e->r)
+ for (node *n = ((list*)e->r)->h ; n ; n =
n->next)
+ n->data = exp_change_column_table(sql,
(sql_exp*) n->data, oldt, newt);
+ } break;
case e_column: {
if (!strcmp(e->l, oldt->base.name))
e->l = sa_strdup(sql->sa, newt->base.name);
diff --git a/sql/server/sql_partition.c b/sql/server/sql_partition.c
--- a/sql/server/sql_partition.c
+++ b/sql/server/sql_partition.c
@@ -189,18 +189,15 @@ exp_find_table_columns(mvc *sql, sql_exp
} break;
case e_atom:
break;
+ case e_aggr:
case e_func: {
- for (node *n = ((list*)e->l)->h ; n ; n = n->next)
- exp_find_table_columns(sql, (sql_exp*) n->data,
t, cols);
- if (e->r)
- for (node *n = ((list*)e->r)->h ; n ; n =
n->next)
- exp_find_table_columns(sql, (sql_exp*)
n->data, t, cols);
- } break;
- case e_aggr: {
if (e->l)
for (node *n = ((list*)e->l)->h ; n ; n =
n->next)
exp_find_table_columns(sql, (sql_exp*)
n->data, t, cols);
- } break;
+ if (e->type == e_func && e->r)
+ for (node *n = ((list*)e->r)->h ; n ; n =
n->next)
+ exp_find_table_columns(sql, (sql_exp*)
n->data, t, cols);
+ } break;
case e_column: {
if (!strcmp(e->l, t->base.name)) {
sql_column *col = find_sql_column(t, e->r);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list