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

Reply via email to