Changeset: fa99b99c33bf for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fa99b99c33bf Added Files: sql/test/BugTracker-2017/Tests/all_dates.csv.gz sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.sql sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.err sql/test/BugTracker-2017/Tests/empty-interval.Bug-6184.stable.out sql/test/BugTracker-2017/Tests/heapextend.Bug-6134.sql.in Modified Files: gdk/gdk_cross.c gdk/gdk_select.c sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_statement.c sql/storage/bat/bat_table.c sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out sql/test/BugTracker-2017/Tests/All Branch: wlcr Log Message:
merge with default diffs (truncated from 2124 to 300 lines): diff --git a/gdk/gdk_cross.c b/gdk/gdk_cross.c --- a/gdk/gdk_cross.c +++ b/gdk/gdk_cross.c @@ -9,49 +9,7 @@ #include "monetdb_config.h" #include "gdk.h" #include "gdk_private.h" - -static gdk_return -BATcross1(BAT **r1p, BAT **r2p, BAT *l, BAT *r) -{ - BAT *bn1, *bn2; - BUN i, j; - oid *restrict p1, *restrict p2; - - bn1 = COLnew(0, TYPE_oid, BATcount(l) * BATcount(r), TRANSIENT); - bn2 = COLnew(0, TYPE_oid, BATcount(l) * BATcount(r), TRANSIENT); - if (bn1 == NULL || bn2 == NULL) { - BBPreclaim(bn1); - BBPreclaim(bn2); - return GDK_FAIL; - } - p1 = (oid *) Tloc(bn1, 0); - p2 = (oid *) Tloc(bn2, 0); - for (i = 0; i < BATcount(l); i++) { - for (j = 0; j < BATcount(r); j++) { - *p1++ = i + l->hseqbase; - *p2++ = j + r->hseqbase; - } - } - BATsetcount(bn1, BATcount(l) * BATcount(r)); - BATsetcount(bn2, BATcount(l) * BATcount(r)); - bn1->tsorted = 1; - bn1->trevsorted = BATcount(l) <= 1; - bn1->tkey = BATcount(r) <= 1; - bn1->tdense = bn1->tkey != 0; - bn1->tnil = 0; - bn1->tnonil = 1; - bn2->tsorted = BATcount(l) <= 1; - bn2->trevsorted = BATcount(bn2) <= 1; - bn2->tkey = BATcount(l) <= 1; - bn2->tdense = bn2->tkey != 0; - bn2->tnil = 0; - bn2->tnonil = 1; - BATtseqbase(bn1, l->hseqbase); - BATtseqbase(bn2, r->hseqbase); - *r1p = bn1; - *r2p = bn2; - return GDK_SUCCEED; -} +#include "gdk_cand.h" /* Calculate a cross product between bats l and r with optional * candidate lists sl for l and sr for r. @@ -60,28 +18,75 @@ BATcross1(BAT **r1p, BAT **r2p, BAT *l, gdk_return BATsubcross(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr) { - BAT *bn1, *bn2, *t; + BAT *bn1, *bn2; + BUN start1, start2; + BUN end1, end2; + BUN cnt1, cnt2; + const oid *restrict lcand, *restrict rcand; + const oid *lcandend, *rcandend; + oid seq; + oid *restrict p; + BUN i, j; - if (BATcross1(&bn1, &bn2, sl ? sl : l, sr ? sr : r) != GDK_SUCCEED) + CANDINIT(l, sl, start1, end1, cnt1, lcand, lcandend); + CANDINIT(r, sr, start2, end2, cnt2, rcand, rcandend); + if (lcand) + cnt1 = lcandend - lcand; + if (rcand) + cnt2 = rcandend - rcand; + + bn1 = COLnew(0, TYPE_oid, cnt1 * cnt2, TRANSIENT); + if (bn1 == NULL) return GDK_FAIL; - if (sl) { - t = BATproject(bn1, sl); - BBPunfix(bn1->batCacheid); - if (t == NULL) { - BBPunfix(bn2->batCacheid); - return GDK_FAIL; - } - bn1 = t; + BATsetcount(bn1, cnt1 * cnt2); + bn1->tsorted = 1; + bn1->trevsorted = cnt1 <= 1; + bn1->tkey = cnt2 <= 1; + bn1->tnil = 0; + bn1->tnonil = 1; + p = (oid *) Tloc(bn1, 0); + if (lcand) { + for (i = 0; i < cnt1; i++) + for (j = 0; j < cnt2; j++) + *p++ = lcand[i]; + bn1->tdense = 0; + } else { + seq = l->hseqbase + start1; + for (i = 0; i < cnt1; i++) + for (j = 0; j < cnt2; j++) + *p++ = i + seq; + bn1->tdense = bn1->tkey != 0; + if (bn1->tdense) + BATtseqbase(bn1, seq); } - if (sr) { - t = BATproject(bn2, sr); - BBPunfix(bn2->batCacheid); - if (t == NULL) { - BBPunfix(bn1->batCacheid); - return GDK_FAIL; - } - bn2 = t; + + bn2 = COLnew(0, TYPE_oid, cnt1 * cnt2, TRANSIENT); + if (bn2 == NULL) { + BBPreclaim(bn1); + return GDK_FAIL; } + BATsetcount(bn2, cnt1 * cnt2); + bn2->tsorted = cnt1 <= 1; + bn2->trevsorted = cnt2 <= 1; + bn2->tkey = cnt1 <= 1; + bn2->tnil = 0; + bn2->tnonil = 1; + p = (oid *) Tloc(bn2, 0); + if (rcand) { + for (i = 0; i < cnt1; i++) + for (j = 0; j < cnt2; j++) + *p++ = rcand[j]; + bn2->tdense = 0; + } else { + seq = r->hseqbase + start2; + for (i = 0; i < cnt1; i++) + for (j = 0; j < cnt2; j++) + *p++ = j + seq; + bn2->tdense = bn2->tkey != 0; + if (bn2->tdense) + BATtseqbase(bn2, seq); + } + *r1p = bn1; *r2p = bn2; return GDK_SUCCEED; diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c --- a/gdk/gdk_select.c +++ b/gdk/gdk_select.c @@ -1257,6 +1257,20 @@ BATselect(BAT *b, BAT *s, const void *tl /* can we use the base type? */ t = ATOMbasetype(t); lnil = ATOMcmp(t, tl, nil) == 0; /* low value = nil? */ + + if (!lnil && th != NULL && (!li || !hi) && !anti && ATOMcmp(t, tl, th) == 0) { + /* upper and lower bound of range are equal and we + * want an interval that's open on at least one + * side */ + ALGODEBUG fprintf(stderr, "#BATselect(b=%s#" BUNFMT + ",s=%s%s,li=%d,hi=%d,anti=%d): empty interval\n", + BATgetId(b), BATcount(b), + s ? BATgetId(s) : "NULL", + s && BATtdense(s) ? "(dense)" : "", + li, hi, anti); + return newempty(); + } + lval = !lnil || th == NULL; /* low value used for comparison */ equi = th == NULL || (lval && ATOMcmp(t, tl, th) == 0); /* point select? */ if (equi) { diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -1279,7 +1279,7 @@ stmt_uselect(backend *be, stmt *op1, stm q = pushArgument(mb, q, r); q = pushArgument(mb, q, r); q = pushBit(mb, q, TRUE); - q = pushBit(mb, q, FALSE); + q = pushBit(mb, q, TRUE); q = pushBit(mb, q, FALSE); if (q == NULL) return NULL; diff --git a/sql/storage/bat/bat_table.c b/sql/storage/bat/bat_table.c --- a/sql/storage/bat/bat_table.c +++ b/sql/storage/bat/bat_table.c @@ -261,7 +261,8 @@ rids_select( sql_trans *tr, sql_column * BAT *b = NULL, *r = NULL, *s = NULL; rids *rs = ZNEW(rids); const void *kvl = key_value_low, *kvh = key_value_high; - int hi = 0; + /* if pointers are equal, make it an inclusive select */ + int hi = key_value_low == key_value_high; s = delta_cands(tr, key->t); b = full_column(tr, key); diff --git a/sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out b/sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out --- a/sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out +++ b/sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out @@ -39,7 +39,7 @@ Ready. function user.s4_1():void; X_2:void := querylog.define("explain select count(*) from tmp where i = 20160222;", "default_pipe", 12:int); X_12 := bat.new(nil:int); - C_14 := algebra.select(X_12, 20160222:int, 20160222:int, true, false, false); + C_14 := algebra.select(X_12, 20160222:int, 20160222:int, true, true, false); X_18 := algebra.projection(C_14, X_12); X_19 := aggr.count(X_18); sql.resultSet("sys.L4", "L3", "bigint", 64:int, 0:int, 7:int, X_19); @@ -54,7 +54,7 @@ end user.s4_1; function user.s6_1():void; X_2:void := querylog.define("explain select count(*) from tmp where i = \\'20160222\\';", "default_pipe", 13:int); X_12 := bat.new(nil:int); - C_16 := algebra.select(X_12, 20160222:int, 20160222:int, true, false, false); + C_16 := algebra.select(X_12, 20160222:int, 20160222:int, true, true, false); X_20 := algebra.projection(C_16, X_12); X_21 := aggr.count(X_20); sql.resultSet("sys.L4", "L3", "bigint", 64:int, 0:int, 7:int, X_21); @@ -70,7 +70,7 @@ function user.s8_1():void; X_2:void := querylog.define("explain select count(*) from tmp where i = 201602221;", "default_pipe", 13:int); X_12 := bat.new(nil:int); X_13:bat[:int] := batcalc.int(0:int, X_12, 9:int, 0:int); - C_18 := algebra.select(X_13, 201602221:int, 201602221:int, true, false, false); + C_18 := algebra.select(X_13, 201602221:int, 201602221:int, true, true, false); X_22 := algebra.projection(C_18, X_12); X_23 := aggr.count(X_22); sql.resultSet("sys.L4", "L3", "bigint", 64:int, 0:int, 7:int, X_23); diff --git a/sql/test/BugTracker-2017/Tests/All b/sql/test/BugTracker-2017/Tests/All --- a/sql/test/BugTracker-2017/Tests/All +++ b/sql/test/BugTracker-2017/Tests/All @@ -1,3 +1,5 @@ shutdown.Bug-6182 avggroupbysq.Bug-6178 semijoinunion.Bug-6150 +HAVE_LIBZ?heapextend.Bug-6134 +empty-interval.Bug-6184 diff --git a/sql/test/BugTracker-2017/Tests/all_dates.csv.gz b/sql/test/BugTracker-2017/Tests/all_dates.csv.gz new file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5b660b69ded583f9ba5235a6e32aa016a31820e7 GIT binary patch literal 92846 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 _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list