Changeset: 4c16486c623b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4c16486c623b
Modified Files:
        sql/server/rel_optimize_proj.c
Branch: Aug2024
Log Message:

Removes dead code


diffs (125 lines):

diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c
--- a/sql/server/rel_optimize_proj.c
+++ b/sql/server/rel_optimize_proj.c
@@ -977,19 +977,6 @@ bind_project_reduce_casts(visitor *v, gl
        return gp->cnt[op_project] && (flag & project_reduce_casts) ? 
rel_project_reduce_casts : NULL;
 }
 
-#if 0
-static sql_rel *
-exp_skip_output_parts(sql_rel *rel)
-{
-       while ((is_topn(rel->op) || is_project(rel->op) || is_sample(rel->op)) 
&& rel->l) {
-               if (is_union(rel->op) || is_munion(rel->op) || 
(is_groupby(rel->op) && list_empty(rel->r)))
-                       return rel;                     /* a group-by with no 
columns is a plain aggregate and hence always returns one row */
-               rel = rel->l;
-       }
-       return rel;
-}
-#endif
-
 static sql_column *
 exp_find_column_( sql_rel *rel, sql_exp *exp, int pnr, sql_rel **bt )
 {
@@ -1086,101 +1073,6 @@ rel_is_join_on_pkey(sql_rel *rel, bool p
        return NULL;
 }
 
-#if 0
-/* return true if the given expression is guaranteed to have no rows */
-static int
-exp_is_zero_rows(visitor *v, sql_rel *rel, sql_rel *sel)
-{
-       if (!rel || mvc_highwater(v->sql))
-               return 0;
-       rel = exp_skip_output_parts(rel);
-       if (is_select(rel->op) && rel->l) {
-               sel = rel;
-               rel = exp_skip_output_parts(rel->l);
-       }
-
-       sql_table *t = is_basetable(rel->op) && rel->l ? rel->l : NULL;
-       bool table_readonly = t && isTable(t) && t->access == TABLE_READONLY;
-
-       if (sel && !list_empty(sel->exps) && (v->value_based_opt || 
table_readonly)) {
-               for (node *n = sel->exps->h; n; n = n->next) {
-                       sql_exp *e = n->data;
-
-                       /* if the expression is false, then the select is empty 
*/
-                       if (v->value_based_opt && (exp_is_false(e) || 
exp_is_null(e)))
-                               return 1;
-                       if (table_readonly && e->type == e_cmp && (e->flag == 
cmp_equal || e->f)) {
-                               /* half-ranges are theoretically optimizable 
here, but not implemented */
-                               sql_exp *c = e->l;
-                               if (c->type == e_column) {
-                                       sql_exp *l = e->r;
-                                       sql_exp *h = e->f;
-
-                                       atom *lval = exp_flatten(v->sql, 
v->value_based_opt, l);
-                                       atom *hval = h ? exp_flatten(v->sql, 
v->value_based_opt, h) : lval;
-                                       if (lval && hval) {
-                                               sql_rel *bt;
-                                               sql_column *col = 
name_find_column(sel, exp_relname(c), exp_name(c), -2, &bt);
-                                               void *min = NULL, *max = NULL;
-                                               atom *amin, *amax;
-                                               sql_subtype *ct = 
exp_subtype(c);
-
-                                               if (col
-                                                       && col->t == t
-                                                       && 
sql_trans_ranges(v->sql->session->tr, col, &min, &max)
-                                                       && min && max
-                                                       && (amin = 
atom_general_ptr(v->sql->sa, ct, min)) && (amax = atom_general_ptr(v->sql->sa, 
ct, max))
-                                                       && 
!exp_range_overlap(amin, amax, lval, hval, false, false)) {
-                                                       return 1;
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       if ((is_innerjoin(rel->op) || is_left(rel->op) || is_right(rel->op) || 
is_semi(rel->op)) && !list_empty(rel->exps)) {
-               sql_exp *je;
-
-               /* check non overlaping pk-fk join */
-               if ((je = rel_is_join_on_pkey(rel, true))) {
-                       int lpnr = rel_part_nr(rel->l, je);
-
-                       if (lpnr >= 0 && !rel_uses_part_nr(rel->r, je, lpnr))
-                               return 1;
-               }
-               return (((is_innerjoin(rel->op) || is_left(rel->op) || 
is_semi(rel->op)) && exp_is_zero_rows(v, rel->l, sel)) ||
-                       ((is_innerjoin(rel->op) || is_right(rel->op)) && 
exp_is_zero_rows(v, rel->r, sel)));
-       }
-       /* global aggregates always return 1 row */
-       if (is_simple_project(rel->op) || (is_groupby(rel->op) && 
!list_empty(rel->r)) || is_select(rel->op) ||
-               is_topn(rel->op) || is_sample(rel->op) || is_inter(rel->op) || 
is_except(rel->op)) {
-               if (rel->l)
-                       return exp_is_zero_rows(v, rel->l, sel);
-       } else if (is_innerjoin(rel->op) && list_empty(rel->exps)) { /* 
cartesian product */
-               return exp_is_zero_rows(v, rel->l, sel) || exp_is_zero_rows(v, 
rel->r, sel);
-       }
-       return 0;
-}
-
-static int
-rel_match_projections(sql_rel *l, sql_rel *r)
-{
-       node *n, *m;
-       list *le = l->exps;
-       list *re = r->exps;
-
-       if (!le || !re)
-               return 0;
-       if (list_length(le) != list_length(re))
-               return 0;
-
-       for (n = le->h, m = re->h; n && m; n = n->next, m = m->next)
-               if (!exp_match(n->data, m->data))
-                       return 0;
-       return 1;
-}
-#endif
-
 static int
 exps_has_predicate( list *l )
 {
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to