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