Changeset: 0b1e7dfc855b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0b1e7dfc855b
Added Files:
        monetdb5/optimizer/opt_cquery.c
        monetdb5/optimizer/opt_cquery.h
        sql/backends/monet5/Tests/basket00.sql
        sql/backends/monet5/Tests/dumpbasket.malC
        sql/scripts/50_cquery.sql
Removed Files:
        sql/backends/monet5/Tests/basket00.malC
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        clients/Tests/exports.stable.out
        clients/mapiclient/Tests/stethoscope--help.stable.err
        monetdb5/optimizer/Makefile.ag
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        monetdb5/optimizer/opt_support.c
        monetdb5/optimizer/opt_wrapper.c
        monetdb5/optimizer/optimizer.mal
        sql/backends/monet5/40_sql.mal
        sql/backends/monet5/Makefile.ag
        sql/backends/monet5/Tests/All
        sql/backends/monet5/Tests/cquery00.sql
        sql/backends/monet5/sql_cquery.c
        sql/backends/monet5/sql_cquery.h
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_scenario.c
        sql/scripts/Makefile.ag
        sql/server/rel_psm.c
        sql/server/sql_mvc.h
        sql/server/sql_parser.y
        sql/test/BugTracker-2011/Tests/like_or.Bug-2924.stable.out
        
sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-0.Bug-3063.stable.out
        
sql/test/BugTracker-2012/Tests/table_functions_fail_after_restart-1.Bug-3063.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out.int128
        sql/test/Tests/setoptimizer.stable.out
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        
sql/test/sys-schema/Tests/check_ForeignKey_referential_integrity.stable.out
Branch: trails
Log Message:

Intermittent commit


