Changeset: 192d92d8509b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/192d92d8509b
Modified Files:
sql/server/rel_rewriter.c
sql/server/rel_statistics.c
Branch: properties
Log Message:
Cleanup and add defensive line
diffs (55 lines):
diff --git a/sql/server/rel_rewriter.c b/sql/server/rel_rewriter.c
--- a/sql/server/rel_rewriter.c
+++ b/sql/server/rel_rewriter.c
@@ -225,6 +225,7 @@ rewrite_simplify(visitor *v, uint8_t cyc
/* make sure the single expression is false, so the
generate NULL values won't match */
rel->exps->h->data = exp_atom_bool(v->sql->sa, 0);
rel->l = rel_project(v->sql->sa, NULL, nexps);
+ set_count_prop(v->sql->sa, rel, 0);
rel->card = CARD_ATOM;
v->changes++;
}
@@ -510,7 +511,13 @@ void
set_count_prop(sql_allocator *sa, sql_rel *rel, BUN val)
{
if (val != BUN_NONE) {
- prop *p = rel->p = prop_create(sa, PROP_COUNT, rel->p);
- p->value.lval = val;
+ prop *found = find_prop(rel->p, PROP_COUNT);
+
+ if (found) {
+ found->value.lval = val;
+ } else {
+ prop *p = rel->p = prop_create(sa, PROP_COUNT, rel->p);
+ p->value.lval = val;
+ }
}
}
diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c
--- a/sql/server/rel_statistics.c
+++ b/sql/server/rel_statistics.c
@@ -732,11 +732,8 @@ rel_get_statistics_(visitor *v, sql_rel
if (can_be_pruned && (is_join(rel->op) || is_select(rel->op))
&& !list_empty(rel->exps)) {
int changes = v->changes;
rel->exps = rel_prune_predicates(v, rel);
- if (v->changes > changes) {
+ if (v->changes > changes)
rel = rewrite_simplify(v, 0,
v->value_based_opt, rel);
- if (is_select(rel->op) && get_rel_count(rel->l)
== BUN_NONE) /* hack, set generated projection count */
- set_count_prop(v->sql->sa, rel->l, 0);
- }
}
/* propagate row count */
@@ -806,9 +803,9 @@ rel_get_statistics_(visitor *v, sql_rel
}
}
} break;
- case op_anti:
+ case op_anti: {
set_count_prop(v->sql->sa, rel, get_rel_count(l));
- break;
+ } break;
case op_semi:
case op_select: {
/* TODO calculate cardinalities using selectivities */
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]