Changeset: 9cfe448baa07 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/9cfe448baa07 Modified Files: sql/server/rel_distribute.c Branch: new_rmt_opt Log Message:
Visitor state with REMOTE prop saves rel of origin in case of cleanup diffs (51 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 @@ -18,6 +18,7 @@ typedef struct rmt_prop_state { int depth; prop* rmt; + sql_rel* orig; } rps; static int @@ -118,9 +119,9 @@ static sql_rel * replica_rewrite(visitor *v, sql_table *t, list *exps) { sql_rel *res = NULL; - prop *p = ((rps*)v->data)->rmt; - sqlid tid = p->id; - list *uris = p->value.pval; + prop *rp = ((rps*)v->data)->rmt; + sqlid tid = rp->id; + list *uris = rp->value.pval; if (mvc_highwater(v->sql)) return sql_error(v->sql, 10, SQLSTATE(42000) "Query too complex: running out of stack space"); @@ -156,6 +157,10 @@ replica_rewrite(visitor *v, sql_table *t if (!isRemote(next) && ((!isReplicaTable(next) && !isMergeTable(next)) || !list_empty(next->members))) { pt = next; remote = 0; + /* if we resolved the replica to a local table we have to + * go and remove the remote property from the subtree */ + sql_rel *r = ((rps*)v->data)->orig; + r->p = prop_remove(r->p, rp); break; } } @@ -208,6 +213,7 @@ rel_rewrite_replica_(visitor *v, sql_rel rps *rp = SA_NEW(v->sql->sa, rps); rp->depth = v->depth; rp->rmt = p; + rp->orig = rel; v->data = rp; } } else { @@ -220,6 +226,7 @@ rel_rewrite_replica_(visitor *v, sql_rel rps *rp = SA_NEW(v->sql->sa, rps); rp->depth = v->depth; rp->rmt = p; + rp->orig = rel; v->data = rp; } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org