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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list