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