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