Changeset: f70db48d5bd9 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f70db48d5bd9
Modified Files:
gdk/gdk.h
gdk/gdk_bbp.c
gdk/gdk_strimps.c
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.c
sql/backends/monet5/sql.c
Branch: string_imprints
Log Message:
Merge with default
diffs (truncated from 8029 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -9110,6 +9110,8 @@
[ "optimizer", "volcano_pipe", "function optimizer.volcano_pipe():void;",
"", "" ]
[ "optimizer", "wlc", "pattern optimizer.wlc():str ", "OPTwrapper;", ""
]
[ "optimizer", "wlc", "pattern optimizer.wlc(X_0:str, X_1:str):str ",
"OPTwrapper;", "Inject the workload capture-replay primitives" ]
+[ "optimizer", "wrapper", "pattern optimizer.wrapper():str ",
"OPTwrapper;", "" ]
+[ "optimizer", "wrapper", "pattern optimizer.wrapper(X_0:str,
X_1:str):str ", "OPTwrapper;", "Fake optimizer" ]
[ "pcre", "imatch", "command pcre.imatch(X_0:str, X_1:str):bit ",
"PCREimatch;", "Caseless Perl Compatible Regular Expression pattern matching
against a string" ]
[ "pcre", "index", "command pcre.index(X_0:pcre, X_1:str):int ",
"PCREindex;", "match a pattern, return matched position (or 0 when not
found)" ]
[ "pcre", "match", "command pcre.match(X_0:str, X_1:str):bit ",
"PCREmatch;", "Perl Compatible Regular Expression pattern matching against a
string" ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -12410,6 +12410,8 @@
[ "optimizer", "volcano_pipe", "function optimizer.volcano_pipe():void;",
"", "" ]
[ "optimizer", "wlc", "pattern optimizer.wlc():str ", "OPTwrapper;", ""
]
[ "optimizer", "wlc", "pattern optimizer.wlc(X_0:str, X_1:str):str ",
"OPTwrapper;", "Inject the workload capture-replay primitives" ]
+[ "optimizer", "wrapper", "pattern optimizer.wrapper():str ",
"OPTwrapper;", "" ]
+[ "optimizer", "wrapper", "pattern optimizer.wrapper(X_0:str,
X_1:str):str ", "OPTwrapper;", "Fake optimizer" ]
[ "pcre", "imatch", "command pcre.imatch(X_0:str, X_1:str):bit ",
"PCREimatch;", "Caseless Perl Compatible Regular Expression pattern matching
against a string" ]
[ "pcre", "index", "command pcre.index(X_0:pcre, X_1:str):int ",
"PCREindex;", "match a pattern, return matched position (or 0 when not
found)" ]
[ "pcre", "match", "command pcre.match(X_0:str, X_1:str):bit ",
"PCREmatch;", "Perl Compatible Regular Expression pattern matching against a
string" ]
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -773,7 +773,8 @@ void MPresetProfiler(stream *fdout);
char *MSP_locate_sqlscript(const char *mod_name, bit recurse);
str MSinitClientPrg(Client cntxt, const char *mod, const char *nme);
void MSresetInstructions(MalBlkPtr mb, int start);
-void MSresetVariables(Client cntxt, MalBlkPtr mb, MalStkPtr glb, int start);
+void MSresetStack(Client cntxt, MalBlkPtr mb, MalStkPtr glb);
+void MSresetVariables(MalBlkPtr mb);
void MSscheduleClient(str command, str challenge, bstream *fin, stream *fout,
protocol_version protocol, size_t blocksize);
str MSserveClient(Client cntxt);
str OIDXcreateImplementation(Client cntxt, int tpe, BAT *b, int pieces);
@@ -1137,6 +1138,7 @@ const char *mdbRef;
void mdbSetBreakRequest(Client cntxt, MalBlkPtr mb, str request, char cmd);
const char *mergecandRef;
const char *mergepackRef;
+const char *mergetableRef;
const char *minRef;
const char *min_no_nilRef;
const char *minusRef;
@@ -1227,7 +1229,6 @@ const char *plusRef;
const char *postludeRef;
const char *preludeRef;
MalStkPtr prepareMALstack(MalBlkPtr mb, int size);
-int prepareMalBlk(MalBlkPtr mb, str s);
void printFunction(stream *fd, MalBlkPtr mb, MalStkPtr stk, int flg);
void printInstruction(stream *fd, MalBlkPtr mb, MalStkPtr stk, InstrPtr p, int
flg);
const char *printRef;
@@ -1386,6 +1387,7 @@ const char *thetajoinRef;
const char *thetaselectRef;
const char *tidRef;
const char *timestampRef;
+const char *totalRef;
void traceFunction(component_t comp, MalBlkPtr mb, MalStkPtr stk, int flg);
void traceInstruction(component_t comp, MalBlkPtr mb, MalStkPtr stk, InstrPtr
p, int flg);
const char *transactionRef;
diff --git a/common/stream/fwf.c b/common/stream/fwf.c
--- a/common/stream/fwf.c
+++ b/common/stream/fwf.c
@@ -149,21 +149,18 @@ stream_fwf_create(stream *restrict s, si
}
fsd->in_buf = malloc(fsd->line_len);
if (fsd->in_buf == NULL) {
- close_stream(fsd->s);
free(fsd);
mnstr_set_open_error(STREAM_FWF_NAME, errno, NULL);
return NULL;
}
fsd->out_buf = malloc(fsd->line_len * 3);
if (fsd->out_buf == NULL) {
- close_stream(fsd->s);
free(fsd->in_buf);
free(fsd);
mnstr_set_open_error(STREAM_FWF_NAME, errno, NULL);
return NULL;
}
if ((ns = create_stream(STREAM_FWF_NAME)) == NULL) {
- close_stream(fsd->s);
free(fsd->in_buf);
free(fsd->out_buf);
free(fsd);
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -535,14 +535,14 @@ typedef enum {
/* Heap storage modes */
typedef enum {
- STORE_MEM = 0, /* load into GDKmalloced memory */
- STORE_MMAP = 1, /* mmap() into virtual memory */
- STORE_PRIV = 2, /* BAT copy of copy-on-write mmap */
- STORE_CMEM = 3, /* load into malloc (not GDKmalloc) memory*/
- STORE_NOWN = 4, /* memory not owned by the BAT */
- STORE_MMAPABS = 5, /* mmap() into virtual memory from an
+ STORE_INVALID = 0, /* invalid value, used to indicate error */
+ STORE_MEM, /* load into GDKmalloced memory */
+ STORE_MMAP, /* mmap() into virtual memory */
+ STORE_PRIV, /* BAT copy of copy-on-write mmap */
+ STORE_CMEM, /* load into malloc (not GDKmalloc) memory*/
+ STORE_NOWN, /* memory not owned by the BAT */
+ STORE_MMAPABS, /* mmap() into virtual memory from an
* absolute path (not part of dbfarm) */
- STORE_INVALID /* invalid value, used to indicate error */
} storage_t;
typedef struct {
@@ -2151,9 +2151,8 @@ gdk_export void VIEWbounds(BAT *b, BAT *
* correct for the reversed view.
*/
#define isVIEW(x) \
- (assert((x)->batCacheid > 0), \
- (((x)->theap && (x)->theap->parentid != (x)->batCacheid) || \
- ((x)->tvheap && (x)->tvheap->parentid != (x)->batCacheid)))
+ (((x)->theap && (x)->theap->parentid != (x)->batCacheid) || \
+ ((x)->tvheap && (x)->tvheap->parentid != (x)->batCacheid))
#define VIEWtparent(x) ((x)->theap == NULL || (x)->theap->parentid ==
(x)->batCacheid ? 0 : (x)->theap->parentid)
#define VIEWvtparent(x) ((x)->tvheap == NULL || (x)->tvheap->parentid
== (x)->batCacheid ? 0 : (x)->tvheap->parentid)
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -178,7 +178,6 @@ BATmaterialize(BAT *b)
cnt = BATcapacity(b);
if ((tail = GDKmalloc(sizeof(Heap))) == NULL)
return GDK_FAIL;
- *tail = *b->theap;
p = 0;
q = BUNlast(b);
assert(cnt >= q - p);
@@ -279,7 +278,6 @@ VIEWunlink(BAT *b)
BAT *tpb = NULL;
BAT *vtpb = NULL;
- assert(b->batCacheid > 0);
if (tp)
tpb = BBP_cache(tp);
if (tp && !vtp)
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -96,6 +96,7 @@ BATcreatedesc(oid hseq, int tt, bool hea
.batRole = role,
.batTransient = true,
+ .batRestricted = BAT_WRITE,
};
if (heapnames && (bn->theap = GDKmalloc(sizeof(Heap))) == NULL) {
GDKfree(bn);
@@ -114,8 +115,6 @@ BATcreatedesc(oid hseq, int tt, bool hea
* fill in heap names, so HEAPallocs can resort to disk for
* very large writes.
*/
- assert(bn->batCacheid > 0);
-
if (heapnames) {
assert(bn->theap != NULL);
*bn->theap = (Heap) {
@@ -662,7 +661,6 @@ BATfree(BAT *b)
return;
/* deallocate all memory for a bat */
- assert(b->batCacheid > 0);
if (b->tident && !default_ident(b->tident))
GDKfree(b->tident);
b->tident = BATstring_t;
@@ -1636,10 +1634,10 @@ BUNinplacemulti(BAT *b, const oid *posit
MT_lock_set(&b->theaplock);
b->tminpos = minpos;
b->tmaxpos = maxpos;
- MT_lock_unset(&b->theaplock);
b->theap->dirty = true;
if (b->tvheap)
b->tvheap->dirty = true;
+ MT_lock_unset(&b->theaplock);
return GDK_SUCCEED;
}
@@ -1900,7 +1898,6 @@ gdk_return
BATkey(BAT *b, bool flag)
{
BATcheck(b, GDK_FAIL);
- assert(b->batCacheid > 0);
if (b->ttype == TYPE_void) {
if (BATtdense(b) && !flag) {
GDKerror("dense column must be unique.\n");
@@ -1941,7 +1938,6 @@ BAThseqbase(BAT *b, oid o)
if (b != NULL) {
assert(o <= GDK_oid_max); /* i.e., not oid_nil */
assert(o + BATcount(b) <= GDK_oid_max);
- assert(b->batCacheid > 0);
if (b->hseqbase != o) {
b->batDirtydesc = true;
b->hseqbase = o;
@@ -1956,7 +1952,6 @@ BATtseqbase(BAT *b, oid o)
if (b == NULL)
return;
assert(is_oid_nil(o) || o + BATcount(b) <= GDK_oid_max);
- assert(b->batCacheid > 0);
if (b->tseqbase != o) {
b->batDirtydesc = true;
}
@@ -2128,7 +2123,7 @@ BATroles(BAT *b, const char *tnme)
/* rather than deleting X.new, we comply with the commit protocol and
* move it to backup storage */
static gdk_return
-backup_new(Heap *hp)
+backup_new(Heap *hp, bool lock)
{
int batret, bakret, ret = -1;
char *batpath, *bakpath;
@@ -2139,7 +2134,8 @@ backup_new(Heap *hp)
bakpath = GDKfilepath(hp->farmid, BAKDIR, hp->filename, ".new");
if (batpath != NULL && bakpath != NULL) {
/* file actions here interact with the global commits */
- MT_lock_set(&GDKtmLock);
+ if (lock)
+ MT_lock_set(&GDKtmLock);
batret = MT_stat(batpath, &st);
bakret = MT_stat(bakpath, &st);
@@ -2159,7 +2155,8 @@ backup_new(Heap *hp)
} else {
ret = 0;
}
- MT_lock_unset(&GDKtmLock);
+ if (lock)
+ MT_lock_unset(&GDKtmLock);
}
GDKfree(batpath);
GDKfree(bakpath);
@@ -2182,7 +2179,7 @@ HEAPchangeaccess(Heap *hp, int dstmode,
}
if (hp->storage == STORE_MMAP) { /* 6=>4 */
hp->dirty = true;
- return backup_new(hp) != GDK_SUCCEED ? STORE_INVALID :
STORE_MMAP; /* only called for existing bats */
+ return backup_new(hp, true) != GDK_SUCCEED ? STORE_INVALID :
STORE_MMAP; /* only called for existing bats */
}
return hp->storage; /* 7=>5 */
}
@@ -2194,7 +2191,7 @@ HEAPcommitpersistence(Heap *hp, bool wri
if (existing) { /* existing, ie will become transient */
if (hp->storage == STORE_MMAP && hp->newstorage == STORE_PRIV
&& writable) { /* 6=>2 */
hp->dirty = true;
- return backup_new(hp) != GDK_SUCCEED ? STORE_INVALID :
STORE_MMAP; /* only called for existing bats */
+ return backup_new(hp, false) != GDK_SUCCEED ?
STORE_INVALID : STORE_MMAP; /* only called for existing bats */
}
return hp->newstorage; /* 4=>0,5=>1,7=>3,c=>a no change */
}
@@ -2210,7 +2207,7 @@ HEAPcommitpersistence(Heap *hp, bool wri
}
-#define ATOMappendpriv(t, h) (ATOMstorage(t) != TYPE_str || GDK_ELIMDOUBLES(h))
+#define ATOMappendpriv(t, h) (ATOMstorage(t) != TYPE_str /*||
GDK_ELIMDOUBLES(h) */)
/* change the heap modes at a commit */
gdk_return
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -21,7 +21,6 @@
gdk_return
unshare_varsized_heap(BAT *b)
{
- assert(b->batCacheid > 0);
if (ATOMvarsized(b->ttype) &&
b->tvheap->parentid != b->batCacheid) {
Heap *h = GDKzalloc(sizeof(Heap));
@@ -329,7 +328,6 @@ insert_string_bat(BAT *b, BAT *n, struct
BATsetcount(b, oldcnt + ci->ncand);
bat_iterator_end(&ni);
assert(b->batCapacity >= b->batCount);
- b->theap->dirty = true;
/* maintain hash */
MT_rwlock_wrlock(&b->thashlock);
for (r = oldcnt, cnt = BATcount(b); b->thash && r < cnt; r++) {
@@ -402,7 +400,6 @@ append_varsized_bat(BAT *b, BAT *n, stru
*dst++ = src[canditer_next(ci) - hseq];
}
}
- b->theap->dirty = true;
BATsetcount(b, BATcount(b) + ci->ncand);
/* maintain hash table */
MT_rwlock_wrlock(&b->thashlock);
@@ -459,7 +456,6 @@ append_varsized_bat(BAT *b, BAT *n, stru
MT_rwlock_wrunlock(&b->thashlock);
BATsetcount(b, r);
bat_iterator_end(&ni);
- b->theap->dirty = true;
return GDK_SUCCEED;
}
@@ -650,7 +646,6 @@ BATappend2(BAT *b, BAT *n, BAT *s, bool
if (b == NULL || n == NULL || BATcount(n) == 0) {
return GDK_SUCCEED;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list