Changeset: 610ab4587fc4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=610ab4587fc4
Added Files:
monetdb5/optimizer/opt_emptybind.c
monetdb5/optimizer/opt_emptybind.h
monetdb5/optimizer/opt_jit.c
monetdb5/optimizer/opt_jit.h
Removed Files:
monetdb5/optimizer/opt_emptycolumn.c
monetdb5/optimizer/opt_emptycolumn.h
Modified Files:
clients/Tests/exports.stable.out
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.single
monetdb5/optimizer/Makefile.ag
monetdb5/optimizer/opt_candidates.c
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_support.c
monetdb5/optimizer/opt_support.h
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.mal
sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out
sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_optimizer.c
sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/11-explain.stable.out
sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/12-explain.stable.out
sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128
sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
sql/benchmarks/tpch/Tests/02-explain.stable.out
sql/benchmarks/tpch/Tests/03-explain.stable.out.int128
sql/benchmarks/tpch/Tests/04-explain.stable.out
sql/benchmarks/tpch/Tests/05-explain.stable.out.int128
sql/benchmarks/tpch/Tests/06-explain.stable.out.int128
sql/benchmarks/tpch/Tests/07-explain.stable.out.int128
sql/benchmarks/tpch/Tests/08-explain.stable.out.int128
sql/benchmarks/tpch/Tests/09-explain.stable.out.int128
sql/benchmarks/tpch/Tests/10-explain.stable.out.int128
sql/benchmarks/tpch/Tests/11-explain.stable.out.int128
sql/benchmarks/tpch/Tests/12-explain.stable.out.int128
sql/benchmarks/tpch/Tests/13-explain.stable.out
sql/benchmarks/tpch/Tests/14-explain.stable.out.int128
sql/benchmarks/tpch/Tests/15-explain.stable.out.int128
sql/benchmarks/tpch/Tests/16-explain.stable.out
sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
sql/benchmarks/tpch/Tests/18-explain.stable.out.int128
sql/benchmarks/tpch/Tests/19-explain.stable.out.int128
sql/benchmarks/tpch/Tests/20-explain.stable.out.int128
sql/benchmarks/tpch/Tests/21-explain.stable.out
sql/benchmarks/tpch/Tests/22-explain.stable.out.int128
sql/test/BugTracker-2009/Tests/explain_gives_crash.SF-2741829.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-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.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/nil_2dec_lng.Bug-3592.stable.out
sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out.single
sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out
sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
sql/test/Tests/setoptimizer.stable.out
sql/test/Tests/setoptimizer.stable.out.Windows
sql/test/mergetables/Tests/mergequery.stable.out
Branch: jit
Log Message:
Putting jit back to work
- empty tables are detected and replaced by a bat.new()
- approve output, only BugTracker-2010/with_row_number_crash...
causes unexpected behavior
diffs (truncated from 5446 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
@@ -1549,13 +1549,14 @@ int OPTconstantsImplementation(Client cn
int OPTcostModelImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTdataflowImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
int OPTdeadcodeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
-int OPTemptycolumnImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
+int OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
int OPTevaluateImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTfactorizeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTgarbageCollectorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr
stk, InstrPtr pci);
int OPTgeneratorImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTinlineImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
int OPTisAlias(InstrPtr p);
+int OPTjitImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
p);
int OPTjsonImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
str OPTmacro(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
int OPTmacroImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
p);
@@ -2040,8 +2041,8 @@ str divRef;
void dumpExceptionsToStream(stream *out, str msg);
void dumpHelpTable(stream *f, Module s, str text, int flag);
void dumpSearchTable(stream *f, str text);
-str emptycolumnRef;
-str emptycolumnidxRef;
+str emptybindRef;
+str emptybindidxRef;
str eqRef;
str escape_str(str *retval, str s);
str evalFile(Client c, str fname, int listing);
@@ -2195,6 +2196,7 @@ int isUnsafeFunction(InstrPtr q);
int isUnsafeInstruction(InstrPtr q);
int isUpdateInstruction(InstrPtr p);
str iteratorRef;
+str jitRef;
str jsonRef;
str languageRef;
str levenshtein_impl(int *result, str *s, str *t, int *insdel_cost, int
*replace_cost, int *transpose_cost);
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
@@ -55,8 +55,8 @@ Ready.
% .L # table_name
% def # name
% clob # type
-% 565 # length
-[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptycolumn();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.garbageCollector();"
]
+% 563 # length
+[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
@@ -116,8 +116,8 @@ end user.s8_1;
% .L # table_name
% def # name
% clob # type
-% 588 # length
-[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptycolumn();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.sql_append();optimizer.garbageCollector();"
]
+% 586 # length
+[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.sql_append();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
diff --git
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.single
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.single
---
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.single
+++
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.single
@@ -55,8 +55,8 @@ Ready.
% .L # table_name
% def # name
% clob # type
-% 565 # length
-[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptycolumn();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.garbageCollector();"
]
+% 563 # length
+[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
@@ -114,8 +114,8 @@ end user.s8_1;
% .L # table_name
% def # name
% clob # type
-% 588 # length
-[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptycolumn();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.sql_append();optimizer.garbageCollector();"
]
+% 586 # length
+[
"optimizer.inline();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.emptybind();optimizer.pushselect();optimizer.aliases();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.deadcode();optimizer.reorder();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.candidates();optimizer.sql_append();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
diff --git a/monetdb5/optimizer/Makefile.ag b/monetdb5/optimizer/Makefile.ag
--- a/monetdb5/optimizer/Makefile.ag
+++ b/monetdb5/optimizer/Makefile.ag
@@ -26,13 +26,14 @@ lib_optimizer = {
opt_costModel.c opt_costModel.h \
opt_dataflow.c opt_dataflow.h \
opt_deadcode.c opt_deadcode.h \
- opt_emptycolumn.c opt_emptycolumn.h \
+ opt_emptybind.c opt_emptybind.h \
opt_evaluate.c opt_evaluate.h \
opt_factorize.c opt_factorize.h \
opt_garbageCollector.c opt_garbageCollector.h \
opt_generator.c opt_generator.h \
opt_querylog.c opt_querylog.h \
opt_inline.c opt_inline.h \
+ opt_jit.c opt_jit.h \
opt_projectionpath.c opt_projectionpath.h \
opt_macro.c opt_macro.h \
opt_matpack.c opt_matpack.h \
diff --git a/monetdb5/optimizer/opt_candidates.c
b/monetdb5/optimizer/opt_candidates.c
--- a/monetdb5/optimizer/opt_candidates.c
+++ b/monetdb5/optimizer/opt_candidates.c
@@ -34,7 +34,7 @@ OPTcandidatesImplementation(Client cntxt
setVarCList(mb,getArg(p,0));
if(getFunctionId(p) == subdeltaRef)
setVarCList(mb,getArg(p,0));
- if(getFunctionId(p) == emptycolumnRef && p->retc == 2)
+ if(getFunctionId(p) == emptybindRef && p->retc == 2)
setVarCList(mb,getArg(p,0));
if(getFunctionId(p) == bindRef && p->retc == 2)
setVarCList(mb,getArg(p,0));
diff --git a/monetdb5/optimizer/opt_emptycolumn.c
b/monetdb5/optimizer/opt_emptybind.c
rename from monetdb5/optimizer/opt_emptycolumn.c
rename to monetdb5/optimizer/opt_emptybind.c
--- a/monetdb5/optimizer/opt_emptycolumn.c
+++ b/monetdb5/optimizer/opt_emptybind.c
@@ -18,11 +18,15 @@
*/
/* author M.Kersten
- * This optimizer hunts for the empty persistent tables accessed
- * and propagates them.
+ * This optimizer hunts for the empty persistent tables accessed and
propagates them.
+ *
+ * Patterns to look for:
+ * X_13 := algebra.projection(X_1,X_4);
+ * where either argument is empty
+ *
*/
#include "monetdb_config.h"
-#include "opt_emptycolumn.h"
+#include "opt_emptybind.h"
#include "opt_aliases.h"
#include "opt_deadcode.h"
#include "mal_builder.h"
@@ -41,7 +45,7 @@
int
-OPTemptycolumnImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci)
+OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
int i,j;
int *marked;
@@ -53,7 +57,7 @@ OPTemptycolumnImplementation(Client cntx
int etop= 0, esize= 256;
// use an instruction reference table to keep
- // track of where 'emptycolumn' results are produced
+ // track of where 'emptybind' results are produced
marked = (int *) GDKzalloc(mb->vsize * sizeof(int));
if ( marked == NULL)
return 0;
@@ -72,8 +76,8 @@ OPTemptycolumnImplementation(Client cntx
(void) cntxt;
(void) pci;
- OPTDEBUGemptycolumn{
- mnstr_printf(GDKout, "Optimize Query Emptycolumn\n");
+ OPTDEBUGemptybind{
+ mnstr_printf(GDKout, "Optimize Query Emptybind\n");
printFunction(GDKout, mb, 0, LIST_MAL_DEBUG);
}
@@ -98,7 +102,7 @@ OPTemptycolumnImplementation(Client cntx
* sequences to filter and replace results
*/
if ( getModuleId(p) == batRef && getFunctionId(p) == newRef){
- OPTDEBUGemptycolumn
+ OPTDEBUGemptybind
mnstr_printf(cntxt->fdout, "#empty bat pc %d
var %d\n",i , getArg(p,0) );
marked[getArg(p,0)] = i;
continue;
@@ -117,16 +121,16 @@ OPTemptycolumnImplementation(Client cntx
}
/* restore the naming, dropping the runtime property 'marked' */
- if (getFunctionId(p) == emptycolumnRef) {
- OPTDEBUGemptycolumn
+ if (getFunctionId(p) == emptybindRef) {
+ OPTDEBUGemptybind
mnstr_printf(cntxt->fdout, "#empty bind pc %d
var %d\n",i , getArg(p,0) );
setFunctionId(p,bindRef);
p->typechk= TYPE_UNKNOWN;
marked[getArg(p,0)] = i;
if( p->retc == 2){
marked[getArg(p,1)] = i;
- OPTDEBUGemptycolumn
- mnstr_printf(cntxt->fdout, "#empty bind
pc %d var %d\n",i , getArg(p,1) );
+ OPTDEBUGemptybind
+ mnstr_printf(cntxt->fdout, "#empty
update bind pc %d var %d\n",i , getArg(p,1) );
}
// replace the call into a empty bat creation unless
the table was updated already in the same query
sch = getVarConstant(mb,getArg(p,2 +
(p->retc==2))).val.sval;
@@ -136,17 +140,25 @@ OPTemptycolumnImplementation(Client cntx
if(q && getModuleId(q) == sqlRef &&
isUpdateInstruction(q)){
if (
strcmp(getVarConstant(mb,getArg(q,2)).val.sval, sch) == 0 &&
strcmp(getVarConstant(mb,getArg(q,3)).val.sval, tbl) == 0 ){
+ OPTDEBUGemptybind
+
mnstr_printf(cntxt->fdout, "#reset mark empty variable pc %d var %d\n",i ,
getArg(p,0) );
marked[getArg(p,0)] = 0;
- if( p->retc == 2)
+ if( p->retc == 2){
+ OPTDEBUGemptybind
+
mnstr_printf(cntxt->fdout, "#reset mark empty variable pc %d var %d\n",i ,
getArg(p,1) );
marked[getArg(p,1)] = 0;
+ }
break;
}
}
if(q && getModuleId(q) == sqlRef &&
getFunctionId(q) == catalogRef){
if (
strcmp(getVarConstant(mb,getArg(q,2)).val.sval, sch) == 0 ){
marked[getArg(p,0)] = 0;
- if( p->retc == 2)
+ if( p->retc == 2){
+ OPTDEBUGemptybind
+
mnstr_printf(cntxt->fdout, "#reset mark empty variable pc %d var %d\n",i ,
getArg(p,1) );
marked[getArg(p,1)] = 0;
+ }
break;
}
}
@@ -172,8 +184,8 @@ OPTemptycolumnImplementation(Client cntx
continue;
}
- if (getFunctionId(p) == emptycolumnidxRef) {
- OPTDEBUGemptycolumn
+ if (getFunctionId(p) == emptybindidxRef) {
+ OPTDEBUGemptybind
mnstr_printf(cntxt->fdout, "#empty bindidx pc
%d var %d\n",i , getArg(p,0) );
setFunctionId(p,bindidxRef);
p->typechk= TYPE_UNKNOWN;
@@ -186,9 +198,14 @@ OPTemptycolumnImplementation(Client cntx
if(q && getModuleId(q) == sqlRef &&
(getFunctionId(q) == appendRef || getFunctionId(q) == updateRef )){
if (
strcmp(getVarConstant(mb,getArg(q,2)).val.sval, sch) == 0 &&
strcmp(getVarConstant(mb,getArg(q,3)).val.sval, tbl) == 0 ){
+ OPTDEBUGemptybind
+
mnstr_printf(cntxt->fdout, "#reset mark empty variable pc %d var %d\n",i ,
getArg(p,0) );
marked[getArg(p,0)] = 0;
- if( p->retc == 2)
+ if( p->retc == 2){
+ OPTDEBUGemptybind
+
mnstr_printf(cntxt->fdout, "#reset mark empty variable pc %d var %d\n",i ,
getArg(p,1) );
marked[getArg(p,1)] = 0;
+ }
break;
}
}
@@ -222,21 +239,23 @@ OPTemptycolumnImplementation(Client cntx
// delta operations without updates+ insert can be replaced by
an assignment
if (getModuleId(p)== sqlRef && getFunctionId(p) == deltaRef &&
p->argc ==5){
- OPTDEBUGemptycolumn
- mnstr_printf(cntxt->fdout, "#empty delta pc %d
var %d,%d,%d\n",i ,marked[getArg(p,2)], marked[getArg(p,3)],
marked[getArg(p,4)] );
if( marked[getArg(p,2)] && marked[getArg(p,3)] &&
marked[getArg(p,4)] ){
- OPTDEBUGemptycolumn
+ OPTDEBUGemptybind
+ mnstr_printf(cntxt->fdout, "#empty
delta pc %d var %d,%d,%d\n",i ,marked[getArg(p,2)], marked[getArg(p,3)],
marked[getArg(p,4)] );
+ OPTDEBUGemptybind
mnstr_printf(cntxt->fdout, "#empty
delta pc %d var %d\n",i , getArg(p,0) );
clrFunction(p);
p->argc = 2;
- marked[getArg(p,0)] = i;
+ if ( marked[getArg(p,1)] ){
+ marked[getArg(p,0)] = i;
+ }
}
continue;
}
if (getModuleId(p)== sqlRef && getFunctionId(p) ==
projectdeltaRef) {
if( marked[getArg(p,3)] && marked[getArg(p,4)] ){
- OPTDEBUGemptycolumn
+ OPTDEBUGemptybind
mnstr_printf(cntxt->fdout, "#empty
projectdelta pc %d var %d\n",i , getArg(p,0) );
setModuleId(p,algebraRef);
setFunctionId(p,projectionRef);
@@ -248,7 +267,7 @@ OPTemptycolumnImplementation(Client cntx
if (getModuleId(p)== algebraRef){
if( getFunctionId(p) == projectionRef) {
if( marked[getArg(p,1)] || marked[getArg(p,2)]
){
- OPTDEBUGemptycolumn
+ OPTDEBUGemptybind
mnstr_printf(cntxt->fdout,
"#empty projection pc %d var %d\n",i , getArg(p,0) );
emptyresult(0);
}
@@ -256,7 +275,7 @@ OPTemptycolumnImplementation(Client cntx
}
}
- OPTDEBUGemptycolumn{
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list