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