Changeset: 0296ba855135 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0296ba855135
Added Files:
        sql/test/mergetables/Tests/part-elim.sql
        sql/test/mergetables/Tests/part-elim.stable.err
        sql/test/mergetables/Tests/part-elim.stable.out
Modified Files:
        gdk/gdk_storage.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_optimizer.h
        sql/backends/monet5/sql_scenario.c
        
sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.stable.out
        sql/test/mergetables/Tests/All
Branch: embedded
Log Message:

merge


diffs (truncated from 342 to 300 lines):

diff --git a/gdk/gdk_storage.c b/gdk/gdk_storage.c
--- a/gdk/gdk_storage.c
+++ b/gdk/gdk_storage.c
@@ -712,13 +712,6 @@ BATsave(BAT *bd)
        BAT *b = bd;
 
        BATcheck(b, "BATsave", GDK_FAIL);
-       /* there is a possibility that BATsave gets called with a
-        * pointer to a BAT that has *no* fixes (refs == 0), and so
-        * the heaps may not be in core, in which case BATmirror()
-        * would not find the mirror (this can happen when BATsave
-        * gets called during a (sub)commit after the BAT had been
-        * trimmed) */
-       CHECKDEBUG if (BATmirror(b)) BATassertProps(b);
 
        /* views cannot be saved, but make an exception for
         * force-remapped views */
@@ -798,23 +791,6 @@ BATsave(BAT *bd)
        if (err == GDK_SUCCEED) {
                bd->batCopiedtodisk = 1;
                DESCclean(bd);
-               /* see comment with BATassertProps() at the top of this 
function */
-               if (BATmirror(bd)) {
-                       if (bd->htype && bd->H->heap.storage == STORE_MMAP) {
-                               HEAPshrink(&bd->H->heap, bd->H->heap.free);
-                               if (bd->batCapacity > bd->H->heap.size >> 
bd->H->shift)
-                                       bd->batCapacity = (BUN) 
(bd->H->heap.size >> bd->H->shift);
-                       }
-                       if (bd->ttype && bd->T->heap.storage == STORE_MMAP) {
-                               HEAPshrink(&bd->T->heap, bd->T->heap.free);
-                               if (bd->batCapacity > bd->T->heap.size >> 
bd->T->shift)
-                                       bd->batCapacity = (BUN) 
(bd->T->heap.size >> bd->T->shift);
-                       }
-                       if (bd->H->vheap && bd->H->vheap->storage == STORE_MMAP)
-                               HEAPshrink(bd->H->vheap, bd->H->vheap->free);
-                       if (bd->T->vheap && bd->T->vheap->storage == STORE_MMAP)
-                               HEAPshrink(bd->T->vheap, bd->T->vheap->free);
-               }
                return GDK_SUCCEED;
        }
        return err;
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -215,8 +215,8 @@ addOptimizers(Client c, MalBlkPtr mb, ch
                addtoMalBlkHistory(mb, "getStatistics");
 }
 
-void
-addQueryToCache(Client c)
+str
+optimizeQuery(Client c)
 {
        MalBlkPtr mb;
        backend *be;
@@ -226,13 +226,12 @@ addQueryToCache(Client c)
        assert(be && be->mvc);  /* SQL clients should always have their state 
set */
        pipe = getSQLoptimizer(be->mvc);
 
-       insertSymbol(c->nspace, c->curprg);
        trimMalBlk(c->curprg->def);
        c->blkmode = 0;
        mb = c->curprg->def;
        chkProgram(c->fdout, c->nspace, mb);
 #ifdef _SQL_OPTIMIZER_DEBUG
-       mnstr_printf(GDKout, "ADD QUERY TO CACHE\n");
+       mnstr_printf(GDKout, "Optimize query\n");
        printFunction(GDKout, mb, 0, LIST_MAL_ALL);
 #endif
        /*
@@ -250,23 +249,34 @@ addQueryToCache(Client c)
                        if (msg != MAL_SUCCEED)
                                GDKfree(msg); /* ignore error */
                }
-               return;
+               return NULL;
        }
        addOptimizers(c, mb, pipe);
        msg = optimizeMALBlock(c, mb);
