Changeset: f21e366c7274 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f21e366c7274
Modified Files:
        sql/rel.txt
        sql/server/rel_dump.c
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_select.c
        sql/server/rel_select.h
Branch: default
Log Message:

cleanup deadcode removal for table functions


diffs (179 lines):

diff --git a/sql/rel.txt b/sql/rel.txt
--- a/sql/rel.txt
+++ b/sql/rel.txt
@@ -5,12 +5,14 @@ BASETABLE
        -> l            (sql_table)
 
 TABLE  (card MULTI)
-       -> flags        (1) TABLE query 
-                       (2) RELATIONAL subquery (ie wrap function around 
subquery)
+       -> flags        0 or 1 (1 has input relation)
+                       cases 
+                       TABLE producing function 
+                       RELATIONAL subquery which is dynamically wrapped
+                           into function call (needed of remote calls)
        -> exps         is list of column expressions (also used for aliases)
        -> l            optional input relation
-       -> r            (1) table function expression
-                       (2) list of input expressions
+       -> r            table function expression
                
 
 /* Wrapping relational operator, is a big complex top level only 
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -360,7 +360,7 @@ rel_print_(mvc *sql, stream  *fout, sql_
                if (rel->r)
                        exp_print(sql, fout, rel->r, depth, 1, 0);
                if (rel->l)
-                       rel_print_(sql, fout, rel->l, 0, refs, decorate);
+                       rel_print_(sql, fout, rel->l, depth+1, refs, decorate);
                if (rel->exps) 
                        exps_print(sql, fout, rel->exps, depth, 1, 0);
                break;
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
@@ -5348,18 +5348,26 @@ exps_mark_used(sql_allocator *sa, sql_re
        }
 }
 
+static void exps_used(list *l);
+
+static void
+exp_used(sql_exp *e)
+{
+       if (e) {
+               e->used = 1;
+               if ((e->type == e_func || e->type == e_aggr) && e->l)
+                       exps_used(e->l);
+       }
+}
+
 static void
 exps_used(list *l)
 {
-       node *n;
-
        if (l) {
-               for (n = l->h; n; n = n->next) {
-                       sql_exp *e = n->data;
-       
-                       if (e)
-                               e->used = 1;
-               }
+               node *n;
+
+               for (n = l->h; n; n = n->next) 
+                       exp_used(n->data);
        }
 }
 
@@ -5374,6 +5382,8 @@ rel_used(sql_rel *rel)
        } else if (is_topn(rel->op) || is_select(rel->op) || 
is_sample(rel->op)) {
                rel_used(rel->l);
                rel = rel->l;
+       } else if (rel->op == op_table && rel->r) {
+               exp_used(rel->r);
        }
        if (rel->exps) {
                exps_used(rel->exps);
@@ -5393,6 +5403,13 @@ rel_mark_used(mvc *sql, sql_rel *rel, in
        switch(rel->op) {
        case op_basetable:
        case op_table:
+
+               if (rel->op == op_table && rel->l) {
+                       rel_used(rel);
+                       if (rel->r)
+                               exp_mark_used(rel->l, rel->r);
+                       rel_mark_used(sql, rel->l, proj);
+               }
                break;
 
        case op_topn:
@@ -5603,6 +5620,8 @@ rel_dce_down(mvc *sql, sql_rel *rel, lis
        case op_basetable:
        case op_table:
 
+               if (skip_proj && rel->l && rel->op == op_table)
+                       rel->l = rel_dce_down(sql, rel->l, refs, 0);
                if (!skip_proj)
                        rel_dce_sub(sql, rel, refs);
 
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -715,6 +715,21 @@ rel_relational_func(sql_allocator *sa, s
        return rel;
 }
 
+sql_rel *
+rel_table_func(sql_allocator *sa, sql_rel *l, sql_exp *f, list *exps, int kind)
+{
+       sql_rel *rel = rel_create(sa);
+
+       rel->flag = kind;
+       rel->l = l; /* relation before call */
+       rel->r = f; /* expression (table func call) */
+       rel->op = op_table;
+       rel->exps = exps;
+       rel->card = CARD_MULTI;
+       rel->nrcols = list_length(exps);
+       return rel;
+}
+
 static void
 exps_has_nil(list *exps)
 {
diff --git a/sql/server/rel_rel.h b/sql/server/rel_rel.h
--- a/sql/server/rel_rel.h
+++ b/sql/server/rel_rel.h
@@ -61,6 +61,8 @@ extern sql_rel *rel_groupby(mvc *sql, sq
 extern sql_rel *rel_project(sql_allocator *sa, sql_rel *l, list *e);
 
 extern sql_rel *rel_relational_func(sql_allocator *sa, sql_rel *l, list *exps);
+extern sql_rel *rel_table_func(sql_allocator *sa, sql_rel *l, sql_exp *f, list 
*exps, int kind);
+
 
 extern list *rel_projections(mvc *sql, sql_rel *rel, const char *tname, int 
settname , int intern);
 
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -101,21 +101,6 @@ rel_table_projections( mvc *sql, sql_rel
        }
 }
 
-sql_rel *
-rel_table_func(sql_allocator *sa, sql_rel *l, sql_exp *f, list *exps, int kind)
-{
-       sql_rel *rel = rel_create(sa);
-
-       rel->flag = kind;
-       rel->l = l; /* relation before call */
-       rel->r = f; /* expression (table func call) */
-       rel->op = op_table;
-       rel->exps = exps;
-       rel->card = CARD_MULTI;
-       rel->nrcols = list_length(exps);
-       return rel;
-}
-
 static sql_rel*
 rel_project_exp(sql_allocator *sa, sql_exp *e)
 {
diff --git a/sql/server/rel_select.h b/sql/server/rel_select.h
--- a/sql/server/rel_select.h
+++ b/sql/server/rel_select.h
@@ -19,9 +19,6 @@ extern sql_rel * rel_logical_exp(mvc *sq
 extern sql_exp * rel_logical_value_exp(mvc *sql, sql_rel **rel, symbol *sc, 
int f);
 extern sql_exp *rel_column_exp(mvc *sql, sql_rel **rel, symbol *column_e, int 
f);
 
-
-extern sql_rel *rel_table_func(sql_allocator *sa, sql_rel *l, sql_exp *f, list 
*exps, int kind);
-
 extern sql_exp * rel_value_exp(mvc *sql, sql_rel **rel, symbol *se, int f, 
exp_kind ek);
 extern sql_exp * rel_value_exp2(mvc *sql, sql_rel **rel, symbol *se, int f, 
exp_kind ek, int *is_last);
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to