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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list