Changeset: c360e613b861 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c360e613b861 Modified Files: monetdb5/modules/kernel/bat5.c monetdb5/optimizer/opt_pipes.c sql/backends/monet5/sql.mx sql/backends/monet5/sql_gencode.c sql/server/rel_bin.c sql/server/sql_statement.c sql/server/sql_statement.h Branch: default Log Message:
use fetchjoin were posible diffs (242 lines): diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c --- a/monetdb5/modules/kernel/bat5.c +++ b/monetdb5/modules/kernel/bat5.c @@ -1111,13 +1111,17 @@ BKCappend_force_wrap(int *r, int *bid, i if ((b = BATdescriptor(*bid)) == NULL) throw(MAL, "bat.append", RUNTIME_OBJECT_MISSING); - if ((b = setaccess(b, BAT_WRITE)) == NULL) - throw(MAL, "bat.append", OPERATION_FAILED); if ((u = BATdescriptor(*uid)) == NULL) { BBPreleaseref(b->batCacheid); throw(MAL, "bat.append", RUNTIME_OBJECT_MISSING); } - bn = BATappend(b, u, *force); + if (BATcount(u) == 0) { + bn = b; + } else { + if ((b = setaccess(b, BAT_WRITE)) == NULL) + throw(MAL, "bat.append", OPERATION_FAILED); + bn = BATappend(b, u, *force); + } if (b != bn) BBPreleaseref(b->batCacheid); BBPreleaseref(u->batCacheid); diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c --- a/monetdb5/optimizer/opt_pipes.c +++ b/monetdb5/optimizer/opt_pipes.c @@ -72,13 +72,13 @@ struct PIPELINES { // "optimizer.mitosis();" // "optimizer.mergetable();" "optimizer.deadcode();" - "optimizer.commonTerms();" +// "optimizer.commonTerms();" "optimizer.groups();" - "optimizer.joinPath();" +// "optimizer.joinPath();" // "optimizer.reorder();" "optimizer.deadcode();" "optimizer.reduce();" - "optimizer.dataflow();" +// "optimizer.dataflow();" "optimizer.history();" "optimizer.multiplex();" "optimizer.garbageCollector();", diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx --- a/sql/backends/monet5/sql.mx +++ b/sql/backends/monet5/sql.mx @@ -866,7 +866,7 @@ function batcalc.mark_grp{inline}( b:bat # restore the order based on grp or := bat.reverse(ord); gg := bat.mirror(grp); - go := algebra.fetchjoin(gg, or); + go := algebra.leftjoin(gg, or); return mark_grp := algebra.leftfetchjoin(go, mg); end batcalc.mark_grp; @@ -877,7 +877,7 @@ function batcalc.mark_grp{inline}( b:bat # restore the order based on grp or := bat.reverse(ord); gg := bat.mirror(orig); - go := algebra.fetchjoin(gg, or); + go := algebra.leftjoin(gg, or); return mark_grp := algebra.leftfetchjoin(go, mg); end batcalc.mark_grp; @@ -894,7 +894,7 @@ function batcalc.rank_grp{inline}( b:bat # restore the order based on grp or := bat.reverse(ord); gg := bat.mirror(grp); - go := algebra.fetchjoin(gg, or); + go := algebra.leftjoin(gg, or); return rank_grp := algebra.leftfetchjoin(go, rg); end batcalc.rank_grp; @@ -904,7 +904,7 @@ function batcalc.rank_grp{inline}( b:bat # restore the order based on grp or := bat.reverse(ord); gg := bat.mirror(orig); - go := algebra.fetchjoin(gg, or); + go := algebra.leftjoin(gg, or); return rank_grp := algebra.leftfetchjoin(go, rg); end batcalc.rank_grp; @@ -920,7 +920,7 @@ function batcalc.dense_rank_grp{inline}( # restore the order based on grp or := bat.reverse(ord); gg := bat.mirror(grp); - go := algebra.fetchjoin(gg, or); + go := algebra.leftjoin(gg, or); return rank_grp := algebra.leftfetchjoin(go, drg); end batcalc.dense_rank_grp; @@ -930,7 +930,7 @@ function batcalc.dense_rank_grp{inline}( # restore the order based on grp or := bat.reverse(ord); gg := bat.mirror(orig); - go := algebra.fetchjoin(gg, or); + go := algebra.leftjoin(gg, or); return rank_grp := algebra.leftfetchjoin(go, drg); end batcalc.dense_rank_grp; 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 @@ -1364,9 +1364,12 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st assert(l >= 0 && r >= 0); - if (s->flag == cmp_project) { + if (s->flag == cmp_project || s->flag == cmp_reorder_project) { /* projections, ie left is void headed */ - q = newStmt2(mb, algebraRef, leftjoinRef); + if (s->flag == cmp_project) + q = newStmt1(mb, algebraRef, "leftfetchjoin"); + else + q = newStmt2(mb, algebraRef, leftjoinRef); q = pushArgument(mb, q, l); q = pushArgument(mb, q, r); @@ -1426,6 +1429,7 @@ _dumpstmt(backend *sql, MalBlkPtr mb, st q = pushArgument(mb, q, r); break; case cmp_project: + case cmp_reorder_project: assert(0); break; default: diff --git a/sql/server/rel_bin.c b/sql/server/rel_bin.c --- a/sql/server/rel_bin.c +++ b/sql/server/rel_bin.c @@ -816,7 +816,7 @@ stmt_col( mvc *sql, sql_column *c, stmt stmt *u = stmt_bat(sql->sa, c, ts, RD_UPD); sc = stmt_diff(sql->sa, sc, u); sc = stmt_union(sql->sa, sc, u); - sc = stmt_project(sql->sa, bcs, sc); + sc = stmt_reorder_project(sql->sa, bcs, sc); i = stmt_project(sql->sa, ics, i); sc = stmt_append(sql->sa, sc, i); } else { /* always handle the deletes */ @@ -838,7 +838,7 @@ stmt_idx( mvc *sql, sql_idx *i, stmt *ts stmt *u = stmt_idxbat(sql->sa, i, ts, RD_UPD); sc = stmt_diff(sql->sa, sc, u); sc = stmt_union(sql->sa, sc, u); - sc = stmt_project(sql->sa, bcs, sc); + sc = stmt_reorder_project(sql->sa, bcs, sc); ic = stmt_project(sql->sa, ics, ic); sc = stmt_append(sql->sa, sc, ic); } else { /* always handle the deletes */ @@ -1982,7 +1982,7 @@ rel2bin_except( mvc *sql, sql_rel *rel, lcnt = stmt_project(sql->sa, stmt_reverse(sql->sa, lm), s); s = stmt_union(sql->sa, ecnt, lcnt); o = stmt_mark_tail(sql->sa, lext, 0); - s = stmt_project(sql->sa, stmt_reverse(sql->sa, o), s); + s = stmt_reorder_project(sql->sa, stmt_reverse(sql->sa, o), s); /* now we have gid,cnt, blowup to full groupsizes */ s = stmt_gen_group(sql->sa, lext, s); @@ -2878,7 +2878,7 @@ insert_check_ukey(mvc *sql, list *insert s = stmt_col(sql, c->c, ts, bcs, ics); if ((k->type == ukey) && stmt_has_null(s)) { stmt *nn = stmt_selectnonil(sql, s, NULL); - s = stmt_project(sql->sa, nn, s); + s = stmt_reorder_project(sql->sa, nn, s); } if (h->nrcols) { s = stmt_join(sql->sa, s, h, cmp_equal); @@ -2905,7 +2905,7 @@ insert_check_ukey(mvc *sql, list *insert /* inserted vaules may be null */ if ((k->type == ukey) && stmt_has_null(ins)) { stmt *nn = stmt_selectnonil(sql, ins, NULL); - ins = stmt_project(sql->sa, nn, ins); + ins = stmt_reorder_project(sql->sa, nn, ins); } g = stmt_group(sql->sa, ins, NULL, NULL, NULL); @@ -3281,7 +3281,7 @@ update_check_ukey(mvc *sql, stmt **updat /* remove nulls */ if ((k->type == ukey) && stmt_has_null(upd)) { stmt *nn = stmt_selectnonil(sql, upd, NULL); - upd = stmt_project(sql->sa, nn, upd); + upd = stmt_reorder_project(sql->sa, nn, upd); } g = stmt_group(sql->sa, upd, grp, ext, Cnt); @@ -3346,7 +3346,7 @@ update_check_ukey(mvc *sql, stmt **updat /* remove nulls */ if ((k->type == ukey) && stmt_has_null(upd)) { stmt *nn = stmt_selectnonil(sql, upd, NULL); - upd = stmt_project(sql->sa, nn, upd); + upd = stmt_reorder_project(sql->sa, nn, upd); } g = stmt_group(sql->sa, upd, NULL, NULL, NULL); @@ -3770,9 +3770,9 @@ join_idx_update(mvc *sql, sql_idx * i, s s = stmt_union(sql->sa, s, stmt_const(sql->sa, null, stmt_atom(sql->sa, atom_general(sql->sa, sql_bind_localtype("oid"), NULL)))); /* correct the order */ if (updates) - return stmt_project(sql->sa, stmt_mirror(sql->sa, updates[updcol]->op1), s); + return stmt_reorder_project(sql->sa, stmt_mirror(sql->sa, updates[updcol]->op1), s); else - return stmt_project(sql->sa, stmt_mirror(sql->sa, new_updates[updcolumn->colnr]), s); + return stmt_reorder_project(sql->sa, stmt_mirror(sql->sa, new_updates[updcolumn->colnr]), s); } static list * diff --git a/sql/server/sql_statement.c b/sql/server/sql_statement.c --- a/sql/server/sql_statement.c +++ b/sql/server/sql_statement.c @@ -1103,6 +1103,12 @@ stmt_project(sql_allocator *sa, stmt *op } stmt * +stmt_reorder_project(sql_allocator *sa, stmt *op1, stmt *op2) +{ + return stmt_join(sa, op1, op2, cmp_reorder_project); +} + +stmt * stmt_join2(sql_allocator *sa, stmt *l, stmt *ra, stmt *rb, int cmp, int swapped) { stmt *s = stmt_create(sa, st_join2); diff --git a/sql/server/sql_statement.h b/sql/server/sql_statement.h --- a/sql/server/sql_statement.h +++ b/sql/server/sql_statement.h @@ -133,7 +133,8 @@ typedef enum comp_type { /* cmp_all and cmp_project are only used within stmt (not sql_exp) */ cmp_all = 10, /* special case for crossproducts */ - cmp_project = 11 /* special case for projection joins */ + cmp_project = 11, /* special case for projection joins */ + cmp_reorder_project = 12 /* special case for (reordering) projection joins */ } comp_type; #define is_theta_exp(e) ((e) == cmp_gt || (e) == cmp_gte || (e) == cmp_lte ||\ @@ -249,6 +250,7 @@ extern stmt *stmt_join2(sql_allocator *s extern stmt *stmt_joinN(sql_allocator *sa, stmt *l, stmt *r, stmt *opt, sql_subfunc *op); extern stmt *stmt_project(sql_allocator *sa, stmt *op1, stmt *op2); +extern stmt *stmt_reorder_project(sql_allocator *sa, stmt *op1, stmt *op2); extern stmt *stmt_inter(sql_allocator *sa, stmt *op1, stmt *op2); extern stmt *stmt_diff(sql_allocator *sa, stmt *op1, stmt *op2); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list