Changeset: 869d476461e0 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=869d476461e0
Modified Files:
        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:

First (apparently) working commit for the reachability join (both columns are 
from the same table)


diffs (81 lines):

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
@@ -4557,7 +4557,8 @@ rel2bin_spfw(mvc *sql, sql_rel *rel, lis
        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;
+       sql_subaggr *aggr_count = NULL;
+       stmt *D = NULL, *D_sz = NULL, *vrtx = NULL;
        list *l = NULL;
        stmt *split = NULL;
        stmt *e_from = NULL, *e_to = NULL;
@@ -4599,7 +4600,9 @@ rel2bin_spfw(mvc *sql, sql_rel *rel, lis
        // mkgraph (naive approach)
        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);
+       aggr_count = sql_bind_aggr(sql->sa, sql->session->schema, "count", 
NULL);
+       D_sz = stmt_aggr(sql->sa, smpl, NULL, NULL, aggr_count, 1, 0);
+       e_from = stmt_prefixsum(sql->sa, e_from, D_sz);
        // FIXME e_weights = stmt_project(sql->sa, mk_perm, e_weights) etc..
        e_to = stmt_project(sql->sa, mk_perm, e_to);
        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
@@ -2930,11 +2930,18 @@ static int
                        s->nr = getDestVar(q);
                } break;
                case st_prefixsum: {
-                       int ref_stmt = _dumpstmt(sql, mb, s->op1);
+                       int ref_stmt = -1, ref_cardinality = -1; ;
+
+                       ref_stmt = _dumpstmt(sql, mb, s->op1);
                        if(ref_stmt < 0)
                                return -1;
+                       ref_cardinality = _dumpstmt(sql, mb, s->op2);
+                       if(ref_cardinality < 0)
+                               return -1;
+
                        q = newStmt(mb, graphRef, "prefixsum");
                        q = pushArgument(mb, q, ref_stmt);
+                       q = pushArgument(mb, q, ref_cardinality);
                        s->nr = getDestVar(q);
                } break;
                case st_slices: {
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
@@ -1656,10 +1656,11 @@ stmt_slices(sql_allocator *sa, stmt* op,
 }
 
 stmt *
-stmt_prefixsum(sql_allocator *sa, stmt* op)
+stmt_prefixsum(sql_allocator *sa, stmt* op, stmt* domain_cardinality)
 {
        stmt *s = stmt_create(sa, st_prefixsum);
        s->op1 = op;
+       s->op2 = domain_cardinality;
        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
@@ -250,10 +250,10 @@ extern stmt *stmt_assign(sql_allocator *
 
 extern stmt *stmt_concat(sql_allocator *sa, list *l);
 extern stmt *stmt_exp2vrtx(sql_allocator *sa, stmt *from, stmt *to, stmt 
*domain);
-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* query, stmt* graph);
+extern stmt *stmt_mkpartition(sql_allocator *sa, stmt *st, int partno, int 
num_partitions);
+extern stmt *stmt_prefixsum(sql_allocator *sa, stmt *op, stmt 
*domain_cardinality);
+extern stmt *stmt_slices(sql_allocator *sa, stmt *op, int num);
+extern stmt *stmt_spfw(sql_allocator *sa, stmt *query, stmt *graph);
 
 
 extern sql_subtype *tail_type(stmt *st);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to