Changeset: 6d8a941642bd for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6d8a941642bd
Modified Files:
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
        
monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out.single
        monetdb5/mal/Tests/dynamicload.malC
        monetdb5/mal/Tests/dynamicload.stable.err
        monetdb5/mal/mal_listing.c
        monetdb5/optimizer/Tests/JPexample.malC
        monetdb5/optimizer/Tests/JPexample.stable.out
        monetdb5/optimizer/Tests/projectionchain.malC
        monetdb5/optimizer/Tests/projectionchain.stable.out
        monetdb5/optimizer/opt_pipes.c
        monetdb5/optimizer/opt_projectionpath.c
        sql/test/Tests/setoptimizer.stable.err
        sql/test/Tests/setoptimizer.stable.out
        sql/test/Tests/setoptimizer.stable.out.Windows
Branch: default
Log Message:

Intermittent commit
before the projection prefix optimization is enabled.


diffs (truncated from 603 to 300 lines):

diff --git 
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err 
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.err
@@ -30,16 +30,16 @@ stderr of test 'opt_sql_append` in direc
 # 22:58:57 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=rome" 
"--port=36275"
 # 22:58:57 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-12681/.s.monetdb.34697
+MAPI  = (monetdb) /var/tmp/mtest-5498/.s.monetdb.31321
 QUERY = explain copy into ttt from '\tmp/xyz';
 ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz
-MAPI  = (monetdb) /var/tmp/mtest-12681/.s.monetdb.34697
+MAPI  = (monetdb) /var/tmp/mtest-5498/.s.monetdb.31321
 QUERY = explain copy into ttt from 'a:\tmp/xyz';
 ERROR = !COPY INTO: filename must have absolute path: a:\tmp/xyz
-MAPI  = (monetdb) /var/tmp/mtest-12681/.s.monetdb.34697
+MAPI  = (monetdb) /var/tmp/mtest-5498/.s.monetdb.31321
 QUERY = explain copy into ttt from '\tmp/xyz';
 ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz
-MAPI  = (monetdb) /var/tmp/mtest-12681/.s.monetdb.34697
+MAPI  = (monetdb) /var/tmp/mtest-5498/.s.monetdb.31321
 QUERY = explain copy into ttt from 'Z:/tmp/xyz';
 ERROR = !COPY INTO: filename must have absolute path: Z:/tmp/xyz
 
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
@@ -56,7 +56,7 @@ Ready.
 % def # name
 % clob # type
 % 541 # length
-[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.garbageCollector();"
      ]
+[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();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.garbageCollector();"
      ]
 #explain copy into ttt from '/tmp/xyz';
 % .explain # table_name
 % mal # name
@@ -90,7 +90,7 @@ end user.s4_1;
 % def # name
 % clob # type
 % 564 # length
-[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.sql_append();optimizer.garbageCollector();"
       ]
