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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list