Changeset: 218778b3b847 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=218778b3b847
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: data-vaults
Log Message:
Merge with default
diffs (truncated from 1241 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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list