Changeset: 63d2f103279a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=63d2f103279a
Modified Files:
        gdk/gdk_aggr.c
        monetdb5/modules/atoms/json.c
        monetdb5/modules/kernel/aggr.mal
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_gencode.c
        sql/benchmarks/ssbm/Tests/01-explain.stable.out
        sql/benchmarks/ssbm/Tests/02-explain.stable.out
        sql/benchmarks/ssbm/Tests/03-explain.stable.out
        sql/benchmarks/tpch/Tests/06-explain.stable.out
        sql/benchmarks/tpch/Tests/11-explain.stable.out
        sql/benchmarks/tpch/Tests/14-explain.stable.out
        sql/benchmarks/tpch/Tests/15-explain.stable.out
        sql/benchmarks/tpch/Tests/17-explain.stable.out
        sql/benchmarks/tpch/Tests/19-explain.stable.out
        sql/benchmarks/tpch/Tests/22-explain.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
Branch: Oct2014
Log Message:

no need for SelectNoNil ie aggr operations include the skip nil functionality.


diffs (truncated from 832 to 300 lines):

diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -2324,7 +2324,13 @@ BATgroupquantile(BAT *b, BAT *g, BAT *e,
                BATseqbase(bn, min);
        } else { /* quantiles for entire BAT b, EZ */
 
-               BUN index = BUNfirst(b) + (BUN) ((BATcount(b) - 1)  * quantile);
+               BUN index, r = 0, p = BUNlast(b);
+
+               if (skip_nils) {
+                       while (r < p && (*atomcmp)(BUNtail(bi, BUNfirst(b) + 
r), nil) == 0)
+                               r++;
+               }
+               index = BUNfirst(b) + (BUN) (r + (p-r-1) * quantile);
                v = BUNtail(bi, index);
                BUNappend(bn, v, FALSE);
                BATseqbase(bn, 0);
diff --git a/monetdb5/modules/atoms/json.c b/monetdb5/modules/atoms/json.c
--- a/monetdb5/modules/atoms/json.c
+++ b/monetdb5/modules/atoms/json.c
@@ -1706,7 +1706,7 @@ JSONgroupStr(str *ret, const bat *bid)
        BAT *b;
        BUN p, q;
        const char *t = NULL;
-       size_t len, size = BUFSIZ, offset;
+       size_t len, size = BUFSIZ, offset, cnt = 0;
        str buf = GDKmalloc(size);
        BATiter bi;
        const char *err = NULL;
@@ -1724,24 +1724,27 @@ JSONgroupStr(str *ret, const bat *bid)
        offset = 0;
        bi = bat_iterator(b);
        BATloop(b, p, q) {
-               int n = 0;
+               int n = 0, nil = 0;
 
                switch (b->ttype) {
                case TYPE_str:
                        t = (const char *) BUNtail(bi, p);
+                       nil = (strNil(t));
                        break;
                case TYPE_dbl:
                        val = (const double *) BUNtail(bi, p);
-                       snprintf(temp, sizeof(temp), "%f", *val);
+                       nil = (*val == dbl_nil);
+                       if (!nil)
+                               snprintf(temp, sizeof(temp), "%f", *val);
                        t = (const char *) temp;
                        break;
                }
 
-               //t = (const char *) BUNtail(bi, p);
-
-               if (strNil(t))
+               if (nil)
                        continue;
-               len = strlen(t) + 1;
+               if (!cnt)
+                       offset = snprintf(buf, size, "[ ");
+               len = strlen(t) + 1 + 4; /* closing bracket and optional ',' */
                if (len >= size - offset) {
                        str nbuf;
                        size += len + 128;
@@ -1752,40 +1755,21 @@ JSONgroupStr(str *ret, const bat *bid)
                        }
                        buf = nbuf;
                }
+               if (cnt)
+                       offset += snprintf(buf + offset, size - offset, ", ");
                switch (b->ttype) {
                case TYPE_str:
-                       if (offset == 0) {
-                               if (BATcount(b) == 1) {
-                                       n = snprintf(buf, size, "[ \"%s\" ]", 
t);
-                               } else {
-                                       n = snprintf(buf, size, "[ \"%s\"", t);
-                               }
-                       } else {
-                               if (p == BUNlast(b) - 1) {
-                                       n = snprintf(buf + offset, size - 
offset, ", \"%s\" ]", t);
-                               } else {
-                                       n = snprintf(buf + offset, size - 
offset, ", \"%s\"", t);
-                               }
-                       }
+                       n = snprintf(buf + offset, size - offset, "\"%s\"", t);
                        break;
                case TYPE_dbl:
-                       if (offset == 0) {
-                               if (BATcount(b) == 1) {
-                                       n = snprintf(buf, size, "[ %s ]", t);
-                               } else {
-                                       n = snprintf(buf, size, "[ %s", t);
-                               }
-                       } else {
-                               if (p == BUNlast(b) - 1) {
-                                       n = snprintf(buf + offset, size - 
offset, ", %s ]", t);
-                               } else {
-                                       n = snprintf(buf + offset, size - 
offset, ", %s", t);
-                               }
-                       }
+                       n = snprintf(buf + offset, size - offset, "%s", t);
                        break;
                }
+               cnt++;
                offset += n;
        }
