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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list