Changeset: c7bbfdf12a9a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c7bbfdf12a9a Modified Files: clients/Tests/exports.stable.out monetdb5/mal/mal_debugger.c monetdb5/mal/mal_debugger.h monetdb5/modules/mal/mdb.c 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_gencode.c sql/backends/monet5/sql_gencode.h sql/backends/monet5/sql_optimizer.c sql/backends/monet5/sql_scenario.c sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out 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/caching.SF-1651599.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/jdbc_no_debug.SF-1739356.stable.out.32bit Branch: sfcgal Log Message:
Merge with default diffs (truncated from 1308 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -1562,7 +1562,6 @@ int OPTmacroImplementation(Client cntxt, int OPTmatpackImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); int OPTmergetableImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); int OPTmitosisImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); -int OPTmitosisPlanOverdue(Client cntxt, str fname); int OPTmultiplexImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str OPTmultiplexSimple(Client cntxt, MalBlkPtr mb); str OPTorcam(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); @@ -2444,7 +2443,7 @@ str rsColumnRef; int rule_fromstr(const char *buf, int *len, rule **d); int rule_tostr(str *buf, int *len, const rule *r); str runMAL(Client c, MalBlkPtr mb, MalBlkPtr mbcaller, MalStkPtr env); -str runMALDebugger(Client cntxt, Symbol s); +str runMALDebugger(Client cntxt, MalBlkPtr mb); str runMALdataflow(Client cntxt, MalBlkPtr mb, int startpc, int stoppc, MalStkPtr stk); str runMALsequence(Client cntxt, MalBlkPtr mb, int startpc, int stoppc, MalStkPtr stk, MalStkPtr env, InstrPtr pcicaller); str runScenario(Client c); diff --git a/monetdb5/mal/mal_debugger.c b/monetdb5/mal/mal_debugger.c --- a/monetdb5/mal/mal_debugger.c +++ b/monetdb5/mal/mal_debugger.c @@ -1144,10 +1144,26 @@ mdbTrapClient(Client cntxt, MalBlkPtr mb * creation of a minimal execution environment first. */ str -runMALDebugger(Client cntxt, Symbol s) +runMALDebugger(Client cntxt, MalBlkPtr mb) { + str oldprompt= cntxt->prompt; + int oldtrace = cntxt->itrace; + int oldopt = cntxt->debugOptimizer; + int oldhist = cntxt->curprg->def->keephistory; + str msg; + cntxt->itrace = 'n'; - return runMAL(cntxt, s->def, 0, 0); + cntxt->debugOptimizer = TRUE; + cntxt->curprg->def->keephistory = TRUE; + + msg = runMAL(cntxt, mb, 0, 0); + + cntxt->curprg->def->keephistory = oldhist; + cntxt->prompt =oldprompt; + cntxt->itrace = oldtrace; + cntxt->debugOptimizer = oldopt; + mnstr_printf(cntxt->fdout, "mdb>#EOD\n"); + return msg; } /* Utilities diff --git a/monetdb5/mal/mal_debugger.h b/monetdb5/mal/mal_debugger.h --- a/monetdb5/mal/mal_debugger.h +++ b/monetdb5/mal/mal_debugger.h @@ -28,7 +28,7 @@ mal_export int mdbSession(void); mal_export void mdbDump(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export void printStack(stream *f, MalBlkPtr mb, MalStkPtr s); -mal_export str runMALDebugger(Client cntxt, Symbol s); +mal_export str runMALDebugger(Client cntxt, MalBlkPtr mb); mal_export str debugOptimizers(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); mal_export void debugLifespan(Client cntxt, MalBlkPtr mb, Lifespan span); diff --git a/monetdb5/modules/mal/mdb.c b/monetdb5/modules/mal/mdb.c --- a/monetdb5/modules/mal/mdb.c +++ b/monetdb5/modules/mal/mdb.c @@ -249,7 +249,7 @@ MDBinspect(Client cntxt, MalBlkPtr mb, M if (s == NULL) throw(MAL, "mdb.inspect", RUNTIME_SIGNATURE_MISSING); - return runMALDebugger(cntxt, s); + return runMALDebugger(cntxt, s->def); } /* 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 @@ -62,6 +62,154 @@ * The tricky part for this statement is to ensure that the SQL statement * is executed within the client context specified. This leads to context juggling. */ + +/* + * The trace operation collects the events in the BATs + * and creates a secondary result set upon termination + * of the query. + */ +static void +SQLsetTrace(Client cntxt) +{ + InstrPtr q, resultset; + InstrPtr tbls, cols, types, clen, scale; + MalBlkPtr mb = cntxt->curprg->def; + int k; + + startTrace("sql_traces"); + initTrace(); + + for(k= mb->stop-1; k>0; k--) + if( getInstrPtr(mb,k)->token ==ENDsymbol) + break; + mb->stop=k; + + q= newStmt(mb, "profiler", "stoptrace"); + q= pushStr(mb,q,"sql_traces"); + /* cook a new resultSet instruction */ + resultset = newInstruction(mb,ASSIGNsymbol); + setModuleId(resultset, sqlRef); + setFunctionId(resultset, resultSetRef); + getArg(resultset,0)= newTmpVariable(mb,TYPE_int); + + /* build table defs */ + tbls = newStmt(mb,batRef, newRef); + setVarType(mb, getArg(tbls,0), newBatType(TYPE_oid, TYPE_str)); + tbls = pushType(mb, tbls, TYPE_oid); + tbls = pushType(mb, tbls, TYPE_str); + resultset= pushArgument(mb,resultset, getArg(tbls,0)); + + q= newStmt(mb,batRef,appendRef); + q= pushArgument(mb,q,getArg(tbls,0)); + q= pushStr(mb,q,".trace"); + k= getArg(q,0); + + q= newStmt(mb,batRef,appendRef); + q= pushArgument(mb,q,k); + q= pushStr(mb,q,".trace"); + + /* build colum defs */ + cols = newStmt(mb,batRef, newRef); + setVarType(mb, getArg(cols,0), newBatType(TYPE_oid, TYPE_str)); + cols = pushType(mb, cols, TYPE_oid); + cols = pushType(mb, cols, TYPE_str); + resultset= pushArgument(mb,resultset, getArg(cols,0)); + + q= newStmt(mb,batRef,appendRef); + q= pushArgument(mb,q,getArg(cols,0)); + q= pushStr(mb,q,"usec"); + k= getArg(q,0); + + q= newStmt(mb,batRef,appendRef); + q= pushArgument(mb,q, getArg(cols,0)); + q= pushStr(mb,q,"statement"); + + /* build type defs */ + types = newStmt(mb,batRef, newRef); + setVarType(mb, getArg(types,0), newBatType(TYPE_oid, TYPE_str)); + types = pushType(mb, types, TYPE_oid); + types = pushType(mb, types, TYPE_str); + resultset= pushArgument(mb,resultset, getArg(types,0)); + + q= newStmt(mb,batRef,appendRef); + q= pushArgument(mb,q, getArg(types,0)); + q= pushStr(mb,q,"bigint"); + k= getArg(q,0); + + q= newStmt(mb,batRef,appendRef); + q= pushArgument(mb,q, k); + q= pushStr(mb,q,"clob"); + + /* build scale defs */ + clen = newStmt(mb,batRef, newRef); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list