Changeset: b411630655c7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b411630655c7
Modified Files:
gdk/gdk_aggr.c
gdk/gdk_atoms.c
gdk/gdk_atoms.h
gdk/gdk_bat.c
gdk/gdk_bbp.c
gdk/gdk_calc.c
gdk/gdk_select.c
monetdb5/mal/mal_parser.c
monetdb5/modules/atoms/mtime.c
sql/backends/monet5/sql_cast_impl_int.h
sql/backends/monet5/sql_round_impl.h
sql/server/sql_parser.y
Branch: default
Log Message:
GDK_XXX_min and GDK_XXX_max are now inclusive.
This also means that the nil value is not equal to GDK_XXX_min.
diffs (truncated from 368 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
@@ -363,7 +363,7 @@ dofsum(const void *restrict values, oid
x = 2 * (hi + y);
if (tp2 == TYPE_flt) {
if (x > GDK_flt_max ||
- x <= GDK_flt_min) {
+ x < GDK_flt_min) {
if (abort_on_error)
goto overflow;
((flt *) results)[grp]
= flt_nil;
@@ -432,7 +432,7 @@ dofsum(const void *restrict values, oid
GDKfree(pergroup[grp].partials);
pergroup[grp].partials = NULL;
if (tp2 == TYPE_flt) {
- if (hi > GDK_flt_max || hi <= GDK_flt_min) {
+ if (hi > GDK_flt_max || hi < GDK_flt_min) {
if (abort_on_error)
goto overflow;
((flt *) results)[grp] = flt_nil;
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -248,14 +248,14 @@ ATOMisdescendant(int tpe, int parent)
}
-const bte bte_nil = GDK_bte_min;
-const sht sht_nil = GDK_sht_min;
-const int int_nil = GDK_int_min;
-const flt flt_nil = GDK_flt_min;
-const dbl dbl_nil = GDK_dbl_min;
-const lng lng_nil = GDK_lng_min;
+const bte bte_nil = GDK_bte_min-1;
+const sht sht_nil = GDK_sht_min-1;
+const int int_nil = GDK_int_min-1;
+const flt flt_nil = -FLT_MAX;
+const dbl dbl_nil = -DBL_MAX;
+const lng lng_nil = GDK_lng_min-1;
#ifdef HAVE_HGE
-const hge hge_nil = GDK_hge_min;
+const hge hge_nil = GDK_hge_min-1;
#endif
const oid oid_nil = (oid) 1 << (sizeof(oid) * 8 - 1);
const char str_nil[2] = { '\200', 0 };
@@ -718,7 +718,7 @@ numFromStr(const char *src, size_t *len,
switch (sz) {
case 1: {
bte **dstbte = (bte **) dst;
- if (base <= GDK_bte_min || base > GDK_bte_max) {
+ if (base < GDK_bte_min || base > GDK_bte_max) {
goto overflow;
}
**dstbte = (bte) base;
@@ -726,7 +726,7 @@ numFromStr(const char *src, size_t *len,
}
case 2: {
sht **dstsht = (sht **) dst;
- if (base <= GDK_sht_min || base > GDK_sht_max) {
+ if (base < GDK_sht_min || base > GDK_sht_max) {
goto overflow;
}
**dstsht = (sht) base;
@@ -734,7 +734,7 @@ numFromStr(const char *src, size_t *len,
}
case 4: {
int **dstint = (int **) dst;
- if (base <= GDK_int_min || base > GDK_int_max) {
+ if (base < GDK_int_min || base > GDK_int_max) {
goto overflow;
}
**dstint = (int) base;
@@ -743,7 +743,7 @@ numFromStr(const char *src, size_t *len,
case 8: {
lng **dstlng = (lng **) dst;
#ifdef HAVE_HGE
- if (base <= GDK_lng_min || base > GDK_lng_max) {
+ if (base < GDK_lng_min || base > GDK_lng_max) {
goto overflow;
}
#endif
@@ -861,7 +861,7 @@ hgeToStr(char **dst, size_t *len, const
strncpy(*dst, "nil", *len);
return 3;
}
- if ((hge) GDK_lng_min < *src && *src <= (hge) GDK_lng_max) {
+ if ((hge) GDK_lng_min <= *src && *src <= (hge) GDK_lng_max) {
lng s = (lng) *src;
return lngToStr(dst, len, &s);
} else {
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -84,22 +84,22 @@ gdk_export size_t escapedStr(char *dst,
#define GDK_bit_max ((bit) 1)
#define GDK_bit_min ((bit) 0)
#define GDK_bte_max ((bte) SCHAR_MAX)
-#define GDK_bte_min ((bte) SCHAR_MIN)
+#define GDK_bte_min ((bte) SCHAR_MIN+1)
#define GDK_sht_max ((sht) SHRT_MAX)
-#define GDK_sht_min ((sht) SHRT_MIN)
+#define GDK_sht_min ((sht) SHRT_MIN+1)
#define GDK_int_max INT_MAX
-#define GDK_int_min INT_MIN
+#define GDK_int_min (INT_MIN+1)
#define GDK_flt_max ((flt) FLT_MAX)
-#define GDK_flt_min (-GDK_flt_max)
+#define GDK_flt_min (-3.4028233e+38F) /* nextafterf(-FLT_MAX,0) */
#define GDK_lng_max ((lng) LLONG_MAX)
-#define GDK_lng_min ((lng) LLONG_MIN)
+#define GDK_lng_min ((lng) LLONG_MIN+1)
#ifdef HAVE_HGE
#define GDK_hge_max ((((hge) 1) << 126) - 1 + \
(((hge) 1) << 126))
-#define GDK_hge_min (-GDK_hge_max-1)
+#define GDK_hge_min (-GDK_hge_max)
#endif
#define GDK_dbl_max ((dbl) DBL_MAX)
-#define GDK_dbl_min (-GDK_dbl_max)
+#define GDK_dbl_min (-1.7976931348623155e+308) /* nextafter(-DBL_MAX,0) */
/* GDK_oid_max see below */
#define GDK_oid_min ((oid) 0)
/* representation of the nil */
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -1493,8 +1493,8 @@ BAThseqbase(BAT *b, oid o)
{
if (b == NULL)
return;
- assert(o < oid_nil); /* i.e., not oid_nil */
- assert(o + BATcount(b) < oid_nil);
+ assert(o <= GDK_oid_max); /* i.e., not oid_nil */
+ assert(o + BATcount(b) <= GDK_oid_max);
assert(b->batCacheid > 0);
if (b->hseqbase != o) {
b->batDirtydesc = TRUE;
@@ -1508,7 +1508,7 @@ BATtseqbase(BAT *b, oid o)
if (b == NULL)
return;
assert(o <= oid_nil);
- assert(is_oid_nil(o) || o + BATcount(b) < oid_nil);
+ assert(is_oid_nil(o) || o + BATcount(b) <= GDK_oid_max);
assert(b->batCacheid > 0);
if (ATOMtype(b->ttype) == TYPE_oid) {
if (b->tseqbase != o) {
@@ -2018,8 +2018,8 @@ BATassertProps(BAT *b)
assert(b->batCount >= b->batInserted);
/* headless */
- assert(b->hseqbase < oid_nil); /* non-nil seqbase */
- assert(b->hseqbase + BATcount(b) < oid_nil);
+ assert(b->hseqbase <= GDK_oid_max); /* non-nil seqbase */
+ assert(b->hseqbase + BATcount(b) <= GDK_oid_max);
bbpstatus = BBP_status(b->batCacheid);
/* only at most one of BBPDELETED, BBPEXISTING, BBPNEW may be set */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -958,7 +958,7 @@ headheapinit(oid *hseq, const char *buf,
GDKfatal("BBPinit: head column must be VOID (ID = %d).", (int)
bid);
if (base < 0
#if SIZEOF_OID < SIZEOF_LNG
- || base >= (lng) oid_nil
+ || base > (lng) GDK_oid_max
#endif
)
GDKfatal("BBPinit: head seqbase out of range (ID = %d, seq =
"LLFMT").", (int) bid, base);
@@ -1192,7 +1192,7 @@ BBPreadEntries(FILE *fp, int bbpversion)
} else {
if (base < 0
#if SIZEOF_OID < SIZEOF_LNG
- || base >= (lng) oid_nil
+ || base > (lng) GDK_oid_max
#endif
)
GDKfatal("BBPinit: head seqbase out of range
(ID = "LLFMT", seq = "LLFMT").", batid, base);
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -13439,7 +13439,7 @@ convert_##TYPE1##_##TYPE2(const TYPE1 *s
if (is_##TYPE1##_nil(src[i])) { \
dst[i] = TYPE2##_nil; \
nils++; \
- } else if (src[i] <= (TYPE1) GDK_##TYPE2##_min || \
+ } else if (src[i] < (TYPE1) GDK_##TYPE2##_min || \
src[i] > (TYPE1) GDK_##TYPE2##_max) { \
if (abort_on_error) \
CONV_OVERFLOW(TYPE1, #TYPE2, src[i]); \
@@ -13491,7 +13491,7 @@ convert_##TYPE1##_##TYPE2(const TYPE1 *s
if (is_##TYPE1##_nil(src[i])) { \
dst[i] = TYPE2##_nil; \
nils++; \
- } else if (src[i] <= (TYPE1) GDK_##TYPE2##_min || \
+ } else if (src[i] < (TYPE1) GDK_##TYPE2##_min || \
src[i] > (TYPE1) GDK_##TYPE2##_max) { \
if (abort_on_error) \
CONV_OVERFLOW(TYPE1, #TYPE2, src[i]); \
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -470,16 +470,16 @@ do {
\
#define NEXTVALUEflt(x) nextafterf((x), GDK_flt_max)
#define NEXTVALUEdbl(x) nextafter((x), GDK_dbl_max)
-#define MINVALUEbte NEXTVALUEbte(GDK_bte_min)
-#define MINVALUEsht NEXTVALUEsht(GDK_sht_min)
-#define MINVALUEint NEXTVALUEint(GDK_int_min)
-#define MINVALUElng NEXTVALUElng(GDK_lng_min)
+#define MINVALUEbte GDK_bte_min
+#define MINVALUEsht GDK_sht_min
+#define MINVALUEint GDK_int_min
+#define MINVALUElng GDK_lng_min
#ifdef HAVE_HGE
-#define MINVALUEhge NEXTVALUEhge(GDK_hge_min)
+#define MINVALUEhge GDK_hge_min
#endif
#define MINVALUEoid GDK_oid_min
-#define MINVALUEflt NEXTVALUEflt(GDK_flt_min)
-#define MINVALUEdbl NEXTVALUEdbl(GDK_dbl_min)
+#define MINVALUEflt GDK_flt_min
+#define MINVALUEdbl GDK_dbl_min
#define MAXVALUEbte GDK_bte_max
#define MAXVALUEsht GDK_sht_max
diff --git a/monetdb5/mal/mal_parser.c b/monetdb5/mal/mal_parser.c
--- a/monetdb5/mal/mal_parser.c
+++ b/monetdb5/mal/mal_parser.c
@@ -574,11 +574,11 @@ handleInts:
if (hgeFromStr(CURRENT(cntxt), &len, &pval) < 0)
l = hge_nil;
- if ((hge) GDK_int_min < l && l <= (hge) GDK_int_max) {
+ if ((hge) GDK_int_min <= l && l <= (hge) GDK_int_max) {
cst->vtype = TYPE_int;
cst->val.ival = (int) l;
} else
- if ((hge) GDK_lng_min < l && l <= (hge) GDK_lng_max) {
+ if ((hge) GDK_lng_min <= l && l <= (hge) GDK_lng_max) {
cst->vtype = TYPE_lng;
cst->val.lval = (lng) l;
} else {
@@ -593,7 +593,7 @@ handleInts:
if (lngFromStr(CURRENT(cntxt), &len, &pval) < 0)
l = lng_nil;
- if ((lng) GDK_int_min < l && l <= (lng) GDK_int_max) {
+ if ((lng) GDK_int_min <= l && l <= (lng) GDK_int_max) {
cst->vtype = TYPE_int;
cst->val.ival = (int) l;
} else {
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -2623,7 +2623,7 @@ MTIMEsecs2daytime(daytime *ret, const ln
{
*ret = is_lng_nil(*s) ||
*s > GDK_int_max / 1000 ||
- *s <= GDK_int_min / 1000 ?
+ *s < GDK_int_min / 1000 ?
daytime_nil : (daytime) (*s * 1000);
return MAL_SUCCEED;
}
@@ -2650,7 +2650,7 @@ MTIMEsecs2daytime_bulk(bat *ret, bat *bi
for (n = BATcount(b); n > 0; n--, s++, dt++) {
if (is_lng_nil(*s) ||
*s > GDK_int_max / 1000 ||
- *s <= GDK_int_min / 1000) {
+ *s < GDK_int_min / 1000) {
*dt = daytime_nil;
bn->tnil = 1;
} else {
@@ -2713,7 +2713,7 @@ MTIMEepoch2int(int *ret, const timestamp
return err;
if (is_lng_nil(v))
*ret = int_nil;
- else if ((v/1000) > GDK_int_max || (v/1000) <= GDK_int_min)
+ else if ((v/1000) > GDK_int_max || (v/1000) < GDK_int_min)
throw(MAL, "mtime.epoch", "22003!epoch value too large");
else
*ret = (int) (v / 1000);
diff --git a/sql/backends/monet5/sql_cast_impl_int.h
b/sql/backends/monet5/sql_cast_impl_int.h
--- a/sql/backends/monet5/sql_cast_impl_int.h
+++ b/sql/backends/monet5/sql_cast_impl_int.h
@@ -40,7 +40,7 @@ FUN(do_,TP1,_dec2dec_,TP2) (TP2 *restric
#ifdef DOWNCAST
if (s2 > s1) {
- if (val <= GDKmin(TP2) / scales[s2 - s1] ||
+ if (val < GDKmin(TP2) / scales[s2 - s1] ||
val > GDKmax(TP2) / scales[s2 - s1]) {
char *buf = NULL, *msg;
size_t len = 0;
@@ -53,7 +53,7 @@ FUN(do_,TP1,_dec2dec_,TP2) (TP2 *restric
}
val *= (TP1) scales[s2 - s1];
} else if (s2 < s1) {
- if (val / scales[s1 - s2] <= GDKmin(TP2) ||
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list