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