Changeset: 892c03524a38 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=892c03524a38 Modified Files: monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out monetdb5/optimizer/Tests/dataflow3.stable.out monetdb5/optimizer/opt_garbageCollector.c monetdb5/optimizer/opt_querylog.c sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out sql/backends/monet5/sql_gencode.c sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out 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-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out sql/test/BugTracker-2014/Tests/querylog.Bug-3607.stable.out sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out sql/test/mapi/Tests/sql_int128.stable.out sql/test/mergetables/Tests/mergequery.stable.out sql/test/remote/Tests/partition_elim.stable.out Branch: default Log Message:
Administer query log record once. remove duplicate code in sql_gencode and inject the size directly. diffs (truncated from 1239 to 300 lines): diff --git a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out --- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out +++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out @@ -63,7 +63,7 @@ Ready. % clob # type % 146 # length function user.s8_1():void; - X_26:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","default_pipe",11:int); + X_0:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","default_pipe",21:int); X_3 := sql.mvc(); (X_13:bat[:int],X_14:bat[:int],X_15:bat[:int]) := sql.copy_from(nil:ptr,"|","\\n",nil:str,"null","/tmp/xyz",-1:lng,0:lng,0:int,0:int,nil:str); # querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","default_pipe") @@ -123,7 +123,7 @@ end user.s8_1; % clob # type % 146 # length function user.s24_1():void; - X_26:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","user_1",11:int); + X_0:void := querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","user_1",21:int); X_3 := sql.mvc(); (X_13:bat[:int],X_14:bat[:int],X_15:bat[:int]) := sql.copy_from(nil:ptr,"|","\\n",nil:str,"null","/tmp/xyz",-1:lng,0:lng,0:int,0:int,nil:str); # querylog.define("explain copy into ttt from \\'/tmp/xyz\\';","user_1") diff --git a/monetdb5/optimizer/Tests/dataflow3.stable.out b/monetdb5/optimizer/Tests/dataflow3.stable.out --- a/monetdb5/optimizer/Tests/dataflow3.stable.out +++ b/monetdb5/optimizer/Tests/dataflow3.stable.out @@ -26,13 +26,13 @@ Ready. #mdb.list("user","s1_0"); function user.s1_0():void; -barrier X_31 := language.dataflow(); +barrier X_30 := language.dataflow(); X17 := bat.new(:lng); X54 := bat.new(:lng); X55 := bat.new(:lng); X56 := bat.new(:lng); X57 := bat.new(:lng); -exit X_31; +exit X_30; X59 := remote.connect("mapi:monetdb://volund.ins.cwi.nl:50000/sn4","monetdb","monetdb","msql"); remote.register(X59,"user","s1_0map"); X66 := remote.put(X59,X54); diff --git a/monetdb5/optimizer/opt_garbageCollector.c b/monetdb5/optimizer/opt_garbageCollector.c --- a/monetdb5/optimizer/opt_garbageCollector.c +++ b/monetdb5/optimizer/opt_garbageCollector.c @@ -40,10 +40,9 @@ OPTgarbageCollectorImplementation(Client // move SQL query to front p = NULL; - for(i = limit; i> 2; i--){ + for(i = 0; i < limit; i++){ if(mb->stmt[i] && getModuleId(mb->stmt[i]) == querylogRef && getFunctionId(mb->stmt[i]) == defineRef ){ - p = mb->stmt[i]; - p = pushInt(mb,p,i+1); + p = getInstrPtr(mb,i); break; } } @@ -51,7 +50,6 @@ OPTgarbageCollectorImplementation(Client for( ; i > 1; i--) mb->stmt[i] = mb->stmt[i-1]; mb->stmt[1] = p; - mb->stmt[1]->token = ASSIGNsymbol; } setVariableScope(mb); diff --git a/monetdb5/optimizer/opt_querylog.c b/monetdb5/optimizer/opt_querylog.c --- a/monetdb5/optimizer/opt_querylog.c +++ b/monetdb5/optimizer/opt_querylog.c @@ -49,6 +49,7 @@ OPTquerylogImplementation(Client cntxt, pushInstruction(mb, old[0]); /* run the querylog.define operation */ defineQuery = copyInstruction(defineQuery); + defineQuery->argc--; // remoge MAL instruction count setFunctionId(defineQuery, appendRef); getArg(defineQuery,0) = newTmpVariable(mb,TYPE_any); defineQuery->token = ASSIGNsymbol; diff --git a/sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out b/sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out --- a/sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out +++ b/sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out @@ -27,9 +27,9 @@ Ready. % .explain # table_name % mal # name % clob # type -% 86 # length +% 85 # length function user.s4_1():void; - X_11:void := querylog.define("explain select fuse(1,2);","sequential_pipe",6:int); + X_0:void := querylog.define("explain select fuse(1,2);","sequential_pipe",8:int); X_3:sht := udf.fuse(1:bte,2:bte); # querylog.define("explain select fuse(1,2);","sequential_pipe") sql.resultSet(".L2","L2","smallint",16:int,0:int,7:int,X_3); @@ -69,9 +69,9 @@ end user.s4_1; % .explain # table_name % mal # name % clob # type -% 92 # length +% 91 # length function user.s6_1():void; - X_11:void := querylog.define("explain select fuse(1000,2000);","sequential_pipe",6:int); + X_0:void := querylog.define("explain select fuse(1000,2000);","sequential_pipe",8:int); X_3:int := udf.fuse(1000:sht,2000:sht); # querylog.define("explain select fuse(1000,2000);","sequential_pipe") sql.resultSet(".L2","L2","int",32:int,0:int,7:int,X_3); @@ -111,9 +111,9 @@ end user.s6_1; % .explain # table_name % mal # name % clob # type -% 98 # length +% 97 # length function user.s8_1():void; - X_11:void := querylog.define("explain select fuse(1000000,2000000);","sequential_pipe",6:int); + X_0:void := querylog.define("explain select fuse(1000000,2000000);","sequential_pipe",8:int); X_3:lng := udf.fuse(1000000:int,2000000:int); # querylog.define("explain select fuse(1000000,2000000);","sequential_pipe") sql.resultSet(".L2","L2","bigint",64:int,0:int,7:int,X_3); @@ -171,9 +171,9 @@ end user.s8_1; % .explain # table_name % mal # name % clob # type -% 101 # length +% 100 # length function user.s16_1():void; - X_32:void := querylog.define("explain select fuse(a,b) from udf_fuse;","sequential_pipe",22:int); + X_0:void := querylog.define("explain select fuse(a,b) from udf_fuse;","sequential_pipe",27:int); X_16 := bat.new(nil:str); X_23 := bat.append(X_16,"sys.L2"); X_18 := bat.new(nil:str); @@ -223,9 +223,9 @@ end user.s16_1; % .explain # table_name % mal # name % clob # type -% 101 # length +% 100 # length function user.s18_1():void; - X_32:void := querylog.define("explain select fuse(c,d) from udf_fuse;","sequential_pipe",22:int); + X_0:void := querylog.define("explain select fuse(c,d) from udf_fuse;","sequential_pipe",27:int); X_16 := bat.new(nil:str); X_23 := bat.append(X_16,"sys.L2"); X_18 := bat.new(nil:str); @@ -275,9 +275,9 @@ end user.s18_1; % .explain # table_name % mal # name % clob # type -% 101 # length +% 100 # length function user.s20_1():void; - X_32:void := querylog.define("explain select fuse(e,f) from udf_fuse;","sequential_pipe",22:int); + X_0:void := querylog.define("explain select fuse(e,f) from udf_fuse;","sequential_pipe",27:int); X_16 := bat.new(nil:str); X_23 := bat.append(X_16,"sys.L2"); X_18 := bat.new(nil:str); diff --git a/sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out b/sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out --- a/sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out +++ b/sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out @@ -48,9 +48,9 @@ Ready. % .explain # table_name % mal # name % clob # type -% 99 # length +% 98 # length function user.s4_1():void; - X_10:void := querylog.define("explain select reverse(\\'MonetDB\\');","sequential_pipe",6:int); + X_0:void := querylog.define("explain select reverse(\\'MonetDB\\');","sequential_pipe",7:int); X_3:str := udf.reverse("MonetDB"); # querylog.define("explain select reverse(\\'MonetDB\\');","sequential_pipe") sql.resultSet(".L2","L2","clob",0:int,0:int,4:int,X_3); @@ -108,9 +108,9 @@ end user.s4_1; % .explain # table_name % mal # name % clob # type -% 105 # length +% 104 # length function user.s12_1():void; - X_28:void := querylog.define("explain select reverse(x) from udf_reverse;","sequential_pipe",20:int); + X_0:void := querylog.define("explain select reverse(x) from udf_reverse;","sequential_pipe",22:int); X_13 := bat.new(nil:str); X_20 := bat.append(X_13,"sys.L2"); X_15 := bat.new(nil:str); diff --git a/sql/backends/monet5/sql_gencode.c b/sql/backends/monet5/sql_gencode.c --- a/sql/backends/monet5/sql_gencode.c +++ b/sql/backends/monet5/sql_gencode.c @@ -474,32 +474,31 @@ int backend_dumpstmt(backend *be, MalBlkPtr mb, sql_rel *r, int top, int add_end, char *query) { mvc *c = be->mvc; - InstrPtr q; + InstrPtr q, querylog; int old_mv = be->mvc_var; MalBlkPtr old_mb = be->mb; stmt *s; + char *t, *tt; // Always keep the SQL query around for monitoring - if (query) { - char *t, *tt; - InstrPtr q; + if( query == 0) + tt = t = GDKstrdup("-- no query"); + else tt = t = GDKstrdup(query); - while (t && isspace((int) *t)) - t++; + while (t && isspace((int) *t)) + t++; - q = newStmt(mb, querylogRef, defineRef); - if (q == NULL) { - GDKfree(tt); - return -1; - } - q->token = REMsymbol; // will be patched - setVarType(mb, getArg(q, 0), TYPE_void); - setVarUDFtype(mb, getArg(q, 0)); - q = pushStr(mb, q, t); + querylog = q = newStmt(mb, querylogRef, defineRef); + if (q == NULL) { GDKfree(tt); - q = pushStr(mb, q, getSQLoptimizer(be->mvc)); + return -1; } + setVarType(mb, getArg(q, 0), TYPE_void); + setVarUDFtype(mb, getArg(q, 0)); + q = pushStr(mb, q, t); + GDKfree(tt); + q = pushStr(mb, q, getSQLoptimizer(be->mvc)); /* announce the transaction mode */ q = newStmt(mb, sqlRef, "mvc"); @@ -508,8 +507,10 @@ backend_dumpstmt(backend *be, MalBlkPtr be->mvc_var = getDestVar(q); be->mb = mb; s = sql_relation2stmt(be, r); - if (!s) + if (!s) { + (void) pushInt(mb, querylog, mb->stop); return 0; + } be->mvc_var = old_mv; be->mb = old_mb; @@ -526,35 +527,9 @@ backend_dumpstmt(backend *be, MalBlkPtr getArg(q, 0) = getArg(getInstrPtr(mb, 0), 0); q->barrier = RETURNsymbol; } - if (add_end){ + if (add_end) pushEndInstruction(mb); - } - // Always keep the SQL query around for monitoring - { - char *t, *tt; - InstrPtr q; - - if (be->q && be->q->codestring) { - tt = t = GDKstrdup(be->q->codestring); - while (t && isspace((int) *t)) - t++; - } else { - tt = t = GDKstrdup("-- no query"); - } - - q = newStmt(mb, querylogRef, defineRef); - if (q == NULL) { - GDKfree(tt); - goto cleanup; - } - q->token = REMsymbol; // will be patched - setVarType(mb, getArg(q, 0), TYPE_void); - setVarUDFtype(mb, getArg(q, 0)); - q = pushStr(mb, q, t); - GDKfree(tt); - q = pushStr(mb, q, getSQLoptimizer(be->mvc)); - } -cleanup: + (void) pushInt(mb, querylog, mb->stop); return 0; } diff --git a/sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out b/sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out --- a/sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out +++ b/sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out @@ -27,9 +27,9 @@ Ready. % .explain # table_name % mal # name % clob # type -% 104 # length +% 103 # length function user.s6_1():void; - X_23:void := querylog.define("explain select power(x,2) from sf_2596114;","sequential_pipe",17:int); + X_0:void := querylog.define("explain select power(x,2) from sf_2596114;","sequential_pipe",23:int); X_7 := bat.new(nil:str); X_14 := bat.append(X_7,"sys.L2"); X_9 := bat.new(nil:str); @@ -74,9 +74,9 @@ end user.s6_1; % .explain # table_name % mal # name % clob # type -% 80 # length +% 96 # length function user.main():void; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list