Changeset: 4a59b28b5528 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4a59b28b5528
Modified Files:
        sql/backends/monet5/Tests/optimizers.stable.out
        sql/backends/monet5/sql.mx
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_scenario.c
        sql/benchmarks/ATIS/Tests/select_group.stable.out
        sql/benchmarks/arno/Tests/queries_depth2.stable.out
        sql/benchmarks/moa/run.all
        sql/benchmarks/ssbm/Tests/check1.stable.out
        sql/benchmarks/ssbm/Tests/load.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/check1.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/check2.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/load.stable.out
        sql/benchmarks/tpch/Tests/check1.stable.out
        sql/benchmarks/tpch/Tests/load.stable.out
        sql/benchmarks/tpch/run.all
        sql/common/sql_mem.c
        sql/include/sql_mem.h
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/server/sql_qc.c
        sql/server/sql_semantic.c
        sql/test/ADT2006/Tests/benesamo.stable.out
        sql/test/ADT2006/Tests/bram.stable.out
        sql/test/ADT2006/Tests/woud.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/cross_product.SF-1122802.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/max_min_sum_null.SF-1123132.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/multiple_select_on_view.SF-935639.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/singleton_view.SF-933573.stable.out
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/slow_counting_1.SF-923709.stable.out
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/aggregate_functions_with_limit.SF-1367127.stable.out
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/delete_cascade.SF-1296395.stable.out
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/prepare_doesnot_like_LIKE.SF-1234205.sql
        sql/test/BugTracker-2008/Tests/auto_coersion_bug.SF-2075157.stable.out
        sql/test/BugTracker-2008/Tests/copy-count.SF-2485215.stable.out
        sql/test/BugTracker-2008/Tests/groupby_with_NULL.SF-2155606.stable.out
        sql/test/BugTracker-2008/Tests/is_distinct_broken.SF-2430201.stable.out
        
sql/test/BugTracker-2008/Tests/select_between_wrong_result.SF-2080189.stable.out
        
sql/test/BugTracker-2008/Tests/select_not_wrong_result.SF-2080151.stable.out
        
sql/test/BugTracker-2008/Tests/varchar_char_semantics.SF-2075085.stable.out
        sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out
        
sql/test/BugTracker-2009/Tests/TypeException_having_count_distinct.SF-2494227.stable.out
        sql/test/BugTracker-2009/Tests/avg-bug.SF-2132666.stable.out
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
        sql/test/BugTracker-2009/Tests/count_distinct_bug.SF-2826015.stable.out
        sql/test/BugTracker-2009/Tests/decimal_needs_truncation.SF-2605686.sql
        sql/test/BugTracker-2009/Tests/explain_gives_crash.SF-2741829.stable.out
        sql/test/BugTracker-2009/Tests/having_or_bug.stable.out
        
sql/test/BugTracker-2009/Tests/parallel_bulk-load.SF-2771052.test.stable.out
        sql/test/BugTracker-2009/Tests/prepare_commit_execute.SF-2606020.sql
        sql/test/BugTracker-2009/Tests/prepare_decimal_bug.SF-2831994.sql
        sql/test/BugTracker-2009/Tests/primekeyconstraint.SF-2783425.stable.out
        sql/test/BugTracker-2009/Tests/random.SF-2737889.stable.out
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-1.stable.out
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-2.stable.out
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_KO-3.stable.out
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_OK-0.stable.out
        
