Changeset: 6de8fa81c9f4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6de8fa81c9f4
Added Files:
        monetdb5/tests/gdkTests/Tests/between.mal
        monetdb5/tests/gdkTests/Tests/between.stable.err
        monetdb5/tests/gdkTests/Tests/between.stable.out
Modified Files:
        gdk/gdk_calc.c
        monetdb5/modules/mal/batcalc.mal
        monetdb5/modules/mal/batcalc.mal.sh
        monetdb5/modules/mal/calc.mal
        monetdb5/modules/mal/calc.mal.sh
        monetdb5/tests/gdkTests/Tests/All
Branch: default
Log Message:

Merge with Jan2014 branch.


diffs (truncated from 921 to 300 lines):

diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -8434,8 +8434,8 @@ BATcalcbetween_intern(const void *src, i
                             k = start * incr3,
                             l = start;
                     l < end;
-                    i += incr1, j += incr2, k += incr3, l++, 
-                    soff+=wd1, loff+= wd2, hoff+= wd3 ) {
+                    i += incr1, j += incr2, k += incr3, l++,
+                            soff += wd1, loff += wd2, hoff += wd3) {
                        const void *p1, *p2, *p3;
                        CHECKCAND(dst, l, seqbase, bit_nil);
                        p1 = hp1 ? (const void *) (hp1 + VarHeapVal(src, i, 
wd1)) : (const void *) ((const char *) src + soff);
@@ -8623,15 +8623,29 @@ VARcalcbetween(ValPtr ret, const ValReco
               const ValRecord *hi)
 {
        BUN nils = 0;           /* to make reusing BETWEEN macro easier */
-
-       if (ATOMstorage(v->vtype) != ATOMstorage(lo->vtype) ||
-           ATOMstorage(v->vtype) != ATOMstorage(hi->vtype)) {
+       int t;
+       int (*atomcmp)(const void *, const void *);
+       const void *nil;
+
+       t = v->vtype;
+       if (t != lo->vtype || t != hi->vtype) {
                GDKerror("VARcalcbetween: incompatible input types.\n");
                return GDK_FAIL;
        }
+       if (!BATatoms[t].linear) {
+               GDKerror("VARcalcbetween: non-linear input type.\n");
+               return GDK_FAIL;
+       }
+
+       nil = ATOMnilptr(t);
+       atomcmp = BATatoms[t].atomCmp;
+       if (t != ATOMstorage(t) &&
+           ATOMnilptr(ATOMstorage(t)) == nil &&
+           BATatoms[ATOMstorage(t)].atomCmp == atomcmp)
+               t = ATOMstorage(t);
 
        ret->vtype = TYPE_bit;
-       switch (ATOMstorage(v->vtype)) {
+       switch (t) {
        case TYPE_bte:
                ret->val.btval = BETWEEN(v->val.btval, lo->val.btval, 
hi->val.btval, bte);
                break;
@@ -8651,9 +8665,17 @@ VARcalcbetween(ValPtr ret, const ValReco
                ret->val.btval = BETWEEN(v->val.dval, lo->val.dval, 
hi->val.dval, dbl);
                break;
        default:
-               GDKerror("VARcalcbetween: bad input type %s.\n",
-                        ATOMname(v->vtype));
-               return GDK_FAIL;
+               if (atomcmp(VALptr(v), nil) == 0 ||
+                   (atomcmp(VALptr(lo), nil) == 0 &&
+                    atomcmp(VALptr(hi), nil) == 0))
+                       ret->val.btval = bit_nil;
+               else
+                       ret->val.btval =
+                               (bit) ((atomcmp(VALptr(lo), nil) == 0 ||
+                                       atomcmp(VALptr(v), VALptr(lo)) >= 0) &&
+                                      (atomcmp(VALptr(hi), nil) == 0 ||
+                                       atomcmp(VALptr(v), VALptr(hi)) <= 0));
+               break;
        }
        (void) nils;
        return GDK_SUCCEED;
diff --git a/monetdb5/modules/mal/batcalc.mal b/monetdb5/modules/mal/batcalc.mal
--- a/monetdb5/modules/mal/batcalc.mal
+++ b/monetdb5/modules/mal/batcalc.mal
@@ -19671,228 +19671,28 @@ address CMDbatCMP
 comment "Return -1/0/1 if V </==/> B with candidates list";
 
 
-pattern between(b:bat[:oid,:bit],lo:bat[:oid,:bit],hi:bat[:oid,:bit]) 
:bat[:oid,:bit]
+pattern between(b:bat[:oid,:any_1],lo:bat[:oid,:any_1],hi:bat[:oid,:any_1]) 
:bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:bit],lo:bat[:oid,:bit],hi:bat[:oid,:bit],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
+pattern 
between(b:bat[:oid,:any_1],lo:bat[:oid,:any_1],hi:bat[:oid,:any_1],s:bat[:oid,:oid])
 :bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:bit],lo:bat[:oid,:bit],hi:bit) :bat[:oid,:bit]
+pattern between(b:bat[:oid,:any_1],lo:bat[:oid,:any_1],hi:any_1) 
:bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:bit],lo:bat[:oid,:bit],hi:bit,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
+pattern 
between(b:bat[:oid,:any_1],lo:bat[:oid,:any_1],hi:any_1,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:bit],lo:bit,hi:bat[:oid,:bit]) :bat[:oid,:bit]
+pattern between(b:bat[:oid,:any_1],lo:any_1,hi:bat[:oid,:any_1]) 
:bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:bit],lo:bit,hi:bat[:oid,:bit],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
+pattern 
between(b:bat[:oid,:any_1],lo:any_1,hi:bat[:oid,:any_1],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:bit],lo:bit,hi:bit) :bat[:oid,:bit]
+pattern between(b:bat[:oid,:any_1],lo:any_1,hi:any_1) :bat[:oid,:bit]
 address CMDbatBETWEEN
 comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:bit],lo:bit,hi:bit,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:bte],lo:bat[:oid,:bte],hi:bat[:oid,:bte]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:bte],lo:bat[:oid,:bte],hi:bat[:oid,:bte],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:bte],lo:bat[:oid,:bte],hi:bte) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:bte],lo:bat[:oid,:bte],hi:bte,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:bte],lo:bte,hi:bat[:oid,:bte]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:bte],lo:bte,hi:bat[:oid,:bte],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:bte],lo:bte,hi:bte) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:bte],lo:bte,hi:bte,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:sht],lo:bat[:oid,:sht],hi:bat[:oid,:sht]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:sht],lo:bat[:oid,:sht],hi:bat[:oid,:sht],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:sht],lo:bat[:oid,:sht],hi:sht) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:sht],lo:bat[:oid,:sht],hi:sht,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:sht],lo:sht,hi:bat[:oid,:sht]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:sht],lo:sht,hi:bat[:oid,:sht],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:sht],lo:sht,hi:sht) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:sht],lo:sht,hi:sht,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:int],lo:bat[:oid,:int],hi:bat[:oid,:int]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:int],lo:bat[:oid,:int],hi:bat[:oid,:int],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:int],lo:bat[:oid,:int],hi:int) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:int],lo:bat[:oid,:int],hi:int,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:int],lo:int,hi:bat[:oid,:int]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:int],lo:int,hi:bat[:oid,:int],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:int],lo:int,hi:int) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:int],lo:int,hi:int,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:wrd],lo:bat[:oid,:wrd],hi:bat[:oid,:wrd]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:wrd],lo:bat[:oid,:wrd],hi:bat[:oid,:wrd],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:wrd],lo:bat[:oid,:wrd],hi:wrd) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:wrd],lo:bat[:oid,:wrd],hi:wrd,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:wrd],lo:wrd,hi:bat[:oid,:wrd]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:wrd],lo:wrd,hi:bat[:oid,:wrd],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:wrd],lo:wrd,hi:wrd) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:wrd],lo:wrd,hi:wrd,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:lng],lo:bat[:oid,:lng],hi:bat[:oid,:lng]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:lng],lo:bat[:oid,:lng],hi:bat[:oid,:lng],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:lng],lo:bat[:oid,:lng],hi:lng) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:lng],lo:bat[:oid,:lng],hi:lng,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:lng],lo:lng,hi:bat[:oid,:lng]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:lng],lo:lng,hi:bat[:oid,:lng],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:lng],lo:lng,hi:lng) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:lng],lo:lng,hi:lng,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:flt],lo:bat[:oid,:flt],hi:bat[:oid,:flt]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:flt],lo:bat[:oid,:flt],hi:bat[:oid,:flt],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:flt],lo:bat[:oid,:flt],hi:flt) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:flt],lo:bat[:oid,:flt],hi:flt,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:flt],lo:flt,hi:bat[:oid,:flt]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:flt],lo:flt,hi:bat[:oid,:flt],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:flt],lo:flt,hi:flt) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:flt],lo:flt,hi:flt,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:dbl],lo:bat[:oid,:dbl],hi:bat[:oid,:dbl]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:dbl],lo:bat[:oid,:dbl],hi:bat[:oid,:dbl],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:dbl],lo:bat[:oid,:dbl],hi:dbl) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:dbl],lo:bat[:oid,:dbl],hi:dbl,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:dbl],lo:dbl,hi:bat[:oid,:dbl]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:dbl],lo:dbl,hi:bat[:oid,:dbl],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:dbl],lo:dbl,hi:dbl) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:dbl],lo:dbl,hi:dbl,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-
-pattern between(b:bat[:oid,:oid],lo:bat[:oid,:oid],hi:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern 
between(b:bat[:oid,:oid],lo:bat[:oid,:oid],hi:bat[:oid,:oid],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:oid],lo:bat[:oid,:oid],hi:oid) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:oid],lo:bat[:oid,:oid],hi:oid,s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive with candidates list, nil border is 
(minus) infinity";
-pattern between(b:bat[:oid,:oid],lo:oid,hi:bat[:oid,:oid]) :bat[:oid,:bit]
-address CMDbatBETWEEN
-comment "B between LO and HI inclusive, nil border is (minus) infinity";
-pattern between(b:bat[:oid,:oid],lo:oid,hi:bat[:oid,:oid],s:bat[:oid,:oid]) 
:bat[:oid,:bit]
-address CMDbatBETWEEN
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to