-       if (msg != MAL_SUCCEED) {
-               showScriptException(c->fdout, mb, 0, MAL, "%s", msg);
-               GDKfree(msg);
-               return;
-       }
+       if (msg)
+               return msg;
 
        /* time to execute the optimizers */
        if (c->debug)
                optimizerCheck(c, mb, "sql.baseline", -1, 0);
 #ifdef _SQL_OPTIMIZER_DEBUG
-       mnstr_printf(GDKout, "ADD optimized QUERY TO CACHE\n");
+       mnstr_printf(GDKout, "End Optimize Query\n");
        printFunction(GDKout, mb, 0, LIST_MAL_ALL);
 #endif
+       return NULL;
+}
+
+void
+addQueryToCache(Client c)
+{
+       str msg = NULL;
+
+       insertSymbol(c->nspace, c->curprg);
+       msg = optimizeQuery(c);
+       if (msg != MAL_SUCCEED) {
+               showScriptException(c->fdout, c->curprg->def, 0, MAL, "%s", 
msg);
+               GDKfree(msg);
+       }
 }
 
 /*
diff --git a/sql/backends/monet5/sql_optimizer.h 
b/sql/backends/monet5/sql_optimizer.h
--- a/sql/backends/monet5/sql_optimizer.h
+++ b/sql/backends/monet5/sql_optimizer.h
@@ -12,6 +12,7 @@
 
 //#define _SQL_OPTIMIZER_DEBUG
 
+sql5_export str optimizeQuery(Client c);
 sql5_export void addQueryToCache(Client c);
 sql5_export str SQLoptimizer(Client c);
 sql5_export void SQLsetAccessMode(Client c);
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
@@ -1202,6 +1202,7 @@ SQLparser(Client c)
                if ( OPTmitosisPlanOverdue(c, be->q->name) ){
                        msg = SQLCacheRemove(c, be->q->name);
                        qc_delete(be->mvc->qc, be->q);
+                       be->q = NULL;
                        goto recompilequery;
                }
 
@@ -1294,17 +1295,12 @@ recompilequery:
 
                chkTypes(c->fdout, c->nspace, c->curprg->def, TRUE);    /* 
resolve types */
                if (opt) {
-                       MalBlkPtr mb = c->curprg->def;
+                       str msg = optimizeQuery(c);
 
-                       trimMalBlk(mb);
-                       chkProgram(c->fdout, c->nspace, mb);
-                       addOptimizers(c, mb, "default_pipe"); // TODO change to 
active pipe! 
-                       msg = optimizeMALBlock(c, mb);
                        if (msg != MAL_SUCCEED) {
                                sqlcleanup(m, err);
                                goto finalize;
                        }
-                       c->curprg->def = mb;
                }
                //printFunction(c->fdout, c->curprg->def, 0, LIST_MAL_ALL);
                /* we know more in this case than chkProgram(c->fdout, 
c->nspace, c->curprg->def); */
diff --git 
a/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.stable.out 
b/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.stable.out
--- 
a/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.stable.out
+++ 
b/sql/test/BugTracker-2009/Tests/use_order_column_first.SF-2686008.stable.out
@@ -94,7 +94,7 @@ project (
 project (
 | group by (
 | | table(sys.sorted) [ sorted.a, sorted.b ] COUNT 
-| ) [ sorted.a, sorted.b ] [ sorted.b, sorted.a ]
+| ) [ sorted.b, sorted.a ] [ sorted.b, sorted.a ]
 ) [ sorted.a, sorted.b ]
 
 # 13:59:55 >  
diff --git a/sql/test/mergetables/Tests/All b/sql/test/mergetables/Tests/All
--- a/sql/test/mergetables/Tests/All
+++ b/sql/test/mergetables/Tests/All
@@ -16,3 +16,4 @@ mergedrop1
 mergedrop2
 mergemergeload
 singlekeyconstraint
