Changeset: bb7fb0e98b41 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb7fb0e98b41
Modified Files:
MonetDB/src/gdk/gdk_bat.mx
MonetDB5/src/extras/xml/xml.mx
MonetDB5/src/modules/mal/tablet.mx
sql/rel.txt
sql/src/backends/monet5/sql.mx
sql/src/backends/monet5/sql_gencode.mx
sql/src/backends/monet5/sql_result.mx
sql/src/include/sql_relation.h
sql/src/server/rel_bin.c
sql/src/server/rel_optimizer.c
sql/src/server/rel_select.c
sql/src/server/rel_updates.c
sql/src/server/sql_mvc.h
sql/src/storage/sql_storage.h
sql/src/storage/store.c
sql/src/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
sql/src/test/Dependencies/Tests/Dependencies.stable.out
sql/src/test/leaks/Tests/check0.stable.out
sql/src/test/leaks/Tests/check1.stable.out
sql/src/test/leaks/Tests/check2.stable.out
sql/src/test/leaks/Tests/check3.stable.out
sql/src/test/leaks/Tests/check4.stable.out
sql/src/test/leaks/Tests/check5.stable.out
sql/src/test/sql_xml/Tests/funcs.sql
Branch: default
Log Message:
approved output after recent changes
added copy into ... locked. This allows for loading a data into a table
directly (no overhead of logging and delta management). The database is
fully locked during this process (ie no other active transactions can co
exist)
diffs (truncated from 1075 to 300 lines):
diff -r 639822cd6235 -r bb7fb0e98b41 MonetDB/src/gdk/gdk_bat.mx
--- a/MonetDB/src/gdk/gdk_bat.mx Mon Dec 20 17:53:43 2010 +0100
+++ b/MonetDB/src/gdk/gdk_bat.mx Mon Dec 20 20:39:27 2010 +0100
@@ -3507,7 +3507,7 @@
BATseqbase(b, *(oid *) BUNhloc(bi, BUNfirst(b)));
}
exit:
- if (mode & BATPROPS_CHECK) {
+ if ((mode & BATPROPS_CHECK) == BATPROPS_CHECK) {
if ((sorted_bak & 1) && !(BAThordered(b) & 1)) {
GDKerror("BATpropcheck: BAT %s(%d)[%s,%s] with " BUNFMT
" tuples was incorrectly marked sorted!\n", BATgetId(b), b->batCacheid,
ATOMname(b->htype), ATOMname(b->ttype), b->batCount);
if (BAThordered(b))
diff -r 639822cd6235 -r bb7fb0e98b41 MonetDB5/src/extras/xml/xml.mx
--- a/MonetDB5/src/extras/xml/xml.mx Mon Dec 20 17:53:43 2010 +0100
+++ b/MonetDB5/src/extras/xml/xml.mx Mon Dec 20 20:39:27 2010 +0100
@@ -754,7 +754,7 @@
CREATE FUNCTION xml (s STRING) RETURNS xml external name xml.xml;
CREATE FUNCTION str (s XML) RETURNS STRING external name xml.str;
CREATE FUNCTION comment (s STRING) RETURNS xml external name xml.comment;
-CREATE FUNCTION parse (val STRING, option STRING) RETURNS xml external name
xml.parse;
+CREATE FUNCTION parse (doccont STRING, val STRING, "option" STRING) RETURNS
xml external name xml.parse;
CREATE FUNCTION pi (nme STRING, val STRING) RETURNS xml external name xml.pi;
CREATE FUNCTION root (val STRING, version STRING, standalone STRING) RETURNS
xml external name xml.root;
CREATE FUNCTION attribute (nme STRING, val STRING) RETURNS xml external name
xml.attribute;
diff -r 639822cd6235 -r bb7fb0e98b41 MonetDB5/src/modules/mal/tablet.mx
--- a/MonetDB5/src/modules/mal/tablet.mx Mon Dec 20 17:53:43 2010 +0100
+++ b/MonetDB5/src/modules/mal/tablet.mx Mon Dec 20 20:39:27 2010 +0100
@@ -478,6 +478,7 @@
tablet_export BUN TABLETload_file(Tablet * as, bstream *b, stream *out);
tablet_export BUN SQLload_file(Client cntxt, Tablet * as, bstream *b, stream
*out, char *csep, char *rsep, char quote, lng skip, lng maxrow);
tablet_export BAT *TABLETcollect_bats(Tablet * as);
+tablet_export BAT *TABLETcollect_parts(Tablet * as, BUN offset);
tablet_export void TABLETdestroy_format(Tablet * as);
tablet_export int TABLEToutput_file(Tablet * as, BAT *order, stream *s);
@@ -1340,6 +1341,54 @@
return bats;
}
+BAT *
+TABLETcollect_parts(Tablet * as, BUN offset)
+{
+ BAT *bats = BATnew(TYPE_str, TYPE_bat, as->nr_attrs);
+ Column *fmt = as->format;
+ BUN i;
+ BUN cnt = BATcount(fmt[0].c[0]);
+
+ if (bats == NULL)
+ return NULL;
+ for (i = 0; i < as->nr_attrs; i++) {
+ BAT *b = fmt[i].c[0];
+ BAT *bv = BATslice(b, offset, BATcount(b));
+
+ BUNins(bats, (ptr) fmt[i].name, (ptr) &bv->batCacheid, FALSE);
+ BATsetaccess(b, BAT_READ);
+ BATaccessBegin(bv, USE_ALL, MMAP_WILLNEED);
+ BATpropcheck(bv, BATPROPS_ALL);
+ /* drop the hashes, we don't need them now and they consume
space */
+ HASHremove(b);
+
+ BATpropcheck(BATmirror(bv), BATPROPS_ALL);
+ /* drop the hashes, we don't need them now and they consume
space */
+ HASHremove(BATmirror(b));
+ BATaccessEnd(bv, USE_ALL, MMAP_WILLNEED);
+
+ b->hkey &= bv->hkey;
+ b->tkey &= bv->tkey;
+ b->H->nonil &= bv->H->nonil;
+ b->T->nonil &= bv->T->nonil;
+ b->hdense &= bv->hdense;
+ b->tdense &= bv->tdense;
+ if (b->hsorted != bv->hsorted)
+ b->hsorted = 0;
+ if (b->tsorted != bv->tsorted)
+ b->tsorted = 0;
+
+ if (cnt != BATcount(b)) {
+ if ( as->error == 0) /* a new error */
+ GDKerror("Error: column %d count " BUNFMT "
differs from " BUNFMT "\n",i,BATcount(b),cnt);
+ BBPunfix(bats->batCacheid);
+ return NULL;
+ }
+ BBPunfix(bv->batCacheid);
+ }
+ return bats;
+}
+
void
sync_bats(Tablet * as)
{
diff -r 639822cd6235 -r bb7fb0e98b41 sql/rel.txt
--- a/sql/rel.txt Mon Dec 20 17:53:43 2010 +0100
+++ b/sql/rel.txt Mon Dec 20 20:39:27 2010 +0100
@@ -59,6 +59,7 @@
INSERT|DELETE|UPDATE (card MULTI)
-> l is relation to modify
-> r to be inserted/deleted/updated relation
+ -> flag ( if set don't insert (is done allready))
only (UPDATE)
-> exps list of columns to update (ugh) !
diff -r 639822cd6235 -r bb7fb0e98b41 sql/src/backends/monet5/sql.mx
--- a/sql/src/backends/monet5/sql.mx Mon Dec 20 17:53:43 2010 +0100
+++ b/sql/src/backends/monet5/sql.mx Mon Dec 20 20:39:27 2010 +0100
@@ -1464,6 +1464,18 @@
sql_destroy_params(c);
sql_destroy_args(c);
+ if ((c->emod & mod_locked) == mod_locked) {
+ /* here we should commit the transaction */
+ if (!err) {
+ sql_trans_commit(c->session->tr);
+ /* write changes to disk */
+ sql_trans_end(c->session);
+ store_apply_deltas();
+ sql_trans_begin(c->session);
+ }
+ store_unlock();
+ c->emod = 0;
+ }
/* some statements dynamically disable caching */
c->sym = NULL;
if (c->sa)
diff -r 639822cd6235 -r bb7fb0e98b41 sql/src/backends/monet5/sql_gencode.mx
--- a/sql/src/backends/monet5/sql_gencode.mx Mon Dec 20 17:53:43 2010 +0100
+++ b/sql/src/backends/monet5/sql_gencode.mx Mon Dec 20 20:39:27 2010 +0100
@@ -1620,14 +1620,18 @@
sql_column *c = s->op4.cval;
char *n = (s->type==st_append_col)?appendRef:updateRef;
- q = newStmt2(mb, sqlRef, n);
- q = pushArgument(mb, q, sql->mvc_var);
- getArg(q, 0) = sql->mvc_var=
newTmpVariable(mb,TYPE_ptr);
- q = pushSchema(mb, q, c->t);
- q = pushStr(mb, q, c->t->base.name);
- q = pushStr(mb, q, c->base.name);
- q = pushArgument(mb, q, r);
- sql->mvc_var = s->nr = getDestVar(q);
+ if (s->type == st_append_col && s->flag) { /* fake
append */
+ sql->mvc_var = s->nr = r;
+ } else {
+ q = newStmt2(mb, sqlRef, n);
+ q = pushArgument(mb, q, sql->mvc_var);
+ getArg(q, 0) = sql->mvc_var=
newTmpVariable(mb,TYPE_ptr);
+ q = pushSchema(mb, q, c->t);
+ q = pushStr(mb, q, c->t->base.name);
+ q = pushStr(mb, q, c->base.name);
+ q = pushArgument(mb, q, r);
+ sql->mvc_var = s->nr = getDestVar(q);
+ }
} break;
case st_update_idx:
@@ -2064,7 +2068,7 @@
backend_callinline(backend *be, Client c, stmt *s )
{
mvc *m = be->mvc;
- InstrPtr curInstr = 0;
+ InstrPtr curInstr = 0, p;
MalBlkPtr curBlk = c->curprg->def;
curInstr = getInstrPtr(curBlk, 0);
@@ -2095,6 +2099,12 @@
}
}
backend_dumpstmt(be, curBlk, s);
+
+ p = newFcnCall(curBlk, "optimizer", "remap");
+ typeChecker(c->nspace, curBlk, p, TRUE);
+ p = newFcnCall(curBlk, "optimizer", "multiplex");
+ typeChecker(c->nspace, curBlk, p, TRUE);
+ optimizeMALBlock(c, curBlk);
c->curprg->def = curBlk;
}
@@ -2311,7 +2321,7 @@
// if (!findSymbol(c->nspace, f->mod, f->imp))
// return 0;
- for (m = findModule(c->nspace, f->mod); m; m= m->outer)
+ for (m = findModule(c->nspace, f->mod); m; m= m->outer) {
if (strcmp(m->name, f->mod) == 0) {
Symbol s = m->subscope[(int)(getSubScope(f->imp))];
for(; s; s = s->peer) {
@@ -2320,11 +2330,13 @@
if (strcmp(s->name, f->imp) == 0 &&
((!f->ops && argc == 0) ||
- list_length(f->ops) == argc)){
+ list_length(f->ops) == argc ||
+ (sig->varargs & VARARGS) == VARARGS))
return 1;
- }
- }
- }
+
+ }
+ }
+ }
return 0;
/*
node *n;
diff -r 639822cd6235 -r bb7fb0e98b41 sql/src/backends/monet5/sql_result.mx
--- a/sql/src/backends/monet5/sql_result.mx Mon Dec 20 17:53:43 2010 +0100
+++ b/sql/src/backends/monet5/sql_result.mx Mon Dec 20 20:39:27 2010 +0100
@@ -57,6 +57,7 @@
#include <tablet.h>
#include <mtime.h>
#include <bat/res_table.h>
+#include <bat/bat_storage.h>
@= dec_tostr
char buf[32];
@@ -441,6 +442,7 @@
BAT *bats = NULL;
Tablet as;
Column *fmt;
+ size_t cnt = 0;
if (!t) {
sql_error(m, 500, "table %s not found", tname);
@@ -463,6 +465,12 @@
return NULL;
}
+ if (locked) {
+ sql_trans_end(m->session);
+ store_apply_deltas();
+ sql_trans_begin(m->session);
+ }
+
if (offset > 0)
offset--;
if (t->columns.set) {
@@ -511,14 +519,37 @@
if (locked) {
BAT *b = store_funcs.bind_col(m->session->tr,
col, RDONLY);
+ BATmmap(b, STORE_MMAP, STORE_MMAP,
STORE_MMAP, STORE_MMAP, 0);
fmt[i].c[0] = b;
+ cnt = BATcount(b);
fmt[i].ci[0] = bat_iterator(fmt[i].c[0]);
}
}
if (locked || TABLETcreate_bats(&as, (BUN) (sz < 0 ? 1000 :
sz)) >= 0) {
if (SQLload_file(cntxt, &as, bs, out, sep, rsep,
ssep?ssep[0]:0, offset, sz) != BUN_NONE && !as.error) {
- /* TODO in case of locked generate views which
inserted only */
- bats = TABLETcollect_bats(&as);
+ if (locked)
+ bats = TABLETcollect_parts(&as, cnt);
+ else
+ bats = TABLETcollect_bats(&as);
+ } else if (locked) { /* restore old counts */
+ for (n = t->columns.set->h, i = 0; n; n =
n->next, i++) {
+ sql_column *col = n->data;
+ BAT *b =
store_funcs.bind_col(m->session->tr, col, RDONLY);
+ BATsetcount(b, cnt);
+ BBPunfix(b->batCacheid);
+ }
+ }
+ }
+ if (locked) { /* fix delta structures and transaction */
+ for (n = t->columns.set->h, i = 0; n; n = n->next, i++)
{
+ sql_column *c = n->data;
+ BAT *b = store_funcs.bind_col(m->session->tr,
c, RDONLY);
+ sql_delta *d = c->data;
+
+ c->base.wtime = c->t->base.wtime =
c->t->s->base.wtime = m->session->tr->wtime = m->session->tr->stime;
+ d->cnt = BATcount(b);
+
+ BBPunfix(b->batCacheid);
}
}
if (as.error)
diff -r 639822cd6235 -r bb7fb0e98b41 sql/src/include/sql_relation.h
--- a/sql/src/include/sql_relation.h Mon Dec 20 17:53:43 2010 +0100
+++ b/sql/src/include/sql_relation.h Mon Dec 20 20:39:27 2010 +0100
@@ -138,6 +138,8 @@
op_delete /* delete(l=table, r delete expression) */
} operator_type;
+#define is_atom(et) \
+ (et == e_atom)
#define is_column(et) \
(et != e_cmp)
#define is_rank_op(e) \
diff -r 639822cd6235 -r bb7fb0e98b41 sql/src/server/rel_bin.c
--- a/sql/src/server/rel_bin.c Mon Dec 20 17:53:43 2010 +0100
+++ b/sql/src/server/rel_bin.c Mon Dec 20 20:39:27 2010 +0100
@@ -2366,6 +2366,8 @@
sql_column *c = n->data;
insert = i = stmt_append_col(sql->sa, c, i);
+ if (rel->flag) /* fake append (done in the copy into) */
+ i->flag = 1;
list_append(newl, i);
}
if (!insert)
diff -r 639822cd6235 -r bb7fb0e98b41 sql/src/server/rel_optimizer.c
--- a/sql/src/server/rel_optimizer.c Mon Dec 20 17:53:43 2010 +0100
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list