Changeset: ee57146b66fc for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ee57146b66fc
Modified Files:
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_optimizer.h
Branch: jit
Log Message:

Renaming and  control empty set
We may only replace empty binds if the query is about
to be executed directly.


diffs (170 lines):

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
@@ -391,7 +391,7 @@ SQLstatementIntern(Client c, str *expr, 
                        backend_dumpstmt(be, c->curprg->def, s, 1, 1) < 0)
                        err = 1;
                else
-                       addQueryToCache(c);
+                       SQLaddQueryToCache(c);
 
                if (err ||c->curprg->def->errors) {
                        /* restore the state */
@@ -700,7 +700,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS
                         backend_dumpstmt(b, c->curprg->def, s, 1, 1) < 0)
                        msg = createException(SQL,"RAstatement","Program 
contains errors");
                else 
-                       addQueryToCache(c);
+                       SQLaddQueryToCache(c);
                        SQLrun(c,b,m);
                if (!msg) {
                        resetMalBlk(c->curprg->def, oldstop);
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -484,7 +484,7 @@ static int
                curBlk->inlineProp =1;
        /* optimize the code */
        SQLoptimizeQuery(c, c->curprg->def);
-       addQueryToCache(c);
+       SQLaddQueryToCache(c);
        if (backup)
                c->curprg = backup;
        return 0;
@@ -705,7 +705,7 @@ static int
        curBlk->inlineProp = 1;
        SQLoptimizeFunction(c,c->curprg->def,m);
 
-       addQueryToCache(c);
+       SQLaddQueryToCache(c);
        if (backup)
                c->curprg = backup;
        name[0] = old;          /* make sure stub is called */
@@ -2928,7 +2928,7 @@ backend_dumpproc(backend *be, Client c, 
                q = pushStr(mb, q, getSQLoptimizer(be->mvc));
        }
        if (cq)
-               addQueryToCache(c);
+               SQLaddQueryToCache(c);
 
        curPrg = c->curprg;
        if (backup)
@@ -3149,7 +3149,7 @@ backend_create_sql_func(backend *be, sql
        m->sa = osa;
        /* optimize the code */
        SQLoptimizeQuery(c, c->curprg->def);
-       addQueryToCache(c);
+       SQLaddQueryToCache(c);
        if (backup)
                c->curprg = backup;
        return 0;
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
@@ -23,8 +23,9 @@
 #include "sql_gencode.h"
 #include "opt_pipes.h"
 
+/* prepare is set when we can not optimize based on actual size */
 static lng 
-SQLgetSpace(mvc *m, MalBlkPtr mb)
+SQLgetSpace(mvc *m, MalBlkPtr mb, int prepare)
 {
        sql_trans *tr = m->session->tr;
        lng size,space = 0, i; 
@@ -53,7 +54,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb)
                                        BAT *b = store_funcs.bind_idx(tr, i, 
RDONLY);
                                        if (b) {
                                                space += (size =getBatSpace(b));
-                                               if( 0 && size == 0){
+                                               if( !prepare && size == 0){
                                                        // replace with an 
empty dummy bat
                                                        clrFunction(p);
                                                        setModuleId(p, batRef);
@@ -73,7 +74,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb)
                                        BAT *b = store_funcs.bind_col(tr, c, 
RDONLY);
                                        if (b) {
                                                space += (size= getBatSpace(b));
-                                               if( 0 && size == 0){
+                                               if( !prepare && size == 0){
                                                        // replace with an 
empty dummy bat
                                                        clrFunction(p);
                                                        setModuleId(p, batRef);
@@ -102,7 +103,7 @@ getSQLoptimizer(mvc *m)
 }
 
 static void
-addOptimizers(Client c, MalBlkPtr mb, char *pipe)
+addOptimizers(Client c, MalBlkPtr mb, char *pipe, int prepare)
 {
        int i;
        InstrPtr q;
@@ -113,7 +114,7 @@ addOptimizers(Client c, MalBlkPtr mb, ch
        be = (backend *) c->sqlcontext;
        assert(be && be->mvc);  /* SQL clients should always have their state 
set */
 
-       space = SQLgetSpace(be->mvc, mb);
+       space = SQLgetSpace(be->mvc, mb, prepare);
        if(space && (pipe == NULL || strcmp(pipe,"default_pipe")== 0)){
                if( space > (lng)(0.8 * MT_npages() * MT_pagesize())  && 
GDKnr_threads > 1){
                        pipe = "volcano_pipe";
@@ -144,7 +145,7 @@ SQLoptimizeFunction(Client c, MalBlkPtr 
        str msg;
        str pipe = getSQLoptimizer(m);
 
-       addOptimizers(c, mb, pipe);
+       addOptimizers(c, mb, pipe, TRUE);
        msg = optimizeMALBlock(c, mb);
        if (msg)
                return msg;
@@ -164,9 +165,11 @@ SQLoptimizeQuery(Client c, MalBlkPtr mb)
 {
        backend *be;
        str msg = 0;
+       str pipe;
 
        be = (backend *) c->sqlcontext;
        assert(be && be->mvc);  /* SQL clients should always have their state 
set */
+       pipe = getSQLoptimizer(be->mvc);
 
        trimMalBlk(c->curprg->def);
        c->blkmode = 0;
@@ -192,11 +195,24 @@ SQLoptimizeQuery(Client c, MalBlkPtr mb)
                }
                return NULL;
        }
-       return SQLoptimizeFunction(c,mb,be->mvc);
+
+       addOptimizers(c, mb, pipe, FALSE);
+       msg = optimizeMALBlock(c, mb);
+       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, "End Optimize Query\n");
+       printFunction(GDKout, mb, 0, LIST_MAL_ALL);
+#endif
+       return MAL_SUCCEED;
 }
 
 void
-addQueryToCache(Client c)
+SQLaddQueryToCache(Client c)
 {
        //str msg = NULL;
 
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
@@ -14,7 +14,7 @@
 
 sql5_export str SQLoptimizeQuery(Client c, MalBlkPtr mb);
 sql5_export str SQLoptimizeFunction(Client c, MalBlkPtr mb, mvc *m);
-sql5_export void addQueryToCache(Client c);
+sql5_export void SQLaddQueryToCache(Client c);
 sql5_export str SQLoptimizer(Client c);
 sql5_export void SQLsetAccessMode(Client c);
 sql5_export str getSQLoptimizer(mvc *m);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to