Changeset: 31292d5ba8b6 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=31292d5ba8b6
Added Files:
        sql/test/mosaic/Tests/compressionRLE.stable.err
        sql/test/mosaic/Tests/compressionRLE.stable.out
        sql/test/mosaic/Tests/xqueries.sql
        sql/test/mosaic/Tests/xqueries.stable.err
        sql/test/mosaic/Tests/xqueries.stable.out
Removed Files:
        sql/test/mosaic/Tests/compressionSUM.sql
Modified Files:
        monetdb5/optimizer/opt_mosaic.c
        sql/test/mosaic/Tests/All
        sql/test/mosaic/Tests/compression.stable.err
        sql/test/mosaic/Tests/compression.stable.out
Branch: mosaic
Log Message:

Fixing the optimizer to deal with mosaic storage


diffs (truncated from 1303 to 300 lines):

diff --git a/monetdb5/optimizer/opt_mosaic.c b/monetdb5/optimizer/opt_mosaic.c
--- a/monetdb5/optimizer/opt_mosaic.c
+++ b/monetdb5/optimizer/opt_mosaic.c
@@ -63,6 +63,10 @@ OPTmosaicImplementation(Client cntxt, Ma
        if ( check == NULL)
                return 0;
 
+#ifdef _DEBUG_MOSAIC_
+       mnstr_printf(cntxt->fdout,"#mosaic implementation\n");
+    printFunction(cntxt->fdout,mb,0,LIST_MAL_ALL);
+#endif
        limit = mb->stop;
        old = mb->stmt;
        if ( newMalBlkStmt(mb, mb->ssize) < 0)
@@ -95,6 +99,10 @@ OPTmosaicImplementation(Client cntxt, Ma
         if ( getModuleId(p) == algebraRef && getFunctionId(p) == joinRef && 
(check[getArg(p,2)] || check[getArg(p,1)]))
                 /* ok */;
                else
+               if ( p->token == ASSIGNsymbol)
+                       for( j=0; j < p->retc; j++)
+                               check[getArg(p,j)]= check[getArg(p,p->retc+j)];
+               else
                // mark all that needs decompression
                for(j= p->retc; j<p->argc; j++)
                if( check[getArg(p,j)] )
@@ -105,13 +113,18 @@ OPTmosaicImplementation(Client cntxt, Ma
         p = old[i];
         if ( getModuleId(p) == sqlRef && getFunctionId(p) == bindRef && 
getVarConstant(mb,getArg(p,5)).val.ival == 0 && check[getArg(p,0)]< 0){
                        //decompress before use such that it can be used 
properly
+                       pushInstruction(mb,p);
+                       j=  getArg(p,0);
+                       check[getArg(p,0)] = 0;
+
                        q = newStmt(mb,mosaicRef,decompressRef);
                        setVarType(mb,getArg(q,0), getVarType(mb,getArg(p,0)));
                        setVarUDFtype(mb,getArg(q,0));
-                       j=  getArg(p,0);
+
                        getArg(p,0) = getArg(q,0);
+                       q = pushArgument(mb,q,getArg(q,0));
                        getArg(q,0) = j;
-                       p = q;
+                       p= 0;
                } else
                // preferrably use compressed version
         if ( getModuleId(p) == algebraRef && (getFunctionId(p) == subselectRef 
|| getFunctionId(p) == thetasubselectRef) && check[getArg(p,1)] != 0)
@@ -122,7 +135,8 @@ OPTmosaicImplementation(Client cntxt, Ma
                 else
         if ( getModuleId(p) == algebraRef && getFunctionId(p) == joinRef && 
(check[getArg(p,2)] || check[getArg(p,1)] != 0))
                 setModuleId(p, mosaicRef);
-               pushInstruction(mb,p);
+               if( p )
+                       pushInstruction(mb,p);
     }
        GDKfree(old);
        GDKfree(check);
diff --git a/sql/test/mosaic/Tests/All b/sql/test/mosaic/Tests/All
--- a/sql/test/mosaic/Tests/All
+++ b/sql/test/mosaic/Tests/All
@@ -1,2 +1,3 @@
 compression
 compressionRLE
+xqueries
diff --git a/sql/test/mosaic/Tests/compression.stable.err 
b/sql/test/mosaic/Tests/compression.stable.err
--- a/sql/test/mosaic/Tests/compression.stable.err
+++ b/sql/test/mosaic/Tests/compression.stable.err
@@ -30,8 +30,9 @@ stderr of test 'compression` in director
 # 14:00:27 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-19726" "--port=38313"
 # 14:00:27 >  
 
-MAPI  = (monetdb) /var/tmp/mtest-19726/.s.monetdb.38313
+MAPI  = (monetdb) /var/tmp/mtest-28373/.s.monetdb.30051
 QUERY = drop table tmp3;
+ERROR = !DROP TABLE: no such table 'tmp3'
 
 
 # 14:00:27 >  
diff --git a/sql/test/mosaic/Tests/compression.stable.out 
b/sql/test/mosaic/Tests/compression.stable.out
--- a/sql/test/mosaic/Tests/compression.stable.out
+++ b/sql/test/mosaic/Tests/compression.stable.out
@@ -44,132 +44,27 @@ Ready.
 % .explain # table_name
 % mal # name
 % clob # type
-% 72 # length
-function user.s5_1{autoCommit=true}():void;
-barrier X_183 := language.dataflow();
+% 66 # length
+function user.s6_1{autoCommit=true}():void;
     X_2 := sql.mvc();
-    X_46:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",0,8);
-    X_61:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,0,8);
-    X_102 := algebra.leftfetchjoin(X_46,X_61);
-    X_48:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",1,8);
-    X_62:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,1,8);
-    X_103 := algebra.leftfetchjoin(X_48,X_62);
-    X_50:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",2,8);
-    X_63:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,2,8);
-    X_104 := algebra.leftfetchjoin(X_50,X_63);
-    X_52:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",3,8);
-    X_64:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,3,8);
-    X_105 := algebra.leftfetchjoin(X_52,X_64);
-    X_54:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",4,8);
-    X_65:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,4,8);
-    X_106 := algebra.leftfetchjoin(X_54,X_65);
-    X_56:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",5,8);
-    X_66:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,5,8);
-    X_107 := algebra.leftfetchjoin(X_56,X_66);
-    X_58:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",6,8);
-    X_67:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,6,8);
-    X_108 := algebra.leftfetchjoin(X_58,X_67);
-    X_60:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",7,8);
-    X_68:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,7,8);
-    X_109 := algebra.leftfetchjoin(X_60,X_68);
-    X_142 := mat.packIncrement(X_102,8);
-    X_143 := mat.packIncrement(X_142,X_103);
-    X_144 := mat.packIncrement(X_143,X_104);
-    X_145 := mat.packIncrement(X_144,X_105);
-    X_146 := mat.packIncrement(X_145,X_106);
-    X_147 := mat.packIncrement(X_146,X_107);
-    X_148 := mat.packIncrement(X_147,X_108);
-    X_7 := mat.packIncrement(X_148,X_109);
-    X_101:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,7,8);
-    X_141 := algebra.leftfetchjoin(X_60,X_101);
-    X_100:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,6,8);
-    X_140 := algebra.leftfetchjoin(X_58,X_100);
-    X_99:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,5,8);
-    X_139 := algebra.leftfetchjoin(X_56,X_99);
-    X_98:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,4,8);
-    X_138 := algebra.leftfetchjoin(X_54,X_98);
-    X_97:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,3,8);
-    X_137 := algebra.leftfetchjoin(X_52,X_97);
-    X_96:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,2,8);
-    X_136 := algebra.leftfetchjoin(X_50,X_96);
-    X_95:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,1,8);
-    X_135 := algebra.leftfetchjoin(X_48,X_95);
-    X_94:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,0,8);
-    X_134 := algebra.leftfetchjoin(X_46,X_94);
-    X_93:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,7,8);
-    X_133 := algebra.leftfetchjoin(X_60,X_93);
-    X_91:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,6,8);
-    X_132 := algebra.leftfetchjoin(X_58,X_91);
-    X_89:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,5,8);
-    X_131 := algebra.leftfetchjoin(X_56,X_89);
-    X_87:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,4,8);
-    X_130 := algebra.leftfetchjoin(X_54,X_87);
-    X_85:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,3,8);
-    X_129 := algebra.leftfetchjoin(X_52,X_85);
-    X_83:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,2,8);
-    X_128 := algebra.leftfetchjoin(X_50,X_83);
-    X_81:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,1,8);
-    X_127 := algebra.leftfetchjoin(X_48,X_81);
-    X_79:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,0,8);
-    X_126 := algebra.leftfetchjoin(X_46,X_79);
-    X_76:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,7,8);
-    X_117 := algebra.leftfetchjoin(X_60,X_76);
-    X_75:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,6,8);
-    X_116 := algebra.leftfetchjoin(X_58,X_75);
-    X_74:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,5,8);
-    X_115 := algebra.leftfetchjoin(X_56,X_74);
-    X_73:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,4,8);
-    X_114 := algebra.leftfetchjoin(X_54,X_73);
-    X_72:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,3,8);
-    X_113 := algebra.leftfetchjoin(X_52,X_72);
-    X_71:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,2,8);
-    X_112 := algebra.leftfetchjoin(X_50,X_71);
-    X_70:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,1,8);
-    X_111 := algebra.leftfetchjoin(X_48,X_70);
-    X_69:bat[:oid,:bit]  := sql.bind(X_2,"sys","tmp3","b",0,0,8);
-    X_110 := algebra.leftfetchjoin(X_46,X_69);
-    language.pass(X_60);
-    language.pass(X_58);
-    language.pass(X_56);
-    language.pass(X_54);
-    language.pass(X_52);
-    language.pass(X_50);
-    language.pass(X_48);
-    language.pass(X_46);
-exit X_183;
-    X_14 := sql.resultSet(4,1,X_7);
-    sql.rsColumn(X_14,"sys.tmp3","i","int",32,0,X_7);
-    X_150 := mat.packIncrement(X_110,8);
-    X_152 := mat.packIncrement(X_150,X_111);
-    X_153 := mat.packIncrement(X_152,X_112);
-    X_154 := mat.packIncrement(X_153,X_113);
-    X_155 := mat.packIncrement(X_154,X_114);
-    X_156 := mat.packIncrement(X_155,X_115);
-    X_157 := mat.packIncrement(X_156,X_116);
-    X_9 := mat.packIncrement(X_157,X_117);
-    sql.rsColumn(X_14,"sys.tmp3","b","boolean",1,0,X_9);
-    X_159 := mat.packIncrement(X_126,8);
-    X_160 := mat.packIncrement(X_159,X_127);
-    X_161 := mat.packIncrement(X_160,X_128);
-    X_162 := mat.packIncrement(X_161,X_129);
-    X_163 := mat.packIncrement(X_162,X_130);
-    X_164 := mat.packIncrement(X_163,X_131);
-    X_165 := mat.packIncrement(X_164,X_132);
-    X_11 := mat.packIncrement(X_165,X_133);
-    sql.rsColumn(X_14,"sys.tmp3","f","real",24,0,X_11);
-    X_167 := mat.packIncrement(X_134,8);
-    X_168 := mat.packIncrement(X_167,X_135);
-    X_169 := mat.packIncrement(X_168,X_136);
-    X_170 := mat.packIncrement(X_169,X_137);
-    X_171 := mat.packIncrement(X_170,X_138);
-    X_172 := mat.packIncrement(X_171,X_139);
-    X_173 := mat.packIncrement(X_172,X_140);
-    X_13 := mat.packIncrement(X_173,X_141);
-    sql.rsColumn(X_14,"sys.tmp3","t","timestamp",7,0,X_13);
-    X_29 := io.stdout();
-    sql.exportResult(X_29,X_14);
-end s5_1;
-# querylog.define("explain select * from tmp3;","default_pipe")
+    X_3:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3");
+    X_6 := sql.bind(X_2,"sys","tmp3","i",0);
+    X_9 := mosaic.leftfetchjoin(X_3,X_6);
+    X_16 := sql.bind(X_2,"sys","tmp3","t",0);
+    X_18 := mosaic.leftfetchjoin(X_3,X_16);
+    X_13 := sql.bind(X_2,"sys","tmp3","f",0);
+    X_15 := mosaic.leftfetchjoin(X_3,X_13);
+    X_10 := sql.bind(X_2,"sys","tmp3","b",0);
+    X_12 := mosaic.leftfetchjoin(X_3,X_10);
+    X_19 := sql.resultSet(4,1,X_9);
+    sql.rsColumn(X_19,"sys.tmp3","i","int",32,0,X_9);
+    sql.rsColumn(X_19,"sys.tmp3","b","boolean",1,0,X_12);
+    sql.rsColumn(X_19,"sys.tmp3","f","real",24,0,X_15);
+    sql.rsColumn(X_19,"sys.tmp3","t","timestamp",7,0,X_18);
+    X_34 := io.stdout();
+    sql.exportResult(X_34,X_19);
+end s6_1;
+# querylog.define("explain select * from tmp3;","sequential_pipe")
 #select * from tmp3;
 % sys.tmp3,    sys.tmp3,       sys.tmp3,       sys.tmp3 # table_name
 % i,   b,      f,      t # name