diffs (truncated from 2485 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -539,6 +539,23 @@ Ready.
 [ "bam",       "sam_export",   "pattern bam.sam_export(output_path:str):void 
",        "sam_exportf;", "Export results in the bam.export table to a SAM 
file"  ]
 [ "bam",       "seq_char",     "command bam.seq_char(ref_pos:int, alg_seq:str, 
alg_pos:int, alg_cigar:str):str ",      "seq_char;",    "Calculate the 
character in the alignment string (alg_str) that is aligned to position 
'ref_pos', conforming to the given cigar string" ]
 [ "bam",       "seq_length",   "command bam.seq_length(cigar:str):int ",       
"seq_length;",  "Calculate the real length of a DNA sequence, given its CIGAR 
string."  ]
+[ "basket",    "append",       "pattern basket.append(mvc:int, sch:str, 
tbl:str, col:str, val:any):int ",      "BSKTappend;",  "Append new tuples to a 
basket" ]
+[ "basket",    "bind", "pattern basket.bind(mvc:int, sch:str, tbl:str, 
col:str):bat[:any] ",   "BSKTbind;",    "Access the basket column, if needed 
add to basket catalog"     ]
+[ "basket",    "clear_table",  "pattern basket.clear_table(sname:str, 
tname:str):lng ",        "mvc_clear_table_wrap;",        ""      ]
+[ "basket",    "commit",       "pattern basket.commit(mvc:any, sch:str, 
tbl:str):int ",        "BSKTcommit;",  "Make the basket available after 
updates"       ]
+[ "basket",    "delete",       "pattern basket.delete(mvc:int, sch:str, 
tbl:str, rid:bat[:oid]):int ", "BSKTdelete;",  "Remove tuples from a basket"   ]
+[ "basket",    "drop", "pattern basket.drop(mvc:int, sch:str, tbl:str):int ",  
"BSKTdrop;",    "Remove the basket"     ]
+[ "basket",    "dump", "command basket.dump():void ",  "BSKTdump;",    "Show 
the baskets table"        ]
+[ "basket",    "lock", "unsafe pattern basket.lock(mvc:any, sch:str, 
tbl:str):int ",   "BSKTlock;",    "Lock the basket for private use"       ]
+[ "basket",    "register",     "pattern basket.register(mvc:int, sch:str, 
tbl:str, role:int):int ",    "BSKTregister;",        "Initialize a new basket 
based on a specific table definition.\nroles:input =0, output=2"       ]
+[ "basket",    "reset",        "pattern basket.reset(mvc:int, sch:str, 
tbl:str):int ", "BSKTreset;",   "Remove a basket content"       ]
+[ "basket",    "status",       "pattern basket.status() (seen:bat[:timestamp], 
sch:bat[:str], tbl:bat[:str], window:bat[:int], stride:bat[:int], 
events:bat[:int], cycles:bat[:int], error:bat[:str]) ",       "BSKTstatus;",  
"Show the status of the baskets"        ]
+[ "basket",    "tid",  "pattern basket.tid(mvc:int, sch:str, 
tbl:str):bat[:oid] ",     "BSKTtid;",     "Collect the candidates for a basket" 
  ]
+[ "basket",    "tumble",       "unsafe pattern basket.tumble(mvc:any, sch:str, 
tbl:str):int ", "BSKTtumble;",  "Eat away and slide forward"    ]
+[ "basket",    "unlock",       "unsafe pattern basket.unlock(mvc:any, sch:str, 
tbl:str):int ", "BSKTunlock;",  "Lock the basket for private use"       ]
+[ "basket",    "update",       "pattern basket.update(mvc:int, sch:str, 
tbl:str, col:str, rid:bat[:oid], val:bat[:any]):int ", "BSKTupdate;",  "Update 
tuples in a basket"     ]
+[ "basket",    "window",       "pattern basket.window(sch:str, tbl:str, 
elm:int):int ",        "BSKTwindow;",  "Set window size"       ]
+[ "basket",    "window",       "pattern basket.window(sch:str, tbl:str, 
elm:int, stride:int):int ",    "BSKTwindow;",  "Set window size and stride"    ]
 [ "bat",       "append",       "command bat.append(i:bat[:any_1], 
u:bat[:any_1], s:bat[:oid], force:bit):bat[:any_1] ",        
"BKCappend_cand_force_wrap;",   "append the content of u with candidate list s 
to i"    ]
 [ "bat",       "append",       "command bat.append(i:bat[:any_1], 
u:bat[:any_1], s:bat[:oid]):bat[:any_1] ",   "BKCappend_cand_wrap;", "append 
the content of u with candidate list s to i"    ]
 [ "bat",       "append",       "command bat.append(i:bat[:any_1], 
u:bat[:any_1], force:bit):bat[:any_1] ",     "BKCappend_force_wrap;",        
"append the content of u to i"  ]
@@ -7431,6 +7448,24 @@ Ready.
 [ "color",     "value",        "command color.value(c:color):flt ",    
"CLRvalue;",    "Extracts value component from a color atom"    ]
 [ "color",     "value",        "command color.value(c:color):int ",    
"CLRvalueInt;", "Extracts value component from a color atom"    ]
 [ "color",     "ycc",  "command color.ycc(y:int, cr:int, cb:int):color ",      
"CLRycc;",      "Converts an YCC triplets to a color atom"      ]
+[ "cquery",    "cycles",       "pattern cquery.cycles(cnt:int):void ", 
"CQcycles;",    "Limit number of petrinet steps"        ]
+[ "cquery",    "cycles",       "pattern cquery.cycles(mod:str, fcn:str, 
cnt:int):void ",       "CQcycles;",    "Limit number of petrinet steps"        ]
+[ "cquery",    "deregister",   "pattern cquery.deregister():void ",    
"CQderegister;",        "Remove all continuous queries" ]
+[ "cquery",    "deregister",   "pattern cquery.deregister(mod:str, 
fcn:str):void ",    "CQderegister;",        "Remove a continuous query"     ]
+[ "cquery",    "dump", "command cquery.dump():void ",  "CQdump;",      "Show 
the status of the query scheduler"        ]
+[ "cquery",    "error",        "pattern cquery.error(sch:str, tbl:str, 
msg:str):void ",        "CQerror;",     "Remember the error seen"       ]
+[ "cquery",    "heartbeat",    "pattern cquery.heartbeat(cnt:int):void ",      
"CQheartbeat;", "Awake all queries after cnt milliseconds"      ]
+[ "cquery",    "heartbeat",    "pattern cquery.heartbeat(mod:str, fcn:str, 
cnt:int):void ",    "CQheartbeat;", "Awake the query after cnt milliseconds"    
    ]
+[ "cquery",    "log",  "pattern cquery.log() (tick:bat[:timestamp], 
mod:bat[:str], fcn:bat[:str], time:bat[:lng], error:bat[:str]) ",  "CQlog;",    
   "The log of all CQ executions"  ]