sql/test/BugTracker-2009/Tests/updating_non-loaded_columns.SF-2864313_OK-4.stable.out
        
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
        sql/test/BugTracker-2010/Tests/between-timestamp.Bug-2718.stable.out
        
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
        sql/test/BugTracker-2010/Tests/limit_in_prepare.Bug-2552.sql
        sql/test/BugTracker-2010/Tests/mat.slice_limit1.Bug-2645.stable.out
        sql/test/BugTracker-2010/Tests/rank-over-crash.SF-2926454.stable.out
        sql/test/BugTracker-2011/Tests/aggregate-in-subquery.Bug-2739.stable.out
        sql/test/BugTracker-2011/Tests/count-count-distinct.Bug-2808.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out
        sql/test/BugTracker-2011/Tests/delete-large-table.Bug-2882.stable.out
        sql/test/BugTracker-2011/Tests/div_by_zero.Bug-2887.stable.out
        sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
        sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
        sql/test/BugTracker/Tests/auto_increment.SF-1834820.stable.out
        sql/test/BugTracker/Tests/bind_with_cast.SF-1720934.sql
        sql/test/BugTracker/Tests/bind_with_cast.SF-1720934.stable.err
        sql/test/BugTracker/Tests/caching.SF-1651599.stable.out
        sql/test/BugTracker/Tests/case_with_aggr.SF-1876779.stable.out
        sql/test/BugTracker/Tests/count_crash.SF-1918780.stable.out
        sql/test/BugTracker/Tests/crash_on_delete.SF-1639108.stable.out
        sql/test/BugTracker/Tests/decimal_prepare.SF-1655818.sql
        sql/test/BugTracker/Tests/full_join_crash.SF-1841754.stable.out
        sql/test/BugTracker/Tests/insert_not_exists.SF-1380287.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        sql/test/BugTracker/Tests/large_prepare.SF-1363729.sql
        sql/test/BugTracker/Tests/large_prepare_2.SF-1363729.sql
        sql/test/BugTracker/Tests/large_prepare_2.SF-1363729.stable.out
        sql/test/BugTracker/Tests/prepare_decimal_float.SF-1675795.sql
        sql/test/BugTracker/Tests/proc_insert_into.SF-1958572.stable.out
        
sql/test/BugTracker/Tests/rand_not_executed_for_every_row.SF-1723791.stable.out
        sql/test/BugTracker/Tests/with_only_once.SF-1720293.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out
        sql/test/Skyserver/Tests/Skyserver.stable.out
        sql/test/Skyserver/bugs/Tests/load_dbobjects.stable.out
        sql/test/Skyserver/bugs/Tests/load_objmask.stable.out
        sql/test/Tests/coalesce.stable.out
        sql/test/Tests/count.stable.out
        sql/test/Tests/decimal2.stable.out
        sql/test/Tests/marcin1.stable.out
        sql/test/Tests/order_by_complex_exp.stable.out
        sql/test/Tests/setoptimizer.stable.out
        sql/test/Tests/trace.stable.out
        sql/test/Tests/zones.stable.out
        sql/test/VOC/Tests/VOC.stable.out
        sql/test/bugs/Tests/aggr_single_value.stable.out
        sql/test/bugs/Tests/dbl_sht_cast_bug.stable.out
        sql/test/bugs/Tests/distinct_count.stable.out
        sql/test/bugs/Tests/div_zero_bug.stable.out
        sql/test/bugs/Tests/float2dec.stable.out
        sql/test/bugs/Tests/in_or_bug.stable.out
        sql/test/bugs/Tests/innerjoin_between-bug-sf-960672.stable.out
        sql/test/bugs/Tests/insert_delete-bug-sf-904025.stable.out
        sql/test/bugs/Tests/rangejoin_optimize_bug.stable.out
        
sql/test/bugs/Tests/select_constant_from_where_1=1-bug-sf-1019529.stable.out
        sql/test/bugs/Tests/select_from_values.stable.out
        sql/test/bugs/Tests/timestamp_comparison-bug-sf-1158581.stable.out
        sql/test/bugs/Tests/unicode_varchar-bug-sf-1041324_JdbcClient.stable.out
        sql/test/bugs/Tests/unicode_varchar-bug-sf-1041324_MapiClient.stable.out
        sql/test/bugs/Tests/zero_or_one_bug.stable.out
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/drop3.stable.out
        sql/test/leaks/Tests/select1.stable.out
        sql/test/leaks/Tests/select2.stable.out
        sql/test/leaks/Tests/temp1.stable.out
        sql/test/leaks/Tests/temp2.stable.out
        sql/test/leaks/Tests/temp3.stable.out
        sql/test/null/Tests/coalesce3.stable.out
Branch: default
Log Message:

cleanup of query modifiers (explain,dot,trace)
cleanup of cache behaviour
        1) schema and transaction statements are no longer cached
        2) prefixed (explain/dot/trace) are cached without prefix.
        3) statement (trees) using too much memory aren't cached

On schema queries cleanup cache
which now allows select * queries to be cached


diffs (truncated from 4068 to 300 lines):

diff --git a/sql/backends/monet5/Tests/optimizers.stable.out 
b/sql/backends/monet5/Tests/optimizers.stable.out
--- a/sql/backends/monet5/Tests/optimizers.stable.out
+++ b/sql/backends/monet5/Tests/optimizers.stable.out
@@ -48,20 +48,20 @@ Ready.
 % .,   . # table_name
 % single_value,        single_value # name
 % char,        varchar # type
