Changeset: b3cd7e622d85 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b3cd7e622d85
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_exp.h
Branch: Jun2020
Log Message:

Fixing cardinalities of complex comparison expressions


diffs (66 lines):

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
@@ -168,18 +168,18 @@ exp_compare(sql_allocator *sa, sql_exp *
 }
 
 sql_exp * 
-exp_compare2(sql_allocator *sa, sql_exp *l, sql_exp *r, sql_exp *h, int 
cmptype) 
+exp_compare2(sql_allocator *sa, sql_exp *l, sql_exp *r, sql_exp *f, int 
cmptype) 
 {
        sql_exp *e = exp_create(sa, e_cmp);
        if (e == NULL)
                return NULL;
-       e->card = l->card;
+       e->card = MAX(MAX(l->card,r->card),f->card);
        if (e->card == CARD_ATOM && !exp_is_atom(l))
                e->card = CARD_AGGR;
        e->l = l;
        e->r = r;
-       if (h)
-               e->f = h;
+       assert(f);
+       e->f = f;
        e->flag = cmptype;
        return e;
 }
@@ -191,7 +191,7 @@ exp_filter(sql_allocator *sa, list *l, l
 
        if (e == NULL)
                return NULL;
-       e->card = exps_card(l);
+       e->card = MAX(exps_card(l),exps_card(r));
        e->l = l;
        e->r = r;
        e->f = f;
@@ -204,17 +204,13 @@ exp_filter(sql_allocator *sa, list *l, l
 sql_exp *
 exp_or(sql_allocator *sa, list *l, list *r, int anti)
 {
-       sql_exp *f = NULL;
        sql_exp *e = exp_create(sa, e_cmp);
 
        if (e == NULL)
                return NULL;
-       f = l->h?l->h->data:r->h?r->h->data:NULL;
-       e->card = l->h?exps_card(l):exps_card(r);
+       e->card = MAX(exps_card(l),exps_card(r));
        e->l = l;
        e->r = r;
-       assert(f);
-       e->f = f;
        e->flag = cmp_or;
        if (anti)
                set_anti(e);
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -31,7 +31,7 @@ extern comp_type range2rcompare( int r )
 extern int compare2range( int l, int r );
 
 extern sql_exp *exp_compare(sql_allocator *sa, sql_exp *l, sql_exp *r, int 
cmptype);
-extern sql_exp *exp_compare2(sql_allocator *sa, sql_exp *l, sql_exp *r, 
sql_exp *h, int cmptype);
+extern sql_exp *exp_compare2(sql_allocator *sa, sql_exp *l, sql_exp *r, 
sql_exp *f, int cmptype);
 extern sql_exp *exp_filter(sql_allocator *sa, list *l, list *r, sql_subfunc 
*f, int anti);
 extern sql_exp *exp_or(sql_allocator *sa, list *l, list *r, int anti);
 extern sql_exp *exp_in(sql_allocator *sa, sql_exp *l, list *r, int cmptype);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to