+part-elim
diff --git a/sql/test/mergetables/Tests/part-elim.sql 
b/sql/test/mergetables/Tests/part-elim.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/part-elim.sql
@@ -0,0 +1,30 @@
+create table mt2(id bigint, posX real); 
+create table mt1(id bigint, posX real);
+
+create merge table test(id bigint, posX real); 
+alter table test add table mt1; 
+alter table test add table mt2;
+
+insert into mt1 values (1021, 12.4);
+insert into mt1 values (1022, 13.4);
+insert into mt1 values (1023, 14.4);
+insert into mt1 values (1024, 15.4);
+
+insert into mt2 values (1, 1.4);
+insert into mt2 values (2, 1.4);
+insert into mt2 values (3, 1.4);
+insert into mt2 values (4, 1.4);
+
+alter table mt1 set read only;
+alter table mt2 set read only;
+
+analyze sys.mt1 (id,posX) minmax;
+analyze sys.mt2 (id,posX) minmax;
+
+plan select * from test where id between 1 and 10000;
+plan select * from test where id between 1 and 1000;
+
+drop table test;
+drop table mt1;
+drop table mt2;
+
diff --git a/sql/test/mergetables/Tests/part-elim.stable.err 
b/sql/test/mergetables/Tests/part-elim.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/part-elim.stable.err
@@ -0,0 +1,35 @@
+stderr of test 'part-elim` in directory 'sql/test/mergetables` itself:
+
+
+# 12:32:44 >  
+# 12:32:44 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=32914" "--set" 
"mapi_usock=/var/tmp/mtest-25433/.s.monetdb.32914" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables"
 "--set" "embedded_r=yes"
+# 12:32:44 >  
+
+# builtin opt  gdk_dbpath = 
/home/niels/scratch/monetdb/Linux-x86_64/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 = 32914
+# cmdline opt  mapi_usock = /var/tmp/mtest-25433/.s.monetdb.32914
+# cmdline opt  monet_prompt = 
+# cmdline opt  gdk_dbpath = 
/home/niels/scratch/monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables
+# cmdline opt  embedded_r = yes
+# cmdline opt  gdk_debug = 536870922
+
+# 12:32:44 >  
+# 12:32:44 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-25433" "--port=32914"
+# 12:32:44 >  
+
+
+# 12:32:44 >  
+# 12:32:44 >  "Done."
+# 12:32:44 >  
+
diff --git a/sql/test/mergetables/Tests/part-elim.stable.out 
b/sql/test/mergetables/Tests/part-elim.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/part-elim.stable.out
@@ -0,0 +1,89 @@
+stdout of test 'part-elim` in directory 'sql/test/mergetables` itself:
+
+
+# 12:32:44 >  
+# 12:32:44 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=32914" "--set" 
"mapi_usock=/var/tmp/mtest-25433/.s.monetdb.32914" "--set" "monet_prompt=" 
"--forcemito" 
"--dbpath=/home/niels/scratch/monetdb/Linux-x86_64/var/MonetDB/mTests_sql_test_mergetables"
 "--set" "embedded_r=yes"
+# 12:32:44 >  
+
+# MonetDB 5 server v11.22.0
+# This is an unreleased version
+# Serving database 'mTests_sql_test_mergetables', using 4 threads
+# Compiled for x86_64-unknown-linux-gnu/64bit with 64bit OIDs and 128bit 
integers dynamically linked
+# Found 7.332 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://localhost.nes.nl:32914/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-25433/.s.monetdb.32914
+# MonetDB/GIS module loaded
+# Start processing logs sql/sql_logs version 52200
+# Start reading the write-ahead log 'sql_logs/sql/log.19'
+# Finished reading the write-ahead log 'sql_logs/sql/log.19'
+# Finished processing logs sql/sql_logs
+# MonetDB/SQL module loaded
+# MonetDB/R   module loaded
+
+Ready.
+
+# 12:32:44 >  
+# 12:32:44 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-25433" "--port=32914"
+# 12:32:44 >  
+
+#create table mt2(id bigint, posX real); 
+#create table mt1(id bigint, posX real);
+#create merge table test(id bigint, posX real); 
+#alter table test add table mt1; 
+#alter table test add table mt2;
+#insert into mt1 values (1021, 12.4);
+[ 1    ]
+#insert into mt1 values (1022, 13.4);
+[ 1    ]
+#insert into mt1 values (1023, 14.4);
+[ 1    ]
+#insert into mt1 values (1024, 15.4);
+[ 1    ]
+#insert into mt2 values (1, 1.4);
+[ 1    ]
+#insert into mt2 values (2, 1.4);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to