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

Reply via email to