+       if (cnt)
+               offset += snprintf(buf + offset, size - offset, " ]");
        BBPreleaseref(b->batCacheid);
        *ret = buf;
        return MAL_SUCCEED;
diff --git a/monetdb5/modules/kernel/aggr.mal b/monetdb5/modules/kernel/aggr.mal
--- a/monetdb5/modules/kernel/aggr.mal
+++ b/monetdb5/modules/kernel/aggr.mal
@@ -1439,7 +1439,7 @@ address AGGRmedian3
 comment "Grouped median aggregate";
 
 function median(b:bat[:oid,:any_1]) :any_1;
-       bn := submedian(b, false);
+       bn := submedian(b, true);
        return algebra.fetch(bn, 0);
 end aggr.median;
 
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
@@ -80,14 +80,6 @@ rel_is_point_query(sql_rel *rel)
        if (is_project(rel->op))
                return rel_is_point_query(rel->l);
        if (is_select(rel->op) && rel_is_table(rel->l) && rel->exps) {
-/*
-               node *n;
-               is_point = 1;
-               for (n=rel->exps->h; n && is_point; n = n->next) {
-                       if (!exp_is_point_select(n->data))
-                               is_point = 0;
-               }
-*/
                is_point = 0;
                /* just one point expression makes this a point query */
                if (rel->exps->h)
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1948,26 +1948,6 @@ static int
                                setVarType(mb, getArg(q, 0), 
newBatType(TYPE_any, restype));
                                setVarUDFtype(mb, getArg(q, 0));
                        } else {
-                               if (no_nil) {
-                                       if (s->op1->type != st_list) {
-                                               q = newStmt2(mb, algebraRef, 
selectNotNilRef);
-                                               q = pushArgument(mb, q, l);
-                                               if (q == NULL)
-                                                       return -1;
-                                               l = getDestVar(q);
-                                       } else {
-                                               stmt_nr = 
SA_NEW_ARRAY(sql->mvc->sa, int, list_length(s->op1->op4.lval));
-                                               for (i=0, n = 
s->op1->op4.lval->h; n; n = n->next, i++) {
-                                                       stmt *op = n->data;
-
-                                                       q = newStmt2(mb, 
algebraRef, selectNotNilRef);
-                                                       q = pushArgument(mb, q, 
op->nr);
-                                                       if (q == NULL)
-                                                               return -1;
-                                                       stmt_nr[i] = 
getDestVar(q);
-                                               }
-                                       }
-                               }
                                q = newStmt(mb, mod, aggrfunc);
                                if (q == NULL)
                                        return -1;
@@ -2008,7 +1988,8 @@ static int
                                q = pushBit(mb, q, no_nil);
                                if (abort_on_error)
                                        q = pushBit(mb, q, TRUE);
-                       }
+                       } else if (no_nil && strncmp(aggrfunc, "count", 5) == 
0) 
+                               q = pushBit(mb, q, no_nil);
                        if (q == NULL)
                                return -1;
                        s->nr = getDestVar(q);