-% 19,  48 # length
-[ "optimizer off test:",       
"inline,remap,deadcode,multiplex,garbageCollector"      ]
+% 19,  3 # length
+[ "optimizer off test:",       "off"   ]
 #select 'optimizer on test:',optimizer;
 % .,   . # table_name
 % single_value,        single_value # name
 % char,        varchar # type
-% 19,  2 # length
+% 18,  2 # length
 [ "optimizer on test:",        "on"    ]
 #select 'optimizer <empty> test:',optimizer;
 % .,   . # table_name
 % single_value,        single_value # name
 % char,        varchar # type
-% 23,  188 # length
-[ "optimizer <empty> test:",   
"inline,remap,evaluate,costModel,coercions,emptySet,aliases,mitosis,mergetable,deadcode,commonTerms,joinPath,reorder,deadcode,reduce,dataflow,history,multiplex,accumulators,garbageCollector"
  ]
+% 23,  12 # length
+[ "optimizer <empty> test:",   "default_pipe"  ]
 #select 'done';
 % . # table_name
 % single_value # name
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -1695,6 +1695,7 @@ sqlcleanup(mvc *c, int err)
                c->session->status = -err;
        if (err < 0)
                c->session->status = err;
+       c->label = 0;
        scanner_query_processed(&(c->scanner));
        return err;
 }
