Changeset: d9b6a4c9abcb for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d9b6a4c9abcb
Modified Files:
monetdb5/mal/Tests/recycle00.mal
monetdb5/mal/Tests/recycle01.mal
monetdb5/mal/Tests/recycle02.mal
monetdb5/mal/Tests/recycle03.mal
monetdb5/mal/Tests/recycle04.mal
monetdb5/mal/Tests/recycle05.mal
monetdb5/mal/Tests/recycle06.mal
monetdb5/mal/Tests/recycle07.mal
monetdb5/mal/Tests/recycle08.mal
monetdb5/mal/Tests/recycle09.mal
monetdb5/mal/Tests/recycle10.mal
monetdb5/mal/Tests/recycle11.mal
monetdb5/mal/Tests/recycle12.mal
monetdb5/mal/Tests/recycle13.mal
monetdb5/mal/mal_client.c
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_recycle.c
monetdb5/mal/mal_recycle.h
monetdb5/modules/mal/recycle.c
monetdb5/modules/mal/recycle.h
monetdb5/modules/mal/recycle.mal
monetdb5/optimizer/opt_dataflow.c
monetdb5/optimizer/opt_dataflow.h
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_recycler.c
monetdb5/optimizer/opt_support.c
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.mal
sql/test/Tests/setoptimizer.stable.err
sql/test/Tests/setoptimizer.stable.out
Branch: default
Log Message:
First step in reviving the recycler optimizer.
The recycler code should work with the new SQL generated code base.
Furthermore, we can trim down the number of variations and choose
a single one for production. The recycler tests scripts are mostly
brought into the right shape. Output still has to be validated.
diffs (truncated from 3289 to 300 lines):
diff --git a/monetdb5/mal/Tests/recycle00.mal b/monetdb5/mal/Tests/recycle00.mal
--- a/monetdb5/mal/Tests/recycle00.mal
+++ b/monetdb5/mal/Tests/recycle00.mal
@@ -6,8 +6,9 @@ function qry();
io.print(j);
end qry;
+optimizer.recycler("user","qry");
+mdb.List("user","qry");
recycle.setAdmPolicy(1);
-optimizer.recycle("user","qry");
io.print("start");
qry();
io.print("next");
diff --git a/monetdb5/mal/Tests/recycle01.mal b/monetdb5/mal/Tests/recycle01.mal
--- a/monetdb5/mal/Tests/recycle01.mal
+++ b/monetdb5/mal/Tests/recycle01.mal
@@ -1,7 +1,21 @@
#test the basics of the recycler
-# reusing select results
+#reusing select results
-function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
+module sql;
+function sql.mvc():int;
+ return mvc:=1;
+end mvc;
+
+function sql.tid(mvc:int,s:str,t:str):bat[:oid,:oid];
+b:= bat.new(:oid,:oid);
+barrier i:= 0:oid;
+ bat.append(b,i);
+ redo i:= iterator.next(1:oid,11:oid);
+exit i;
+ return tid:= b;
+end tid;
+
+function sql.bind(mvc:int, s:str,t:str,c:str,i:int):bat[:oid,:int];
b:= bat.new(:oid,:int);
bat.insert(b,0@0,0);
bat.insert(b,1@0,1);
@@ -19,13 +33,16 @@ function user.bind(s:str,t:str,c:str,i:i
end bind;
function qry(low:int, hgh:int);
- b:= user.bind("schema","table","column",0);
- s1:= algebra.select(b,low,hgh);
+ m:= sql.mvc();
+ x:bat[:oid,:oid] := sql.tid(m,"sys","tbl");
+ b:bat[:oid,:int]:= sql.bind(m,"sys","tbl","col",0);
+ s:= algebra.subselect(b,x,low,hgh,true,true,false);
end qry;
recycle.setAdmPolicy(1);
recycle.setReusePolicy(1);
-optimizer.recycle("user","qry");
+optimizer.recycler("user","qry");
+mdb.list("user","qry");
io.print("start");
qry(1,10);
io.print("zoom in");
diff --git a/monetdb5/mal/Tests/recycle02.mal b/monetdb5/mal/Tests/recycle02.mal
--- a/monetdb5/mal/Tests/recycle02.mal
+++ b/monetdb5/mal/Tests/recycle02.mal
@@ -1,7 +1,21 @@
#test the basics of the recycler
# re-use joins temporal constrainted
-function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
+module sql;
+function sql.mvc():int;
+ return mvc:=1;
+end mvc;
+
+function sql.tid(mvc:int,s:str,t:str):bat[:oid,:oid];
+b:= bat.new(:oid,:oid);
+barrier i:= 0:oid;
+ bat.append(b,i);
+ redo i:= iterator.next(1:oid,11:oid);
+exit i;
+ return tid:= b;
+end tid;
+
+function sql.bind(m:int,s:str,t:str,c:str,i:int):bat[:oid,:int];
b:= bat.new(:oid,:int);
bat.insert(b,0@0,0);
bat.insert(b,1@0,1);
@@ -19,17 +33,18 @@ function user.bind(s:str,t:str,c:str,i:i
end bind;
function qry(low:int, hgh:int);
- b:= user.bind("schema","table","column",0);
- s1:= algebra.select(b,low,hgh);
- m0:= algebra.markT(s1, 0@0);
- mr:= bat.reverse(m0);
- j:= algebra.join(mr,s1);
+ m:= sql.mvc();
+ x:bat[:oid,:oid] := sql.tid(m,"sys","tbl");
+ b:bat[:oid,:int]:= sql.bind(m,"sys","tbl","col",0);
+ s1:= algebra.subselect(b,x,low,hgh,true,true,false);
+ j:= algebra.join(s1,b);
io.print(j);
end qry;
recycle.setAdmPolicy(2,2);
recycle.setReusePolicy(1);
-optimizer.recycle("user","qry");
+optimizer.recycler("user","qry");
+mdb.list("user","qry");
io.print("start");
qry(1,10);
io.print("zoom in");
diff --git a/monetdb5/mal/Tests/recycle03.mal b/monetdb5/mal/Tests/recycle03.mal
--- a/monetdb5/mal/Tests/recycle03.mal
+++ b/monetdb5/mal/Tests/recycle03.mal
@@ -1,7 +1,20 @@
#test the basics of the recycler
# re-use joins size constrainted
+module sql;
+function sql.mvc():int;
+ return mvc:=1;
+end mvc;
-function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
+function sql.tid(mvc:int,s:str,t:str):bat[:oid,:oid];
+b:= bat.new(:oid,:oid);
+barrier i:= 0:oid;
+ bat.append(b,i);
+ redo i:= iterator.next(1:oid,11:oid);
+exit i;
+ return tid:= b;
+end tid;
+
+function sql.bind(m:int,s:str,t:str,c:str,i:int):bat[:oid,:int];
b:= bat.new(:oid,:int);
bat.insert(b,0@0,0);
bat.insert(b,1@0,1);
@@ -19,17 +32,18 @@ function user.bind(s:str,t:str,c:str,i:i
end bind;
function qry(low:int, hgh:int);
- b:= user.bind("schema","table","column",0);
- s1:= algebra.select(b,low,hgh);
- m0:= algebra.markT(s1, 0@0);
- mr:= bat.reverse(m0);
- j:= algebra.join(mr,s1);
+ m:= sql.mvc();
+ x:bat[:oid,:oid] := sql.tid(m,"sys","tbl");
+ b:bat[:oid,:int]:= sql.bind(m,"sys","tbl","col",0);
+ s1:= algebra.subselect(b,x,low,hgh,true,true,false);
+ j:= algebra.join(s1,b);
io.print(j);
end qry;
recycle.setAdmPolicy(3,1);
recycle.setReusePolicy(1);
-optimizer.recycle("user","qry");
+optimizer.recycler("user","qry");
+mdb.list("user","qry");
io.print("start");
qry(1,10);
io.print("zoom in");
diff --git a/monetdb5/mal/Tests/recycle04.mal b/monetdb5/mal/Tests/recycle04.mal
--- a/monetdb5/mal/Tests/recycle04.mal
+++ b/monetdb5/mal/Tests/recycle04.mal
@@ -1,7 +1,20 @@
#test the basics of the recycler
#check retention of function calls
+module sql;
+function sql.mvc():int;
+ return mvc:=1;
+end mvc;
-function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
+function sql.tid(mvc:int,s:str,t:str):bat[:oid,:oid];
+b:= bat.new(:oid,:oid);
+barrier i:= 0:oid;
+ bat.append(b,i);
+ redo i:= iterator.next(1:oid,11:oid);
+exit i;
+ return tid:= b;
+end tid;
+
+function sql.bind(m:int,s:str,t:str,c:str,i:int):bat[:oid,:int];
b:= bat.new(:oid,:int);
bat.insert(b,0@0,0);
bat.insert(b,1@0,1);
@@ -18,9 +31,11 @@ function user.bind(s:str,t:str,c:str,i:i
return bind:=b;
end bind;
-function qry(low:int, hgh:int):bat[:oid,:int];
- b:= user.bind("schema","table","column",0);
- s1:= algebra.select(b,low,hgh);
+function qry(low:int, hgh:int);
+ m:= sql.mvc();
+ x:bat[:oid,:oid] := sql.tid(m,"sys","tbl");
+ b:bat[:oid,:int]:= sql.bind(m,"sys","tbl","col",0);
+ s1:= algebra.subselect(b,x,low,hgh,true,true,false);
return qry:=s1;
end qry;
@@ -30,8 +45,8 @@ function tst();
qry(1,10);
end tst;
-optimizer.recycle("user","qry");
-optimizer.recycle("user","tst");
+optimizer.recycler("user","qry");
+optimizer.recycler("user","tst");
mdb.List("user","qry");
mdb.List("user","tst");
recycle.setReusePolicy(2);
diff --git a/monetdb5/mal/Tests/recycle05.mal b/monetdb5/mal/Tests/recycle05.mal
--- a/monetdb5/mal/Tests/recycle05.mal
+++ b/monetdb5/mal/Tests/recycle05.mal
@@ -1,6 +1,19 @@
# Test of LRU cache policy in limited memory (12 RU)
+module sql;
+function sql.mvc():int;
+ return mvc:=1;
+end mvc;
-function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
+function sql.tid(mvc:int,s:str,t:str):bat[:oid,:oid];
+b:= bat.new(:oid,:oid);
+barrier i:= 0:oid;
+ bat.append(b,i);
+ redo i:= iterator.next(1:oid,1000:oid);
+exit i;
+ return tid:= b;
+end tid;
+
+function sql.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
b:= bat.new(:oid,:int);
barrier i:= 0:int;
bat.append(b,i);
@@ -10,16 +23,17 @@ return bind:=b;
end bind;
function qry(low:int, hgh:int);
- b:= user.bind("schema","table","column",0);
+ m:= sql.mvc();
+ x:bat[:oid,:oid] := sql.tid(m,"sys","tbl");
+ b:bat[:oid,:int]:= sql.bind(m,"sys","tbl","col",0);
+ s1:= algebra.subselect(b,x,low,hgh,true,true,false);
s1:= algebra.select(b,low,hgh);
- m0:= algebra.markT(s1, 0@0);
- mr:= bat.reverse(m0);
end qry;
recycle.setAdmPolicy(1);
recycle.setReusePolicy(1);
recycle.setCachePolicy(1,10,12);
-optimizer.recycle("user","qry");
+optimizer.recycle.("user","qry");
io.print("start");
qry(100,120);
diff --git a/monetdb5/mal/Tests/recycle06.mal b/monetdb5/mal/Tests/recycle06.mal
--- a/monetdb5/mal/Tests/recycle06.mal
+++ b/monetdb5/mal/Tests/recycle06.mal
@@ -1,6 +1,19 @@
# Test of LRU cache policy in limited cache (10 lines, 1 is always taken by
fake 0)
+module sql;
+function sql.mvc():int;
+ return mvc:=1;
+end mvc;
+
+function sql.tid(mvc:int,s:str,t:str):bat[:oid,:oid];
+b:= bat.new(:oid,:oid);
+barrier i:= 0:oid;
+ bat.append(b,i);
+ redo i:= iterator.next(1:oid,1000:oid);
+exit i;
+ return tid:= b;
+end tid;
-function user.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
+function sql.bind(s:str,t:str,c:str,i:int):bat[:oid,:int];
b:= bat.new(:oid,:int);
barrier i:= 0:int;
bat.append(b,i);
@@ -10,16 +23,16 @@ return bind:=b;
end bind;
function qry(low:int, hgh:int);
- b:= user.bind("schema","table","column",0);
- s1:= algebra.select(b,low,hgh);
- m0:= algebra.markT(s1, 0@0);
- mr:= bat.reverse(m0);
+ m:= sql.mvc();
+ x:bat[:oid,:oid] := sql.tid(m,"sys","tbl");
+ b:bat[:oid,:int]:= sql.bind(m,"sys","tbl","col",0);
+ s1:= algebra.subselect(b,x,low,hgh,true,true,false);
end qry;
recycle.setAdmPolicy(1);
recycle.setReusePolicy(1);
recycle.setCachePolicy(1,9);
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list