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

Reply via email to