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

Reply via email to