Changeset: 84baca89eb43 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=84baca89eb43
Modified Files:
configure.ag
monetdb5/mal/mal_interpreter.c
monetdb5/optimizer/opt_mitosis.c
monetdb5/optimizer/opt_pipes.c
sql/backends/monet5/sql.mx
Branch: headless
Log Message:
Merge with default branch.
diffs (truncated from 1444 to 300 lines):
diff --git a/configure.ag b/configure.ag
--- a/configure.ag
+++ b/configure.ag
@@ -1260,6 +1260,9 @@
AC_CHECK_PROG(MV,mv,mv -f)
AC_PROG_LN_S
AC_CHECK_PROG(LOCKFILE,lockfile,lockfile -r 2,echo)
+if test x"$LOCKFILE" = x"echo" ; then
+ AC_MSG_WARN([no lockfile found, please do NOT parallelise the build
process!])
+fi
AC_CHECK_PROGS(RPMBUILD,rpmbuild rpm)
diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c
--- a/monetdb5/optimizer/opt_mitosis.c
+++ b/monetdb5/optimizer/opt_mitosis.c
@@ -209,14 +209,16 @@
for(j=0; j < pieces; j++){
q= copyInstruction(p);
- q= pushOid(mb,q,low.value.val.oval);
+ q= pushInt(mb,q,j);
+ q= pushInt(mb,q,pieces);
+ //q= pushOid(mb,q,low.value.val.oval);
if (j+1 < pieces) {
hgh.value.val.oval= low.value.val.oval+slice;
} else {
assert(rowcnt <= (wrd) BUN_MAX);
hgh.value.val.oval= (BUN) rowcnt;
}
- q = pushOid(mb,q,hgh.value.val.oval);
+ //q = pushOid(mb,q,hgh.value.val.oval);
k= getArg(q,0)= newTmpVariable(mb,tpe);
setVarFixed(mb,k);
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
@@ -113,11 +113,11 @@
getPipeDefinition(str name)
{
int i;
+
for( i=0; *pipes[i].name; i++)
- if ( strcmp(name, pipes[i].name) == 0)
- return GDKstrdup(pipes[i].def);
-
- return GDKstrdup(pipes[0].def);
+ if ( strcmp(name, pipes[i].name) == 0)
+ return GDKstrdup(pipes[i].def);
+ return NULL;
}
str
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
@@ -169,6 +169,13 @@
1 - inserts
2 - updates";
+pattern bind_idxbat(mvc:ptr, schema:str, table:str, index:str, access:int,
part_nr:int, nr_parts:int):col[:any_1]
+address mvc_bind_idxbat_wrap
+comment "Bind the 'schema.table.index' BAT with access kind:
+ 0 - base table
+ 1 - inserts
+ 2 - updates";
+
pattern bind(mvc:ptr, schema:str, table:str, column:str, access:int
):col[:any_1]
address mvc_bind_wrap
comment "Bind the 'schema.table.column' BAT with access kind:
@@ -183,6 +190,13 @@
1 - inserts
2 - updates";
+pattern bind(mvc:ptr, schema:str, table:str, column:str, access:int,
part_nr:int, nr_parts:int ):col[:any_1]
+address mvc_bind_wrap
+comment "Bind the 'schema.table.column' BAT partition with access kind:
+ 0 - base table
+ 1 - inserts
+ 2 - updates";
+
command bind_dbat(clientid:int, schema:str, table:str, access:int,
oldversion:lng, version:lng):col[:oid]
address mvc_diff_dbat_wrap
comment "Bind to 'schema.table' BAT with deleted objecs
@@ -2612,12 +2626,41 @@
(void) cntxt;
b = mvc_bind(m, *sname, *tname, *cname, *access);
if (b) {
- if ( pci->argc == 8){
+ if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_oid){
/* partitioned access */
lval = *(oid *)getArgReference(stk, pci, 6);
hval = *(oid *)getArgReference(stk, pci, 7);
- bn = BATslice(b, lval,hval);
- BATseqbase(bn, lval);
+ if (*access == 0) {
+ bn = BATslice(b, lval,hval);
+ BATseqbase(bn, lval);
+ BBPreleaseref(b->batCacheid);
+ } else {
+ bn = b;
+ }
+ BBPkeepref( *bid = bn->batCacheid);
+ return MAL_SUCCEED;
+ } else if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_int){
+ BUN cnt = BATcount(b), psz;
+ /* partitioned access */
+ int part_nr = *(int *)getArgReference(stk, pci, 6);
+ int nr_parts = *(int *)getArgReference(stk, pci, 7);
+
+ if (*access == 0) {
+ psz = cnt?(cnt/nr_parts):0;
+ bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?cnt:((part_nr+1)*psz));
+ BATseqbase(bn, part_nr*psz);
+ } else {
+ oid l, h;
+ BAT *c = mvc_bind(m, *sname, *tname, *cname, 0);
+ cnt = BATcount(c);
+ psz = cnt?(cnt/nr_parts):0;
+ l = part_nr*psz;
+ h = (part_nr+1==nr_parts)?cnt:((part_nr+1)*psz);
+ h--;
+ bn = BATmirror(BATselect(BATmirror(b), &l, &h));
+
+ BBPreleaseref(c->batCacheid);
+ }
BBPkeepref( *bid = bn->batCacheid);
BBPreleaseref(b->batCacheid);
return MAL_SUCCEED;
@@ -2646,12 +2689,41 @@
(void) cntxt;
b = mvc_bind_idxbat(m, *sname, *tname, *iname, *access);
if (b) {
- if ( pci->argc == 8){
- /* partitioned access */
+ if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_oid){
+ /* partitioned access, TODO fix update bats */
lval = *(oid *)getArgReference(stk, pci, 6);
hval = *(oid *)getArgReference(stk, pci, 7);
- bn = BATslice(b, lval,hval);
- BATseqbase(bn, lval);
+ if (*access == 0) {
+ bn = BATslice(b, lval,hval);
+ BATseqbase(bn, lval);
+ BBPreleaseref(b->batCacheid);
+ } else {
+ bn = b;
+ }
+ BBPkeepref( *bid = bn->batCacheid);
+ return MAL_SUCCEED;
+ } else if ( pci->argc == 8 && getArgType(mb,pci,6) == TYPE_int){
+ BUN cnt = BATcount(b), psz;
+ /* partitioned access */
+ int part_nr = *(int *)getArgReference(stk, pci, 6);
+ int nr_parts = *(int *)getArgReference(stk, pci, 7);
+
+ if (*access == 0) {
+ psz = cnt?(cnt/nr_parts):0;
+ bn = BATslice(b, part_nr*psz,
(part_nr+1==nr_parts)?cnt:((part_nr+1)*psz));
+ BATseqbase(bn, part_nr*psz);
+ } else {
+ oid l, h;
+ BAT *c = mvc_bind_idxbat(m, *sname, *tname,
*iname, 0);
+ cnt = BATcount(c);
+ psz = cnt?(cnt/nr_parts):0;
+ l = part_nr*psz;
+ h = (part_nr+1==nr_parts)?cnt:((part_nr+1)*psz);
+ h--;
+ bn = BATmirror(BATselect(BATmirror(b), &l, &h));
+
+ BBPreleaseref(c->batCacheid);
+ }
BBPkeepref( *bid = bn->batCacheid);
BBPreleaseref(b->batCacheid);
return MAL_SUCCEED;
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
@@ -288,7 +288,7 @@
sql_subtype *to = tps->h->next->data;
if (!l)
return NULL;
- s = stmt_convert(sql->sa, l, from, to);
+ s = stmt_convert(sql->sa, l, from, to, 0);
} break;
case e_func: {
node *en;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1499,7 +1499,6 @@
node *n,*m;
sql_rel *rel;
-
if (sql->emode == m_deps)
rel = rel_basetable(sql, t, tname);
else
@@ -1516,10 +1515,6 @@
sql_exp *e = m->data;
exp_setname(sql->sa, e, tname,
c->base.name);
-/*
- if (e->card == CARD_AGGR)
- e->card = CARD_MULTI;
-*/
}
}
return rel;
diff --git a/sql/server/rel_semantic.c b/sql/server/rel_semantic.c
--- a/sql/server/rel_semantic.c
+++ b/sql/server/rel_semantic.c
@@ -146,7 +146,9 @@
m->session->status = status;
strcpy(m->errstr, errstr);
} else {
+ int label = m->label;
*m = o;
+ m->label = label;
}
return rel;
}
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -44,7 +44,7 @@
mvc_debug = debug;
if (mvc_debug)
- fprintf(stderr, "mvc_init logdir %s%c%s\n", logdir, DIR_SEP,
dbname);
+ fprintf(stderr, "#mvc_init logdir %s%c%s\n", logdir, DIR_SEP,
dbname);
keyword_init();
scanner_init_keywords();
@@ -117,7 +117,7 @@
mvc_exit()
{
if (mvc_debug)
- fprintf(stderr, "mvc_exit\n");
+ fprintf(stderr, "#mvc_exit\n");
store_exit();
keyword_exit();
@@ -184,7 +184,7 @@
assert(m->session->active); /* only commit an active transaction */
if (mvc_debug)
- fprintf(stderr, "mvc_commit %s\n", (name) ? name : "");
+ fprintf(stderr, "#mvc_commit %s\n", (name) ? name : "");
if (m->session->status < 0) {
(void)sql_error(m, 010, "COMMIT: transaction is aborted, will
ROLLBACK instead");
@@ -196,7 +196,7 @@
if (name && name[0] != '\0') {
sql_trans *tr = m->session->tr;
if (mvc_debug)
- fprintf(stderr, "mvc_savepoint\n");
+ fprintf(stderr, "#mvc_savepoint\n");
store_lock();
m->session->tr = sql_trans_create(m->session->stk, tr, name);
store_unlock();
@@ -204,7 +204,7 @@
m->session->schema = find_sql_schema(m->session->tr,
m->session->schema_name);
m->last = NULL;
if (mvc_debug)
- fprintf(stderr, "mvc_commit %s done\n", (name) ? name :
"");
+ fprintf(stderr, "#mvc_commit %s done\n", (name) ? name
: "");
return 0;
}
@@ -233,7 +233,7 @@
sql_trans_end(m->session);
m->type = Q_TRANS;
if (mvc_debug)
- fprintf(stderr, "mvc_commit %s done\n", (name) ? name :
"");
+ fprintf(stderr, "#mvc_commit %s done\n", (name) ? name
: "");
m->last = NULL;
store_unlock();
return 0;
@@ -259,7 +259,7 @@
m->type = Q_TRANS;
m->last = NULL;
if (mvc_debug)
- fprintf(stderr, "mvc_commit %s done\n", (name) ? name : "");
+ fprintf(stderr, "#mvc_commit %s done\n", (name) ? name : "");
return ok;
}
@@ -270,7 +270,7 @@
sql_trans *tr = m->session->tr;
if (mvc_debug)
- fprintf(stderr, "mvc_rollback %s\n", (name) ? name : "");
+ fprintf(stderr, "#mvc_rollback %s\n", (name) ? name : "");
assert(tr);
assert(m->session->active); /* only abort an active transaction */
@@ -318,7 +318,7 @@
m->type = Q_TRANS;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list