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