Changeset: e81cbafb5662 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e81cbafb5662
Modified Files:
sql/backends/monet5/rel_predicates.c
Branch: iso
Log Message:
Trivial cases where predicates don't have to be generated
diffs (62 lines):
diff --git a/sql/backends/monet5/rel_predicates.c
b/sql/backends/monet5/rel_predicates.c
--- a/sql/backends/monet5/rel_predicates.c
+++ b/sql/backends/monet5/rel_predicates.c
@@ -43,7 +43,7 @@ rel_find_predicates(visitor *v, sql_rel
if (is_basetable(rel->op)) {
sql_table *t = rel->l;
- if (!t || !rel->exps || isNew(t) || t->persistence ==
SQL_DECLARED_TABLE)
+ if (!t || !rel->exps || isNew(t) || isTempTable(t))
return rel;
sql_rel *parent = v->parent;
@@ -56,6 +56,8 @@ rel_find_predicates(visitor *v, sql_rel
if (!is_compare(e->type) ||
!is_theta_exp(e->flag) || r->type != e_atom || !r->l || (r2 && (r2->type !=
e_atom || !r2->l)) || is_symmetric(e) || !(c = exp_find_column(rel, e->l))) {
needall = true;
+ } else if (isNew(c)) {
+ continue;
} else {
atom *e1 = r && r->l ? atom_dup(NULL,
r->l) : NULL, *e2 = r2 && r2->l ? atom_dup(NULL, r2->l) : NULL;
@@ -82,7 +84,7 @@ rel_find_predicates(visitor *v, sql_rel
}
return sql_error(v->sql, 02,
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
- *(int*)v->data = 1;
+ v->changes++;
}
}
}
@@ -91,7 +93,7 @@ rel_find_predicates(visitor *v, sql_rel
/* any other case, add all predicates */
sql_table *t = rel->l;
- if (!t || !rel->exps)
+ if (!t || !rel->exps || isNew(t) || isTempTable(t))
return rel;
for (node *n = rel->exps->h; n; n = n->next) {
sql_exp *e = n->data;
@@ -100,9 +102,11 @@ rel_find_predicates(visitor *v, sql_rel
sql_column *c = find_sql_column(t,
e->r);
assert(c);
+ if (isNew(c))
+ continue;
if
(sql_trans_add_predicate(v->sql->session->tr, c, 0, NULL, NULL, false, false)
!= LOG_OK)
return sql_error(v->sql, 02,
SQLSTATE(HY013) MAL_MALLOC_FAIL);
- *(int*)v->data = 1;
+ v->changes++;
}
}
}
@@ -115,8 +119,7 @@ rel_predicates(backend *be, sql_rel *rel
{
if (be->mvc->session->level < tr_serializable)
return rel;
- int changes = 0;
- visitor v = { .sql = be->mvc, .data = &changes };
+ visitor v = { .sql = be->mvc };
rel = rel_visitor_topdown(&v, rel, &rel_find_predicates);
return rel;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list