+[ "cquery",    "pause",        "pattern cquery.pause():void ", "CQpause;",     
"Deactivate all continuous queries"     ]
+[ "cquery",    "pause",        "pattern cquery.pause(mod:str, fcn:str):void ", 
"CQpause;",     "Deactivate a continuous query" ]
+[ "cquery",    "prelude",      "command cquery.prelude():void ",       
"CQprelude;",   ""      ]
+[ "cquery",    "register",     "pattern cquery.register(mod:str, fcn:str):void 
",      "CQregister;",  "Add a continuous MAL plan to the Petri-net scheduler. 
It will analyse\nthe MAL block to determine the input/output dependencies and 
firing conditions."        ]
+[ "cquery",    "resume",       "pattern cquery.resume():void ",        
"CQresume;",    "Activate all continuous queries"       ]
+[ "cquery",    "resume",       "pattern cquery.resume(mod:str, fcn:str):void 
",        "CQresume;",    "Activate a specific continuous query"  ]
+[ "cquery",    "show", "pattern cquery.show(sch:str, fcn:str):void ",  
"CQshow;",      "Debug a single continuous query"       ]
+[ "cquery",    "status",       "pattern cquery.status() (tick:bat[:timestamp], 
mod:bat[:str], fcn:bat[:str], state:bat[:str], error:bat[:str]) ",      
"CQstatus;",    "Status of all registered continuous queries"   ]
+[ "cquery",    "wait", "pattern cquery.wait(cnt:int):void ",   "CQwait;",      
"Sleep for some time"   ]
 [ "date",      "!=",   "pattern date.!=(v:date, w:date):bit ", "CMDvarNE;",    
"Equality of two dates" ]
 [ "date",      "#fromstr",     "command date.#fromstr():void ",        
"date_fromstr;",        ""      ]
 [ "date",      "#tostr",       "command date.#tostr():void ",  "date_tostr;",  
""      ]
@@ -8135,6 +8170,8 @@ Ready.
 [ "optimizer", "constants",    "pattern optimizer.constants(mod:str, 
fcn:str):str ",   "OPTwrapper;",  "Duplicate constant removal optimizer"  ]
 [ "optimizer", "costModel",    "pattern optimizer.costModel():str ",   
"OPTwrapper;",  ""      ]
 [ "optimizer", "costModel",    "pattern optimizer.costModel(mod:str, 
fcn:str):str ",   "OPTwrapper;",  "Estimate the cost of a relational 
expression"  ]
+[ "optimizer", "cquery",       "pattern optimizer.cquery():str ",      
"OPTwrapper;",  ""      ]
+[ "optimizer", "cquery",       "pattern optimizer.cquery(mod:str, fcn:str):str 
",      "OPTwrapper;",  "Simulate cquery style execution"       ]
 [ "optimizer", "dataflow",     "pattern optimizer.dataflow():str ",    
"OPTwrapper;",  ""      ]
 [ "optimizer", "dataflow",     "pattern optimizer.dataflow(mod:str, 
fcn:str):str ",    "OPTwrapper;",  "Dataflow bracket code injection"       ]
 [ "optimizer", "deadcode",     "pattern optimizer.deadcode():str ",    
"OPTwrapper;",  ""      ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -643,6 +643,23 @@ Ready.
 [ "bam",       "sam_export",   "pattern bam.sam_export(output_path:str):void 
",        "sam_exportf;", "Export results in the bam.export table to a SAM 
file"  ]
 [ "bam",       "seq_char",     "command bam.seq_char(ref_pos:int, alg_seq:str, 
alg_pos:int, alg_cigar:str):str ",      "seq_char;",    "Calculate the 
character in the alignment string (alg_str) that is aligned to position 
'ref_pos', conforming to the given cigar string" ]
 [ "bam",       "seq_length",   "command bam.seq_length(cigar:str):int ",       
"seq_length;",  "Calculate the real length of a DNA sequence, given its CIGAR 
string."  ]
+[ "basket",    "append",       "pattern basket.append(mvc:int, sch:str, 
tbl:str, col:str, val:any):int ",      "BSKTappend;",  "Append new tuples to a 
basket" ]
+[ "basket",    "bind", "pattern basket.bind(mvc:int, sch:str, tbl:str, 
col:str):bat[:any] ",   "BSKTbind;",    "Access the basket column, if needed 
add to basket catalog"     ]
+[ "basket",    "clear_table",  "pattern basket.clear_table(sname:str, 
tname:str):lng ",        "mvc_clear_table_wrap;",        ""      ]
+[ "basket",    "commit",       "pattern basket.commit(mvc:any, sch:str, 
tbl:str):int ",        "BSKTcommit;",  "Make the basket available after 
updates"       ]
+[ "basket",    "delete",       "pattern basket.delete(mvc:int, sch:str, 
tbl:str, rid:bat[:oid]):int ", "BSKTdelete;",  "Remove tuples from a basket"   ]
+[ "basket",    "drop", "pattern basket.drop(mvc:int, sch:str, tbl:str):int ",  
"BSKTdrop;",    "Remove the basket"     ]
+[ "basket",    "dump", "command basket.dump():void ",  "BSKTdump;",    "Show 
the baskets table"        ]
+[ "basket",    "lock", "unsafe pattern basket.lock(mvc:any, sch:str, 
tbl:str):int ",   "BSKTlock;",    "Lock the basket for private use"       ]
+[ "basket",    "register",     "pattern basket.register(mvc:int, sch:str, 
tbl:str, role:int):int ",    "BSKTregister;",        "Initialize a new basket 
based on a specific table definition.\nroles:input =0, output=2"       ]
+[ "basket",    "reset",        "pattern basket.reset(mvc:int, sch:str, 
tbl:str):int ", "BSKTreset;",   "Remove a basket content"       ]
+[ "basket",    "status",       "pattern basket.status() (seen:bat[:timestamp], 
sch:bat[:str], tbl:bat[:str], window:bat[:int], stride:bat[:int], 
events:bat[:int], cycles:bat[:int], error:bat[:str]) ",       "BSKTstatus;",  
"Show the status of the baskets"        ]
+[ "basket",    "tid",  "pattern basket.tid(mvc:int, sch:str, 
tbl:str):bat[:oid] ",     "BSKTtid;",     "Collect the candidates for a basket" 
  ]
+[ "basket",    "tumble",       "unsafe pattern basket.tumble(mvc:any, sch:str, 
tbl:str):int ", "BSKTtumble;",  "Eat away and slide forward"    ]
+[ "basket",    "unlock",       "unsafe pattern basket.unlock(mvc:any, sch:str, 
tbl:str):int ", "BSKTunlock;",  "Lock the basket for private use"       ]
+[ "basket",    "update",       "pattern basket.update(mvc:int, sch:str, 
tbl:str, col:str, rid:bat[:oid], val:bat[:any]):int ", "BSKTupdate;",  "Update 
tuples in a basket"     ]
+[ "basket",    "window",       "pattern basket.window(sch:str, tbl:str, 
elm:int):int ",        "BSKTwindow;",  "Set window size"       ]
+[ "basket",    "window",       "pattern basket.window(sch:str, tbl:str, 
elm:int, stride:int):int ",    "BSKTwindow;",  "Set window size and stride"    ]
 [ "bat",       "append",       "command bat.append(i:bat[:any_1], 
u:bat[:any_1], s:bat[:oid], force:bit):bat[:any_1] ",        
"BKCappend_cand_force_wrap;",   "append the content of u with candidate list s 
to i"    ]
 [ "bat",       "append",       "command bat.append(i:bat[:any_1], 
u:bat[:any_1], s:bat[:oid]):bat[:any_1] ",   "BKCappend_cand_wrap;", "append 
the content of u with candidate list s to i"    ]
 [ "bat",       "append",       "command bat.append(i:bat[:any_1], 
u:bat[:any_1], force:bit):bat[:any_1] ",     "BKCappend_force_wrap;",        
"append the content of u to i"  ]
@@ -9777,6 +9794,24 @@ Ready.
 [ "color",     "value",        "command color.value(c:color):flt ",    
"CLRvalue;",    "Extracts value component from a color atom"    ]
 [ "color",     "value",        "command color.value(c:color):int ",    
"CLRvalueInt;", "Extracts value component from a color atom"    ]
 [ "color",     "ycc",  "command color.ycc(y:int, cr:int, cb:int):color ",      
"CLRycc;",      "Converts an YCC triplets to a color atom"      ]
+[ "cquery",    "cycles",       "pattern cquery.cycles(cnt:int):void ", 
"CQcycles;",    "Limit number of petrinet steps"        ]
+[ "cquery",    "cycles",       "pattern cquery.cycles(mod:str, fcn:str, 
cnt:int):void ",       "CQcycles;",    "Limit number of petrinet steps"        ]
+[ "cquery",    "deregister",   "pattern cquery.deregister():void ",    
"CQderegister;",        "Remove all continuous queries" ]
+[ "cquery",    "deregister",   "pattern cquery.deregister(mod:str, 
fcn:str):void ",    "CQderegister;",        "Remove a continuous query"     ]
+[ "cquery",    "dump", "command cquery.dump():void ",  "CQdump;",      "Show 
the status of the query scheduler"        ]
+[ "cquery",    "error",        "pattern cquery.error(sch:str, tbl:str, 
msg:str):void ",        "CQerror;",     "Remember the error seen"       ]
+[ "cquery",    "heartbeat",    "pattern cquery.heartbeat(cnt:int):void ",      
"CQheartbeat;", "Awake all queries after cnt milliseconds"      ]
+[ "cquery",    "heartbeat",    "pattern cquery.heartbeat(mod:str, fcn:str, 
cnt:int):void ",    "CQheartbeat;", "Awake the query after cnt milliseconds"    
    ]
+[ "cquery",    "log",  "pattern cquery.log() (tick:bat[:timestamp], 
mod:bat[:str], fcn:bat[:str], time:bat[:lng], error:bat[:str]) ",  "CQlog;",    
   "The log of all CQ executions"  ]
+[ "cquery",    "pause",        "pattern cquery.pause():void ", "CQpause;",     
"Deactivate all continuous queries"     ]
+[ "cquery",    "pause",        "pattern cquery.pause(mod:str, fcn:str):void ", 
"CQpause;",     "Deactivate a continuous query" ]
+[ "cquery",    "prelude",      "command cquery.prelude():void ",       
"CQprelude;",   ""      ]
+[ "cquery",    "register",     "pattern cquery.register(mod:str, fcn:str):void 
",      "CQregister;",  "Add a continuous MAL plan to the Petri-net scheduler. 
It will analyse\nthe MAL block to determine the input/output dependencies and 
firing conditions."        ]
+[ "cquery",    "resume",       "pattern cquery.resume():void ",        
"CQresume;",    "Activate all continuous queries"       ]
+[ "cquery",    "resume",       "pattern cquery.resume(mod:str, fcn:str):void 
",        "CQresume;",    "Activate a specific continuous query"  ]
+[ "cquery",    "show", "pattern cquery.show(sch:str, fcn:str):void ",  
"CQshow;",      "Debug a single continuous query"       ]
+[ "cquery",    "status",       "pattern cquery.status() (tick:bat[:timestamp], 
mod:bat[:str], fcn:bat[:str], state:bat[:str], error:bat[:str]) ",      
"CQstatus;",    "Status of all registered continuous queries"   ]
+[ "cquery",    "wait", "pattern cquery.wait(cnt:int):void ",   "CQwait;",      
"Sleep for some time"   ]
 [ "date",      "!=",   "pattern date.!=(v:date, w:date):bit ", "CMDvarNE;",    
"Equality of two dates" ]
 [ "date",      "#fromstr",     "command date.#fromstr():void ",        
"date_fromstr;",        ""      ]
 [ "date",      "#tostr",       "command date.#tostr():void ",  "date_tostr;",  
""      ]
@@ -10497,6 +10532,8 @@ Ready.
 [ "optimizer", "constants",    "pattern optimizer.constants(mod:str, 
fcn:str):str ",   "OPTwrapper;",  "Duplicate constant removal optimizer"  ]
 [ "optimizer", "costModel",    "pattern optimizer.costModel():str ",   
"OPTwrapper;",  ""      ]
 [ "optimizer", "costModel",    "pattern optimizer.costModel(mod:str, 
fcn:str):str ",   "OPTwrapper;",  "Estimate the cost of a relational 
expression"  ]
+[ "optimizer", "cquery",       "pattern optimizer.cquery():str ",      
"OPTwrapper;",  ""      ]
+[ "optimizer", "cquery",       "pattern optimizer.cquery(mod:str, fcn:str):str 
",      "OPTwrapper;",  "Simulate cquery style execution"       ]
 [ "optimizer", "dataflow",     "pattern optimizer.dataflow():str ",    
"OPTwrapper;",  ""      ]
 [ "optimizer", "dataflow",     "pattern optimizer.dataflow(mod:str, 
fcn:str):str ",    "OPTwrapper;",  "Dataflow bracket code injection"       ]
 [ "optimizer", "deadcode",     "pattern optimizer.deadcode():str ",    
"OPTwrapper;",  ""      ]
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
@@ -1547,6 +1547,7 @@ str OPTcoercionImplementation(Client cnt
 str OPTcommonTermsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 str OPTconstantsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
 str OPTcostModelImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
+str OPTcqueryImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 str OPTdataflowImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
 str OPTdeadcodeImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 str OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr p);
@@ -2017,6 +2018,7 @@ str copy_fromRef;
 str countRef;
 str count_no_nilRef;
 int cpyConstant(MalBlkPtr mb, VarPtr vr);
+str cqueryRef;
 str createException(enum malexception, const char *, _In_z_ 
_Printf_format_string_ const char *, ...) __attribute__((__format__(__printf__, 
3, 4)));
 str createRef;
 str create_constraintRef;
@@ -2071,6 +2073,7 @@ void dumpExceptionsToStream(stream *out,
 str emptybindRef;
 str emptybindidxRef;
 str eqRef;
+str errorRef;
 str escape_str(str *retval, str s);
 str evalFile(Client c, str fname, int listing);
 str evalRef;
@@ -2184,6 +2187,7 @@ str initQlog(void);
 int initTrace(void);
 int inlineMALblock(MalBlkPtr mb, int pc, MalBlkPtr mc);
 str inplaceRef;
+str inputRef;
 void insertSymbol(Module scope, Symbol prg);
 str instruction2str(MalBlkPtr mb, MalStkPtr stl, InstrPtr p, int hidden);
 str instructionCall(MalBlkPtr mb, InstrPtr p, str s, str base, size_t len);
@@ -2369,6 +2373,7 @@ str optimizeMALBlock(Client cntxt, MalBl
 int optimizerIsApplied(MalBlkPtr mb, str name);
 str optimizerRef;
 str optimizer_prelude(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p);
+str outputRef;
 str pack2Ref;
 str packRef;
 str parametersRef;
@@ -2566,6 +2571,7 @@ str transaction_releaseRef;
 str transaction_rollbackRef;
 void trimMalVariables(MalBlkPtr mb, MalStkPtr stk);
 void trimMalVariables_(MalBlkPtr mb, MalStkPtr glb);
+str tumbleRef;
 void typeChecker(stream *out, Module scope, MalBlkPtr mb, InstrPtr p, int 
silent);
 int tzone_fromstr(const char *buf, int *len, tzone **d);
 tzone tzone_local;
@@ -2579,6 +2585,7 @@ str updateRef;
 void updateScenario(str scen, str nme, MALfcn fcn);
 str userRef;
 str vectorRef;
+str windowRef;
 str wlcRef;
 int wlc_batches;
 int wlc_beat;
diff --git a/clients/mapiclient/Tests/stethoscope--help.stable.err 
b/clients/mapiclient/Tests/stethoscope--help.stable.err
--- a/clients/mapiclient/Tests/stethoscope--help.stable.err
+++ b/clients/mapiclient/Tests/stethoscope--help.stable.err
@@ -16,6 +16,7 @@ stethoscope [options]
   -P | --password=<password>
   -p | --port=<portnr>
   -h | --host=<hostname>
+  -c | --convert=<old formated file>
   -j | --json
   -o | --output=<file>
   -b | --beat=<delay> in milliseconds (default 50)
diff --git a/monetdb5/optimizer/Makefile.ag b/monetdb5/optimizer/Makefile.ag
--- a/monetdb5/optimizer/Makefile.ag
+++ b/monetdb5/optimizer/Makefile.ag
@@ -24,6 +24,7 @@ lib_optimizer = {
                opt_candidates.c opt_candidates.h \
                opt_constants.c opt_constants.h \
                opt_costModel.c opt_costModel.h \
+               opt_cquery.c opt_cquery.h \
                opt_dataflow.c opt_dataflow.h \
                opt_deadcode.c opt_deadcode.h \
                opt_emptybind.c opt_emptybind.h \
diff --git a/monetdb5/optimizer/opt_cquery.c b/monetdb5/optimizer/opt_cquery.c
new file mode 100644
--- /dev/null
+++ b/monetdb5/optimizer/opt_cquery.c
@@ -0,0 +1,324 @@
+/*
+ * The contents of this file are subject to the MonetDB Public License
+ * Version 1.1 (the "License"); you may not use this file except in
+ * compliance with the License. You may obtain a copy of the License at
+ * http://www.monetdb.org/Legal/MonetDBLicense
+ *
+ * Software distributed under the License is distributed on an "AS IS"
+ * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+ * License for the specific language governing rights and limitations
+ * under the License.
+ *
+ * The Original Code is the MonetDB Database System.
+ *
+ * The Initial Developer of the Original Code is CWI.
+ * Portions created by CWI are Copyright (C) 1997-July 2008 CWI.
+ * Copyright August 2008-2015 MonetDB B.V.
+ * All Rights Reserved.
+ */
+
+/*
+ * (author) M. Kersten
+ * Assume simple queries . 
+ */
+/*
+ * We keep a flow dependency table to detect.
+ */
+#include "monetdb_config.h"
+#include "opt_cquery.h"
+#include "opt_deadcode.h"
+#include "mal_interpreter.h"    /* for showErrors() */
+#include "mal_builder.h"
+#include "opt_dataflow.h"
+
+#define MAXBSKT 64
+#define getStreamTableInfo(S,T) \
+       for(fnd=0, k= 0; k< btop; k++) \
+       if( strcmp(schemas[k], S)== 0 && strcmp(tables[k], T)== 0 ){ \
+               fnd= 1; break;\
+       }
+
+//#define DEBUG_OPT_CQUERY
+
+str
+OPTcqueryImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
+{
+       int i, j, k, fnd, limit, slimit;
+       InstrPtr r, p, *old;
+       int *alias;
+       str  schemas[MAXBSKT];
+       str  tables[MAXBSKT];
+       int input[MAXBSKT]= {0};
+       int output[MAXBSKT]= {0};
+       int btop=0, lastmvc=0;
+       int noerror=0;
+       int mvcseen = 0;
+       int cq= strncmp(getFunctionId(getInstrPtr(mb,0)),"cq",2) == 0;
+       char buf[256];
+       lng usec = GDKusec();
+
+       (void) pci;
+       // Check applicability of optimizer by looking for streams
+       for(i =0; i< mb->stop; i++){
+               p= getInstrPtr(mb,i);
+               if( getModuleId(p) == basketRef||
+                       getModuleId(p) == cqueryRef)
+                       break;
+       }
+       if( i == mb->stop)
+               return MAL_SUCCEED;
+
+#ifdef DEBUG_OPT_CQUERY
+       mnstr_printf(cntxt->fdout, "#cquery optimizer start\n");
+       printFunction(cntxt->fdout, mb, stk, LIST_MAL_DEBUG);
+#endif
+       old = mb->stmt;
+       limit = mb->stop;
+       slimit = mb->ssize;
+
+       /* first analyse the query for streaming tables */
+       for (i = 1; i < limit && btop <MAXBSKT; i++){
+               p = old[i];
+               if( getModuleId(p)== basketRef && (getFunctionId(p)== 
registerRef || getFunctionId(p)== bindRef )  ){
+                       schemas[btop]= getVarConstant(mb, getArg(p,2)).val.sval;
+                       tables[btop]= getVarConstant(mb, getArg(p,3)).val.sval;
+#ifdef DEBUG_OPT_CQUERY
+                       mnstr_printf(cntxt->fdout, "#cquery bind stream table 
%s.%s\n", schemas[btop], tables[btop]);
+#endif
+                       for( j =0; j< btop ; j++)
+                       if( strcmp(schemas[j], schemas[btop])==0  && 
strcmp(tables[j],tables[btop]) ==0)
+                               break;
+                       input[j]= 1;
+                       if( j == btop)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to