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

Reply via email to