Changeset: 5340e5fbc2ac for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5340e5fbc2ac
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
Branch: default
Log Message:

moved exp_copy and exps_copy from rel_optimizer to rel_exp, which seems a more 
logical place


diffs (229 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
@@ -21,6 +21,7 @@
 #include "sql_semantic.h"
 #include "rel_semantic.h"
 #include "rel_exp.h"
+#include "rel_prop.h" /* for prop_copy() */
 
 static sql_exp * 
 exp_create(sql_allocator *sa, int type ) 
@@ -1078,3 +1079,97 @@ is_identity( sql_exp *e, sql_rel *r)
        }
 }
 
+list *
+exps_copy( sql_allocator *sa, list *exps)
+{
+       node *n;
+       list *nl = new_exp_list(sa);
+
+       for(n = exps->h; n; n = n->next) {
+               sql_exp *arg = n->data;
+
+               arg = exp_copy(sa, arg);
+               if (!arg) 
+                       return NULL;
+               append(nl, arg);
+       }
+       return nl;
+}
+
+sql_exp *
+exp_copy( sql_allocator *sa, sql_exp * e)
+{
+       sql_exp *l, *r, *r2, *ne = NULL;
+
+       switch(e->type){
+       case e_column:
+               ne = exp_column(sa, e->l, e->r, exp_subtype(e), e->card, 
has_nil(e), is_intern(e));
+               ne->flag = e->flag;
+               break;
+       case e_cmp:
+               if (e->flag == cmp_or) {
+                       list *l = exps_copy(sa, e->l);
+                       list *r = exps_copy(sa, e->r);
+                       if (l && r)
+                               ne = exp_or(sa, l,r);
+               } else if (e->flag == cmp_in || e->flag == cmp_notin || e->flag 
== cmp_filter) {
+                       sql_exp *l = exp_copy(sa, e->l);
+                       list *r = exps_copy(sa, e->r);
+
+                       if (l && r) {
+                               if (e->flag == cmp_filter)
+                                       ne = exp_filter(sa, l, r, e->f);
+                               else
+                                       ne = exp_in(sa, l, r, e->flag);
+                       }
+               } else {
+                       l = exp_copy(sa, e->l);
+                       r = exp_copy(sa, e->r);
+
+                       if (e->f) {
+                               r2 = exp_copy(sa, e->f);
+                               if (l && r && r2)
+                                       ne = exp_compare2(sa, l, r, r2, 
e->flag);
+                       } else if (l && r) {
+                               ne = exp_compare(sa, l, r, e->flag);
+                       }
+               }
+               break;
+       case e_convert:
+               l = exp_copy(sa, e->l);
+               if (l)
+                       ne = exp_convert(sa, l, exp_fromtype(e), exp_totype(e));
+               break;
+       case e_aggr:
+       case e_func: {
+               list *l = e->l, *nl = NULL;
+
+               if (!l) {
+                       return e;
+               } else {
+                       nl = exps_copy(sa, l);
+                       if (!nl)
+                               return NULL;
+               }
+               if (e->type == e_func)
+                       ne = exp_op(sa, nl, e->f);
+               else 
+                       ne = exp_aggr(sa, nl, e->f, need_distinct(e), 
need_no_nil(e), e->card, has_nil(e));
+               break;
+       }       
+       case e_atom:
+               if (e->l)
+                       ne = exp_atom(sa, e->l);
+               else if (!e->r)
+                       ne = exp_atom_ref(sa, e->flag, &e->tpe);
+               else 
+                       ne = exp_param(sa, e->r, &e->tpe, e->flag);
+               break;
+       }
+       if (ne && e->p)
+               ne->p = prop_copy(sa, e->p);
+       if (e->name)
+               exp_setname(sa, ne, exp_find_rel_name(e), exp_name(e));
+       return ne;
+}
+
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -69,6 +69,10 @@ extern void exp_setname(sql_allocator *s
 extern void noninternexp_setname(sql_allocator *sa, sql_exp *e, char *rname, 
char *name );
 extern sql_exp* exp_label(sql_allocator *sa, sql_exp *e, int nr);
 
+extern sql_exp * exp_copy( sql_allocator *sa, sql_exp *e);
+extern list * exps_copy( sql_allocator *sa, list *exps);
+
+
 extern void exp_swap( sql_exp *e );
 
 extern sql_subtype * exp_subtype( sql_exp *e );
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
@@ -317,102 +317,6 @@ rel_properties(mvc *sql, global_props *g
        }
 }
 
