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]

Reply via email to