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