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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list