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

Reply via email to