Changeset: 4fa1cd956316 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/4fa1cd956316 Modified Files: sql/server/rel_distribute.c Branch: new_rmt_opt Log Message:
Adds function with rpl/rmt refs elimination logic diffs (63 lines): diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c --- a/sql/server/rel_distribute.c +++ b/sql/server/rel_distribute.c @@ -154,20 +154,29 @@ replica_rewrite(visitor *v, sql_table *t return res; } +static bool +eliminate_remote_or_replica_refs(visitor *v, sql_rel **rel) +{ + if (rel_is_ref(*rel) && !((*rel)->flag&MERGE_LEFT)) { + if (has_remote_or_replica(*rel)) { + sql_rel *nrel = rel_copy(v->sql, *rel, 1); + rel_destroy(*rel); + *rel = nrel; + return true; + } else { + // TODO why do we want to bail out if we have a non rmt/rpl ref? + return false; + } + } + return true; +} + static sql_rel * rel_rewrite_replica_(visitor *v, sql_rel *rel) { - /* for merge statement join, ignore the multiple references */ - if (rel_is_ref(rel) && !(rel->flag&MERGE_LEFT)) { - if (has_remote_or_replica(rel)) { - sql_rel *nrel = rel_copy(v->sql, rel, 1); + if (!eliminate_remote_or_replica_refs(v, &rel)) + return rel; - rel_destroy(rel); - rel = nrel; - } else { - return rel; - } - } if (is_basetable(rel->op)) { sql_table *t = rel->l; @@ -203,17 +212,9 @@ rel_rewrite_remote_(visitor *v, sql_rel { prop *p, *pl, *pr; - /* for merge statement join, ignore the multiple references */ - if (rel_is_ref(rel) && !(rel->flag&MERGE_LEFT)) { - if (has_remote_or_replica(rel)) { - sql_rel *nrel = rel_copy(v->sql, rel, 1); + if (!eliminate_remote_or_replica_refs(v, &rel)) + return rel; - rel_destroy(rel); - rel = nrel; - } else { - return rel; - } - } sql_rel *l = rel->l, *r = rel->r; /* look on left and right relations after possibly doing rel_copy */ switch (rel->op) { _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org