Changeset: 4dfff2ed9d76 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4dfff2ed9d76
Modified Files:
sql/server/rel_distribute.c
sql/server/rel_dump.c
Branch: default
Log Message:
as last resort fallback to local (first) replica table (19 out of 22 now work
(2 crash/1 mal problem)
diffs (89 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
@@ -29,6 +29,23 @@
#include "rel_updates.h"
#include "sql_env.h"
+
+static sql_rel *
+rewrite_replica( mvc *sql, sql_rel *rel, sql_table *t, sql_table *p)
+{
+ node *n, *m;
+ sql_rel *r = rel_basetable(sql, p, t->base.name);
+
+ for (n = rel->exps->h, m = r->exps->h; n && m; n = n->next, m =
m->next) {
+ sql_exp *e = n->data;
+ sql_exp *ne = m->data;
+
+ exp_setname(sql->sa, ne, e->rname, e->name);
+ }
+ rel_destroy(rel);
+ return r;
+}
+
static sql_rel *
replica(mvc *sql, sql_rel *rel, char *uri)
{
@@ -48,22 +65,19 @@ replica(mvc *sql, sql_rel *rel, char *ur
if (isReplicaTable(t)) {
node *n;
- /* replace by the replica which matches the uri */
- for (n = t->tables.set->h; n; n = n->next) {
- sql_table *p = n->data;
-
- if (isRemote(p) && strcmp(uri, p->query) == 0){
- node *n, *m;
- sql_rel *r = rel_basetable(sql, p,
t->base.name);
- for (n = rel->exps->h, m = r->exps->h;
n && m; n = n->next, m = m->next) {
- sql_exp *e = n->data;
- sql_exp *ne = m->data;
-
- exp_setname(sql->sa, ne,
e->rname, e->name);
+ if (uri) {
+ /* replace by the replica which matches the uri
*/
+ for (n = t->tables.set->h; n; n = n->next) {
+ sql_table *p = n->data;
+
+ if (isRemote(p) && strcmp(uri,
p->query) == 0) {
+ rel = rewrite_replica(sql, rel,
t, p);
+ break;
}
- rel_destroy(rel);
- rel = r;
}
+ } else { /* no match, use first */
+ sql_table *p = t->tables.set->h->data;
+ rel = rewrite_replica(sql, rel, t, p);
}
}
}
@@ -237,5 +251,6 @@ sql_rel *
rel_distribute(mvc *sql, sql_rel *rel)
{
rel = distribute(sql, rel);
+ rel = replica(sql, rel, NULL);
return rel_remote_func(sql, rel);
}
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -305,11 +305,15 @@ rel_print_(mvc *sql, stream *fout, sql_
print_indent(sql, fout, depth);
if (t->s)
mnstr_printf(fout, "%s(%s.%s)",
- isStream(t)?"stream":"table",
+ isStream(t)?"stream":
+ isRemote(t)?"REMOTE":
+ isReplicaTable(t)?"REPLICA":"table",
t->s->base.name, t->base.name);
else
mnstr_printf(fout, "%s(%s)",
- isStream(t)?"stream":"table",
+ isStream(t)?"stream":
+ isRemote(t)?"REMOTE":
+ isReplicaTable(t)?"REPLICA":"table",
t->base.name);
if (rel->exps)
exps_print(sql, fout, rel->exps, depth, 1, 0);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list