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

Reply via email to