Changeset: fcd32a0c78d5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/fcd32a0c78d5
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_rewriter.c
Branch: default
Log Message:

Simple atoms and safe functions without parameters can always be pushed down of 
course


diffs (128 lines):

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
@@ -1321,9 +1321,7 @@ exp_rename(mvc *sql, sql_exp *e, sql_rel
        case e_func: {
                list *l = e->l, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_rename(sql, l, f, t);
                        if (!nl)
                                return NULL;
@@ -1337,14 +1335,14 @@ exp_rename(mvc *sql, sql_exp *e, sql_rel
        case e_atom: {
                list *l = e->f, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_rename(sql, l, f, t);
                        if (!nl)
                                return NULL;
-               }
-               ne = exp_values(sql->sa, nl);
+                       ne = exp_values(sql->sa, nl);
+               } else {
+                       ne = exp_copy(sql, e);
+               }
                break;
        }
        case e_psm:
@@ -2286,9 +2284,7 @@ exp_push_down_prj(mvc *sql, sql_exp *e, 
 
                if (e->type == e_func && exp_unsafe(e,0))
                        return NULL;
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_push_down_prj(sql, l, f, t);
                        if (!nl)
                                return NULL;
@@ -2302,14 +2298,14 @@ exp_push_down_prj(mvc *sql, sql_exp *e, 
        case e_atom: {
                list *l = e->f, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_push_down_prj(sql, l, f, t);
                        if (!nl)
                                return NULL;
-               }
-               ne = exp_values(sql->sa, nl);
+                       ne = exp_values(sql->sa, nl);
+               } else {
+                       ne = exp_copy(sql, e);
+               }
                return exp_propagate(sql->sa, ne, e);
        }
        case e_psm:
@@ -6328,9 +6324,7 @@ exp_use_consts(mvc *sql, sql_exp *e, lis
        case e_func: {
                list *l = e->l, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_use_consts(sql, l, consts);
                        if (!nl)
                                return NULL;
@@ -6343,14 +6337,14 @@ exp_use_consts(mvc *sql, sql_exp *e, lis
        case e_atom: {
                list *l = e->f, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_use_consts(sql, l, consts);
                        if (!nl)
                                return NULL;
-               }
-               return exp_values(sql->sa, nl);
+                       return exp_values(sql->sa, nl);
+               } else {
+                       return exp_copy(sql, e);
+               }
        }
        case e_psm:
                return e;
diff --git a/sql/server/rel_rewriter.c b/sql/server/rel_rewriter.c
--- a/sql/server/rel_rewriter.c
+++ b/sql/server/rel_rewriter.c
@@ -312,9 +312,7 @@ static sql_exp *
        case e_func: {
                list *l = e->l, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_push_down(sql, l, f, t);
                        if (!nl)
                                return NULL;
@@ -327,14 +325,13 @@ static sql_exp *
        case e_atom: {
                list *l = e->f, *nl = NULL;
 
-               if (!l) {
-                       return e;
-               } else {
+               if (!list_empty(l)) {
                        nl = exps_push_down(sql, l, f, t);
                        if (!nl)
                                return NULL;
+                       return exp_values(sql->sa, nl);
                }
-               return exp_values(sql->sa, nl);
+               return exp_copy(sql, e);
        }
        case e_psm:
                return e;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to