Changeset: c6e5763417d9 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c6e5763417d9
Modified Files:
clients/Tests/exports.stable.out
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/mal.h
monetdb5/mal/mal_instruction.c
monetdb5/mal/mal_instruction.h
monetdb5/mal/mal_parser.c
monetdb5/mal/mal_type.h
monetdb5/optimizer/Makefile.ag
monetdb5/optimizer/opt_pipes.c
monetdb5/optimizer/opt_prelude.c
monetdb5/optimizer/opt_prelude.h
monetdb5/optimizer/opt_pushselect.c
monetdb5/optimizer/opt_remoteQueries.c
monetdb5/optimizer/opt_support.h
monetdb5/optimizer/opt_wrapper.c
monetdb5/optimizer/optimizer.mal
sql/backends/monet5/UDF/Tests/udf-fuse.stable.out
sql/backends/monet5/UDF/Tests/udf-reverse.stable.out
sql/backends/monet5/sql.mal
sql/backends/monet5/sql_gencode.c
sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128
sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128
sql/benchmarks/tpch/Tests/01-explain.stable.out.int128
sql/benchmarks/tpch/Tests/02-explain.stable.out
sql/benchmarks/tpch/Tests/03-explain.stable.out.int128
sql/benchmarks/tpch/Tests/04-explain.stable.out
sql/benchmarks/tpch/Tests/05-explain.stable.out.int128
sql/benchmarks/tpch/Tests/06-explain.stable.out.int128
sql/benchmarks/tpch/Tests/07-explain.stable.out.int128
sql/benchmarks/tpch/Tests/08-explain.stable.out.int128
sql/benchmarks/tpch/Tests/09-explain.stable.out.int128
sql/benchmarks/tpch/Tests/10-explain.stable.out.int128
sql/benchmarks/tpch/Tests/11-explain.stable.out.int128
sql/benchmarks/tpch/Tests/12-explain.stable.out
sql/benchmarks/tpch/Tests/12-explain.stable.out.int128
sql/benchmarks/tpch/Tests/13-explain.stable.out
sql/benchmarks/tpch/Tests/13-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/14-explain.stable.out.int128
sql/benchmarks/tpch/Tests/15-explain.stable.out.int128
sql/benchmarks/tpch/Tests/16-explain.stable.out
sql/benchmarks/tpch/Tests/16-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/17-explain.stable.out.int128
sql/benchmarks/tpch/Tests/18-explain.stable.out.int128
sql/benchmarks/tpch/Tests/19-explain.stable.out.int128
sql/benchmarks/tpch/Tests/20-explain.stable.out.int128
sql/benchmarks/tpch/Tests/21-explain.stable.out
sql/benchmarks/tpch/Tests/21-explain.stable.out.32bit
sql/benchmarks/tpch/Tests/22-explain.stable.out.int128
sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out
sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out
sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out.32bit
sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
sql/test/BugTracker-2013/Tests/between.Bug-3259.stable.out.int128
sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
sql/test/Tests/setoptimizer.stable.err
sql/test/Tests/setoptimizer.stable.out
sql/test/Tests/setoptimizer.stable.out.Windows
sql/test/mergetables/Tests/mergequery.stable.out
Branch: default
Log Message:
Addition of the candidatelist property
MAL variables can have a candidate list flag, which is set by
a cheap optimizer at the start of the pipe.
This property leads to different rendering of the variables.
diffs (truncated from 5982 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -1559,6 +1559,7 @@ str MTIMEtzone_tostr(str *s, const tzone
str MTIMEunix_epoch(timestamp *ret);
void OPTaliasRemap(InstrPtr p, int *alias);
int OPTaliasesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
+int OPTcandidatesImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
int OPTcoercionImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTcommonTermsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
int OPTconstantsImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr p);
@@ -2186,6 +2187,7 @@ str ifthenelseRef;
str ilikeRef;
str ilikeselectRef;
str ilikesubselectRef;
+str ilikethetasubselectRef;
str ilikeuselectRef;
void initHeartbeat(void);
void initLibraries(void);
@@ -2257,6 +2259,7 @@ str levenshteinbasic_impl(int *result, s
str likeRef;
str likeselectRef;
str likesubselectRef;
+str likethetasubselectRef;
str likeuselectRef;
str listRef;
str loadLibrary(str modulename, int flag);
@@ -2587,6 +2590,7 @@ str subsliceRef;
str subsortRef;
str subsumRef;
str subthetajoinRef;
+str subuniqueRef;
str sumRef;
int tableProp;
str takeOid(oid id, str *val);
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-28239/.s.monetdb.30808
+MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072
QUERY = explain copy into ttt from '\tmp/xyz';
ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz
-MAPI = (monetdb) /var/tmp/mtest-28239/.s.monetdb.30808
+MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072
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-28239/.s.monetdb.30808
+MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072
QUERY = explain copy into ttt from '\tmp/xyz';
ERROR = !COPY INTO: filename must have absolute path: \tmp/xyz
-MAPI = (monetdb) /var/tmp/mtest-28239/.s.monetdb.30808
+MAPI = (monetdb) /var/tmp/mtest-21015/.s.monetdb.39072
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
@@ -55,8 +55,8 @@ Ready.
% .L # table_name
% def # name
% clob # type
-% 491 # length
-[
"optimizer.inline();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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();"
]
+% 514 # 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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
@@ -89,8 +89,8 @@ end user.s4_1;
% .L # table_name
% def # name
% clob # type
-% 514 # length
-[
"optimizer.inline();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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.sql_append();optimizer.garbageCollector();"
]
+% 537 # 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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();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
@@ -55,8 +55,8 @@ Ready.
% .L # table_name
% def # name
% clob # type
-% 491 # length
-[
"optimizer.inline();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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();"
]
+% 514 # 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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
@@ -87,8 +87,8 @@ end user.s4_1;
% .L # table_name
% def # name
% clob # type
-% 514 # length
-[
"optimizer.inline();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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.sql_append();optimizer.garbageCollector();"
]
+% 537 # 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.joinPath();optimizer.reorder();optimizer.deadcode();optimizer.reduce();optimizer.matpack();optimizer.dataflow();optimizer.querylog();optimizer.multiplex();optimizer.generator();optimizer.sql_append();optimizer.garbageCollector();"
]
#explain copy into ttt from '/tmp/xyz';
% .explain # table_name
% mal # name
diff --git a/monetdb5/mal/mal.h b/monetdb5/mal/mal.h
--- a/monetdb5/mal/mal.h
+++ b/monetdb5/mal/mal.h
@@ -120,7 +120,8 @@ mal_export void mal_exit(void);
#define VAR_CLEANUP 16
#define VAR_INIT 32
#define VAR_USED 64
-#define VAR_DISABLED 128 /* used for comments and scheduler */
+#define VAR_CLIST 128 /* Candidate list variable */
+#define VAR_DISABLED 256 /* used for comments and scheduler */
/* type check status is kept around to improve type checking efficiency */
#define TYPE_ERROR -1
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -653,7 +653,7 @@ getVarName(MalBlkPtr mb, int i)
nme = mb->var[i]->name;
if (nme == 0 || *nme =='_') {
- snprintf(buf, PATHLENGTH, "%c_%d", REFMARKER,
mb->var[i]->tmpindex);
+ snprintf(buf, PATHLENGTH, "%c_%d", refMarker(mb,i),
mb->var[i]->tmpindex);
nme = mb->var[i]->name = GDKstrdup(buf);
}
return nme;
diff --git a/monetdb5/mal/mal_instruction.h b/monetdb5/mal/mal_instruction.h
--- a/monetdb5/mal/mal_instruction.h
+++ b/monetdb5/mal/mal_instruction.h
@@ -86,6 +86,10 @@
#define setVarConstant(M,I) ((M)->var[I]->flags |= VAR_CONSTANT)
#define isVarConstant(M,I) ((M)->var[I]->flags & VAR_CONSTANT)
+#define clrVarCList(M,I) ((M)->var[I]->flags &= ~VAR_CLIST)
+#define setVarCList(M,I) ((M)->var[I]->flags |= VAR_CLIST)
+#define isVarCList(M,I) ((M)->var[I]->flags & VAR_CLIST)
+
#define getVarConstant(M,I) ((M)->var[I]->value)
#define getVarValue(M,I) VALget(&(M)->var[I]->value)
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -116,7 +116,9 @@ initParser(void)
static int
idLength(Client cntxt)
{
- str s, t;
+ str s,t;
+ int len = 0;
+
skipSpace(cntxt);
s = CURRENT(cntxt);
t = s;
@@ -128,9 +130,15 @@ idLength(Client cntxt)
s[0] = REFMARKER;
/* prepare escape of temporary names */
s++;
- while (idCharacter2[(int) (*s)])
+ while (len < IDLENGTH && idCharacter2[(int) (*s)]){
s++;
- return (int) (s - t);
+ len++;
+ }
+ if( len == IDLENGTH)
+ // skip remainder
+ while (idCharacter2[(int) (*s)])
+ s++;
+ return (int) (s-t);;
}
/* Simple type identifiers can not be marked with a type variable. */
diff --git a/monetdb5/mal/mal_type.h b/monetdb5/mal/mal_type.h
--- a/monetdb5/mal/mal_type.h
+++ b/monetdb5/mal/mal_type.h
@@ -15,6 +15,8 @@
#define malVARG " malVARG"
#define TMPMARKER '_'
#define REFMARKER 'X'
+#define REFMARKERC 'C'
+#define refMarker(M,I) (isVarCList(M,I)? 'C':'X')
#define newBatType(H,T) (1<<16 | (((TYPE_oid & 0377) <<8) | (T & 0377) ))
#define isaBatType(X) ((1<<16) & (X) && (X)!= TYPE_any)
diff --git a/monetdb5/optimizer/Makefile.ag b/monetdb5/optimizer/Makefile.ag
--- a/monetdb5/optimizer/Makefile.ag
+++ b/monetdb5/optimizer/Makefile.ag
@@ -21,6 +21,7 @@ lib_optimizer = {
opt_aliases.c opt_aliases.h \
opt_coercion.c opt_coercion.h \
opt_commonTerms.c opt_commonTerms.h \
+ opt_candidates.c opt_candidates.h \
opt_constants.c opt_constants.h \
opt_costModel.c opt_costModel.h \
opt_dataflow.c opt_dataflow.h \
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
@@ -46,6 +46,7 @@ static struct PIPELINES {
*/
{"minimal_pipe",
"optimizer.inline();"
+ "optimizer.candidates();"
"optimizer.remap();"
"optimizer.deadcode();"
"optimizer.multiplex();"
@@ -63,6 +64,7 @@ static struct PIPELINES {
*/
{"default_pipe",
"optimizer.inline();"
+ "optimizer.candidates();"
"optimizer.remap();"
"optimizer.costModel();"
"optimizer.coercions();"
@@ -99,6 +101,7 @@ static struct PIPELINES {
{"no_mitosis_pipe",
"optimizer.inline();"
"optimizer.remap();"
+ "optimizer.candidates();"
"optimizer.costModel();"
"optimizer.coercions();"
"optimizer.evaluate();"
@@ -132,6 +135,7 @@ static struct PIPELINES {
*/
{"sequential_pipe",
"optimizer.inline();"
+ "optimizer.candidates();"
"optimizer.remap();"
"optimizer.costModel();"
"optimizer.coercions();"
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -114,10 +114,10 @@ str kdifferenceRef;
str languageRef;
str leftfetchjoinRef;
str leftfetchjoinPathRef;
-str likeselectRef;
-str ilikeselectRef;
-str likeuselectRef;
-str ilikeuselectRef;
+str likesubselectRef;
+str likethetasubselectRef;
+str ilikesubselectRef;
+str ilikethetasubselectRef;
str likeRef;
str ilikeRef;
str not_likeRef;
@@ -211,6 +211,7 @@ str subavgRef;
str subsortRef;
str takeRef;
str not_uniqueRef;
+str subuniqueRef;
str unlockRef;
str unpackRef;
str unpinRef;
@@ -357,10 +358,8 @@ void optimizerInit(void)
languageRef= putName("language",8);
leftfetchjoinRef = putName("leftfetchjoin",13);
leftfetchjoinPathRef = putName("leftfetchjoinPath",17);
- likeselectRef = putName("like_select",11);
- ilikeselectRef = putName("ilike_select",12);
- likeuselectRef = putName("like_uselect",12);
- ilikeuselectRef = putName("ilike_uselect",13);
+ likesubselectRef = putName("likesubselect",13);
+ ilikesubselectRef = putName("ilikesubselect",14);
listRef = putName("list",4);
likeRef = putName("like",4);
ilikeRef = putName("ilike",5);
@@ -455,6 +454,7 @@ void optimizerInit(void)
takeRef= putName("take",5);
timestampRef = putName("timestamp", 9);
not_uniqueRef= putName("not_unique",10);
+ subuniqueRef= putName("subunique",9);
unlockRef= putName("unlock",6);
unpackRef = putName("unpack",6);
unpinRef = putName("unpin",5);
@@ -462,7 +462,9 @@ void optimizerInit(void)
subselectRef = putName("subselect",9);
thetasubselectRef = putName("thetasubselect",14);
likesubselectRef = putName("likesubselect",13);
+ likethetasubselectRef = putName("likethetasubselect",18);
ilikesubselectRef = putName("ilikesubselect",14);
+ ilikethetasubselectRef = putName("ilikethetasubselect",19);
vectorRef = putName("vector",6);
zero_or_oneRef = putName("zero_or_one",11);
userRef = putName("user",4);
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -117,10 +117,6 @@ opt_export str ilikeselectRef;
opt_export str likeuselectRef;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list