diff --git a/sql/benchmarks/ssbm/Tests/01-explain.stable.out 
b/sql/benchmarks/ssbm/Tests/01-explain.stable.out
--- a/sql/benchmarks/ssbm/Tests/01-explain.stable.out
+++ b/sql/benchmarks/ssbm/Tests/01-explain.stable.out
@@ -42,30 +42,30 @@ function user.s2_1{autoCommit=true}(A0:i
     X_10 := sql.bind(X_6,"sys","lineorder","lo_quantity",0);
     X_18 := sql.bind(X_6,"sys","lineorder","lo_discount",0);
     X_7:bat[:oid,:oid]  := sql.tid(X_6,"sys","lineorder");
-    X_91 := algebra.subselect(X_18,X_7,A1,A2,true,true,false);
+    X_90 := algebra.subselect(X_18,X_7,A1,A2,true,true,false);
     (X_20,r1_23) := sql.bind(X_6,"sys","lineorder","lo_discount",2);
-    X_92 := algebra.subselect(r1_23,A1,A2,true,true,false);
+    X_91 := algebra.subselect(r1_23,A1,A2,true,true,false);
     X_22 := sql.bind(X_6,"sys","lineorder","lo_discount",1);
-    X_93 := algebra.subselect(X_22,X_7,A1,A2,true,true,false);
-    X_23 := sql.subdelta(X_91,X_7,X_20,X_92,X_93);
-    X_94 := algebra.thetasubselect(X_10,X_23,A3,"<");
+    X_92 := algebra.subselect(X_22,X_7,A1,A2,true,true,false);
+    X_23 := sql.subdelta(X_90,X_7,X_20,X_91,X_92);
+    X_93 := algebra.thetasubselect(X_10,X_23,A3,"<");
     (X_13,r1_13) := sql.bind(X_6,"sys","lineorder","lo_quantity",2);
-    X_95 := algebra.thetasubselect(r1_13,A3,"<");
+    X_94 := algebra.thetasubselect(r1_13,A3,"<");
     X_16 := sql.bind(X_6,"sys","lineorder","lo_quantity",1);
-    X_96 := algebra.thetasubselect(X_16,X_23,A3,"<");
-    X_25 := sql.subdelta(X_94,X_23,X_13,X_95,X_96);
+    X_95 := algebra.thetasubselect(X_16,X_23,A3,"<");
+    X_25 := sql.subdelta(X_93,X_23,X_13,X_94,X_95);
     X_27 := 
sql.bind_idxbat(X_6,"sys","lineorder","lineorder_lo_orderdate_fkey",0);
     (X_29,r1_36) := 
sql.bind_idxbat(X_6,"sys","lineorder","lineorder_lo_orderdate_fkey",2);
     X_31 := 
sql.bind_idxbat(X_6,"sys","lineorder","lineorder_lo_orderdate_fkey",1);
     X_32 := sql.projectdelta(X_25,X_27,X_29,r1_36,X_31);
     X_36 := sql.bind(X_6,"sys","dwdate","d_year",0);
     X_33:bat[:oid,:oid]  := sql.tid(X_6,"sys","dwdate");
-    X_97 := algebra.subselect(X_36,X_33,A0,A0,true,true,false);
+    X_96 := algebra.subselect(X_36,X_33,A0,A0,true,true,false);
     (X_39,r1_48) := sql.bind(X_6,"sys","dwdate","d_year",2);
-    X_98 := algebra.subselect(r1_48,A0,A0,true,true,false);
+    X_97 := algebra.subselect(r1_48,A0,A0,true,true,false);
     X_42 := sql.bind(X_6,"sys","dwdate","d_year",1);
-    X_99 := algebra.subselect(X_42,X_33,A0,A0,true,true,false);
-    X_44 := sql.subdelta(X_97,X_33,X_39,X_98,X_99);
+    X_98 := algebra.subselect(X_42,X_33,A0,A0,true,true,false);
+    X_44 := sql.subdelta(X_96,X_33,X_39,X_97,X_98);
     X_46 := X_44;
     (X_47,r1_59) := algebra.join(X_32,X_46);
     X_49 := sql.bind(X_6,"sys","lineorder","lo_extendedprice",0);
@@ -77,9 +77,8 @@ function user.s2_1{autoCommit=true}(A0:i
     X_58 := sql.projectdelta(X_25,X_18,X_20,r1_23,X_22);
     X_59 := algebra.leftfetchjoin(X_47,X_58);
     X_60:bat[:oid,:lng]  := batcalc.*(X_57,X_59);
-    X_61 := algebra.selectNotNil(X_60);
-    X_62:lng  := aggr.sum(X_61);
-    sql.exportValue(1,"sys.L1","revenue","bigint",53,0,6,X_62,"");
+    X_61:lng  := aggr.sum(X_60);
+    sql.exportValue(1,"sys.L1","revenue","bigint",53,0,6,X_61,"");
 end s2_1;
 # querylog.define("explain\nselect sum(lo_extendedprice*lo_discount) as 
revenue\n\tfrom lineorder, dwdate\n\twhere lo_orderdate = d_datekey\n\t\tand 
d_year = 1993\n\t\tand lo_discount between 1 and 3\n\t\tand lo_quantity < 
25;","sequential_pipe")
 
diff --git a/sql/benchmarks/ssbm/Tests/02-explain.stable.out 
b/sql/benchmarks/ssbm/Tests/02-explain.stable.out
--- a/sql/benchmarks/ssbm/Tests/02-explain.stable.out
+++ b/sql/benchmarks/ssbm/Tests/02-explain.stable.out
@@ -42,30 +42,30 @@ function user.s2_1{autoCommit=true}(A0:i
     X_11 := sql.bind(X_7,"sys","lineorder","lo_quantity",0);
     X_19 := sql.bind(X_7,"sys","lineorder","lo_discount",0);
     X_8:bat[:oid,:oid]  := sql.tid(X_7,"sys","lineorder");
-    X_91 := algebra.subselect(X_19,X_8,A1,A2,true,true,false);
+    X_90 := algebra.subselect(X_19,X_8,A1,A2,true,true,false);
     (X_21,r1_25) := sql.bind(X_7,"sys","lineorder","lo_discount",2);
-    X_92 := algebra.subselect(r1_25,A1,A2,true,true,false);
+    X_91 := algebra.subselect(r1_25,A1,A2,true,true,false);
     X_23 := sql.bind(X_7,"sys","lineorder","lo_discount",1);
-    X_93 := algebra.subselect(X_23,X_8,A1,A2,true,true,false);
-    X_24 := sql.subdelta(X_91,X_8,X_21,X_92,X_93);
-    X_94 := algebra.subselect(X_11,X_24,A3,A4,true,true,false);
+    X_92 := algebra.subselect(X_23,X_8,A1,A2,true,true,false);
+    X_24 := sql.subdelta(X_90,X_8,X_21,X_91,X_92);
+    X_93 := algebra.subselect(X_11,X_24,A3,A4,true,true,false);
     (X_14,r1_14) := sql.bind(X_7,"sys","lineorder","lo_quantity",2);
-    X_95 := algebra.subselect(r1_14,A3,A4,true,true,false);
+    X_94 := algebra.subselect(r1_14,A3,A4,true,true,false);
     X_17 := sql.bind(X_7,"sys","lineorder","lo_quantity",1);
-    X_96 := algebra.subselect(X_17,X_24,A3,A4,true,true,false);
-    X_26 := sql.subdelta(X_94,X_24,X_14,X_95,X_96);
+    X_95 := algebra.subselect(X_17,X_24,A3,A4,true,true,false);
+    X_26 := sql.subdelta(X_93,X_24,X_14,X_94,X_95);
     X_27 := 
sql.bind_idxbat(X_7,"sys","lineorder","lineorder_lo_orderdate_fkey",0);
     (X_29,r1_37) := 
sql.bind_idxbat(X_7,"sys","lineorder","lineorder_lo_orderdate_fkey",2);
     X_31 := 
sql.bind_idxbat(X_7,"sys","lineorder","lineorder_lo_orderdate_fkey",1);
     X_32 := sql.projectdelta(X_26,X_27,X_29,r1_37,X_31);
     X_36 := sql.bind(X_7,"sys","dwdate","d_yearmonthnum",0);
     X_33:bat[:oid,:oid]  := sql.tid(X_7,"sys","dwdate");
-    X_97 := algebra.subselect(X_36,X_33,A0,A0,true,true,false);
+    X_96 := algebra.subselect(X_36,X_33,A0,A0,true,true,false);
     (X_39,r1_49) := sql.bind(X_7,"sys","dwdate","d_yearmonthnum",2);
-    X_98 := algebra.subselect(r1_49,A0,A0,true,true,false);
+    X_97 := algebra.subselect(r1_49,A0,A0,true,true,false);
     X_42 := sql.bind(X_7,"sys","dwdate","d_yearmonthnum",1);
-    X_99 := algebra.subselect(X_42,X_33,A0,A0,true,true,false);
-    X_44 := sql.subdelta(X_97,X_33,X_39,X_98,X_99);
+    X_98 := algebra.subselect(X_42,X_33,A0,A0,true,true,false);
+    X_44 := sql.subdelta(X_96,X_33,X_39,X_97,X_98);
     X_46 := X_44;
     (X_47,r1_60) := algebra.join(X_32,X_46);
     X_49 := sql.bind(X_7,"sys","lineorder","lo_extendedprice",0);
@@ -77,9 +77,8 @@ function user.s2_1{autoCommit=true}(A0:i
     X_58 := sql.projectdelta(X_26,X_19,X_21,r1_25,X_23);
     X_59 := algebra.leftfetchjoin(X_47,X_58);
     X_60:bat[:oid,:lng]  := batcalc.*(X_57,X_59);
-    X_61 := algebra.selectNotNil(X_60);
-    X_62:lng  := aggr.sum(X_61);
-    sql.exportValue(1,"sys.L1","revenue","bigint",53,0,6,X_62,"");
+    X_61:lng  := aggr.sum(X_60);
+    sql.exportValue(1,"sys.L1","revenue","bigint",53,0,6,X_61,"");
 end s2_1;
 # querylog.define("explain\nselect sum(lo_extendedprice*lo_discount) as 
revenue\n\tfrom lineorder, dwdate\n\twhere lo_orderdate = d_datekey\n\t\tand 
d_yearmonthnum = 199401\n\t\tand lo_discount between 4 and 6\n\t\tand 
lo_quantity between 26 and 35;","sequential_pipe")
 
diff --git a/sql/benchmarks/ssbm/Tests/03-explain.stable.out 
b/sql/benchmarks/ssbm/Tests/03-explain.stable.out
--- a/sql/benchmarks/ssbm/Tests/03-explain.stable.out
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to