Changeset: a697da6e2f62 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a697da6e2f62
Added Files:
sql/test/BugTracker-2017/Tests/select.Bug-6259.sql
sql/test/BugTracker-2017/Tests/select.Bug-6259.stable.err
sql/test/BugTracker-2017/Tests/select.Bug-6259.stable.out
Modified Files:
gdk/gdk_logger.c
gdk/gdk_select.c
gdk/gdk_storage.c
monetdb5/extras/rapi/rapi.c
monetdb5/mal/mal_client.c
monetdb5/mal/mal_scenario.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_scenario.c
sql/backends/monet5/sql_scenario.h
sql/test/BugTracker-2017/Tests/All
sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out.int128
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.sql
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out
Branch: default
Log Message:
Merge with Dec2016 branch.
diffs (truncated from 686 to 300 lines):
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -933,6 +933,9 @@ logger_readlog(logger *lg, char *filenam
log_return err = LOG_OK;
time_t t0, t1;
struct stat sb;
+ int dbg = GDKdebug;
+
+ GDKdebug &= ~(CHECKMASK|PROPMASK);
if (lg->debug & 1) {
fprintf(stderr, "#logger_readlog opening %s\n", filename);
@@ -944,12 +947,14 @@ logger_readlog(logger *lg, char *filenam
if (lg->log == NULL || mnstr_errnr(lg->log)) {
mnstr_destroy(lg->log);
lg->log = NULL;
+ GDKdebug = dbg;
return GDK_SUCCEED;
}
if (fstat(fileno(getFile(lg->log)), &sb) < 0) {
fprintf(stderr, "!ERROR: logger_readlog: fstat on opened file
%s failed\n", filename);
mnstr_destroy(lg->log);
lg->log = NULL;
+ GDKdebug = dbg;
/* If the file could be opened, but fstat fails,
* something weird is going on */
return GDK_FAIL;
@@ -1082,6 +1087,7 @@ logger_readlog(logger *lg, char *filenam
printf("# Finished reading the write-ahead log '%s'\n",
filename);
fflush(stdout);
}
+ GDKdebug = dbg;
/* we cannot distinguish errors from incomplete transactions
* (even if we would log aborts in the logs). So we simply
* abort and move to the next log file */
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -1178,6 +1178,8 @@ BAT_scanselect(BAT *b, BAT *s, BAT *bn,
th = &vh.v_##TYPE; \
hval = 1; \
} \
+ if (*(TYPE*)tl > *(TYPE*)th) \
+ return newempty(); \
} \
assert(lval); \
assert(hval); \
diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -828,12 +828,6 @@ BATload_intern(bat bid, int lock)
HEAPfree(b->tvheap, 0);
return NULL;
}
-
- if ((b->batRestricted == BAT_WRITE && (GDKdebug & CHECKMASK)) ||
- (GDKdebug & PROPMASK)) {
- ++b->batSharecnt;
- --b->batSharecnt;
- }
return b;
}
diff --git a/monetdb5/extras/rapi/rapi.c b/monetdb5/extras/rapi/rapi.c
--- a/monetdb5/extras/rapi/rapi.c
+++ b/monetdb5/extras/rapi/rapi.c
@@ -482,23 +482,27 @@ void* RAPIloopback(void *query) {
if (err) { // there was an error
return ScalarString(RSTR(err));
}
- if (output && output->nr_cols > 0) {
- int i, ncols = output->nr_cols;
- SEXP retlist, names, varvalue = R_NilValue;
- retlist = PROTECT(allocVector(VECSXP, ncols));
- names = PROTECT(NEW_STRING(ncols));
- for (i = 0; i < ncols; i++) {
- if (!(varvalue =
bat_to_sexp(BATdescriptor(output->cols[i].b)))) {
- UNPROTECT(i + 3);
- return ScalarString(RSTR("Conversion error"));
+ if (output) {
+ int ncols = output->nr_cols;
+ if (ncols > 0) {
+ int i;
+ SEXP retlist, names, varvalue = R_NilValue;
+ retlist = PROTECT(allocVector(VECSXP, ncols));
+ names = PROTECT(NEW_STRING(ncols));
+ for (i = 0; i < ncols; i++) {
+ if (!(varvalue =
bat_to_sexp(BATdescriptor(output->cols[i].b)))) {
+ UNPROTECT(i + 3);
+ return ScalarString(RSTR("Conversion
error"));
+ }
+ SET_STRING_ELT(names, i,
RSTR(output->cols[i].name));
+ SET_VECTOR_ELT(retlist, i, varvalue);
}
- SET_STRING_ELT(names, i, RSTR(output->cols[i].name));
- SET_VECTOR_ELT(retlist, i, varvalue);
+ res_table_destroy(output);
+ SET_NAMES(retlist, names);
+ UNPROTECT(ncols + 2);
+ return retlist;
}
res_table_destroy(output);
- SET_NAMES(retlist, names);
- UNPROTECT(ncols + 2);
- return retlist;
}
return ScalarLogical(1);
}
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -391,8 +391,10 @@ freeClient(Client c)
c->username = 0;
}
c->mythread = 0;
- GDKfree(c->glb);
- c->glb = NULL;
+ if (c->glb) {
+ freeStack(c->glb);
+ c->glb = NULL;
+ }
if( c->error_row){
BBPrelease(c->error_row->batCacheid);
BBPrelease(c->error_fld->batCacheid);
diff --git a/monetdb5/mal/mal_scenario.c b/monetdb5/mal/mal_scenario.c
--- a/monetdb5/mal/mal_scenario.c
+++ b/monetdb5/mal/mal_scenario.c
@@ -402,7 +402,7 @@ setScenario(Client c, str nme)
{
int i;
str msg;
- Scenario scen = scenarioRec;
+ Scenario scen;
scen = findScenario(nme);
if (scen == NULL)
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -410,12 +410,14 @@ SQLstatementIntern(Client c, str *expr,
str msg = MAL_SUCCEED;
backend *be, *sql = (backend *) c->sqlcontext;
size_t len = strlen(*expr);
+ int inited = 0;
#ifdef _SQL_COMPILE
mnstr_printf(c->fdout, "#SQLstatement:%s\n", *expr);
#endif
if (!sql) {
- msg = SQLinitEnvironment(c, NULL, NULL, NULL);
+ inited = 1;
+ msg = SQLinitClient(c);
sql = (backend *) c->sqlcontext;
}
if (msg){
@@ -427,8 +429,11 @@ SQLstatementIntern(Client c, str *expr,
m = sql->mvc;
ac = m->session->auto_commit;
o = MNEW(mvc);
- if (!o)
+ if (!o) {
+ if (inited)
+ SQLresetClient(c);
throw(SQL, "SQLstatement", MAL_MALLOC_FAIL);
+ }
*o = *m;
/* hide query cache, this causes crashes in SQLtrans() due to
uninitialized memory otherwise */
m->qc = NULL;
@@ -657,6 +662,8 @@ endofcompile:
m->vars = vars;
m->session->status = status;
m->session->auto_commit = ac;
+ if (inited)
+ SQLresetClient(c);
return msg;
}
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -599,13 +599,8 @@ SQLinitClient(Client c)
}
str
-SQLexitClient(Client c)
+SQLresetClient(Client c)
{
-#ifdef _SQL_SCENARIO_DEBUG
- fprintf(stderr, "#SQLexitClient\n");
-#endif
- if (SQLinitialized == FALSE)
- throw(SQL, "SQLexitClient", "Catalogue not available");
if (c->sqlcontext) {
backend *be = NULL;
mvc *m = NULL;
@@ -633,6 +628,20 @@ SQLexitClient(Client c)
c->sqlcontext = NULL;
}
c->state[MAL_SCENARIO_READER] = NULL;
+ return MAL_SUCCEED;
+}
+
+str
+SQLexitClient(Client c)
+{
+ str err;
+#ifdef _SQL_SCENARIO_DEBUG
+ fprintf(stderr, "#SQLexitClient\n");
+#endif
+ if (SQLinitialized == FALSE)
+ throw(SQL, "SQLexitClient", "Catalogue not available");
+ if ((err = SQLresetClient(c)) != MAL_SUCCEED)
+ return err;
MALexitClient(c);
return MAL_SUCCEED;
}
@@ -644,10 +653,14 @@ SQLexitClient(Client c)
str
SQLinitEnvironment(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
{
+ str err;
+
(void) mb;
(void) stk;
(void) pci;
- return SQLinitClient(cntxt);
+ if ((err = SQLinitClient(cntxt)) == MAL_SUCCEED)
+ cntxt->phase[MAL_SCENARIO_EXITCLIENT] = SQLexitClient;
+ return err;
}
diff --git a/sql/backends/monet5/sql_scenario.h
b/sql/backends/monet5/sql_scenario.h
--- a/sql/backends/monet5/sql_scenario.h
+++ b/sql/backends/monet5/sql_scenario.h
@@ -25,6 +25,7 @@ sql5_export void SQLtrans(mvc *m);
sql5_export str SQLexit(Client c);
sql5_export str SQLexitClient(Client c);
+sql5_export str SQLresetClient(Client c);
sql5_export str SQLinitClient(Client c);
sql5_export str SQLreader(Client c);
sql5_export str SQLparser(Client c);
diff --git a/sql/test/BugTracker-2017/Tests/All
b/sql/test/BugTracker-2017/Tests/All
--- a/sql/test/BugTracker-2017/Tests/All
+++ b/sql/test/BugTracker-2017/Tests/All
@@ -42,3 +42,4 @@ crash_after_oidx_on_sys_statistics.Bug-6
crash_correlated_subqueries_in_select.Bug-6254
fullouterjoinfilter.Bug-6256
wrong_aggregation_count.Bug-6257
+select.Bug-6259
diff --git a/sql/test/BugTracker-2017/Tests/select.Bug-6259.sql
b/sql/test/BugTracker-2017/Tests/select.Bug-6259.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/select.Bug-6259.sql
@@ -0,0 +1,14 @@
+start transaction;
+CREATE TABLE tab0(pk INTEGER PRIMARY KEY, col0 INTEGER, col1 FLOAT, col2 TEXT,
col3 INTEGER, col4 FLOAT, col5 TEXT);
+INSERT INTO tab0 VALUES(0,45,106.20,'qixrh',119,127.82,'lqafj');
+INSERT INTO tab0 VALUES(1,47,107.11,'avveo',120,128.36,'tzjrc');
+INSERT INTO tab0 VALUES(2,48,108.0,'htssi',121,132.69,'ablzu');
+INSERT INTO tab0 VALUES(3,116,109.7,'hvapv',123,133.8,'azmay');
+INSERT INTO tab0 VALUES(4,55,110.92,'wffzp',124,134.70,'qjqzu');
+INSERT INTO tab0 VALUES(5,117,112.62,'hkmcc',126,135.82,'rfnvr');
+INSERT INTO tab0 VALUES(6,119,113.87,'yofgi',127,136.86,'jgucx');
+INSERT INTO tab0 VALUES(7,64,114.12,'clvcm',128,137.57,'bywfe');
+INSERT INTO tab0 VALUES(8,67,5.69,'htdpm',129,138.11,'tqmqj');
+INSERT INTO tab0 VALUES(9,121,115.87,'czgiu',130,139.21,'vqktb');
+SELECT pk FROM tab0 WHERE (col1 < 94.60) AND (col0 < 90) AND col3 >= 40 AND
(col0 > 89);
+rollback;
diff --git a/sql/test/BugTracker-2017/Tests/select.Bug-6259.stable.err
b/sql/test/BugTracker-2017/Tests/select.Bug-6259.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2017/Tests/select.Bug-6259.stable.err
@@ -0,0 +1,36 @@
+stderr of test 'select.Bug-6259` in directory 'sql/test/BugTracker-2017`
itself:
+
+
+# 21:05:48 >
+# 21:05:48 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set"
"mapi_open=true" "--set" "mapi_port=39824" "--set"
"mapi_usock=/var/tmp/mtest-30774/.s.monetdb.39824" "--set" "monet_prompt="
"--forcemito"
"--dbpath=/home/sjoerd/@Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2017"
"--set" "embedded_r=yes" "--set" "embedded_py=true"
+# 21:05:48 >
+
+# builtin opt gdk_dbpath = /home/sjoerd/@Monet-stable/var/monetdb5/dbfarm/demo
+# builtin opt gdk_debug = 0
+# builtin opt gdk_vmtrim = no
+# builtin opt monet_prompt = >
+# builtin opt monet_daemon = no
+# builtin opt mapi_port = 50000
+# builtin opt mapi_open = false
+# builtin opt mapi_autosense = false
+# builtin opt sql_optimizer = default_pipe
+# builtin opt sql_debug = 0
+# cmdline opt gdk_nr_threads = 0
+# cmdline opt mapi_open = true
+# cmdline opt mapi_port = 39824
+# cmdline opt mapi_usock = /var/tmp/mtest-30774/.s.monetdb.39824
+# cmdline opt monet_prompt =
+# cmdline opt gdk_dbpath =
/home/sjoerd/@Monet-stable/var/MonetDB/mTests_sql_test_BugTracker-2017
+# cmdline opt embedded_r = yes
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list