Changeset: 4ace9efa8b38 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4ace9efa8b38 Added Files: sql/test/BugTracker-2016/Tests/invalidcolumns.Bug-3968.stable.err sql/test/BugTracker-2016/Tests/invalidcolumns.Bug-3968.stable.out sql/test/BugTracker-2016/Tests/stream_table_crash.Bug-3952.stable.err sql/test/BugTracker-2016/Tests/stream_table_crash.Bug-3952.stable.out Modified Files: clients/Tests/exports.stable.out monetdb5/optimizer/opt_mergetable.c monetdb5/optimizer/opt_prelude.c monetdb5/optimizer/opt_prelude.h monetdb5/optimizer/opt_support.c monetdb5/optimizer/opt_support.h sql/backends/monet5/sql.c sql/backends/monet5/sql_optimizer.c sql/server/sql_mvc.h sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.err sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out sql/test/BugTracker-2016/Tests/storagemodel.Bug-3923.stable.out sql/test/BugTracker-2016/Tests/stream_table_crash.Bug-3952.sql sql/test/Dependencies/Tests/Dependencies.stable.out sql/test/Dependencies/Tests/Dependencies.stable.out.int128 sql/test/Dependencies/Tests/dependency_loop.stable.out.int128 sql/test/Users/Tests/dropManyUsers.Bug-3764.stable.out sql/test/Users/Tests/grantMonetdb.stable.err sql/test/pg_regress/Tests/arrays.stable.err sql/test/pg_regress/Tests/without_oid.stable.out Branch: leftmart Log Message:
merge with default diffs (truncated from 1488 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 @@ -1080,8 +1080,10 @@ str CMDsetName(str *rname, const bat *b, str CMDsetoid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str CMDstartProfiler(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str CMDstartTrace(void *res); +str CMDstartTracePath(void *res, str *path); str CMDstopProfiler(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str CMDstopTrace(void *res); +str CMDstopTracePath(void *res, str *path); str CMDstr2qgrams(bat *ret, str *val); str CMDstrlength(int *ret, str *v); str CMDvarABS(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); @@ -2197,6 +2199,7 @@ int isOptimizerPipe(str name); int isOrderby(InstrPtr q); int isPreloaded(str nme); int isProcedure(MalBlkPtr mb, InstrPtr p); +int isSample(InstrPtr q); int isSideEffectFree(MalBlkPtr mb); int isSlice(InstrPtr q); int isSubJoin(InstrPtr q); @@ -2448,6 +2451,7 @@ void runtimeProfileExit(Client cntxt, Ma void runtimeProfileFinish(Client cntxt, MalBlkPtr mb); void runtimeProfileInit(Client cntxt, MalBlkPtr mb, MalStkPtr stk); int safetyBarrier(InstrPtr p, InstrPtr q); +str sampleRef; str schedulerRef; str selectNotNilRef; str semaRef; @@ -2493,11 +2497,11 @@ int sqlblob_tostr(str *tostr, int *l, co str srvpoolRef; str startProfiler(void); str startRef; -str startTrace(void); +str startTrace(str path); str starttraceRef; str stopProfiler(void); str stopRef; -str stopTrace(void); +str stopTrace(str path); str stoptraceRef; void strAfterCall(ValPtr v, ValPtr bak); void strBeforeCall(ValPtr v, ValPtr bak); @@ -2528,6 +2532,7 @@ str subsliceRef; str subsortRef; str subsumRef; str subthetajoinRef; +str subuniformRef; str subuniqueRef; str sumRef; str takeOid(oid id, str *val); diff --git a/monetdb5/optimizer/opt_mergetable.c b/monetdb5/optimizer/opt_mergetable.c --- a/monetdb5/optimizer/opt_mergetable.c +++ b/monetdb5/optimizer/opt_mergetable.c @@ -1439,6 +1439,37 @@ mat_topn(MalBlkPtr mb, InstrPtr p, matli } } +static void +mat_sample(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m) +{ + int tpe = getArgType(mb,p,0), k, piv; + InstrPtr pck, q; + + pck = newInstruction(mb,ASSIGNsymbol); + setModuleId(pck, matRef); + setFunctionId(pck, packRef); + getArg(pck,0) = getArg(p,0); + + for(k=1; k< ml->v[m].mi->argc; k++) { + q = copyInstruction(p); + getArg(q,0) = newTmpVariable(mb, tpe); + getArg(q,q->retc) = getArg(ml->v[m].mi,k); + pushInstruction(mb,q); + pck = pushArgument(mb, pck, getArg(q,0)); + } + + piv = ml->top; + mat_add_var(ml, pck, p, getArg(p,0), mat_slc, m, -1); + pushInstruction(mb,pck); + + q = copyInstruction(p); + getArg(q,q->retc) = getArg(pck,0); + pushInstruction(mb,q); + + ml->v[piv].packed = 1; + ml->v[piv].type = mat_slc; +} + int OPTmergetableImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p) { @@ -1580,6 +1611,12 @@ OPTmergetableImplementation(Client cntxt continue; } + if (match == 1 && bats == 1 && p->argc == 3 && isSample(p) && ((m=is_a_mat(getArg(p,p->retc), &ml)) >= 0)) { + mat_sample(mb, p, &ml, m); + actions++; + continue; + } + if (!distinct_topn && match == 1 && bats == 1 && (p->argc-p->retc) == 4 && isTopn(p) && ((m=is_a_mat(getArg(p,p->retc), &ml)) >= 0)) { mat_topn(mb, p, &ml, m, -1, -1); actions++; @@ -1768,7 +1805,6 @@ OPTmergetableImplementation(Client cntxt for (k = p->retc; k<p->argc; k++) { if((m=is_a_mat(getArg(p,k), &ml)) >= 0){ mat_pack(mb, ml.v, m); - actions++; } } pushInstruction(mb, copyInstruction(p)); 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 @@ -213,7 +213,9 @@ str subavgRef; str subsortRef; str takeRef; str not_uniqueRef; +str sampleRef; str subuniqueRef; +str subuniformRef; str unlockRef; str unpackRef; str unpinRef; @@ -426,7 +428,9 @@ void optimizerInit(void) takeRef= putName("take",5); timestampRef = putName("timestamp", 9); not_uniqueRef= putName("not_unique",10); + sampleRef= putName("sample",6); subuniqueRef= putName("subunique",9); + subuniformRef= putName("subuniform",10); unlockRef= putName("unlock",6); unpackRef = putName("unpack",6); unpinRef = putName("unpin",5); 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 @@ -208,7 +208,9 @@ opt_export str subsortRef; opt_export str timestampRef; opt_export str takeRef; opt_export str not_uniqueRef; +opt_export str sampleRef; opt_export str subuniqueRef; +opt_export str subuniformRef; opt_export str unpackRef; opt_export str unpinRef; opt_export str unlockRef; diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c --- a/monetdb5/optimizer/opt_support.c +++ b/monetdb5/optimizer/opt_support.c @@ -681,7 +681,12 @@ int isTopn(InstrPtr p){ int isSlice(InstrPtr p){ return (getModuleId(p) == algebraRef && - getFunctionId(p) == subsliceRef); + getFunctionId(p) == subsliceRef); +} + +int isSample(InstrPtr p){ + return (getModuleId(p) == sampleRef && + getFunctionId(p) == subuniformRef); } int isOrderby(InstrPtr p){ diff --git a/monetdb5/optimizer/opt_support.h b/monetdb5/optimizer/opt_support.h --- a/monetdb5/optimizer/opt_support.h +++ b/monetdb5/optimizer/opt_support.h @@ -108,6 +108,7 @@ opt_export int isMapOp(InstrPtr q); opt_export int isLikeOp(InstrPtr q); opt_export int isTopn(InstrPtr q); opt_export int isSlice(InstrPtr q); +opt_export int isSample(InstrPtr q); opt_export int isOrderby(InstrPtr q); opt_export int isSubSelect(InstrPtr q); opt_export int isSubJoin(InstrPtr q); diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -62,16 +62,16 @@ exp_is_point_select(sql_exp *e) } static int -rel_is_point_query(sql_rel *rel) +rel_no_mitosis(sql_rel *rel) { int is_point = 0; - if (!rel) + if (!rel || is_basetable(rel->op)) return 1; if (is_project(rel->op)) - return rel_is_point_query(rel->l); + return rel_no_mitosis(rel->l); if (is_modify(rel->op) && rel->card <= CARD_AGGR) - return rel_is_point_query(rel->r); + return rel_no_mitosis(rel->r); if (is_select(rel->op) && rel_is_table(rel->l) && rel->exps) { is_point = 0; /* just one point expression makes this a point query */ @@ -121,8 +121,8 @@ sql_symbol2relation(mvc *c, symbol *sym) r = rel_optimizer(c, r); r = rel_distribute(c, r); r = rel_partition(c, r); - if (rel_is_point_query(r) || rel_need_distinct_query(r)) - c->point_query = 1; + if (rel_no_mitosis(r) || rel_need_distinct_query(r)) + c->no_mitosis = 1; } return r; } @@ -176,7 +176,7 @@ sqlcleanup(mvc *c, int err) if (err <0) c->session->status = err; c->label = 0; - c->point_query = 0; + c->no_mitosis = 0; scanner_query_processed(&(c->scanner)); return err; } diff --git a/sql/backends/monet5/sql_optimizer.c b/sql/backends/monet5/sql_optimizer.c --- a/sql/backends/monet5/sql_optimizer.c +++ b/sql/backends/monet5/sql_optimizer.c @@ -115,8 +115,7 @@ addOptimizers(Client c, MalBlkPtr mb, ch msg = addOptimizerPipe(c, mb, pipe); if (msg) GDKfree(msg); /* what to do with an error? */ - /* point queries do not require mitosis and dataflow */ - if (be->mvc->point_query) { + if (be->mvc->no_mitosis) { for (i = mb->stop - 1; i > 0; i--) { q = getInstrPtr(mb, i); if (q->token == ENDsymbol) diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h --- a/sql/server/sql_mvc.h +++ b/sql/server/sql_mvc.h @@ -97,7 +97,7 @@ typedef struct mvc { int argc; int argmax; struct symbol *sym; - int point_query; /* mark when a query is a point query */ + int no_mitosis; /* run query without mitosis */ int user_id; int role_id; diff --git a/sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out b/sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out --- a/sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out +++ b/sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out @@ -45,77 +45,48 @@ Ready. % clob # type % 206 # length function user.s5_1(A0:timestamp,A1:timestamp,A2:void):void; - X_62:void := querylog.define("explain select (t-(select timestamp \\'1970-1-1\\')),v from foo_nil_2dec union all select (t-(select timestamp \\'1970-1-1\\')),null from foo_nil_2dec;","default_pipe",73); -barrier X_110 := language.dataflow(); - X_40 := bat.new(nil:oid,nil:str); - X_47 := bat.append(X_40,".L5"); - X_56 := bat.append(X_47,".L5"); - X_42 := bat.new(nil:oid,nil:str); - X_49 := bat.append(X_42,"L2"); - X_57 := bat.append(X_49,"v"); - X_43 := bat.new(nil:oid,nil:str); - X_51 := bat.append(X_43,"sec_interval"); - X_58 := bat.append(X_51,"decimal"); - X_44 := bat.new(nil:oid,nil:int); - X_53 := bat.append(X_44,13); - X_60 := bat.append(X_53,18); - X_46 := bat.new(nil:oid,nil:int); - X_55 := bat.append(X_46,0); - X_61 := bat.append(X_55,9); + X_67:void := querylog.define("explain select (t-(select timestamp \\'1970-1-1\\')),v from foo_nil_2dec union all select (t-(select timestamp \\'1970-1-1\\')),null from foo_nil_2dec;","default_pipe",44); + X_45 := bat.new(nil:oid,nil:str); + X_52 := bat.append(X_45,".L5"); + X_61 := bat.append(X_52,".L5"); + X_47 := bat.new(nil:oid,nil:str); + X_54 := bat.append(X_47,"L2"); + X_62 := bat.append(X_54,"v"); + X_48 := bat.new(nil:oid,nil:str); + X_56 := bat.append(X_48,"sec_interval"); + X_63 := bat.append(X_56,"decimal"); + X_49 := bat.new(nil:oid,nil:int); + X_58 := bat.append(X_49,13); + X_65 := bat.append(X_58,18); + X_51 := bat.new(nil:oid,nil:int); + X_60 := bat.append(X_51,0); + X_66 := bat.append(X_60,9); X_5:bat[:lng] := bat.new(nil:oid,nil:lng); X_4 := sql.mvc(); - X_72:bat[:oid] := sql.tid(X_4,"sys","foo_nil_2dec",0,2); - X_74:bat[:timestamp] := sql.bind(X_4,"sys","foo_nil_2dec","t",0,0,2); - (X_76:bat[:oid],X_77:bat[:timestamp]) := sql.bind(X_4,"sys","foo_nil_2dec","t",2,0,2); - X_86 := sql.delta(X_74,X_76,X_77); - X_88 := algebra.projection(X_72,X_86); - X_15 := calc.timestamp(A0,7); - X_90 := algebra.project(X_88,X_15); - X_92 := batmtime.diff(X_88,X_90); - X_73:bat[:oid] := sql.tid(X_4,"sys","foo_nil_2dec",1,2); - X_75:bat[:timestamp] := sql.bind(X_4,"sys","foo_nil_2dec","t",0,1,2); - (X_78:bat[:oid],X_79:bat[:timestamp]) := sql.bind(X_4,"sys","foo_nil_2dec","t",2,1,2); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list