Changeset: 610fd35da5eb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/610fd35da5eb Modified Files: sql/server/rel_optimizer.c Branch: sequences_7184 Log Message:
cleanup no longer needed optimizer diffs (110 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 @@ -9065,88 +9065,6 @@ merge_table_prune_and_unionize(visitor * return nrel; } -static bool -_rel_flag_independent_projections(mvc *sql, sql_exp* e, list* projected_from) -{ - bool is_independent = false; - - switch(e->type) { - case e_func: // I.e. f() or f(arg) or f(arg1, ..., argn) - { - is_independent = true; - - sql_subfunc *f = e->f; - if (strcmp(sql_func_mod(f->func), "") == 0 && strcmp(sql_func_imp(f->func), "") == 0 && strcmp(f->func->base.name, "star") == 0) { - /* the star() function call signals that the parent expression is a function call - * to some window function without column expressions. - * We do not optimize such window functions here.*/ - is_independent = false; - break; - } - - list* args = e->l;// The list of actual arguments which can be empty - if (args) - for (node *en = args->h; en; en = en->next) { - sql_exp* arg = en->data; - if (!_rel_flag_independent_projections(sql, arg, projected_from)) { - is_independent = false; - } - } - } - /* If this function's arguments are independent - * of the available column expression from the project's inner relation, - * we have to flag the function with the projectional independence. - * Else if this expression has an alias we add it to the projected_from list - * since it might be consumed by a following expression. */ - if (is_independent) - e->argument_independence = 1; - break; - case e_cmp: - is_independent = _rel_flag_independent_projections(sql, e->l, projected_from) && _rel_flag_independent_projections(sql, e->r, projected_from); - break; - case e_atom: // Any atom potentially aliased, e.g. 2 as i - is_independent = true; - break; - case e_convert: // E.g. CAST (i AS BIGINT) - is_independent = _rel_flag_independent_projections(sql, e->l, projected_from); - break; - case e_column: - is_independent = !exps_find_exp(projected_from, e); - break; - default: - assert(0); - break; - } - - if (!is_independent && e->alias.name) - list_append(projected_from, exp_copy(sql, e)); - - return is_independent; -} - - -static bool -rel_flag_independent_projections(mvc *sql, list* projected_to, list* projected_from) -{ - // TODO: signal changes - for (node *en = projected_to->h; en; en = en->next) { - sql_exp* e = en->data; - (void) _rel_flag_independent_projections(sql, e, projected_from); - } - return true; -} - -static sql_rel * -rel_optimize_function_calls(visitor *v, sql_rel *rel) -{ - if (rel->op == op_project) { - list *i = _rel_projections(v->sql, rel->l, NULL, 1, 1, 0); - rel_flag_independent_projections(v->sql, rel->exps, i); - list_destroy(i); - } - return rel; -} - /* rewrite merge tables into union of base tables */ static sql_rel * rel_merge_table_rewrite(visitor *v, sql_rel *rel) @@ -9593,7 +9511,7 @@ rel_optimize_unions_topdown(visitor *v, static inline sql_rel * rel_basecount(visitor *v, sql_rel *rel) { - if (is_groupby(rel->op) && !rel_is_ref(rel) && rel->l && list_empty(rel->r) && + if (is_groupby(rel->op) && !rel_is_ref(rel) && rel->l && list_empty(rel->r) && list_length(rel->exps) == 1 && exp_aggr_is_count(rel->exps->h->data)) { sql_rel *bt = rel->l; sql_exp *e = rel->exps->h->data; @@ -9846,8 +9764,6 @@ optimize_rel(visitor *v, sql_rel *rel, g if (gp->needs_mergetable_rewrite) rel = rel_visitor_topdown(v, rel, &rel_merge_table_rewrite); - rel = rel_visitor_topdown(v, rel, &rel_optimize_function_calls); - return rel; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list