Changeset: 409d381226f2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=409d381226f2
Added Files:
sql/test/Tests/alastair_udf_mergetable_bug.py
sql/test/Tests/alastair_udf_mergetable_bug.stable.err
sql/test/Tests/alastair_udf_mergetable_bug.stable.out
Modified Files:
clients/mapiclient/mclient.c
gdk/gdk_bbp.c
gdk/gdk_heap.c
gdk/gdk_storage.c
monetdb5/mal/Tests/tst013.stable.out
monetdb5/mal/Tests/tst036.stable.out
monetdb5/mal/Tests/tst050.stable.out
monetdb5/mal/Tests/tst070.stable.out
monetdb5/mal/Tests/tst105.stable.out
monetdb5/mal/Tests/tst106.stable.out
monetdb5/mal/Tests/tst150.stable.out
monetdb5/mal/Tests/tst2504.mal
monetdb5/mal/Tests/tst2504.stable.out
monetdb5/mal/Tests/tst611.stable.out
monetdb5/mal/mal_import.c
monetdb5/mal/mal_instruction.c
monetdb5/modules/atoms/str.c
monetdb5/modules/mal/bbp.c
monetdb5/optimizer/Tests/inline08.stable.out
monetdb5/optimizer/opt_accumulators.c
monetdb5/optimizer/opt_aliases.c
monetdb5/optimizer/opt_pushselect.c
monetdb5/scheduler/srvpool.c
monetdb5/tests/BugDay_2005-10-06_4.9.3/Tests/ADT_not_available.SF-850137.stable.out
monetdb5/tests/BugReports/Tests/lngssaretruncated.stable.out
monetdb5/tests/BugTracker/Tests/parser.SF-2051309.stable.out
sql/backends/monet5/sql.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_scenario.c
sql/test/BugTracker-2012/Tests/table_function_with_column_subselects.Bug-3172.stable.err
testing/process.py
tools/mserver/mserver5.c
Branch: default
Log Message:
Merge with Jan2014 branch.
diffs (truncated from 856 to 300 lines):
diff --git a/clients/mapiclient/mclient.c b/clients/mapiclient/mclient.c
--- a/clients/mapiclient/mclient.c
+++ b/clients/mapiclient/mclient.c
@@ -1643,7 +1643,7 @@ doRequest(Mapi mid, const char *buf)
return 0;
}
-#define CHECK_RESULT(mid, hdl, buf, break_or_continue) \
+#define CHECK_RESULT(mid, hdl, buf, break_or_continue,freebuf)
\
switch (mapi_error(mid)) { \
case MOK: \
/* everything A OK */ \
@@ -1678,7 +1678,7 @@ doRequest(Mapi mid, const char *buf)
mapi_explain(mid, stderr); \
errseen = 1; \
timerEnd(); \
- free(buf); \
+ if( freebuf) free(freebuf);
\
return 1; \
}
@@ -1725,7 +1725,7 @@ doFileBulk(Mapi mid, FILE *fp)
if (hdl == NULL) {
hdl = mapi_query_prep(mid);
- CHECK_RESULT(mid, hdl, buf, continue);
+ CHECK_RESULT(mid, hdl, buf, continue, buf);
}
if (first &&
@@ -1739,7 +1739,7 @@ doFileBulk(Mapi mid, FILE *fp)
assert(hdl != NULL);
mapi_query_part(hdl, buf + skip, length - skip);
- CHECK_RESULT(mid, hdl, buf + skip, continue);
+ CHECK_RESULT(mid, hdl, buf + skip, continue, buf);
/* make sure there is a newline in the buffer */
if (strchr(buf + skip, '\n') == NULL)
@@ -1758,14 +1758,14 @@ doFileBulk(Mapi mid, FILE *fp)
(length > 0 || mapi_query_done(hdl) == MMORE))
continue; /* get more data */
- CHECK_RESULT(mid, hdl, buf + skip, continue);
+ CHECK_RESULT(mid, hdl, buf + skip, continue, buf);
rc = format_result(mid, hdl, 0);
if (rc == MMORE && (length > 0 || mapi_query_done(hdl) != MOK))
continue; /* get more data */
- CHECK_RESULT(mid, hdl, buf + skip, continue);
+ CHECK_RESULT(mid, hdl, buf + skip, continue, buf);
mapi_close_handle(hdl);
hdl = NULL;
@@ -2321,7 +2321,7 @@ doFile(Mapi mid, const char *file, int u
"" :
"AND system =
false"));
hdl = mapi_query(mid, q);
- CHECK_RESULT(mid, hdl, buf,
continue);
+ CHECK_RESULT(mid, hdl, buf,
continue, buf);
while (fetch_row(hdl) == 5) {
name =
mapi_fetch_field(hdl, 0);
type =
mapi_fetch_field(hdl, 1);
@@ -2509,7 +2509,7 @@ doFile(Mapi mid, const char *file, int u
if (hdl == NULL) {
timerStart();
hdl = mapi_query_prep(mid);
- CHECK_RESULT(mid, hdl, buf, continue);
+ CHECK_RESULT(mid, hdl, buf, continue, buf);
} else
timerResume();
@@ -2518,7 +2518,7 @@ doFile(Mapi mid, const char *file, int u
if (length > 0) {
SQLsetSpecial(line);
mapi_query_part(hdl, line, length);
- CHECK_RESULT(mid, hdl, buf, continue);
+ CHECK_RESULT(mid, hdl, buf, continue, buf);
}
/* If the server wants more but we're at the
@@ -2536,7 +2536,7 @@ doFile(Mapi mid, const char *file, int u
continue; /* done */
}
}
- CHECK_RESULT(mid, hdl, buf, continue);
+ CHECK_RESULT(mid, hdl, buf, continue, buf);
if (mapi_get_querytype(hdl) == Q_PREPARE) {
prepno = mapi_get_tableid(hdl);
@@ -2548,7 +2548,7 @@ doFile(Mapi mid, const char *file, int u
if (rc == MMORE && (line != NULL || mapi_query_done(hdl) !=
MOK))
continue; /* get more data */
- CHECK_RESULT(mid, hdl, buf, continue);
+ CHECK_RESULT(mid, hdl, buf, continue, buf);
timerEnd();
mapi_close_handle(hdl);
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -411,8 +411,8 @@ recover_dir(int direxists)
{
if (direxists) {
/* just try; don't care about these non-vital files */
- GDKunlink(BATDIR, "BBP", "bak");
- GDKmove(BATDIR, "BBP", "dir", BATDIR, "BBP", "bak");
+ (void) GDKunlink(BATDIR, "BBP", "bak");
+ (void) GDKmove(BATDIR, "BBP", "dir", BATDIR, "BBP", "bak");
}
return GDKmove(BAKDIR, "BBP", "dir", BATDIR, "BBP", "dir");
}
@@ -3142,14 +3142,11 @@ BBPprepare(bit subcommit)
ret = (BBPrecover_subdir() < 0);
}
if (backup_files == 0) {
- struct stat st;
-
backup_dir = 0;
- ret = (stat(BAKDIR, &st) == 0 && BBPrecover());
-
+ ret = BBPrecover();
if (ret == 0) {
- /* make a new BAKDIR */
- ret = mkdir(BAKDIR, 0755);
+ ret = (mkdir(BAKDIR, 0755) < 0 && errno != EEXIST);
+ /* if BAKDIR already exists, don't signal error */
IODEBUG THRprintf(GDKstdout, "#mkdir %s = %d\n",
BAKDIR, ret);
}
}
@@ -3404,7 +3401,6 @@ force_move(const char *srcdir, const cha
if ((p = strrchr(name, '.')) != NULL && strcmp(p, ".kill") == 0) {
/* Found a X.new.kill file, ie remove the X.new file */
- struct stat st;
ptrdiff_t len = p - name;
strncpy(srcpath, name, len);
@@ -3413,23 +3409,19 @@ force_move(const char *srcdir, const cha
/* step 1: remove the X.new file that is going to be
* overridden by X */
- if (stat(dstpath, &st) == 0) {
- ret = unlink(dstpath); /* clear destination */
- if (ret) {
- /* if it exists and cannot be removed,
- * all this is going to fail */
- GDKsyserror("force_move: unlink(%s)\n",
dstpath);
- return ret;
- }
+ if (unlink(dstpath) < 0 && errno != ENOENT) {
+ /* if it exists and cannot be removed, all
+ * this is going to fail */
+ GDKsyserror("force_move: unlink(%s)\n", dstpath);
+ return -1;
}
/* step 2: now remove the .kill file. This one is
* crucial, otherwise we'll never finish recovering */
GDKfilepath(killfile, srcdir, name, NULL);
- ret = unlink(killfile);
- if (ret) {
+ if (unlink(killfile) < 0) {
GDKsyserror("force_move: unlink(%s)\n", killfile);
- return ret;
+ return -1;
}
return 0;
}
@@ -3642,7 +3634,6 @@ BBPdiskscan(const char *parent)
const char *p;
bat bid;
int ok, delete;
- struct stat st;
if (dent->d_name[0] == '.')
continue; /* ignore .dot files and directories (.
..) */
@@ -3672,11 +3663,6 @@ BBPdiskscan(const char *parent)
/* it was a directory */
continue;
}
- if (stat(fullname, &st)) {
- IODEBUG mnstr_printf(GDKstdout,"BBPdiskscan: stat(%s)",
fullname);
- continue;
- }
- IODEBUG THRprintf(GDKstdout, "#BBPdiskscan: stat(%s) = 0\n",
fullname);
if (ok == FALSE || !persistent_bat(bid)) {
delete = TRUE;
@@ -3710,7 +3696,7 @@ BBPdiskscan(const char *parent)
break;
}
if (delete) {
- if (unlink(fullname) < 0) {
+ if (unlink(fullname) < 0 && errno != ENOENT) {
GDKsyserror("BBPdiskscan: unlink(%s)",
fullname);
continue;
}
diff --git a/gdk/gdk_heap.c b/gdk/gdk_heap.c
--- a/gdk/gdk_heap.c
+++ b/gdk/gdk_heap.c
@@ -651,15 +651,15 @@ HEAPload_intern(Heap *h, const char *nme
GDKfilepath(dstpath, BATDIR, nme, ext);
assert(strlen(srcpath) + strlen(suffix) < sizeof(srcpath));
strcat(srcpath, suffix);
- ret = stat(dstpath, &st);
if (stat(srcpath, &st) == 0) {
int t0;
- if (ret == 0) {
- t0 = GDKms();
- ret = unlink(dstpath);
- HEAPDEBUG fprintf(stderr, "#unlink %s = %d (%dms)\n",
dstpath, ret, GDKms() - t0);
- }
t0 = GDKms();
+ ret = unlink(dstpath);
+ if (ret < 0 && errno == ENOENT)
+ ret = 0; /* no error if it doesn't exist */
+ HEAPDEBUG fprintf(stderr, "#unlink %s = %d (%dms)\n", dstpath,
ret, GDKms() - t0);
+ t0 = GDKms();
+ /* coverity[toctou] */
ret = rename(srcpath, dstpath);
if (ret < 0) {
GDKsyserror("HEAPload: rename of %s failed\n", srcpath);
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -686,14 +686,20 @@ BATload_intern(bat i, int lock)
}
if (b->batCapacity != (b->T->heap.size >> b->T->shift)) {
BUN cap = b->batCapacity;
+ int h;
if (cap < (b->T->heap.size >> b->T->shift)) {
cap = (BUN) (b->T->heap.size >> b->T->shift);
HEAPDEBUG fprintf(stderr, "#HEAPextend in
BATload_inter %s " SZFMT " " SZFMT "\n", b->H->heap.filename, b->H->heap.size,
headsize(b, cap));
- HEAPextend(&b->H->heap, headsize(b, cap),
b->batRestricted == BAT_READ);
+ h = HEAPextend(&b->H->heap, headsize(b, cap),
b->batRestricted == BAT_READ);
b->batCapacity = cap;
} else {
HEAPDEBUG fprintf(stderr, "#HEAPextend in
BATload_intern %s " SZFMT " " SZFMT "\n", b->T->heap.filename, b->T->heap.size,
tailsize(b, cap));
- HEAPextend(&b->T->heap, tailsize(b, cap),
b->batRestricted == BAT_READ);
+ h = HEAPextend(&b->T->heap, tailsize(b, cap),
b->batRestricted == BAT_READ);
+ }
+ if (h < 0) {
+ HEAPfree(&b->H->heap);
+ HEAPfree(&b->T->heap);
+ return NULL;
}
}
} else {
diff --git a/monetdb5/mal/Tests/tst013.stable.out
b/monetdb5/mal/Tests/tst013.stable.out
--- a/monetdb5/mal/Tests/tst013.stable.out
+++ b/monetdb5/mal/Tests/tst013.stable.out
@@ -34,7 +34,7 @@ stdout of test 'tst013` in directory 'mo
function user.main():void;
# incomplete barrier blocks. Resolve them when unambigous
barrier z := true;
- leave X_4;
+ leave ;
exit z;
barrier i := 1;
i := calc.+(i,1);
diff --git a/monetdb5/mal/Tests/tst036.stable.out
b/monetdb5/mal/Tests/tst036.stable.out
--- a/monetdb5/mal/Tests/tst036.stable.out
+++ b/monetdb5/mal/Tests/tst036.stable.out
@@ -16,8 +16,6 @@ stdout of test 'tst036` in directory 'mo
# MonetDB/SQL module v2.39.0 loaded
# MonetDB/GIS module v0.19.0 loaded
!TypeException:user.main[6]:Multiple assignment mismatch
-!TypeException:user.main[7]:Multiple assignment mismatch
-!TypeException:user.main[8]:Multiple assignment mismatch
function user.main():void;
# test for proper use of list assignments
(z0,z1) := (1,"help");
diff --git a/monetdb5/mal/Tests/tst050.stable.out
b/monetdb5/mal/Tests/tst050.stable.out
--- a/monetdb5/mal/Tests/tst050.stable.out
+++ b/monetdb5/mal/Tests/tst050.stable.out
@@ -28,10 +28,6 @@ stdout of test 'tst050` in directory 'mo
#f:flt := "wrong";
#
!TypeException:user.main[9]:type mismatch sht := lng
-
-!TypeException:user.main[10]:type mismatch lng := sht
-!TypeException:user.main[11]:'bat.new' undefined in: y:bat[:oid,:str] :=
bat.new(_11:oid, _12:int)
-!TypeException:user.main[12]:type mismatch flt := str
function user.main():void;
# Variables names may be tagged with a type upfront.
# They may be initialized with a lexical constant using
diff --git a/monetdb5/mal/Tests/tst070.stable.out
b/monetdb5/mal/Tests/tst070.stable.out
--- a/monetdb5/mal/Tests/tst070.stable.out
+++ b/monetdb5/mal/Tests/tst070.stable.out
@@ -12,7 +12,6 @@ stdout of test 'tst070` in directory 'mo
# Visit http://monetdb.cwi.nl/ for further information
# Listening for connection requests on mapi:monetdb://eir.ins.cwi.nl:33085/
!TypeException:user.foo[1]:'user.point' undefined in: (x:any, y:any) :=
user.point(_3:int)
-!TypeException:user.foo[2]:'user.getName' undefined in: (initial:str,
surname:str) := user.getName()
function user.foo():void;
(x,y) := user.point(1);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list