@@ -268,157 +163,32 @@ end s5_1;
 % .explain # table_name
 % mal # name
 % clob # type
-% 72 # length
-function user.s9_1{autoCommit=true}():void;
-barrier X_183 := language.dataflow();
+% 66 # length
+function user.s10_1{autoCommit=true}():void;
     X_2 := sql.mvc();
-    X_46:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",0,8);
-    X_61:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,0,8);
-    X_102 := algebra.leftfetchjoin(X_46,X_61);
-    X_48:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",1,8);
-    X_62:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,1,8);
-    X_103 := algebra.leftfetchjoin(X_48,X_62);
-    X_50:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",2,8);
-    X_63:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,2,8);
-    X_104 := algebra.leftfetchjoin(X_50,X_63);
-    X_52:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",3,8);
-    X_64:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,3,8);
-    X_105 := algebra.leftfetchjoin(X_52,X_64);
-    X_54:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",4,8);
-    X_65:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,4,8);
-    X_106 := algebra.leftfetchjoin(X_54,X_65);
-    X_56:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",5,8);
-    X_66:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,5,8);
-    X_107 := algebra.leftfetchjoin(X_56,X_66);
-    X_58:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",6,8);
-    X_67:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,6,8);
-    X_108 := algebra.leftfetchjoin(X_58,X_67);
-    X_60:bat[:oid,:oid]  := sql.tid(X_2,"sys","tmp3",7,8);
-    X_68:bat[:oid,:int]  := sql.bind(X_2,"sys","tmp3","i",0,7,8);
-    X_109 := algebra.leftfetchjoin(X_60,X_68);
-    X_142 := mat.packIncrement(X_102,8);
-    X_143 := mat.packIncrement(X_142,X_103);
-    X_144 := mat.packIncrement(X_143,X_104);
-    X_145 := mat.packIncrement(X_144,X_105);
-    X_146 := mat.packIncrement(X_145,X_106);
-    X_147 := mat.packIncrement(X_146,X_107);
-    X_148 := mat.packIncrement(X_147,X_108);
-    X_7 := mat.packIncrement(X_148,X_109);
-    X_101:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,7,8);
-    X_141 := algebra.leftfetchjoin(X_60,X_101);
-    X_100:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,6,8);
-    X_140 := algebra.leftfetchjoin(X_58,X_100);
-    X_99:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,5,8);
-    X_139 := algebra.leftfetchjoin(X_56,X_99);
-    X_98:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,4,8);
-    X_138 := algebra.leftfetchjoin(X_54,X_98);
-    X_97:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,3,8);
-    X_137 := algebra.leftfetchjoin(X_52,X_97);
-    X_96:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,2,8);
-    X_136 := algebra.leftfetchjoin(X_50,X_96);
-    X_95:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,1,8);
-    X_135 := algebra.leftfetchjoin(X_48,X_95);
-    X_94:bat[:oid,:timestamp]  := sql.bind(X_2,"sys","tmp3","t",0,0,8);
-    X_134 := algebra.leftfetchjoin(X_46,X_94);
-    X_93:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,7,8);
-    X_133 := algebra.leftfetchjoin(X_60,X_93);
-    X_91:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,6,8);
-    X_132 := algebra.leftfetchjoin(X_58,X_91);
-    X_89:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,5,8);
-    X_131 := algebra.leftfetchjoin(X_56,X_89);
-    X_87:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,4,8);
-    X_130 := algebra.leftfetchjoin(X_54,X_87);
-    X_85:bat[:oid,:flt]  := sql.bind(X_2,"sys","tmp3","f",0,3,8);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to