+[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();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.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
@@ -56,7 +56,7 @@ Ready.
 % def # name
 % clob # type
 % 541 # length
-[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.garbageCollector();"
      ]
+[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();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.garbageCollector();"
      ]
 #explain copy into ttt from '/tmp/xyz';
 % .explain # table_name
 % mal # name
@@ -88,7 +88,7 @@ end user.s4_1;
 % def # name
 % clob # type
 % 564 # length
-[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();optimizer.mitosis();optimizer.mergetable();optimizer.deadcode();optimizer.aliases();optimizer.constants();optimizer.commonTerms();optimizer.projectionpath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.profiler();optimizer.sql_append();optimizer.garbageCollector();"
       ]
+[ 
"optimizer.inline();optimizer.candidates();optimizer.remap();optimizer.costModel();optimizer.coercions();optimizer.evaluate();optimizer.aliases();optimizer.pushselect();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.sql_append();optimizer.garbageCollector();"
       ]
 #explain copy into ttt from '/tmp/xyz';
 % .explain # table_name
 % mal # name
diff --git a/monetdb5/mal/Tests/dynamicload.malC 
b/monetdb5/mal/Tests/dynamicload.malC
--- a/monetdb5/mal/Tests/dynamicload.malC
+++ b/monetdb5/mal/Tests/dynamicload.malC
@@ -1,10 +1,10 @@
 # examples of non-bindable instructions
 
+#load unknown library
+library UNKNOWlib;
+
 command wrong()
 address UNKOWNaddress
 comment "Should not be callable";
 
 wrong();
-
-#load unknown library
-library UNKNOWlib;
diff --git a/monetdb5/mal/Tests/dynamicload.stable.err 
b/monetdb5/mal/Tests/dynamicload.stable.err
--- a/monetdb5/mal/Tests/dynamicload.stable.err
+++ b/monetdb5/mal/Tests/dynamicload.stable.err
@@ -80,33 +80,21 @@ stderr of test 'dynamicload` in director
 # 13:21:38 >  "mclient" "-lmal" "-ftest" "-Eutf-8" 
"--host=/var/tmp/mtest-18020" "--port=37961"
 # 13:21:38 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-21455/.s.monetdb.39502
+MAPI  = (monetdb) /var/tmp/mtest-7978/.s.monetdb.32278
 QUERY = # examples of non-bindable instructions
         
+        #load unknown library
+        library UNKNOWlib;
+        
         command wrong()
         address UNKOWNaddress
         comment "Should not be callable";
         
         wrong();
+ERROR = !TypeException:user.main[3]:object code for command user.wrong missing
+        !TypeException:user.main[3]:'user.wrong' undefined in:     
user.wrong();
         
-        #load unknown library
-        library UNKNOWlib;
-ERROR = !MALException:MAL.getAddress:address of 'user.UNKOWNaddress' not found
-MAPI  = (monetdb) /var/tmp/mtest-21455/.s.monetdb.39502
-QUERY = # examples of non-bindable instructions
-        
-        command wrong()
-        address UNKOWNaddress
-        comment "Should not be callable";
-        
-        wrong();
-        
-        #load unknown library
-        library UNKNOWlib;
-ERROR = !TypeException:user.main[2]:object code for command user.wrong missing
-        !TypeException:user.main[2]:'user.wrong' undefined in:     
user.wrong();
+# 13:26:24 >  
+# 13:26:24 >  "Done."
+# 13:26:24 >  
 
-# 13:21:38 >  
-# 13:21:38 >  "Done."
-# 13:21:38 >  
-
diff --git a/monetdb5/mal/mal_listing.c b/monetdb5/mal/mal_listing.c
--- a/monetdb5/mal/mal_listing.c
+++ b/monetdb5/mal/mal_listing.c
@@ -325,7 +325,7 @@ instruction2str(MalBlkPtr mb, MalStkPtr 
                return fcnDefinition(mb, p, s, flg, base, len);
        case REMsymbol:
        case NOOPsymbol:
-               if(getVar(mb, getArg(p, 0))->value.val.sval) 
+               if(getVar(mb, getArg(p, 0))->value.val.sval && getVar(mb, 
getArg(p, 0))->value.len > 0) 
                        snprintf(t,(len-(t-base)), "#%s ", getVar(mb, getArg(p, 
0))->value.val.sval);
                else
                        snprintf(t, (len-(t-base)), "# ");
diff --git a/monetdb5/optimizer/Tests/JPexample.malC 
b/monetdb5/optimizer/Tests/JPexample.malC
--- a/monetdb5/optimizer/Tests/JPexample.malC
+++ b/monetdb5/optimizer/Tests/JPexample.malC
@@ -2,13 +2,14 @@
 function foo();
     a:= bat.new(:oid,:oid);
     b:= bat.new(:oid,:oid);
-    c:= bat.new(:oid,:str);
+    c:= bat.new(:oid,:oid);
+    d:= bat.new(:oid,:oid);
     j1:= algebra.projection(a,b);
     j2:= algebra.projection(j1,c);
-    j3:= algebra.projection(b,b);
-    j4:= algebra.projection(b,j3);
+    j3:= algebra.projectionpath(a,b,c,d);
+    j4:= algebra.projectionpath(a,b,c);
+    j5:= algebra.projection(j4,b);
 end;
 
-mdb.List("user","foo");
 optimizer.projectionpath("user","foo");
 mdb.List("user","foo");
diff --git a/monetdb5/optimizer/Tests/JPexample.stable.out 
b/monetdb5/optimizer/Tests/JPexample.stable.out
--- a/monetdb5/optimizer/Tests/JPexample.stable.out
+++ b/monetdb5/optimizer/Tests/JPexample.stable.out
@@ -33,22 +33,14 @@ Ready.
 function user.foo():void;                      #[0]  0 
     a:bat[:oid] := bat.new(:oid,:oid);         #[1] CMDBATnew 1 <- 2 2 
     b:bat[:oid] := bat.new(:oid,:oid);         #[2] CMDBATnew 3 <- 2 2 
-    c:bat[:str] := bat.new(:oid,:str);         #[3] CMDBATnew 4 <- 2 5 
-    j1:bat[:oid] := algebra.projection(a:bat[:oid],b:bat[:oid]);       #[4] 
ALGprojection 6 <- 1 3 
-    j2:bat[:str] := 
algebra.projectionpath(a:bat[:oid],b:bat[:oid],c:bat[:str]);       #[5] 
ALGprojectionpath 7 <- 1 3 4 
-    j3:bat[:oid] := algebra.projection(b:bat[:oid],b:bat[:oid]);       #[6] 
ALGprojection 8 <- 3 3 
-    j4:bat[:oid] := 
algebra.projectionpath(b:bat[:oid],b:bat[:oid],b:bat[:oid]);       #[7] 
ALGprojectionpath 9 <- 3 3 3 
-end user.foo;                                  #[8]  
-#mdb.List("user","foo");
-function user.foo():void;                      #[0]  0 
-    a:bat[:oid] := bat.new(:oid,:oid);         #[1] CMDBATnew 1 <- 2 2 
-    b:bat[:oid] := bat.new(:oid,:oid);         #[2] CMDBATnew 3 <- 2 2 
-    c:bat[:str] := bat.new(:oid,:str);         #[3] CMDBATnew 4 <- 2 5 
-    j1:bat[:oid] := algebra.projection(a:bat[:oid],b:bat[:oid]);       #[4] 
ALGprojection 6 <- 1 3 
-    j2:bat[:str] := 
algebra.projectionpath(a:bat[:oid],b:bat[:oid],c:bat[:str]);       #[5] 
ALGprojectionpath 7 <- 1 3 4 
-    j3:bat[:oid] := algebra.projection(b:bat[:oid],b:bat[:oid]);       #[6] 
ALGprojection 8 <- 3 3 
-    j4:bat[:oid] := 
algebra.projectionpath(b:bat[:oid],b:bat[:oid],b:bat[:oid]);       #[7] 
ALGprojectionpath 9 <- 3 3 3 
-end user.foo;                                  #[8]  
+    c:bat[:oid] := bat.new(:oid,:oid);         #[3] CMDBATnew 4 <- 2 2 
+    d:bat[:oid] := bat.new(:oid,:oid);         #[4] CMDBATnew 5 <- 2 2 
+    j1:bat[:oid] := algebra.projection(a:bat[:oid],b:bat[:oid]);       #[5] 
ALGprojection 6 <- 1 3 
+    j2:bat[:oid] := 
algebra.projectionpath(a:bat[:oid],b:bat[:oid],c:bat[:oid]);       #[6] 
ALGprojectionpath 7 <- 1 3 4 
+    j3:bat[:any] := 
algebra.projectionpath(a:bat[:oid],b:bat[:oid],c:bat[:oid],d:bat[:oid]);   #[7] 
ALGprojectionpath 8 <- 1 3 4 5 
+    j4:bat[:any] := 
algebra.projectionpath(a:bat[:oid],b:bat[:oid],c:bat[:oid]);       #[8] 
ALGprojectionpath 9 <- 1 3 4 
+    j5:bat[:oid] := 
algebra.projectionpath(a:bat[:oid],b:bat[:oid],c:bat[:oid],b:bat[:oid]);   #[9] 
ALGprojectionpath 10 <- 1 3 4 3 
+end user.foo;                                  #[10]  
 
 # 06:41:06 >  
 # 06:41:06 >  "Done."
diff --git a/monetdb5/optimizer/Tests/projectionchain.malC 
b/monetdb5/optimizer/Tests/projectionchain.malC
--- a/monetdb5/optimizer/Tests/projectionchain.malC
+++ b/monetdb5/optimizer/Tests/projectionchain.malC
@@ -48,6 +48,16 @@ l := algebra.projection(f,k);
 io.print(g);
 io.print(l);
 
+# recognize common heads
+e1 := algebra.projection(a,b);
+e2 := algebra.projection(e1,b);
+f1 := algebra.projection(a,b);
+f2 := algebra.projection(f1,b);
+g1 := algebra.projection(e2,d);
+l1 := algebra.projection(f2,k);
+#io.print(g1);
+#io.print(l1);
+
 h := algebra.projectionpath(c,d);
 io.print(h);
 
diff --git a/monetdb5/optimizer/Tests/projectionchain.stable.out 
b/monetdb5/optimizer/Tests/projectionchain.stable.out
--- a/monetdb5/optimizer/Tests/projectionchain.stable.out
+++ b/monetdb5/optimizer/Tests/projectionchain.stable.out
@@ -69,6 +69,15 @@ function user.qry():void;
     l := algebra.projection(f,k);
     io.print(g);
     io.print(l);
+# recognize common heads 
+    e1 := algebra.projection(a,b);
+    e2:bat[:oid] := algebra.projectionpath(a,b,b);
+    f1 := algebra.projection(a,b);
+    f2:bat[:oid] := algebra.projectionpath(a,b,b);
+    g1:bat[:str] := algebra.projectionpath(a,b,b,d);
+    l1:bat[:int] := algebra.projectionpath(a,b,b,k);
+#io.print(g1); 
+#io.print(l1); 
     h := algebra.projectionpath(c,d);
     io.print(h);
     i := algebra.projectionpath(b,c,d);
@@ -123,6 +132,15 @@ function user.qry():void;
     l := algebra.projection(f,k);
     io.print(g);
     io.print(l);
+# recognize common heads 
+    e1 := algebra.projection(a,b);
+    e2:bat[:oid] := algebra.projectionpath(a,b,b);
+    f1 := algebra.projection(a,b);
+    f2:bat[:oid] := algebra.projectionpath(a,b,b);
+    g1:bat[:str] := algebra.projectionpath(a,b,b,d);
+    l1:bat[:int] := algebra.projectionpath(a,b,b,k);
+#io.print(g1); 
+#io.print(l1); 
     h := algebra.projectionpath(c,d);
     io.print(h);
     i := algebra.projectionpath(b,c,d);
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -79,8 +79,8 @@ static struct PIPELINES {
         "optimizer.constants();"
         "optimizer.commonTerms();"
         "optimizer.projectionpath();"
+        "optimizer.deadcode();"
         "optimizer.reorder();"
-        "optimizer.deadcode();"
         "optimizer.reduce();"
         "optimizer.matpack();"
         "optimizer.dataflow();"
@@ -109,8 +109,8 @@ static struct PIPELINES {
         "optimizer.constants();"
         "optimizer.commonTerms();"
         "optimizer.projectionpath();"
+        "optimizer.deadcode();"
         "optimizer.reorder();"
-        "optimizer.deadcode();"
         "optimizer.reduce();"
         "optimizer.matpack();"
         "optimizer.dataflow();"
diff --git a/monetdb5/optimizer/opt_projectionpath.c 
b/monetdb5/optimizer/opt_projectionpath.c
--- a/monetdb5/optimizer/opt_projectionpath.c
+++ b/monetdb5/optimizer/opt_projectionpath.c
@@ -6,14 +6,10 @@
  * Copyright 1997 - July 2008 CWI, August 2008 - 2016 MonetDB B.V.
  */
 
-/*
- * Post-optimization. After the join path has been constructed
- * we could search for common subpaths. This heuristic is to
- * remove any pair which is used more than once.
- * Inner paths are often foreign key walks.
- * The heuristics is sufficient for the code produced by SQL frontend.
- * The alternative is to search for all possible subpaths and materialize them.
- * For example, using recursion for all common paths.
+/* author: M Kersten
+ * Post-optimization of projection lists.
+ * The algorithm is quadratic in the number of paths considered.
+ * This should be massaged out with a skip list structure.
  */
 #include "monetdb_config.h"
 #include "opt_projectionpath.h"
@@ -21,10 +17,131 @@
 //#undef OPTDEBUGprojectionpath 
 //#define OPTDEBUGprojectionpath  if(1)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to