Changeset: e717e65382fb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e717e65382fb
Modified Files:
        monetdb5/mal/mal_interpreter.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: graph0
Log Message:

Forward the permutation map to the graph operator


diffs (223 lines):

diff --git a/monetdb5/mal/mal_interpreter.c b/monetdb5/mal/mal_interpreter.c
--- a/monetdb5/mal/mal_interpreter.c
+++ b/monetdb5/mal/mal_interpreter.c
@@ -475,8 +475,11 @@ str runMALsequence(Client cntxt, MalBlkP
        if (stk == NULL)
                throw(MAL, "mal.interpreter", MAL_STACK_FAIL);
 
-
-       printf("[DEBUG] [Interpreter] MAL Plan: %s\n", mal2str(mb, 0, 
mb->stop));
+       do { // DEBUG ONLY
+               char * value = getenv("MALPLAN");
+               if(value != NULL && strcmp(value, "1") == 0)
+                       printf("[DEBUG] [Interpreter] MAL Plan: %s\n", 
mal2str(mb, 0, mb->stop));
+       } while(0);
 
        /* prepare extended backup and garbage structures */
        if (startpc+1 == stoppc) {
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4554,13 +4554,14 @@ rel2bin_ddl(mvc *sql, sql_rel *rel, list
 static stmt *
 rel2bin_spfw(mvc *sql, sql_rel *rel, list *refs)
 {
-       stmt *edges = NULL, *spfw = NULL, *graph = NULL;
+       stmt *edges = NULL, *spfw = NULL, *graph = NULL, *query = NULL;
        stmt *left = NULL, *right = NULL;
        stmt *c = NULL, *g = NULL, *groups = NULL, *smpl = NULL;
        stmt *D = NULL, *vrtx = NULL;
        list *l = NULL;
        stmt *split = NULL;
-       stmt *e_from = NULL, *e_to = NULL, *q_from = NULL, *q_to = NULL;
+       stmt *e_from = NULL, *e_to = NULL;
+       stmt *q_from = NULL, *q_to = NULL;
        stmt *mk_perm = NULL;
        stmt *result = NULL;
        node *n = NULL; // generic var to iterate through a list
@@ -4596,7 +4597,7 @@ rel2bin_spfw(mvc *sql, sql_rel *rel, lis
        e_from = stmt_result(sql->sa, split, 0);
        e_to = stmt_result(sql->sa, split, 1);
        // mkgraph (naive approach)
-       e_from = stmt_order(sql->sa, e_from, /* direction = */ 0);
+       e_from = stmt_order(sql->sa, e_from, /* direction (0 = DESC, 1 = ASC) = 
*/ 1);
        mk_perm = stmt_result(sql->sa, e_from, 1);
        e_from = stmt_prefixsum(sql->sa, e_from);
        // FIXME e_weights = stmt_project(sql->sa, mk_perm, e_weights) etc..
@@ -4612,11 +4613,13 @@ rel2bin_spfw(mvc *sql, sql_rel *rel, lis
        // TODO I was not able to figure out how to perform a join with a 
candidate list at this layer
        // postpone the translation at the mal codegen ftb
        vrtx = stmt_exp2vrtx(sql->sa, q_from, q_to, D);
-       q_from = stmt_result(sql->sa, vrtx, 0);
-       q_to = stmt_result(sql->sa, vrtx, 1);
+       l = sa_list(sql->sa);
+       for(int i = 0; i < 3; i++)
+               list_append(l, stmt_result(sql->sa, vrtx, i));
+       query = stmt_list(sql->sa, l);
 
        // execute the shortest path operator
-       spfw = stmt_spfw(sql->sa, q_from, q_to, graph);
+       spfw = stmt_spfw(sql->sa, query, graph);
 
        // almost done, create the new resultset
        l = sa_list(sql->sa);
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
@@ -2800,11 +2800,12 @@ static int
                        s->nr = ref_cpy;
                } break;
                case st_exp2vrtx: {
+                       // this stmt became a mess
                        int ref_left = -1, ref_right = -1, ref_domain = 1;
                        InstrPtr cnt1 = NULL, cnt2 = NULL;
                        InstrPtr stmt_if = NULL, stmt_else = NULL, stmt_endif = 
NULL;
                        InstrPtr join = NULL, cmp = NULL, cmp_not = NULL;
-                       int /*jl1 = -1,*/ jl2 = -1, /*jl3 = -1,*/ jr1 = -1, jr2 
= -1, jr3 = -1;
+                       int jl1 = -1, jl2 = -1, /*jl3 = -1,*/ jr1 = -1, jr2 = 
-1, jr3 = -1;
                        InstrPtr qfrom_oid = NULL, qto_oid = NULL;
                        int qtemp = -1;
 
@@ -2832,7 +2833,7 @@ static int
                        join = pushNil(mb, join, TYPE_bat);
                        join = pushBit(mb, join, FALSE);
                        join = pushArgument(mb, join, getDestVar(cnt1));
-//                     jl1 = getDestVar(join);
+                       jl1 = getDestVar(join);
 
                        // second join
                        jr2 = newTmpVariable(mb, TYPE_any);
@@ -2840,7 +2841,7 @@ static int
                        join = pushReturn(mb, join, jr2);
                        join = pushArgument(mb, join, ref_right);
                        join = pushArgument(mb, join, ref_domain);
-                       join = pushArgument(mb, join, jr1);
+                       join = pushArgument(mb, join, jl1);
                        join = pushNil(mb, join, TYPE_bat);
                        join = pushBit(mb, join, FALSE);
                        join = pushArgument(mb, join, getDestVar(cnt1));
@@ -2876,7 +2877,7 @@ static int
                        join = pushNil(mb, join, TYPE_bat);
                        join = pushBit(mb, join, FALSE);
                        join = pushArgument(mb, join, getDestVar(cnt2));
-//                     jl3 = getDestVar(join);
+//                     jl3 = getDestVar(join); // jl3 is the same of jl2
 
                        qfrom_oid = newAssignment(mb);
                        getArg(qfrom_oid, 0) = qtemp; // dest
@@ -2904,8 +2905,9 @@ static int
                        stmt_endif->barrier = EXITsymbol;
 
                        // abi convention for st_result
-                       s->nr = qtemp; // = qfrom_oid
-                       renameVariable(mb, getDestVar(qto_oid), "r1_%d", s->nr);
+                       s->nr = jl2;
+                       renameVariable(mb, getDestVar(qfrom_oid), "r1_%d", 
s->nr);
+                       renameVariable(mb, getDestVar(qto_oid), "r2_%d", s->nr);
                } break;
                case st_mkpartition: {
                        int ref_stmt = -1;
@@ -3003,35 +3005,40 @@ static int
                        }
                } break;
                case st_spfw: {
-                       int efrom = -1, eto = -1, qfrom = -1, qto = -1;
+                       const /*size_t*/ int query_sz = 3; // num operands for 
the query
+                       const /*size_t*/ int graph_sz = 2; // num operands for 
the graph
                        node* n = NULL;
 
-                       qfrom = _dumpstmt(sql, mb, s->op1);
-                       if(qfrom < 0)
+                       // generate the query
+                       if(_dumpstmt(sql, mb, s->op1) < 0)
                                return -1;
 
-                       qto = _dumpstmt(sql, mb, s->op2);
-                       if(qto < 0)
+                       // generate the graph
+                       if(_dumpstmt(sql, mb, s->op2) < 0)
                                return -1;
 
-                       if(_dumpstmt(sql, mb, s->op3) < 0)
-                               return -1;
-
-                       n = s->op3->op4.lval->h;
-                       efrom = ((stmt *) n->data)->nr;
-                       n = n->next;
-                       eto = ((stmt *) n->data)->nr;
-                       // TODO weights
-
                        // command spfw(qf:bat[:oid], qt:bat[:oid], 
V:bat[:oid], E:bat[:oid]) --> :bat[:oid]
                        q = newStmt(mb, graphRef, "spfw");
-                       q = pushArgument(mb, q, qfrom);
-                       q = pushArgument(mb, q, qto);
-                       q = pushArgument(mb, q, efrom);
-                       q = pushArgument(mb, q, eto);
+
+                       // set the query params
+                       assert(s->op1->type == st_list && s->op1->op4.lval->cnt 
== query_sz);
+                       n = s->op1->op4.lval->h;
+                       for(int i = 0; i < query_sz; i++){
+                               q = pushArgument(mb, q, ((stmt*) n->data)->nr);
+                               n = n->next;
+                       }
+
+                       // set the graph params
+                       assert(s->op2->type == st_list && s->op2->op4.lval->cnt 
== graph_sz);
+                       n = s->op2->op4.lval->h;
+                       for(int i = 0; i < graph_sz; i++){
+                               q = pushArgument(mb, q, ((stmt*) n->data)->nr);
+                               n = n->next;
+                       }
 
                        // abi convention
                        s->nr = getDestVar(q); // filter
+                       #undef sz
                } break;
                }
                if (mb->errors)
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -1625,8 +1625,7 @@ stmt_exp2vrtx(sql_allocator *sa, stmt *f
        s->op1 = from;
        s->op2 = to;
        s->op3 = domain;
-       s->nrcols = from->nrcols + to->nrcols;
-       assert(s->nrcols == from->nrcols *2 && "from & to are supposed to have 
the same number of columns");
+       s->nrcols = 3;
        return s;
 }
 
@@ -1667,15 +1666,14 @@ stmt_prefixsum(sql_allocator *sa, stmt* 
 
 
 stmt *
-stmt_spfw(sql_allocator *sa, stmt* qfrom, stmt *qto, stmt* graph)
+stmt_spfw(sql_allocator *sa, stmt* query, stmt* graph)
 {
        stmt *s = stmt_create(sa, st_spfw);
-       s->op1 = qfrom;
-       s->op2 = qto;
-       s->op3 = graph;
+       s->op1 = query;
+       s->op2 = graph;
 
        // strong suspects these are the output cols of the operator
-       s->nrcols = 2;
+       s->nrcols = 1;
 
        return s;
 }
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -253,7 +253,7 @@ extern stmt *stmt_exp2vrtx(sql_allocator
 extern stmt *stmt_mkpartition(sql_allocator *sa, stmt* st, int partno, int 
num_partitions);
 extern stmt *stmt_prefixsum(sql_allocator *sa, stmt* op);
 extern stmt *stmt_slices(sql_allocator *sa, stmt* op, int num);
-extern stmt *stmt_spfw(sql_allocator *sa, stmt* qfrom, stmt *qto, stmt* graph);
+extern stmt *stmt_spfw(sql_allocator *sa, stmt* query, stmt* graph);
 
 
 extern sql_subtype *tail_type(stmt *st);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to