-static sql_exp * exp_copy( sql_allocator *sa, sql_exp *e);
-
-static list *
-exps_copy( sql_allocator *sa, list *exps)
-{
-       node *n;
-       list *nl = new_exp_list(sa);
-
-       for(n = exps->h; n; n = n->next) {
-               sql_exp *arg = n->data;
-
-               arg = exp_copy(sa, arg);
-               if (!arg) 
-                       return NULL;
-               append(nl, arg);
-       }
-       return nl;
-}
-
-static sql_exp *
-exp_copy( sql_allocator *sa, sql_exp * e)
-{
-       sql_exp *l, *r, *r2, *ne = NULL;
-
-       switch(e->type){
-       case e_column:
-               ne = exp_column(sa, e->l, e->r, exp_subtype(e), e->card, 
has_nil(e), is_intern(e));
-               ne->flag = e->flag;
-               break;
-       case e_cmp:
-               if (e->flag == cmp_or) {
-                       list *l = exps_copy(sa, e->l);
-                       list *r = exps_copy(sa, e->r);
-                       if (l && r)
-                               ne = exp_or(sa, l,r);
-               } else if (e->flag == cmp_in || e->flag == cmp_notin || e->flag 
== cmp_filter) {
-                       sql_exp *l = exp_copy(sa, e->l);
-                       list *r = exps_copy(sa, e->r);
-
-                       if (l && r) {
-                               if (e->flag == cmp_filter)
-                                       ne = exp_filter(sa, l, r, e->f);
-                               else
-                                       ne = exp_in(sa, l, r, e->flag);
-                       }
-               } else {
-                       l = exp_copy(sa, e->l);
-                       r = exp_copy(sa, e->r);
-
-                       if (e->f) {
-                               r2 = exp_copy(sa, e->f);
-                               if (l && r && r2)
-                                       ne = exp_compare2(sa, l, r, r2, 
e->flag);
-                       } else if (l && r) {
-                               ne = exp_compare(sa, l, r, e->flag);
-                       }
-               }
-               break;
-       case e_convert:
-               l = exp_copy(sa, e->l);
-               if (l)
-                       ne = exp_convert(sa, l, exp_fromtype(e), exp_totype(e));
-               break;
-       case e_aggr:
-       case e_func: {
-               list *l = e->l, *nl = NULL;
-
-               if (!l) {
-                       return e;
-               } else {
-                       nl = exps_copy(sa, l);
-                       if (!nl)
-                               return NULL;
-               }
-               if (e->type == e_func)
-                       ne = exp_op(sa, nl, e->f);
-               else 
-                       ne = exp_aggr(sa, nl, e->f, need_distinct(e), 
need_no_nil(e), e->card, has_nil(e));
-               break;
-       }       
-       case e_atom:
-               if (e->l)
-                       ne = exp_atom(sa, e->l);
-               else if (!e->r)
-                       ne = exp_atom_ref(sa, e->flag, &e->tpe);
-               else 
-                       ne = exp_param(sa, e->r, &e->tpe, e->flag);
-               break;
-       }
-       if (ne && e->p)
-               ne->p = prop_copy(sa, e->p);
-       if (e->name)
-               exp_setname(sa, ne, exp_find_rel_name(e), exp_name(e));
-       return ne;
-}
-
 static void
 get_relations(sql_rel *rel, list *rels)
 {
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to