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