Changeset: bd6f0896ce02 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/bd6f0896ce02
Modified Files:
        monetdb5/optimizer/opt_generator.c
        sql/backends/monet5/generator/Tests/rangejoin.test
        sql/backends/monet5/generator/generator.c
Branch: default
Log Message:

add rangejoin generator optimizer


diffs (75 lines):

diff --git a/monetdb5/optimizer/opt_generator.c 
b/monetdb5/optimizer/opt_generator.c
--- a/monetdb5/optimizer/opt_generator.c
+++ b/monetdb5/optimizer/opt_generator.c
@@ -16,7 +16,7 @@
 
 /*
  * (c) Martin Kersten, Sjoerd Mullender
- * Series generating module for integer, decimal, real, double and timestamps.
+ * Series generating module for integer, decimal, real, double, date and 
timestamps.
  */
 
 #define errorCheck(P,IDX,MOD,I)                                                
                                \
@@ -144,6 +144,9 @@ OPTgeneratorImplementation(Client cntxt,
                        typeChecker(cntxt->usermodule, mb, p, i, TRUE);
                        pushInstruction(mb, p);
                        old[i] = NULL;
+               } else if (getModuleId(p) == algebraRef && getFunctionId(p) == 
rangejoinRef
+                                  && series[getArg(p, 2)]) {
+                       errorCheck(p, i, algebraRef, getArg(p, 2));
                } else if (getModuleId(p) == algebraRef && getFunctionId(p) == 
selectRef
                                   && series[getArg(p, 1)]) {
                        errorCheck(p, i, algebraRef, getArg(p, 1));
diff --git a/sql/backends/monet5/generator/Tests/rangejoin.test 
b/sql/backends/monet5/generator/Tests/rangejoin.test
--- a/sql/backends/monet5/generator/Tests/rangejoin.test
+++ b/sql/backends/monet5/generator/Tests/rangejoin.test
@@ -6,7 +6,7 @@ INSERT INTO ranges VALUES (1,3),(2,4),(5
 
 query III rowsort
 SELECT *
-FROM generate_series(0,10,1) AS s JOIN ranges ON ( s.value >= ranges.low AND 
s.value < ranges.hgh)
+FROM generate_series(cast(0 as integer),10,1) AS s JOIN ranges ON ( s.value >= 
ranges.low AND s.value < ranges.hgh)
 ----
 1
 1
diff --git a/sql/backends/monet5/generator/generator.c 
b/sql/backends/monet5/generator/generator.c
--- a/sql/backends/monet5/generator/generator.c
+++ b/sql/backends/monet5/generator/generator.c
@@ -1643,8 +1643,16 @@ str VLTgenerator_rangejoin(Client cntxt,
                BBPunfix(blow->batCacheid);
                throw(MAL,"generator.rangejoin", SQLSTATE(HY002) 
RUNTIME_OBJECT_MISSING);
        }
-       li = *getArgReference_bit(stk,pci,5);
-       ri = *getArgReference_bit(stk,pci,6);
+       /* ToDo handle cands ie arguments 5,6 */
+       li = *getArgReference_bit(stk,pci,7);
+       ri = *getArgReference_bit(stk,pci,8);
+       bit anti = *getArgReference_bit(stk,pci,9);
+       bit nil = *getArgReference_bit(stk,pci,10);
+       lng estimate = *getArgReference_lng(stk,pci,11);
+       /* ToDo handle anti, symmetric and estimate */
+       (void)anti;
+       (void)nil;
+       (void)estimate;
 
        cnt = BATcount(blow);
        limit = 2 * cnt; //top off result before expansion
@@ -1780,12 +1788,12 @@ static mel_func generator_init_funcs[] =
  pattern("generator", "join", VLTgenerator_join, false, "", args(2,4, 
batarg("l",oid),batarg("r",oid),batarg("b",lng),batarg("gen",lng))),
  pattern("generator", "join", VLTgenerator_join, false, "", args(2,4, 
batarg("l",oid),batarg("r",oid),batarg("b",flt),batarg("gen",flt))),
  pattern("generator", "join", VLTgenerator_join, false, "Overloaded join 
operation", args(2,4, 
batarg("l",oid),batarg("r",oid),batarg("b",dbl),batarg("gen",dbl))),
- pattern("generator", "join", VLTgenerator_rangejoin, false, "", args(2,7, 
batarg("l",oid),batarg("r",oid),batarg("gen",bte),batarg("low",bte),batarg("hgh",bte),arg("li",bit),arg("ri",bit))),
- pattern("generator", "join", VLTgenerator_rangejoin, false, "", args(2,7, 
batarg("l",oid),batarg("r",oid),batarg("gen",sht),batarg("low",sht),batarg("hgh",sht),arg("li",bit),arg("ri",bit))),
- pattern("generator", "join", VLTgenerator_rangejoin, false, "", args(2,7, 
batarg("l",oid),batarg("r",oid),batarg("gen",int),batarg("low",int),batarg("hgh",int),arg("li",bit),arg("ri",bit))),
- pattern("generator", "join", VLTgenerator_rangejoin, false, "", args(2,7, 
batarg("l",oid),batarg("r",oid),batarg("gen",lng),batarg("low",lng),batarg("hgh",lng),arg("li",bit),arg("ri",bit))),
- pattern("generator", "join", VLTgenerator_rangejoin, false, "", args(2,7, 
batarg("l",oid),batarg("r",oid),batarg("gen",flt),batarg("low",flt),batarg("hgh",flt),arg("li",bit),arg("ri",bit))),
- pattern("generator", "join", VLTgenerator_rangejoin, false, "Overloaded range 
join operation", args(2,7, 
batarg("l",oid),batarg("r",oid),batarg("gen",dbl),batarg("low",dbl),batarg("hgh",dbl),arg("li",bit),arg("ri",bit))),
+ pattern("generator", "rangejoin", VLTgenerator_rangejoin, false, "", 
args(2,12, 
batarg("l",oid),batarg("r",oid),batarg("gen",bte),batarg("low",bte),batarg("hgh",bte),batarg("lc",oid),batarg("rc",oid),arg("li",bit),arg("ri",bit),arg("anti",bit),arg("sym",bit),arg("est",lng))),
+ pattern("generator", "rangejoin", VLTgenerator_rangejoin, false, "", 
args(2,12, 
batarg("l",oid),batarg("r",oid),batarg("gen",sht),batarg("low",sht),batarg("hgh",sht),batarg("lc",oid),batarg("rc",oid),arg("li",bit),arg("ri",bit),arg("anti",bit),arg("sym",bit),arg("est",lng))),
+ pattern("generator", "rangejoin", VLTgenerator_rangejoin, false, "", 
args(2,12, 
batarg("l",oid),batarg("r",oid),batarg("gen",int),batarg("low",int),batarg("hgh",int),batarg("lc",oid),batarg("rc",oid),arg("li",bit),arg("ri",bit),arg("anti",bit),arg("sym",bit),arg("est",lng))),
+ pattern("generator", "rangejoin", VLTgenerator_rangejoin, false, "", 
args(2,12, 
batarg("l",oid),batarg("r",oid),batarg("gen",lng),batarg("low",lng),batarg("hgh",lng),batarg("lc",oid),batarg("rc",oid),arg("li",bit),arg("ri",bit),arg("anti",bit),arg("sym",bit),arg("est",lng))),
+ pattern("generator", "rangejoin", VLTgenerator_rangejoin, false, "", 
args(2,12, 
batarg("l",oid),batarg("r",oid),batarg("gen",flt),batarg("low",flt),batarg("hgh",flt),batarg("lc",oid),batarg("rc",oid),arg("li",bit),arg("ri",bit),arg("anti",bit),arg("sym",bit),arg("est",lng))),
+ pattern("generator", "rangejoin", VLTgenerator_rangejoin, false, "Overloaded 
range join operation", args(2,12, 
batarg("l",oid),batarg("r",oid),batarg("gen",dbl),batarg("low",dbl),batarg("hgh",dbl),batarg("lc",oid),batarg("rc",oid),arg("li",bit),arg("ri",bit),arg("anti",bit),arg("sym",bit),arg("est",lng))),
 #ifdef HAVE_HGE
  pattern("generator", "series", VLTgenerator_table, false, "", args(1,3, 
batarg("",hge),arg("first",hge),arg("limit",hge))),
  pattern("generator", "series", VLTgenerator_table, false, "Create and 
materialize a generator table", args(1,4, 
batarg("",hge),arg("first",hge),arg("limit",hge),arg("step",hge))),
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to