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

Reply via email to