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