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