Changeset: df87d68eaac3 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=df87d68eaac3 Modified Files: monetdb5/optimizer/opt_mitosis.c monetdb5/optimizer/opt_mitosis.h sql/backends/monet5/UDF/Tests/udf-fuse.stable.out sql/backends/monet5/UDF/Tests/udf-reverse.stable.out sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_execute.h sql/backends/monet5/sql_scenario.c sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit sql/test/BugTracker-2012/Tests/querycache.Bug-3212.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out.32bit Branch: default Log Message:
Removal of old code - Mitosis does not report on overdue plans, because we move towards JIT optimization - Query recompilation is removed, for the same reason - Some minor code/comment cleanup diffs (truncated from 594 to 300 lines): diff --git a/monetdb5/optimizer/opt_mitosis.c b/monetdb5/optimizer/opt_mitosis.c --- a/monetdb5/optimizer/opt_mitosis.c +++ b/monetdb5/optimizer/opt_mitosis.c @@ -29,20 +29,6 @@ eligible(MalBlkPtr mb) return 1; } -/* The plans are marked with the concurrent user load. - * * If this has changed, we may want to recompile the query - * */ -int -OPTmitosisPlanOverdue(Client cntxt, str fname) -{ - Symbol s; - - s = findSymbol(cntxt->nspace, userRef, fname); - if(s ) - return s->def->activeClients != MCactiveClients(); - return 0; -} - int OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { diff --git a/monetdb5/optimizer/opt_mitosis.h b/monetdb5/optimizer/opt_mitosis.h --- a/monetdb5/optimizer/opt_mitosis.h +++ b/monetdb5/optimizer/opt_mitosis.h @@ -15,7 +15,6 @@ #define MINPARTCNT 100000 /* minimal record count per partition */ opt_export int OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -opt_export int OPTmitosisPlanOverdue(Client cntxt, str fname); #define OPTDEBUGmitosis if ( optDebug & ((lng)1 <<DEBUG_OPT_MITOSIS) ) diff --git a/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out b/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out --- a/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out +++ b/sql/backends/monet5/UDF/Tests/udf-fuse.stable.out @@ -44,11 +44,11 @@ end user.s2_1; % mal # name % clob # type % 88 # length -function user.s4_1(A0:sht,A1:sht):void; +function user.s3_1(A0:sht,A1:sht):void; X_11:void := querylog.define("explain select fuse(1000,2000);","sequential_pipe",5); X_3:int := udf.fuse(A0,A1); sql.resultSet(".L","fuse_single_value","int",32,0,7,X_3); -end user.s4_1; +end user.s3_1; #select fuse(1000,2000); % .L # table_name % fuse_single_value # name @@ -60,11 +60,11 @@ end user.s4_1; % mal # name % clob # type % 94 # length -function user.s6_1(A0:int,A1:int):void; +function user.s4_1(A0:int,A1:int):void; X_11:void := querylog.define("explain select fuse(1000000,2000000);","sequential_pipe",5); X_3:lng := udf.fuse(A0,A1); sql.resultSet(".L","fuse_single_value","bigint",64,0,7,X_3); -end user.s6_1; +end user.s4_1; #select fuse(1000000,2000000); % .L # table_name % fuse_single_value # name @@ -94,7 +94,7 @@ end user.s6_1; % mal # name % clob # type % 97 # length -function user.s14_1():void; +function user.s8_1():void; X_41:void := querylog.define("explain select fuse(a,b) from udf_fuse;","sequential_pipe",27); X_24 := bat.new(nil:oid,nil:str); X_32 := bat.append(X_24,"sys.L"); @@ -120,13 +120,13 @@ function user.s14_1():void; X_21 := algebra.projection(C_2,X_20); X_22:bat[:sht] := batudf.fuse(X_14,X_21); sql.resultSet(X_32,X_34,X_36,X_38,X_40,X_22); -end user.s14_1; +end user.s8_1; #explain select fuse(c,d) from udf_fuse; % .explain # table_name % mal # name % clob # type % 97 # length -function user.s15_1():void; +function user.s9_1():void; X_41:void := querylog.define("explain select fuse(c,d) from udf_fuse;","sequential_pipe",27); X_24 := bat.new(nil:oid,nil:str); X_32 := bat.append(X_24,"sys.L"); @@ -152,13 +152,13 @@ function user.s15_1():void; X_21 := algebra.projection(C_2,X_20); X_22:bat[:int] := batudf.fuse(X_14,X_21); sql.resultSet(X_32,X_34,X_36,X_38,X_40,X_22); -end user.s15_1; +end user.s9_1; #explain select fuse(e,f) from udf_fuse; % .explain # table_name % mal # name % clob # type % 97 # length -function user.s16_1():void; +function user.s10_1():void; X_41:void := querylog.define("explain select fuse(e,f) from udf_fuse;","sequential_pipe",27); X_24 := bat.new(nil:oid,nil:str); X_32 := bat.append(X_24,"sys.L"); @@ -184,7 +184,7 @@ function user.s16_1():void; X_21 := algebra.projection(C_2,X_20); X_22:bat[:lng] := batudf.fuse(X_14,X_21); sql.resultSet(X_32,X_34,X_36,X_38,X_40,X_22); -end user.s16_1; +end user.s10_1; #select fuse(a,b) from udf_fuse; % sys.L # table_name % fuse_a # name diff --git a/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out b/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out --- a/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out +++ b/sql/backends/monet5/UDF/Tests/udf-reverse.stable.out @@ -83,7 +83,7 @@ end user.s2_1; % mal # name % clob # type % 101 # length -function user.s10_1():void; +function user.s6_1():void; X_33:void := querylog.define("explain select reverse(x) from udf_reverse;","sequential_pipe",22); X_17 := bat.new(nil:oid,nil:str); X_25 := bat.append(X_17,"sys.L"); @@ -104,7 +104,7 @@ function user.s10_1():void; X_14 := algebra.projection(C_2,X_13); X_15:bat[:str] := batudf.reverse(X_14); sql.resultSet(X_25,X_27,X_29,X_31,X_32,X_15); -end user.s10_1; +end user.s6_1; #select reverse(x) from udf_reverse; % sys.L # table_name % reverse_x # name 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 @@ -448,29 +448,17 @@ cleanup_engine: if (m->type == Q_SCHEMA) qc_clean(m->qc); if (msg) { - enum malexception type = getExceptionType(msg); - if (type == OPTIMIZER) { - MSresetInstructions(c->curprg->def, 1); - freeVariables(c, c->curprg->def, NULL, be->vtop); - be->language = oldlang; - assert(c->glb == 0 || c->glb == oldglb); /* detect leak */ - c->glb = oldglb; - if ( msg) - GDKfree(msg); - return SQLrecompile(c, be); // retry compilation - } else { - /* don't print exception decoration, just the message */ - char *n = NULL; - char *o = msg; - while ((n = strchr(o, '\n')) != NULL) { - *n = '\0'; - mnstr_printf(c->fdout, "!%s\n", getExceptionMessage(o)); - *n++ = '\n'; - o = n; - } - if (*o != 0) - mnstr_printf(c->fdout, "!%s\n", getExceptionMessage(o)); + /* don't print exception decoration, just the message */ + char *n = NULL; + char *o = msg; + while ((n = strchr(o, '\n')) != NULL) { + *n = '\0'; + mnstr_printf(c->fdout, "!%s\n", getExceptionMessage(o)); + *n++ = '\n'; + o = n; } + if (*o != 0) + mnstr_printf(c->fdout, "!%s\n", getExceptionMessage(o)); showErrors(c); m->session->status = -10; } diff --git a/sql/backends/monet5/sql_execute.h b/sql/backends/monet5/sql_execute.h --- a/sql/backends/monet5/sql_execute.h +++ b/sql/backends/monet5/sql_execute.h @@ -14,7 +14,6 @@ sql5_export str SQLstatementREST(Client sql5_export str SQLstatementIntern(Client c, str *expr, str nme, bit execute, bit output, res_table **result); sql5_export str SQLexecutePrepared(Client c, backend *be, cq *q); sql5_export str SQLengineIntern(Client c, backend *be); -sql5_export str SQLrecompile(Client c, backend *be); sql5_export str RAstatement(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); sql5_export str RAstatement2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); 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 @@ -896,14 +896,16 @@ SQLsetDebugger(Client c, mvc *m, int ono * of the query. */ static void -SQLsetTrace(backend *be, Client cntxt, bit onoff) +SQLsetTrace(Client cntxt, mvc *m, bit onoff) { InstrPtr q, resultset; InstrPtr tbls, cols, types, clen, scale; MalBlkPtr mb = cntxt->curprg->def; int k; - (void) be; + if ( m == 0 || !(m->emod & mod_trace)) + return; + if (onoff) { q= newStmt(mb, "profiler", "starttrace"); q= pushStr(mb,q,"sql_traces"); @@ -1034,7 +1036,8 @@ cachable(mvc *m, stmt *s) /* * The core part of the SQL interface, parse the query and - * prepare the intermediate code. + * store away the template (non)optimized code in the query cache + * and the MAL module */ str @@ -1203,25 +1206,15 @@ SQLparser(Client c) m->emode = m_inplace; scanner_query_processed(&(m->scanner)); } else if (caching(m) && cachable(m, NULL) && m->emode != m_prepare && (be->q = qc_match(m->qc, m->sym, m->args, m->argc, m->scanner.key ^ m->session->schema->base.id)) != NULL) { - // look for outdated plans - if ( OPTmitosisPlanOverdue(c, be->q->name) ){ - msg = SQLCacheRemove(c, be->q->name); - qc_delete(be->mvc->qc, be->q); - be->q = NULL; - goto recompilequery; - } - - if (m->emod & mod_debug) - SQLsetDebugger(c, m, TRUE); - if (m->emod & mod_trace) - SQLsetTrace(be, c, TRUE); + SQLsetDebugger(c, m, TRUE); + SQLsetTrace(c, m, TRUE); if (!(m->emod & (mod_explain | mod_debug | mod_trace ))) m->emode = m_inplace; scanner_query_processed(&(m->scanner)); } else { sql_rel *r; stmt *s; -recompilequery: + r = sql_symbol2relation(m, m->sym); s = sql_relation2stmt(m, r); @@ -1233,11 +1226,10 @@ recompilequery: } assert(s); - /* generate the MAL code */ - if (m->emod & mod_trace) - SQLsetTrace(be, c, TRUE); - if (m->emod & mod_debug) - SQLsetDebugger(c, m, TRUE); + /* generate the MAL prelude codea in the query wrapper */ + SQLsetTrace(c, m, TRUE); + SQLsetDebugger(c, m, TRUE); + if (!caching(m) || !cachable(m, s)) { scanner_query_processed(&(m->scanner)); if (backend_callinline(be, c, s, 0) == 0) { @@ -1246,7 +1238,6 @@ recompilequery: err = 1; } } else { - /* generate a factory instantiation */ char *q = query_cleaned(QUERY(m->scanner)); be->q = qc_insert(m->qc, m->sa, /* the allocator */ r, /* keep relational query */ @@ -1275,21 +1266,22 @@ recompilequery: if (err) m->session->status = -10; if (err == 0) { + /* no parsing error encountered */ if (be->q) { if (m->emode == m_prepare) + /* For prepared queries, return a table with result set structure*/ 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_trace) - SQLsetTrace(be, c, FALSE); - if (m->emod & mod_debug) - SQLsetDebugger(c, m, FALSE); + SQLsetTrace(c, m, FALSE); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list