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 -- [email protected]
To unsubscribe send an email to [email protected]