Changeset: cb6ff16d1ca1 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cb6ff16d1ca1
Modified Files:
sql/backends/monet5/sql_gencode.c
sql/server/rel_distribute.c
Branch: default
Log Message:
fixes replica tables
all 22 tpch queries now work
problems 1) intermediates should be of type project
2) references to the same table needed more carefull handling
diffs (106 lines):
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -48,6 +48,7 @@
#include "mal_builder.h"
#include <sql_rel2bin.h>
+#include <rel_select.h>
#include <rel_optimizer.h>
#include <rel_subquery.h>
#include <rel_prop.h>
@@ -240,14 +241,16 @@ table_func_create_result( MalBlkPtr mb,
}
static InstrPtr
-relational_func_create_result( MalBlkPtr mb, InstrPtr q, sql_rel *f)
+relational_func_create_result( mvc *sql, MalBlkPtr mb, InstrPtr q, sql_rel *f)
{
sql_rel *r = f;
node *n;
int i;
- if (is_topn(f->op))
- r = f->l;
+ if (is_topn(r->op))
+ r = r->l;
+ if (!is_project(r->op))
+ r = rel_project(sql->sa, r, rel_projections(sql, r, NULL, 1,
1));
q->argc = q->retc = 0;
for (i = 0, n = r->exps->h; n; n = n->next, i++ ) {
sql_exp *e = n->data;
@@ -294,7 +297,7 @@ _create_relational_function(mvc *m, char
curBlk = c->curprg->def;
curInstr = getInstrPtr(curBlk, 0);
- curInstr = relational_func_create_result(curBlk, curInstr, rel);
+ curInstr = relational_func_create_result(m, curBlk, curInstr, r);
setVarUDFtype(curBlk,0);
/* ops */
@@ -334,13 +337,16 @@ _create_relational_remote(mvc *m, char *
char *uri = prp->value;
node *n;
int i, q, v;
- int *lret = SA_NEW_ARRAY(m->sa, int, list_length(rel->exps));
- int *rret = SA_NEW_ARRAY(m->sa, int, list_length(rel->exps));
+ int *lret, *rret;
char old = name[0];
sql_rel *r = rel;
if (is_topn(r->op))
- r = rel->l;
+ r = r->l;
+ if (!is_project(r->op))
+ r = rel_project(m->sa, r, rel_projections(m, r, NULL, 1, 1));
+ lret = SA_NEW_ARRAY(m->sa, int, list_length(r->exps));
+ rret = SA_NEW_ARRAY(m->sa, int, list_length(r->exps));
/* dirty hack, rename (change first char of name) L->l, local
* functions name start with 'l' */
name[0] = 'l';
@@ -354,7 +360,7 @@ _create_relational_remote(mvc *m, char *
curBlk = c->curprg->def;
curInstr = getInstrPtr(curBlk, 0);
- curInstr = relational_func_create_result(curBlk, curInstr, rel);
+ curInstr = relational_func_create_result(m, curBlk, curInstr, rel);
setVarUDFtype(curBlk,0);
/* ops */
@@ -1772,7 +1778,7 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st
monet5_create_relational_function(sql->mvc, fimp, rel,
s);
q = newStmt(mb, mod, fimp);
- q = relational_func_create_result(mb, q, rel);
+ q = relational_func_create_result(sql->mvc, mb, q, rel);
if (s->op1)
for (n = s->op1->op4.lval->h; n; n = n->next) {
stmt *op = n->data;
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
@@ -55,6 +55,8 @@ replica(mvc *sql, sql_rel *rel, char *ur
if (rel_is_ref(rel)) {
sql_rel *nrel = rel_copy(sql->sa, rel);
+ if (nrel && rel->p)
+ nrel->p = prop_copy(sql->sa, rel->p);
rel_destroy(rel);
rel = nrel;
}
@@ -127,6 +129,15 @@ distribute(mvc *sql, sql_rel *rel)
if (!rel)
return rel;
+ if (rel_is_ref(rel)) {
+ sql_rel *nrel = rel_copy(sql->sa, rel);
+
+ if (nrel && rel->p)
+ nrel->p = prop_copy(sql->sa, rel->p);
+ rel_destroy(rel);
+ rel = nrel;
+ }
+
switch (rel->op) {
case op_basetable: {
sql_table *t = rel->l;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list