Changeset: 4dd1701e7f19 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4dd1701e7f19 Modified Files: MonetDB/src/gdk/gdk.mx MonetDB/src/gdk/gdk_batop.mx MonetDB/src/gdk/gdk_bbp.mx MonetDB/src/gdk/gdk_logger.mx MonetDB/src/gdk/gdk_relop.mx MonetDB/src/gdk/gdk_storage.mx MonetDB5/src/modules/kernel/bat5.mx pathfinder/runtime/pathfinder.mx sql/src/include/sql_catalog.h sql/src/server/sql_mvc.mx sql/src/storage/sql_storage.h sql/src/storage/store.mx Branch: default Log Message:
Merged from Jun2010 branch. diffs (truncated from 2095 to 300 lines): diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk.mx --- a/MonetDB/src/gdk/gdk.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk.mx Mon Jun 07 10:10:45 2010 +0200 @@ -1012,8 +1012,6 @@ #define tsorted T->sorted #define hdense H->dense #define tdense T->dense -#define hheap H->vheap -#define theap T->vheap #define hident H->id #define tident T->id #define halign H->align @@ -3209,7 +3207,7 @@ If so, we can just compare integer index numbers instead of strings: @h #define HASHloop_fstr(bi, h, hb, idx, v) \ - for (hb = h->hash[strHash(v)&h->mask], idx = strLocate((bi.b)->hheap,v); \ + for (hb = h->hash[strHash(v)&h->mask], idx = strLocate((bi.b)->H->vheap,v); \ hb != BUN_NONE; hb = h->link[hb]) \ if (VarHeapValRaw((bi).b->H->heap.base, hb, (bi).b->H->width) == idx) @ diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk_bat.mx --- a/MonetDB/src/gdk/gdk_bat.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk_bat.mx Mon Jun 07 10:10:45 2010 +0200 @@ -1959,7 +1959,7 @@ } @= dohash - ATOMstorage(@1->@2type) != TYPE_chr && (ATOMstorage(@1->@2type) != TYPE_str || !GDK_ELIMDOUBLES(@1->@2heap)) + ATOMstorage(@1->@2->type) != TYPE_chr && (ATOMstorage(@1->@2->type) != TYPE_str || !GDK_ELIMDOUBLES(@1->@2->vheap)) @c BUN BUNlocate(BAT *b, ptr x, ptr y) @@ -2034,16 +2034,16 @@ /* regrettably MonetDB support only single-column hashes * strategy: create a hash on both columns, and select the column with the best distribution */ - if ((b->T->hash && b->H->hash == NULL) || !(@:dohash(b,h)@)) + if ((b->T->hash && b->H->hash == NULL) || !(@:dohash(b,H)@)) @:swap()@ if (b->H->hash == NULL && (v = VIEWcreate_(b, b, TRUE)) != NULL) { /* As we are going to remove the worst hash table later, we must do everything * in a view, as it is not permitted to remove a hash table from a read-only * operation (like BUNlocate). Other threads might then crash. */ - if (@:dohash(v,h)@) + if (@:dohash(v,H)@) (void) BATprepareHash(v); - if (@:dohash(v,t)@) + if (@:dohash(v,T)@) (void) BATprepareHash(BATmirror(v)); if (v->H->hash && v->T->hash) { /* we can choose between two hash tables */ BUN hcnt = 0, tcnt = 0; diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk_batop.mx --- a/MonetDB/src/gdk/gdk_batop.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk_batop.mx Mon Jun 07 10:10:45 2010 +0200 @@ -906,7 +906,7 @@ q++; } @= stringselect - if (strElimDoubles(b->hheap)) { + if (strElimDoubles(b->H->vheap)) { BUN p; size_t j; @@ -1840,7 +1840,7 @@ @:chk_order(dbl,@3,@5)@ } else { /* check sortedness tuple-by-tuple */ - if (b->hheap) { + if (b->H->vheap) { char *base = Hbase(b); char *prv = base + BUNhvaroff(bi, cur); @@ -1999,7 +1999,7 @@ b = BATrevert(b); return b; } - g...@7sort@3(Hloc(b,BUNfirst(b)), Tloc(b,BUNfirst(b)), (b->hheap)?b->H->vheap->base:NULL, BATcount(b), Hsize(b), Tsize(b), b->htype); + g...@7sort@3(Hloc(b,BUNfirst(b)), Tloc(b,BUNfirst(b)), (b->H->vheap)?b->H->vheap->base:NULL, BATcount(b), Hsize(b), Tsize(b), b->htype); HASHdestroy(b); ALIGNdel(b, "bator...@3", FALSE); b->hsorted = (bit) gdk_sor...@2; @@ -3054,7 +3054,7 @@ BATcheck(b, "BAThistogram"); - tricky = (b->ttype == TYPE_str && strElimDoubles(b->theap)); + tricky = (b->ttype == TYPE_str && strElimDoubles(b->T->vheap)); if (b->talign == 0) { b->talign = OIDnew(1); } @@ -3069,8 +3069,8 @@ by bulk copying the heap as well @c if (tricky) { - bn->hheap = (Heap *) GDKzalloc(sizeof(Heap)); - if (bn->hheap && b->T->vheap->filename) { + bn->H->vheap = (Heap *) GDKzalloc(sizeof(Heap)); + if (bn->H->vheap && b->T->vheap->filename) { char *nme = BBP_physical(bn->batCacheid); bn->H->vheap->filename = (str) GDKmalloc(strlen(nme) + 12); @@ -3078,7 +3078,7 @@ goto bunins_failed; GDKfilepath(bn->H->vheap->filename, NULL, nme, "hheap"); } - if (HEAPcopy(bn->hheap, b->theap) < 0) + if (HEAPcopy(bn->H->vheap, b->T->vheap) < 0) goto bunins_failed; bn->htype = b->ttype; bn->hvarsized = 1; diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk_bbp.mx --- a/MonetDB/src/gdk/gdk_bbp.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk_bbp.mx Mon Jun 07 10:10:45 2010 +0200 @@ -3980,10 +3980,10 @@ delete = (b == NULL || !b->ttype || b->batCopiedtodisk == 0); } else if (strncmp(p + 1, "hheap", 5) == 0) { BAT *b = getdesc(bid); - delete = (b == NULL || !b->hheap || b->batCopiedtodisk == 0); + delete = (b == NULL || !b->H->vheap || b->batCopiedtodisk == 0); } else if (strncmp(p + 1, "theap", 5) == 0) { BAT *b = getdesc(bid); - delete = (b == NULL || !b->theap || b->batCopiedtodisk == 0); + delete = (b == NULL || !b->T->vheap || b->batCopiedtodisk == 0); } else if (strncmp(p + 1, "hhash", 5) == 0) { BAT *b = getdesc(bid); delete = (b == NULL || !b->H->hash); diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk_delta.mx --- a/MonetDB/src/gdk/gdk_delta.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk_delta.mx Mon Jun 07 10:10:45 2010 +0200 @@ -122,13 +122,13 @@ (*hunfix) (h); } if (hatmdel) { - (*hatmdel) (b->hheap, (var_t *) BUNhloc(bi, p)); + (*hatmdel) (b->H->vheap, (var_t *) BUNhloc(bi, p)); } if (tunfix) { (*tunfix) (t); } if (tatmdel) { - (*tatmdel) (b->theap, (var_t *) BUNtloc(bi, p)); + (*tatmdel) (b->T->vheap, (var_t *) BUNtloc(bi, p)); } } } @@ -221,7 +221,7 @@ (*hunfix) (h); } if (hatmdel) { - (*hatmdel) (b->hheap, (var_t *) BUNhloc(bi, p)); + (*hatmdel) (b->H->vheap, (var_t *) BUNhloc(bi, p)); } if (b->T->hash) { HASHdel(b->T->hash, i, t, p < bunlast); @@ -230,7 +230,7 @@ (*tunfix) (t); } if (tatmdel) { - (*tatmdel) (b->theap, (var_t *) BUNtloc(bi, p)); + (*tatmdel) (b->T->vheap, (var_t *) BUNtloc(bi, p)); } } } diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk_logger.mx --- a/MonetDB/src/gdk/gdk_logger.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk_logger.mx Mon Jun 07 10:10:45 2010 +0200 @@ -94,7 +94,9 @@ struct trans *tr; } trans; -typedef int (*precommit_fptr) (char *qid, char *cid); +typedef int (*precommit_fptr)(char *qid, char *cid); +typedef int (*preversionfix_fptr)(int oldversion, int newversion); +typedef void (*postversionfix_fptr)(void *lg); typedef struct logger { int debug; @@ -105,6 +107,8 @@ char *fn; char *dir; precommit_fptr phandler; + preversionfix_fptr prefuncp; + postversionfix_fptr postfuncp; stream *log; lng end; /* end of pre-allocated blocks for faster f(data)sync */ /* Store log_bids (int) to circumvent trouble with reference counting */ @@ -137,7 +141,7 @@ /* the sequence identifier for frontend objects */ #define OBJ_SID 1 -gdk_export logger *logger_create(int debug, char *fn, char *logdir, char *dbname, int version, precommit_fptr phandler); +gdk_export logger *logger_create(int debug, char *fn, char *logdir, char *dbname, int version, precommit_fptr phandler, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp); gdk_export void logger_destroy(logger *lg); gdk_export int logger_exit(logger *lg); gdk_export int logger_restart(logger *lg); @@ -980,13 +984,17 @@ return -1; } if (version != lg->version) { - GDKerror("Incompatible database version %06d, " - "this server supports version %06d\n" - "Please move away %s and its corresponding dbfarm.", - version, lg->version, lg->dir); + if (lg->prefuncp == NULL || + (*lg->prefuncp)(version, lg->version) != 0) { + GDKerror("Incompatible database version %06d, " + "this server supports version %06d\n" + "Please move away %s and its corresponding dbfarm.", + version, lg->version, lg->dir); - return -1; - } + return -1; + } + } else + lg->postfuncp = NULL; /* don't call */ fgetc(fp); /* skip \n */ fgetc(fp); /* skip \n */ return 0; @@ -1059,7 +1067,7 @@ } static logger * -logger_new(int debug, char *fn, char *logdir, char *dbname, int version, precommit_fptr phandler) +logger_new(int debug, char *fn, char *logdir, char *dbname, int version, precommit_fptr phandler, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp) { int id = LOG_SID; logger *lg = (struct logger *) GDKmalloc(sizeof(struct logger)); @@ -1090,6 +1098,8 @@ lg->fn = GDKstrdup(fn); lg->dir = GDKstrdup(filename); lg->phandler = phandler; + lg->prefuncp = prefuncp; + lg->postfuncp = postfuncp; lg->log = NULL; lg->end = 0; lg->catalog = NULL; @@ -1223,6 +1233,8 @@ logger_readlogs(lg, fp, filename); fclose(fp); fp = NULL; + if (lg->postfuncp) + (*lg->postfuncp)(lg); } return lg; error: @@ -1234,9 +1246,9 @@ } logger * -logger_create(int debug, char *fn, char *logdir, char *dbname, int version, precommit_fptr phandler) +logger_create(int debug, char *fn, char *logdir, char *dbname, int version, precommit_fptr phandler, preversionfix_fptr prefuncp, postversionfix_fptr postfuncp) { - logger *lg = logger_new(debug, fn, logdir, dbname, version, phandler); + logger *lg = logger_new(debug, fn, logdir, dbname, version, phandler, prefuncp, postfuncp); if (!lg) return NULL; diff -r 697999a64eaf -r 4dd1701e7f19 MonetDB/src/gdk/gdk_relop.mx --- a/MonetDB/src/gdk/gdk_relop.mx Sat Jun 05 16:56:57 2010 +0200 +++ b/MonetDB/src/gdk/gdk_relop.mx Mon Jun 07 10:10:45 2010 +0200 @@ -557,9 +557,9 @@ The aftermath -- property setting -- is relatively straightforward here. @{ @c -#define HLATOMput(bn, dst) ATOMput(bn->htype, bn->hheap, dst, BUNhloc(li,l_cur)) +#define HLATOMput(bn, dst) ATOMput(bn->htype, bn->H->vheap, dst, BUNhloc(li,l_cur)) #define HVATOMput(bn, dst) Hputvalue(bn, dst, BUNhvar(li,l_cur), 1) -#define TLATOMput(bn, dst) ATOMput(bn->ttype, bn->theap, dst, BUNtloc(ri,r_cur)) +#define TLATOMput(bn, dst) ATOMput(bn->ttype, bn->T->vheap, dst, BUNtloc(ri,r_cur)) #define TVATOMput(bn, dst) Tputvalue(bn, dst, BUNtvar(ri,r_cur), 1) @= SIMPLEput @@ -1049,17 +1049,17 @@ *bn->T->vheap = *r->T->vheap; bn->T->vheap->parentid = parent; } else { - if (bn->theap && r->theap->filename) { + if (bn->T->vheap && r->T->vheap->filename) { char *nme = BBP_physical(bn->batCacheid); - bn->theap->filename = (str) GDKmalloc(strlen(nme) + 12); - if (bn->theap->filename == NULL) { + bn->T->vheap->filename = (str) GDKmalloc(strlen(nme) + 12); + if (bn->T->vheap->filename == NULL) { BBPreclaim(bn); goto ready; } - GDKfilepath(bn->theap->filename, NULL, nme, "theap"); + GDKfilepath(bn->T->vheap->filename, NULL, nme, "theap"); } - if (HEAPcopy(bn->theap, r->theap) < 0) { + if (HEAPcopy(bn->T->vheap, r->T->vheap) < 0) { BBPreclaim(bn); goto ready; } @@ -1079,7 +1079,7 @@ ALGODEBUG THRprintf(GDKout, "#BATfetchjoin: BAThvoid(l) && !BATtvoid(l)\n"); _______________________________________________ Checkin-list mailing list Checkin-list@monetdb.org http://mail.monetdb.org/mailman/listinfo/checkin-list