@@ -2472,8 +2473,11 @@ setVariable(Client cntxt, MalBlkPtr mb, 
                throw(SQL, "sql.setVariable", "failed");
        if ( strcmp("optimizer",  varname)== 0) {
                msg = setOptimizers(*(str *) getArgReference(stk,pci,3));
-               if ( msg != NULL && strcmp(msg,"default_pipe") == 0 )
+               if ( msg != NULL && strcmp(msg, "default_pipe") == 0 ) {
+                       if (stack_find_var(m, varname)) 
+                               stack_set_string(m, varname, "default_pipe");
                        return MAL_SUCCEED;
+               }
                msg = SQLvalidatePipeline();
                if ( msg ){
                        setOptimizers("default_pipe");
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
@@ -606,9 +606,7 @@ void
 addQueryToCache(Client c)
 {
        backend *be = ((backend *) c->state[MAL_SCENARIO_PARSER]);
-       str optimizer;
        MalBlkPtr mb;
-       ValRecord src;
        mvc *m;
 
        insertSymbol(c->nspace, c->curprg);
@@ -638,8 +636,6 @@ addQueryToCache(Client c)
                        runMALDebugger(c,c->curprg);
                return;
        }
-       optimizer = stack_get_string(be->mvc, "optimizer");
-       stack_set_var(be->mvc, "optimizer", VALset(&src, TYPE_str, 
setOptimizers(optimizer)));
        addOptimizers(c,mb, be->mvc->point_query);
        SQLgetStatistics(c,(mvc *) c->state[MAL_SCENARIO_OPTIMIZE],mb);
        if ( m->emod & mod_debug )
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
@@ -1187,6 +1187,21 @@ SQLshowDot(Client c)
        q = pushStr(c->curprg->def, q, "stdout-mapi");
 }
 
+
+#define MAX_QUERY      (16*1024*1024)
+
+static int 
+cachable( mvc *m, stmt *s ) 
+{
+       if (m->emode == m_plan ||
+          !m->caching ||
+            m->type == Q_TRANS || m->type == Q_SCHEMA || 
+           (s && s->type == st_none) || 
+           sa_size(m->sa) > MAX_QUERY)
+               return 0;
+       return 1;
+}
+
 /*
  * The core part of the SQL interface, parse the query and
  * prepare the intermediate code.
@@ -1373,13 +1388,15 @@ SQLparser(Client c)
                }
                m->emode = m_inplace;
                scanner_query_processed(&(m->scanner));
-       } else if ((be->q = qc_match(m->qc, m->sym, m->args, m->argc, 
m->scanner.key ^ m->session->schema->base.id))) {
+       } else if (cachable(m, NULL) && 
+                  (be->q = qc_match(m->qc, m->sym, m->args, m->argc, 
m->scanner.key ^ m->session->schema->base.id)) != NULL) {
+               if (m->emod & mod_explain)
+                       SQLshowPlan(c);
                if (m->emod & mod_debug)
                        SQLsetDebugger(c, m, TRUE);
                if (m->emod & mod_trace)
                        SQLsetTrace(be, c, TRUE);
-               if (m->emode != m_explain && m->emode != m_dot &&
-                               !(m->emod & (mod_debug | mod_trace)))
+               if (!(m->emod & (mod_explain | mod_debug | mod_trace | 
mod_dot)))
                        m->emode = m_inplace;
                scanner_query_processed(&(m->scanner));
        } else {
@@ -1394,13 +1411,13 @@ SQLparser(Client c)
                }
                assert(s);
                /* generate and call the MAL code */
-               if (m->emode == m_explain)
+               if (m->emod & mod_explain)
                        SQLshowPlan(c);
                if (m->emod & mod_trace)
                        SQLsetTrace(be, c, TRUE);
                if (m->emod & mod_debug)
                        SQLsetDebugger(c, m, TRUE);
-               if ((m->emode != m_inplace && m->emode != m_prepare && 
!m->caching && m->emode != m_explain ) || s->type == st_none || m->type == 
Q_TRANS) {
+               if (!cachable(m, s)) {
                        InstrPtr p;
                        MalBlkPtr curBlk;
 
@@ -1408,17 +1425,13 @@ SQLparser(Client c)
                        backend_callinline(be, c, s);
 
                        curBlk = c->curprg->def;
+
                        p = newFcnCall(curBlk, "optimizer", "remap");
                        typeChecker(c->nspace, curBlk, p, FALSE);
                        p = newFcnCall(curBlk, "optimizer", "multiplex");
                        typeChecker(c->nspace, curBlk, p, FALSE);
                        optimizeMALBlock(c, curBlk);
                        c->curprg->def = curBlk;
-
-                       if (m->emode == m_inplace)
-                               m->emode = m_normal;
-                       if (m->emode == m_dot)
-                               SQLshowDot(c);
                } else {
                        /* generate a factory instantiation */
                        be->q = qc_insert(m->qc,
@@ -1432,8 +1445,7 @@ SQLparser(Client c)
                                        m->type,  /* the type of the statement 
*/
                                        sql_escape_str(QUERY(m->scanner)));
                        scanner_query_processed(&(m->scanner));
-                       be->q->code =
-                               (backend_code) backend_dumpproc(be, c, be->q, 
s);
+                       be->q->code = (backend_code) backend_dumpproc(be, c, 
be->q, s);
                        be->q->stk = 0;
 
                        /* passed over to query cache, used during dumpproc */
@@ -1451,14 +1463,18 @@ SQLparser(Client c)
                        err = mvc_export_prepare(m, c->fdout, be->q, "");
                else if (m->emode == m_inplace) {
                        /* everything ready for a fast call */
-               } else /* call procedure generation (only in cache mode) */
+               } else { /* call procedure generation (only in cache mode) */
                        backend_call(be, c, be->q);
+               }
        }
 
        /*
         * @-
         * In the final phase we add any debugging control
         */
+
+       if (m->emod & mod_dot)
+               SQLshowDot(c);
        if (m->emod & mod_trace)
                SQLsetTrace(be, c, FALSE);
        if (m->emod & mod_debug)
@@ -1471,7 +1487,8 @@ SQLparser(Client c)
         * query block.
         */
        if (err == 0) {
-               pushEndInstruction(c->curprg->def);
+               if (be->q)
+                       pushEndInstruction(c->curprg->def);
 
                chkTypes(c->nspace, c->curprg->def, TRUE); /* resolve types */
                /* we know more in this case than
@@ -1496,10 +1513,18 @@ SQLparser(Client c)
  * Inspect the variables for post code-generation actions.
  */
 finalize:
-       if (m->emode == m_explain && be->q && be->q->code)
-               printFunction(GDKout, ((Symbol) (be->q->code))->def, 0, 
LIST_MAL_STMT | LIST_MAL_UDF | LIST_MAPI);
-       if (m->emode == m_dot && be->q && be->q->code)
-               showFlowGraph(((Symbol) (be->q->code))->def, 0, "stdout-mapi");
+       if (m->emod & mod_explain && !msg) {
+               if (be->q && be->q->code)
+                       printFunction(GDKout, ((Symbol) (be->q->code))->def, 0, 
LIST_MAL_STMT | LIST_MAL_UDF | LIST_MAPI);
+               else if (c->curprg && c->curprg->def)
+                       printFunction(GDKout, c->curprg->def, 0, LIST_MAL_STMT 
| LIST_MAL_UDF | LIST_MAPI);
+       }
+       if (m->emod & mod_dot && !msg) {
+               if (be->q && be->q->code)
+                       showFlowGraph(((Symbol) (be->q->code))->def, 0, 
"stdout-mapi");
+               else if (c->curprg && c->curprg->def)
+                       showFlowGraph(c->curprg->def, 0, "stdout-mapi");
+       }
        /*
         * Gather the statistics for post analysis. It should preferably
         * be stored in an SQL table
@@ -1618,7 +1643,7 @@ SQLengineIntern(Client c, backend *be)
                return MAL_SUCCEED;
        }
 
-       if (m->emode == m_explain || m->emode == m_dot) {
+       if (m->emod & (mod_explain | mod_dot)) {
                sqlcleanup(be->mvc, 0);
                goto cleanup_engine;
        }
@@ -1640,17 +1665,18 @@ SQLengineIntern(Client c, backend *be)
        }
        if( m->emode == m_prepare){
                goto cleanup_engine;
-       } else if (m->emode == m_explain || m->emode == m_dot) {
+       } else if (m->emod & (mod_explain | mod_dot)) {
                /*
                 * If you want to see the detailed code, we have to pick it up 
from
                 * the cache as well. This calls for finding the call to the
                 * cached routine, which may be hidden. For now we take a 
shortcut.
                 */
+               assert(0);
                if (be->q) {
                        InstrPtr p;
                        p = getInstrPtr(c->curprg->def,1);
                        if (p->blk) {
-                               if (m->emode == m_explain) {
+                               if (m->emod & mod_explain) {
                                        printFunction(c->fdout, p->blk, 0, 
c->listing | LIST_MAPI);
                                } else {
                                        showFlowGraph(p->blk, 0, "stdout-mapi");
@@ -1673,6 +1699,8 @@ SQLengineIntern(Client c, backend *be)
        }
 
 cleanup_engine:
+       if (m->type == Q_SCHEMA) 
+               qc_clean(m->qc);
        if (msg) {
                enum malexception type = getExceptionType(msg);
                if (type == OPTIMIZER) {
diff --git a/sql/benchmarks/ATIS/Tests/select_group.stable.out 
b/sql/benchmarks/ATIS/Tests/select_group.stable.out
--- a/sql/benchmarks/ATIS/Tests/select_group.stable.out
+++ b/sql/benchmarks/ATIS/Tests/select_group.stable.out
@@ -36,7 +36,7 @@ Ready.
 [ "SATURDAY",  6,      64      ]
 [ "SUNDAY",    7,      64      ]
 % sys.day_name,        sys.day_name # table_name
-% day_name,    L3 # name
+% day_name,    L1 # name
 % char,        wrd # type
 % 9,   2 # length
 [ "MONDAY",    64      ]
@@ -56,7 +56,7 @@ Ready.
 [ "JULY",      "SUNDAY"        ]
 #select day_name.day_name,flight_day.day_code,count(*) from 
flight_day,day_name where day_name.day_code=flight_day.day_code group by 
flight_day.day_code,day_name.day_name order by day_code;
 % sys.day_name,        sys.flight_day, sys.flight_day # table_name
-% day_name,    day_code,       L7 # name
+% day_name,    day_code,       L1 # name
 % char,        decimal,        wrd # type
 % 9,   2,      2 # length
 [ "MONDAY",    1,      64      ]
@@ -67,57 +67,57 @@ Ready.
 [ "SATURDAY",  6,      64      ]
 [ "SUNDAY",    7,      64      ]
 % sys.aircraft # table_name
-% L10 # name
+% L1 # name
 % decimal # type
 % 2 # length
 [ 278  ]
 % sys. # table_name
-% L11 # name
+% L1 # name
 % double # type
 % 24 # length
 [ 2.059259259  ]
 % sys. # table_name
-% L14 # name
+% L1 # name
 % double # type
 % 24 # length
 [ 2.376068376  ]
 % sys.aircraft,        sys.aircraft,   sys.aircraft # table_name
-% L20, L21,    L22 # name
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to