Changeset: c7c692446331 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/c7c692446331 Modified Files: sql/backends/monet5/rel_bin.c sql/server/rel_dump.c sql/server/rel_exp.c sql/server/rel_optimizer.c sql/server/rel_rel.c sql/server/rel_select.c sql/server/rel_unnest.c Branch: Jul2021 Log Message:
Use macros to access relation and expression properties diffs (truncated from 303 to 300 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -1522,7 +1522,7 @@ exp_bin(backend *be, sql_exp *e, stmt *l /* value compare or select */ if ((!reduce || (l->nrcols == 0 && r->nrcols == 0)) && (e->flag == mark_in || e->flag == mark_notin)) { int in_flag = e->flag==mark_in?1:0; - if (e->anti) + if (is_anti(e)) in_flag = !in_flag; sql_subfunc *f = sql_bind_func(sql, "sys", in_flag?"=":"<>", tail_type(l), tail_type(l), F_FUNC); assert(f); @@ -2602,7 +2602,7 @@ rel2bin_join(backend *be, sql_rel *rel, } else { stmt *l = bin_find_smallest_column(be, left); stmt *r = bin_find_smallest_column(be, right); - join = stmt_join(be, l, r, 0, cmp_all, 0, 0, rel->single); + join = stmt_join(be, l, r, 0, cmp_all, 0, 0, is_single(rel)); } jl = stmt_result(be, join, 0); jr = stmt_result(be, join, 1); @@ -2667,7 +2667,7 @@ rel2bin_join(backend *be, sql_rel *rel, stmt *l = ld = stmt_mirror(be, bin_find_smallest_column(be, left)); if (rel->op == op_left || rel->op == op_full) ld = stmt_tdiff(be, ld, jl, NULL); - if (rel->single && !list_empty(rel->exps)) { + if (is_single(rel) && !list_empty(rel->exps)) { join = stmt_semijoin(be, l, jl, NULL, NULL, 0, true); jl = stmt_result(be, join, 0); jr = stmt_project(be, stmt_result(be, join, 1), jr); @@ -2867,7 +2867,7 @@ rel2bin_semijoin(backend *be, sql_rel *r stmt *s = NULL; /* only handle simple joins here */ - if ((exp_has_func(e) && e->flag != cmp_filter) || e->flag == cmp_or || (e->f && e->anti)) { + if ((exp_has_func(e) && e->flag != cmp_filter) || e->flag == cmp_or || (e->f && is_anti(e))) { if (!join && !list_length(lje)) { stmt *l = bin_find_smallest_column(be, left); stmt *r = bin_find_smallest_column(be, right); @@ -2898,13 +2898,13 @@ rel2bin_semijoin(backend *be, sql_rel *r if (!l || !r) return NULL; - if (be->no_mitosis && list_length(jexps) == 1 && list_empty(sexps) && rel->op == op_semi && !e->anti && is_equi_exp_(e)) { + if (be->no_mitosis && list_length(jexps) == 1 && list_empty(sexps) && rel->op == op_semi && !is_anti(e) && is_equi_exp_(e)) { join = stmt_semijoin(be, column(be, l), column(be, r), left->cand, NULL/*right->cand*/, is_semantics(e), false); semijoin_only = 1; en = NULL; break; } else - s = stmt_join_cand(be, column(be, l), column(be, r), left->cand, NULL/*right->cand*/, e->anti, (comp_type) e->flag, 0, is_semantics(e), false); + s = stmt_join_cand(be, column(be, l), column(be, r), left->cand, NULL/*right->cand*/, is_anti(e), (comp_type) e->flag, 0, is_semantics(e), false); lcand = left->cand; } else { s = exp_bin(be, e, left, right, NULL, NULL, NULL, NULL, 0, 1, 0); @@ -3172,7 +3172,7 @@ rel2bin_union(backend *be, sql_rel *rel, sub = rel_rename(be, rel, sub); if (need_distinct(rel)) sub = rel2bin_distinct(be, sub, NULL); - if (rel->single) + if (is_single(rel)) sub = rel2bin_single(be, sub); return sub; } 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 @@ -268,7 +268,7 @@ exp_print(mvc *sql, stream *fout, sql_ex cmp_print(sql, fout, range2rcompare(e->flag) ); exp_print(sql, fout, e->f, depth+1, refs, 0, 0); mnstr_printf(fout, " BETWEEN "); - if (e->symmetric) + if (is_symmetric(e)) mnstr_printf(fout, " SYM "); } else { exp_print(sql, fout, e->l, depth+1, refs, 0, 0); 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 @@ -345,7 +345,7 @@ exp_op( sql_allocator *sa, list *l, sql_ e->l = l; e->f = f; e->semantics = f->func->semantics; - if (!e->semantics && l && !have_nil(l)) + if (!is_semantics(e) && l && !have_nil(l)) set_has_no_nil(e); return e; } @@ -854,7 +854,7 @@ exp_rel(mvc *sql, sql_rel *rel) return NULL; e->l = rel; e->flag = PSM_REL; - e->card = rel->single?CARD_ATOM:rel->card; + e->card = is_single(rel)?CARD_ATOM:rel->card; assert(rel); if (is_project(rel->op)) { sql_exp *last = rel->exps->t->data; @@ -1763,9 +1763,9 @@ exp_is_cmp_exp_is_false(sql_exp* e) */ if (e->flag != cmp_equal && e->flag != cmp_notequal) return false; - if (e->flag == cmp_equal && !e->anti) + if (e->flag == cmp_equal && !is_anti(e)) return ((exp_is_null(l) && exp_is_not_null(r)) || (exp_is_not_null(l) && exp_is_null(r))); - if (((e->flag == cmp_notequal) && !e->anti) || ((e->flag == cmp_equal) && e->anti) ) + if (((e->flag == cmp_notequal) && !is_anti(e)) || ((e->flag == cmp_equal) && is_anti(e)) ) return ((exp_is_null(l) && exp_is_null(r)) || (exp_is_not_null(l) && exp_is_not_null(r))); return false; } @@ -1796,7 +1796,7 @@ static inline bool exp_regular_cmp_exp_is_false(sql_exp* e) { assert(e->type == e_cmp); - if (e->semantics) return exp_is_cmp_exp_is_false(e); + if (is_semantics(e))return exp_is_cmp_exp_is_false(e); if (e -> f) return exp_two_sided_bound_cmp_exp_is_false(e); else return exp_single_bound_cmp_exp_is_false(e); } @@ -1882,7 +1882,7 @@ exp_is_not_null(sql_exp *e) case e_convert: return exp_is_not_null(e->l); case e_func: - if (!e->semantics && e->l) { + if (!is_semantics(e) && e->l) { list *l = e->l; for (node *n = l->h; n; n=n->next) { sql_exp *p = n->data; @@ -1917,7 +1917,7 @@ exp_is_null(sql_exp *e ) case e_convert: return exp_is_null(e->l); case e_func: - if (!e->semantics && e->l) { + if (!is_semantics(e) && e->l) { /* This is a call to a function with no-nil semantics. * If one of the parameters is null the expression itself is null */ 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 @@ -898,7 +898,7 @@ order_joins(visitor *v, list *rels, list and a list of (simple) relations, there are no outer joins involved, we can simply do a crossproduct here. */ - rsingle = r->single; + rsingle = is_single(r); reset_single(r); top = rel_crossproduct(v->sql->sa, l, r, op_join); if (rsingle) @@ -967,7 +967,7 @@ order_joins(visitor *v, list *rels, list append(n_rels, r); /* create a join using the current expression */ - rsingle = r->single; + rsingle = is_single(r); reset_single(r); top = rel_crossproduct(v->sql->sa, top, r, op_join); if (rsingle) @@ -1003,7 +1003,7 @@ order_joins(visitor *v, list *rels, list sql_rel *nr = n->data; if (top) { - rsingle = nr->single; + rsingle = is_single(nr); reset_single(nr); top = rel_crossproduct(v->sql->sa, top, nr, op_join); if (rsingle) @@ -1125,7 +1125,7 @@ push_in_join_down(mvc *sql, list *rels, } /* with this expression find other relation */ if (je && (l = find_rel(rels, je->l)) != NULL) { - unsigned int rsingle = r->single; + unsigned int rsingle = is_single(r); reset_single(r); sql_rel *nr = rel_crossproduct(sql->sa, l, r, op_join); if (rsingle) @@ -9193,7 +9193,7 @@ rel_merge_table_rewrite(visitor *v, sql_ sql_exp *e = n->data, *c = e->l; int flag = e->flag; - if (e->type != e_cmp || (!is_theta_exp(flag) && flag != cmp_in) || e->symmetric || !(c = rel_find_exp(rel, c))) + if (e->type != e_cmp || (!is_theta_exp(flag) && flag != cmp_in) || is_symmetric(e) || !(c = rel_find_exp(rel, c))) continue; if (flag == cmp_gt || flag == cmp_gte || flag == cmp_lte || flag == cmp_lt || flag == cmp_equal) { 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 @@ -556,8 +556,8 @@ rel_crossproduct(sql_allocator *sa, sql_ rel->exps = NULL; rel->card = CARD_MULTI; rel->nrcols = l->nrcols + r->nrcols; - rel->single = r->single; - if (r->single) + rel->single = is_single(r); + if (is_single(r)) reset_single(r); return rel; } @@ -630,7 +630,7 @@ rel_label( mvc *sql, sql_rel *r, int all for (; ne; ne = ne->next) { sql_exp *e = ne->data; - if (!e->freevar) { + if (!is_freevar(e)) { if (all) { nr = ++sql->label; cnme = number2name(cname, sizeof(cname), nr); @@ -832,7 +832,7 @@ rel_project(sql_allocator *sa, sql_rel * rel->nrcols = list_length(e); else rel->nrcols = l->nrcols; - rel->single = l->single; + rel->single = is_single(l); } if (e && !list_empty(e)) { set_processed(rel); 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 @@ -2762,7 +2762,7 @@ rel_logical_exp(sql_query *query, sql_re le = exp_compare(sql->sa, le, exp_atom_bool(sql->sa, 1), cmp_equal); return rel_select_push_exp_down(sql, rel, le, le->l, le->r, NULL, f); } else { - sq = rel_crossproduct(sql->sa, rel, sq, (f==sql_sel || sq->single)?op_left:op_join); + sq = rel_crossproduct(sql->sa, rel, sq, (f==sql_sel || is_single(sq))?op_left:op_join); } return sq; } diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -290,7 +290,7 @@ rel_only_freevar(sql_query *query, sql_r static int freevar_equal( sql_exp *e1, sql_exp *e2) { - assert(e1 && e2 && e1->freevar && e2->freevar); + assert(e1 && e2 && is_freevar(e1) && is_freevar(e2)); if (e1 == e2) return 0; if (e1->type != e_column || e2->type != e_column) @@ -323,7 +323,7 @@ exp_freevar(mvc *sql, sql_exp *e) switch(e->type) { case e_column: - if (e->freevar) + if (is_freevar(e)) return append(sa_list(sql->sa), e); break; case e_convert: @@ -497,7 +497,7 @@ rel_bind_var(mvc *sql, sql_rel *rel, sql for(n = fvs->h; n; n=n->next) { sql_exp *e = n->data; - if (e->freevar && (exp_is_atom(e) || rel_find_exp(rel,e))) + if (is_freevar(e) && (exp_is_atom(e) || rel_find_exp(rel,e))) reset_freevar(e); } } @@ -884,7 +884,7 @@ push_up_project(mvc *sql, sql_rel *rel, for (m=r->exps->h; m; m = m->next) { sql_exp *e = m->data; - if (!e->freevar || exp_name(e)) { /* only skip full freevars */ + if (!is_freevar(e) || exp_name(e)) { /* only skip full freevars */ if (exp_has_freevar(sql, e)) { rel_bind_var(sql, rel->l, e); if (is_left(rel->op)) { /* add ifthenelse */ @@ -908,7 +908,7 @@ push_up_project(mvc *sql, sql_rel *rel, for (m=exps->h; m; m = m->next) { sql_exp *e = m->data; - if (!e->freevar || exp_name(e)) { /* only skip full freevars */ + if (!is_freevar(e) || exp_name(e)) { /* only skip full freevars */ if (exp_has_freevar(sql, e)) rel_bind_var(sql, rel->l, e); } @@ -1263,7 +1263,7 @@ push_up_join(mvc *sql, sql_rel *rel, lis rel->r = rel_dup(jl); rel->exps = sa_list(sql->sa); nj = rel_crossproduct(sql->sa, rel_dup(d), rel_dup(jr), j->op); - if (j->single) + if (is_single(j)) set_single(nj); rel_destroy(j); j = nj; @@ -1304,7 +1304,7 @@ push_up_join(mvc *sql, sql_rel *rel, lis if (!rd) { rel->r = rel_dup(jl); sql_rel *nj = rel_crossproduct(sql->sa, rel, rel_dup(jr), j->op); - if (j->single) + if (is_single(j)) set_single(nj); nj->exps = exps_copy(sql, j->exps); rel_destroy(j); @@ -1319,7 +1319,7 @@ push_up_join(mvc *sql, sql_rel *rel, lis if (!ld) { rel->r = rel_dup(jr); sql_rel *nj = rel_crossproduct(sql->sa, rel_dup(jl), rel, j->op); - if (j->single) + if (is_single(j)) _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list