MonetDB: default - Merge with Jul2017 branch.

2017-11-07 Thread Sjoerd Mullender
Changeset: e54f487eabf4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e54f487eabf4
Added Files:

sql/test/BugTracker-2016/Tests/min-max-uuid-column-wrong-results.Bug-3953.sql
Removed Files:
sql/test/BugTracker-2016/Tests/data-uuid.csv.bz2

sql/test/BugTracker-2016/Tests/min-max-uuid-column-wrong-results.Bug-3953.sql.in
Modified Files:
monetdb5/mal/mal_builder.c
monetdb5/mal/mal_function.c
monetdb5/mal/mal_instruction.c
monetdb5/modules/mal/language.c
monetdb5/optimizer/opt_multiplex.c
monetdb5/optimizer/opt_remap.c
sql/backends/monet5/sql_scenario.c
sql/server/sql_mvc.c
sql/storage/store.c
sql/test/BugTracker-2016/Tests/All
sql/test/BugTracker-2017/Tests/double-groupby-column.Bug-6207.sql
sql/test/BugTracker-2017/Tests/double-groupby-column.Bug-6207.stable.out
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/mergetables/Tests/All
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out
Branch: default
Log Message:

Merge with Jul2017 branch.


diffs (truncated from 370 to 300 lines):

diff --git a/monetdb5/mal/mal_builder.c b/monetdb5/mal/mal_builder.c
--- a/monetdb5/mal/mal_builder.c
+++ b/monetdb5/mal/mal_builder.c
@@ -38,8 +38,13 @@ newAssignment(MalBlkPtr mb)
 InstrPtr
 newStmt(MalBlkPtr mb, const char *module, const char *name)
 {
-   InstrPtr q = newInstruction(mb, putName(module), putName(name));
+   InstrPtr q;
+   str mName = putName(module), nName = putName(name);
 
+   if(mName == NULL || nName == NULL) {
+   return NULL;
+   }
+   q = newInstruction(mb, mName, nName);
if ( q == NULL)
return NULL;
setDestVar(q, newTmpVariable(mb, TYPE_any));
@@ -71,11 +76,18 @@ InstrPtr
 newFcnCall(MalBlkPtr mb, char *mod, char *fcn)
 {
InstrPtr q = newAssignment(mb);
+   str fcnName, modName;
 
if ( q == NULL || mod == NULL || fcn == NULL)
return NULL;
-   setModuleId(q, putName(mod));
-   setFunctionId(q, putName(fcn));
+   modName = putName(mod);
+   fcnName = putName(fcn);
+   if(modName == NULL || fcnName == NULL) {
+   freeInstruction(q);
+   return NULL;
+   }
+   setModuleId(q, modName);
+   setFunctionId(q, fcnName);
return q;
 }
 
diff --git a/monetdb5/mal/mal_function.c b/monetdb5/mal/mal_function.c
--- a/monetdb5/mal/mal_function.c
+++ b/monetdb5/mal/mal_function.c
@@ -23,6 +23,9 @@ Symbol newFunction(str mod, str nme,int 
InstrPtr p;
int varid;
 
+   if(mod == NULL || nme == NULL)
+   return NULL;
+
s = newSymbol(nme,kind);
if (s == NULL)
return NULL;
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -48,6 +48,10 @@ newSymbol(str nme, int kind)
if (cur == NULL)
return NULL;
cur->name = putName(nme);
+   if(cur->name == NULL) {
+   GDKfree(cur);
+   return NULL;
+   }
cur->kind = kind;
cur->peer = NULL;
cur->def = newMalBlk(kind == FUNCTIONsymbol? STMT_INCREMENT : 2);
diff --git a/monetdb5/modules/mal/language.c b/monetdb5/modules/mal/language.c
--- a/monetdb5/modules/mal/language.c
+++ b/monetdb5/modules/mal/language.c
@@ -180,7 +180,7 @@ CMDregisterFunction(Client cntxt, MalBlk
str *code = getArgReference_str(stk,pci,3);
str *help = getArgReference_str(stk,pci,4);
InstrPtr sig;
-   str msg;
+   str msg, fcnName, modName, ahelp;
 
msg= compileString(&sym, cntxt,*code);
if( sym) {
@@ -188,11 +188,19 @@ CMDregisterFunction(Client cntxt, MalBlk
//mnstr_printf(cntxt->fdout,"#register FUNCTION %s.%s\n",
//getModuleId(sym->def->stmt[0]), 
getFunctionId(sym->def->stmt[0]));
mb= sym->def;
+   fcnName = putName(*fcn);
+   modName = putName(*mod);
+   ahelp = GDKstrdup(*help);
+   if(fcnName == NULL || modName == NULL || help == NULL) {
+   freeSymbol(sym);
+   GDKfree(ahelp);
+   throw(MAL, "language.register", MAL_MALLOC_FAIL);
+   }
if( help)
-   mb->help= GDKstrdup(*help);
+   mb->help= ahelp;
sig= getSignature(sym);
-   sym->name= putName(*fcn);
-   setModuleId(sig, putName(*mod));
+   sym->name= fcnName;
+   setModuleId(sig, modName);
setFunctionId(sig, sym->name);
insertSymbol(findModule(cntxt->usermodule, getModuleId(sig)), 

MonetDB: default - Introduced macros is_XXX_nil() to check wheth...

2017-11-07 Thread Sjoerd Mullender
Changeset: 9298bfa9d5d7 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9298bfa9d5d7
Modified Files:
gdk/gdk.h
gdk/gdk_aggr.c
gdk/gdk_align.c
gdk/gdk_atoms.c
gdk/gdk_atoms.h
gdk/gdk_bat.c
gdk/gdk_batop.c
gdk/gdk_bbp.c
gdk/gdk_calc.c
gdk/gdk_calc_compare.h
gdk/gdk_group.c
gdk/gdk_hash.c
gdk/gdk_imprints.c
gdk/gdk_join.c
gdk/gdk_logger.c
gdk/gdk_project.c
gdk/gdk_qsort.c
gdk/gdk_search.c
gdk/gdk_select.c
gdk/gdk_ssort.c
gdk/gdk_unique.c
gdk/gdk_value.c
geom/monetdb5/geom.c
monetdb5/extras/rapi/converters.c.h
monetdb5/mal/mal_atom.c
monetdb5/mal/mal_authorize.c
monetdb5/mal/mal_debugger.c
monetdb5/mal/mal_interpreter.c
monetdb5/mal/mal_parser.c
monetdb5/modules/atoms/color.c
monetdb5/modules/atoms/color.h
monetdb5/modules/atoms/json.c
monetdb5/modules/atoms/mtime.c
monetdb5/modules/atoms/str.c
monetdb5/modules/kernel/algebra.c
monetdb5/modules/kernel/batcolor.c
monetdb5/modules/kernel/batmmath.c
monetdb5/modules/kernel/microbenchmark.c
monetdb5/modules/kernel/mmath.c
monetdb5/modules/mal/batcalc.c
monetdb5/modules/mal/calc.c
monetdb5/modules/mal/clients.c
monetdb5/modules/mal/iterator.c
monetdb5/modules/mal/language.c
monetdb5/modules/mal/mal_io.c
monetdb5/modules/mal/mkey.c
monetdb5/modules/mal/pcre.c
monetdb5/modules/mal/remote.c
monetdb5/modules/mal/tablet.c
monetdb5/optimizer/opt_mergetable.c
sql/backends/monet5/LSST/lsst.c
sql/backends/monet5/UDF/cudf/udf_impl.h
sql/backends/monet5/UDF/pyapi/conversion.c
sql/backends/monet5/UDF/pyapi/convert_loops.h
sql/backends/monet5/UDF/pyapi/emit.c
sql/backends/monet5/generator/generator.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_cast_impl_down_from_flt.h
sql/backends/monet5/sql_cast_impl_int.h
sql/backends/monet5/sql_cast_impl_up_to_flt.h
sql/backends/monet5/sql_cat.c
sql/backends/monet5/sql_fround.c
sql/backends/monet5/sql_fround_impl.h
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_round.c
sql/backends/monet5/sql_round_impl.h
sql/backends/monet5/sql_user.c
sql/backends/monet5/vaults/bam/bam_lib.c
sql/backends/monet5/vaults/fits/fits.c
sql/backends/monet5/vaults/lidar/lidar.c
sql/backends/monet5/vaults/netcdf/netcdf.c
sql/backends/monet5/vaults/shp/shp.c
sql/server/sql_atom.c
sql/server/sql_mvc.c
sql/server/sql_parser.y
sql/server/sql_privileges.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_table.c
sql/storage/store.c
sql/storage/store_dependency.c
Branch: default
Log Message:

Introduced macros is_XXX_nil() to check whether a value is NIL.


diffs (truncated from 6846 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -1293,13 +1293,13 @@ gdk_export BUN ORDERfndlast(BAT *b, cons
 gdk_export BUN BUNfnd(BAT *b, const void *right);
 
 #define BUNfndVOID(b, v)   \
-   (((*(const oid*)(v) == oid_nil) ^ ((b)->tseqbase == oid_nil)) | \
+   ((is_oid_nil(*(const oid*)(v)) ^ is_oid_nil((b)->tseqbase)) |   \
(*(const oid*)(v) < (b)->tseqbase) |\
(*(const oid*)(v) >= (b)->tseqbase + (b)->batCount) ?   \
 BUN_NONE : \
 (BUN) (*(const oid*)(v) - (b)->tseqbase))
 
-#define BATttype(b)((b)->ttype == TYPE_void && (b)->tseqbase != oid_nil ? \
+#define BATttype(b)((b)->ttype == TYPE_void && !is_oid_nil((b)->tseqbase) 
? \
 TYPE_oid : (b)->ttype)
 #define Tbase(b)   ((b)->tvheap->base)
 
@@ -1528,19 +1528,19 @@ gdk_export void GDKqsort(void *h, void *
 gdk_export void GDKqsort_rev(void *h, void *t, const void *base, size_t n, int 
hs, int ts, int tpe);
 
 #define BATtordered(b) ((b)->ttype == TYPE_void || (b)->tsorted)
-#define BATtrevordered(b) (((b)->ttype == TYPE_void && (b)->tseqbase == 
oid_nil) || (b)->trevsorted)
-#define BATtdense(b)   (BATtvoid(b) && (b)->tseqbase != oid_nil)
+#define BATtrevordered(b) (((b)->ttype == TYPE_void && 
is_oid_nil((b)->tseqbase)) || (b)->trevsorted)
+#define BATtdense(b)   (BATtvoid(b) && !is_oid_nil((b)->tseqbase))
 #define BATtvoid(b)(((b)->tdense && (b)->tsorted) || (b)->ttype==TYPE_void)
 #define BATtkey(b) (b->tkey != FALSE || BATtdense(b))
 
 /* set some properties that are trivial to deduce */
 #define BATsettrivprop(b)  \
do { 

MonetDB: default - GDK_XXX_min and GDK_XXX_max are now inclusive.

2017-11-07 Thread Sjoerd Mullender
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

MonetDB: default - Check whether conversion to float caused over...

2017-11-07 Thread Sjoerd Mullender
Changeset: 44310b9a44ff for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=44310b9a44ff
Modified Files:
gdk/gdk_aggr.c
Branch: default
Log Message:

Check whether conversion to float caused overflow by checking for INFINITY.


diffs (48 lines):

diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c
--- a/gdk/gdk_aggr.c
+++ b/gdk/gdk_aggr.c
@@ -215,6 +215,7 @@ dofsum(const void *restrict values, oid 
volatile double lo, hi;
double twopow = pow((double) FLT_RADIX, (double) (DBL_MAX_EXP - 1));
BUN nils = 0;
+   volatile flt f;
 
ALGODEBUG fprintf(stderr, "#%s: floating point summation\n", func);
/* we only deal with the two floating point types */
@@ -362,14 +363,16 @@ dofsum(const void *restrict values, oid 
pergroup[grp].partials = NULL;
x = 2 * (hi + y);
if (tp2 == TYPE_flt) {
-   if (x > GDK_flt_max ||
-   x < GDK_flt_min) {
+   f = (flt) x;
+   if (isinf(f) ||
+   isnan(f) ||
+   is_flt_nil(f)) {
if (abort_on_error)
goto overflow;
((flt *) results)[grp] 
= flt_nil;
nils++;
} else
-   ((flt *) results)[grp] 
= (flt) x;
+   ((flt *) results)[grp] 
= f;
} else if (is_dbl_nil(x)) {
if (abort_on_error)
goto overflow;
@@ -432,13 +435,14 @@ 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) {
+   f = (flt) hi;
+   if (isinf(f) || isnan(f) || is_flt_nil(f)) {
if (abort_on_error)
goto overflow;
((flt *) results)[grp] = flt_nil;
nils++;
} else
-   ((flt *) results)[grp] = (flt) hi;
+   ((flt *) results)[grp] = f;
} else if (is_dbl_nil(hi)) {
if (abort_on_error)
goto overflow;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Simplify code.

2017-11-07 Thread Sjoerd Mullender
Changeset: 31a3d252b036 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=31a3d252b036
Modified Files:
geom/monetdb5/geom.c
Branch: default
Log Message:

Simplify code.


diffs (14 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -2095,9 +2095,7 @@ geom_epilogue(void *ret)
 static int
 mbr_isnil(const mbr *m)
 {
-   if (m == NULL || is_flt_nil(m->xmin) || is_flt_nil(m->ymin) || 
is_flt_nil(m->xmax) || is_flt_nil(m->ymax))
-   return 1;
-   return 0;
+   return (m == NULL || is_flt_nil(m->xmin) || is_flt_nil(m->ymin) || 
is_flt_nil(m->xmax) || is_flt_nil(m->ymax));
 }
 
 /* returns the size of variable-sized atom wkb */
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Use the floating point NaN (not-a-number) val...

2017-11-07 Thread Sjoerd Mullender
Changeset: cfe690cd2d4d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cfe690cd2d4d
Modified Files:
gdk/gdk_atoms.c
gdk/gdk_atoms.h
gdk/gdk_calc.c
gdk/gdk_calc_private.h
gdk/gdk_search.c
sql/test/Tests/fsum.sql
sql/test/Tests/fsum.stable.err
sql/test/Tests/fsum.stable.out
Branch: default
Log Message:

Use the floating point NaN (not-a-number) value for the NIL representation.
TODO: upgrade code.


diffs (198 lines):

diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -251,8 +251,8 @@ ATOMisdescendant(int tpe, int parent)
 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 flt flt_nil = NAN;
+const dbl dbl_nil = NAN;
 const lng lng_nil = GDK_lng_min-1;
 #ifdef HAVE_HGE
 const hge hge_nil = GDK_hge_min-1;
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -90,7 +90,7 @@ gdk_export size_t escapedStr(char *dst, 
 #define GDK_int_max INT_MAX
 #define GDK_int_min (INT_MIN+1)
 #define GDK_flt_max ((flt) FLT_MAX)
-#define GDK_flt_min (-3.4028233e+38F) /* nextafterf(-FLT_MAX,0) */
+#define GDK_flt_min ((flt) -FLT_MAX)
 #define GDK_lng_max ((lng) LLONG_MAX)
 #define GDK_lng_min ((lng) LLONG_MIN+1)
 #ifdef HAVE_HGE
@@ -99,7 +99,7 @@ gdk_export size_t escapedStr(char *dst, 
 #define GDK_hge_min (-GDK_hge_max)
 #endif
 #define GDK_dbl_max ((dbl) DBL_MAX)
-#define GDK_dbl_min (-1.7976931348623155e+308) /* nextafter(-DBL_MAX,0) */
+#define GDK_dbl_min ((dbl) -DBL_MAX)
 /* GDK_oid_max see below */
 #define GDK_oid_min ((oid) 0)
 /* representation of the nil */
@@ -136,10 +136,20 @@ gdk_export const ptr ptr_nil;
 #define is_hge_nil(v)  ((v) == hge_nil)
 #endif
 #define is_oid_nil(v)  ((v) == oid_nil)
-#define is_flt_nil(v)  ((v) == flt_nil)
-#define is_dbl_nil(v)  ((v) == dbl_nil)
+#define is_flt_nil(v)  isnan(v)
+#define is_dbl_nil(v)  isnan(v)
 #define is_bat_nil(v)  ((v) == bat_nil || (v) == 0)
 
+#if defined(_MSC_VER) && defined(__INTEL_COMPILER)
+#include 
+#else
+#include 
+#endif
+
+#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && _MSC_VER < 1800
+#define isnan(x)   _isnan(x)
+#endif
+
 /*
  * @- Derived types
  * In all algorithms across GDK, you will find switches on the types
diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -5806,9 +5806,14 @@ mul_##TYPE1##_##TYPE2##_##TYPE3(const TY
dst[k] = TYPE3##_nil;   \
nils++; \
} else {\
-   FLTDBLMUL_CHECK(TYPE1, lft[i], TYPE2, rgt[j],   \
-   TYPE3, dst[k], max, \
-   ON_OVERFLOW(TYPE1, TYPE2, "*")); \
+   /* only check for overflow, not for underflow */ \
+   dst[k] = (TYPE3) (lft[i] * rgt[j]); \
+   if (isinf(dst[k]) || ABSOLUTE(dst[k]) > max) {  \
+   if (abort_on_error) \
+   ON_OVERFLOW(TYPE1, TYPE2, "*"); \
+   dst[k] = TYPE3##_nil;   \
+   nils++; \
+   }   \
}   \
}   \
CANDLOOP(dst, k, TYPE3##_nil, end, cnt);\
diff --git a/gdk/gdk_calc_private.h b/gdk/gdk_calc_private.h
--- a/gdk/gdk_calc_private.h
+++ b/gdk/gdk_calc_private.h
@@ -257,17 +257,3 @@
} while (0)
 #endif /* HAVE___BUILTIN_ADD_OVERFLOW */
 #endif /* HAVE_HGE */
-
-#define FLTDBLMUL_CHECK(TYPE1, lft, TYPE2, rgt, TYPE3, dst, max, on_overflow) \
-   do {\
-   /* only check for overflow, not for underflow */\
-   if (ABSOLUTE(lft) > 1 &&\
-   (max) / ABSOLUTE(lft) < ABSOLUTE(rgt)) {\
-   if (abort_on_error) \
-   on_overflow;\
-   (dst) = TYPE3##_nil;\
-   nils++; \
-   } else {\
-   (dst) = (TYPE3) (lft) * (rgt);  \
-   }   \
-   } while (0)
diff --git a/gdk/gdk_search.c b

MonetDB: default - Properly do floating point comparisons which ...

2017-11-07 Thread Sjoerd Mullender
Changeset: 5ba4400fec07 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ba4400fec07
Modified Files:
gdk/gdk_firstn.c
gdk/gdk_qsort.c
Branch: default
Log Message:

Properly do floating point comparisons which may include NIL (NaN).
We can't compare NILs with anything, but we must maintain the illusion
that they are smaller than anything else.


diffs (166 lines):

diff --git a/gdk/gdk_firstn.c b/gdk/gdk_firstn.c
--- a/gdk/gdk_firstn.c
+++ b/gdk/gdk_firstn.c
@@ -87,12 +87,26 @@
siftup(OPER, i - 1, SWAP);  \
} while (0)
 
-#define LTany(p1, p2)  (cmp(BUNtail(bi, oids[p1] - b->hseqbase), \
+#define LTany(p1, p2)  (cmp(BUNtail(bi, oids[p1] - b->hseqbase),   \
 BUNtail(bi, oids[p2] - b->hseqbase)) < 0)
-#define GTany(p1, p2)  (cmp(BUNtail(bi, oids[p1] - b->hseqbase), \
+#define GTany(p1, p2)  (cmp(BUNtail(bi, oids[p1] - b->hseqbase),   \
 BUNtail(bi, oids[p2] - b->hseqbase)) > 0)
-#define LTfix(p1, p2)  (vals[oids[p1] - b->hseqbase] < vals[oids[p2] - 
b->hseqbase])
-#define GTfix(p1, p2)  (vals[oids[p1] - b->hseqbase] > vals[oids[p2] - 
b->hseqbase])
+#define LTflt(a, b)((bit) (!is_flt_nil(b) && (is_flt_nil(a) || (a) < (b
+#define LTdbl(a, b)((bit) (!is_dbl_nil(b) && (is_dbl_nil(a) || (a) < (b
+#define GTflt(a, b)((bit) (!is_flt_nil(a) && (is_flt_nil(b) || (a) > (b
+#define GTdbl(a, b)((bit) (!is_dbl_nil(a) && (is_dbl_nil(b) || (a) > (b
+#define LTfltfix(p1, p2)   LTflt(vals[oids[p1] - b->hseqbase], \
+ vals[oids[p2] - b->hseqbase])
+#define GTfltfix(p1, p2)   GTflt(vals[oids[p1] - b->hseqbase], \
+ vals[oids[p2] - b->hseqbase])
+#define LTdblfix(p1, p2)   LTdbl(vals[oids[p1] - b->hseqbase], \
+ vals[oids[p2] - b->hseqbase])
+#define GTdblfix(p1, p2)   GTdbl(vals[oids[p1] - b->hseqbase], \
+ vals[oids[p2] - b->hseqbase])
+#define LTfix(p1, p2)  LT(vals[oids[p1] - b->hseqbase],\
+  vals[oids[p2] - b->hseqbase])
+#define GTfix(p1, p2)  GT(vals[oids[p1] - b->hseqbase],\
+  vals[oids[p2] - b->hseqbase])
 #define SWAP1(p1, p2)  \
do {\
item = oids[p1];\
@@ -248,10 +262,10 @@ BATfirstn_unique(BAT *b, BAT *s, BUN n, 
break;
 #endif
case TYPE_flt:
-   shuffle_unique(flt, LT);
+   shuffle_unique(flt, LTflt);
break;
case TYPE_dbl:
-   shuffle_unique(dbl, LT);
+   shuffle_unique(dbl, LTdbl);
break;
default:
heapify(LTany, SWAP1);
@@ -285,10 +299,10 @@ BATfirstn_unique(BAT *b, BAT *s, BUN n, 
break;
 #endif
case TYPE_flt:
-   shuffle_unique(flt, GT);
+   shuffle_unique(flt, GTflt);
break;
case TYPE_dbl:
-   shuffle_unique(dbl, GT);
+   shuffle_unique(dbl, GTdbl);
break;
default:
heapify(GTany, SWAP1);
@@ -316,14 +330,30 @@ BATfirstn_unique(BAT *b, BAT *s, BUN n, 
return bn;
 }
 
-#define LTfixgrp(p1, p2)   \
-   (goids[p1] < goids[p2] ||   \
-(goids[p1] == goids[p2] && \
- vals[oids[p1] - b->hseqbase] < vals[oids[p2] - b->hseqbase]))
-#define GTfixgrp(p1, p2)   \
-   (goids[p1] < goids[p2] ||   \
-(goids[p1] == goids[p2] && \
- vals[oids[p1] - b->hseqbase] > vals[oids[p2] - b->hseqbase]))
+#define LTfixgrp(p1, p2)   \
+   (goids[p1] < goids[p2] ||   \
+(goids[p1] == goids[p2] && \
+ LTfix(p1, p2)))
+#define LTfltfixgrp(p1, p2)\
+   (goids[p1] < goids[p2] ||   \
+(goids[p1] == goids[p2] && \
+ LTfltfix(p1, p2)))
+#define LTdblfixgrp(p1, p2)\
+   (goids[p1] < goids[p2] ||   \
+(goids[p1] == goids[p2] && \
+ LTdblfix(p1, p2)))
+#define GTfixgrp(p1, p2)   \
+   (goids[p1] < goids[p2] ||   \
+(goids[p1] == goids[p2] && \
+ GTfix(p1, p2)))
+#define GTfltfixgrp(p1, p2)\
+   (goids[p1] < goids[p2] ||  

MonetDB: default - Implemented data base upgrade code for conver...

2017-11-07 Thread Sjoerd Mullender
Changeset: 64682e00f4ab for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=64682e00f4ab
Modified Files:
gdk/gdk.h
gdk/gdk_bbp.c
gdk/gdk_logger.c
gdk/gdk_logger.h
Branch: default
Log Message:

Implemented data base upgrade code for converting old floating point NIL to NaN.


diffs (truncated from 432 to 300 lines):

diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -859,7 +859,8 @@ typedef struct {
 #define GDKLIBRARY_NOKEY   061034  /* nokey values can't be trusted */
 #define GDKLIBRARY_BADEMPTY061035  /* possibility of duplicate empty str */
 #define GDKLIBRARY_TALIGN  061036  /* talign field in BBP.dir */
-#define GDKLIBRARY 061037
+#define GDKLIBRARY_NIL_NAN 061037  /* flt/dbl NIL not represented by NaN */
+#define GDKLIBRARY 061040
 
 typedef struct BAT {
/* static bat properties */
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -922,6 +922,179 @@ fixstrbats(void)
 }
 #endif
 
+#ifdef GDKLIBRARY_NIL_NAN
+static void
+fixfltheap(BAT *b)
+{
+   long_str filename;
+   Heap h1;/* old heap */
+   Heap h2;/* new heap */
+   const char *nme, *bnme;
+   char *srcdir;
+   BUN i;
+   int nofix = 1;
+
+   nme = BBP_physical(b->batCacheid);
+   srcdir = GDKfilepath(NOFARM, BATDIR, nme, NULL);
+   if (srcdir == NULL)
+   GDKfatal("fixfltheap: GDKmalloc failed\n");
+   *strrchr(srcdir, DIR_SEP) = 0;
+
+   if ((bnme = strrchr(nme, DIR_SEP)) != NULL)
+   bnme++;
+   else
+   bnme = nme;
+   sprintf(filename, "BACKUP%c%s", DIR_SEP, bnme);
+
+   /* make backup of heap */
+   if (GDKmove(b->theap.farmid, srcdir, bnme, "tail", BAKDIR, bnme, 
"tail") != GDK_SUCCEED)
+   GDKfatal("fixfltheap: cannot make backup of %s.tail\n", nme);
+   /* load old heap */
+   h1 = b->theap;
+   h1.filename = NULL;
+   h1.base = NULL;
+   h1.dirty = 0;
+   if (HEAPload(&h1, filename, "tail", 0) != GDK_SUCCEED)
+   GDKfatal("fixfltheap: loading old tail heap "
+"for BAT %d failed\n", b->batCacheid);
+
+   /* create new heap */
+   h2 = b->theap;
+   h2.filename = GDKfilepath(NOFARM, NULL, nme, "tail");
+   if (h2.filename == NULL)
+   GDKfatal("fixfltheap: GDKmalloc failed\n");
+   if (HEAPalloc(&h2, b->batCapacity, b->twidth) != GDK_SUCCEED)
+   GDKfatal("fixfltheap: allocating new tail heap "
+"for BAT %d failed\n", b->batCacheid);
+   h2.dirty = TRUE;
+   h2.free = h1.free;
+
+   switch (b->ttype) {
+   case TYPE_flt: {
+   const flt *restrict o = (const flt *) h1.base;
+   flt *restrict n = (flt *) h2.base;
+
+   for (i = 0; i < b->batCount; i++) {
+   if (o[i] == GDK_flt_min) {
+   b->tnil = 1;
+   n[i] = flt_nil;
+   nofix = 0;
+   } else {
+   n[i] = o[i];
+   }
+   }
+   break;
+   }
+   case TYPE_dbl: {
+   const dbl *restrict o = (const dbl *) h1.base;
+   dbl *restrict n = (dbl *) h2.base;
+
+   for (i = 0; i < b->batCount; i++) {
+   if (o[i] == GDK_dbl_min) {
+   b->tnil = 1;
+   n[i] = dbl_nil;
+   nofix = 0;
+   } else {
+   n[i] = o[i];
+   }
+   }
+   break;
+   }
+   default: {
+   struct mbr {
+   float xmin, ymin, xmax, ymax;
+   };
+   const struct mbr *restrict o = (const struct mbr *) h1.base;
+   struct mbr *restrict n = (struct mbr *) h2.base;
+
+   assert(strcmp(ATOMunknown_name(b->ttype), "mbr") == 0);
+   assert(b->twidth == 4 * sizeof(flt));
+
+   for (i = 0; i < b->batCount; i++) {
+   if (o[i].xmin == GDK_flt_min ||
+   o[i].xmax == GDK_flt_min ||
+   o[i].ymin == GDK_flt_min ||
+   o[i].ymax == GDK_flt_min) {
+   b->tnil = 1;
+   n[i].xmin = n[i].xmax = n[i].ymin = n[i].ymax = 
flt_nil;
+   nofix = 0;
+   } else {
+   n[i] = o[i];
+   }
+   }
+   break;
+   }
+   }
+
+   /* cleanup */
+   HEAPfree(&h1, 0);
+   if (nofix) {
+   /* didn't fix anything, move backup back */
+   HEAPfree(&h2, 1);
+

MonetDB: default - Changelog message.

2017-11-07 Thread Sjoerd Mullender
Changeset: 36067aac1de3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=36067aac1de3
Modified Files:
gdk/ChangeLog
sql/ChangeLog
Branch: default
Log Message:

Changelog message.


diffs (29 lines):

diff --git a/gdk/ChangeLog b/gdk/ChangeLog
--- a/gdk/ChangeLog
+++ b/gdk/ChangeLog
@@ -1,6 +1,10 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Tue Nov  7 2017 Sjoerd Mullender 
+- The NIL representation of the internal flt and dbl types was changed
+  from the smallest representable finite value to NaN (not-a-number).
+
 * Mon Sep 18 2017 Sjoerd Mullender 
 - Changed the interface of ATOMformat and VALformat: they now return a
   pointer to the allocated string.
diff --git a/sql/ChangeLog b/sql/ChangeLog
--- a/sql/ChangeLog
+++ b/sql/ChangeLog
@@ -1,6 +1,11 @@
 # ChangeLog file for sql
 # This file is updated with Maddlog
 
+* Tue Nov  7 2017 Sjoerd Mullender 
+- The internal NULL representation of the REAL (FLOAT) and DOUBLE
+  types was changed from the smallest representable finite value to NaN
+  (not-a-number).
+
 * Tue Aug  1 2017 Sjoerd Mullender 
 - Lots of changes to streamline the internal error handling.
   In principle, all errors should now include a SQLSTATE error code
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2017 - Approve upgrade: there should be no GRANTs du...

2017-11-07 Thread Sjoerd Mullender
Changeset: bf278e0f101c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf278e0f101c
Modified Files:
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out
Branch: Jul2017
Log Message:

Approve upgrade: there should be no GRANTs during upgrade.


diffs (84 lines):

diff --git a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
@@ -24,17 +24,6 @@ stdout of test 'upgrade` in directory 's
 # MonetDB/R   module loaded
 
 Ready.
-Running database upgrade commands:
-GRANT SELECT ON sys.keywords TO PUBLIC;
-GRANT SELECT ON sys.table_types TO PUBLIC;
-GRANT SELECT ON sys.dependency_types TO PUBLIC;
-GRANT SELECT ON sys.function_types TO PUBLIC;
-GRANT SELECT ON sys.function_languages TO PUBLIC;
-GRANT SELECT ON sys.key_types TO PUBLIC;
-GRANT SELECT ON sys.index_types TO PUBLIC;
-GRANT SELECT ON sys.privilege_codes TO PUBLIC;
-GRANT EXECUTE ON FUNCTION sys.environment() TO PUBLIC;
-GRANT SELECT ON sys.environment TO PUBLIC;
 
 # 13:21:57 >  
 # 13:21:57 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-29247" "--port=33065"
diff --git a/sql/test/emptydb-upgrade/Tests/upgrade.stable.out 
b/sql/test/emptydb-upgrade/Tests/upgrade.stable.out
--- a/sql/test/emptydb-upgrade/Tests/upgrade.stable.out
+++ b/sql/test/emptydb-upgrade/Tests/upgrade.stable.out
@@ -24,17 +24,6 @@ stdout of test 'upgrade` in directory 's
 # MonetDB/R   module loaded
 
 Ready.
-Running database upgrade commands:
-GRANT SELECT ON sys.keywords TO PUBLIC;
-GRANT SELECT ON sys.table_types TO PUBLIC;
-GRANT SELECT ON sys.dependency_types TO PUBLIC;
-GRANT SELECT ON sys.function_types TO PUBLIC;
-GRANT SELECT ON sys.function_languages TO PUBLIC;
-GRANT SELECT ON sys.key_types TO PUBLIC;
-GRANT SELECT ON sys.index_types TO PUBLIC;
-GRANT SELECT ON sys.privilege_codes TO PUBLIC;
-GRANT EXECUTE ON FUNCTION sys.environment() TO PUBLIC;
-GRANT SELECT ON sys.environment TO PUBLIC;
 
 # 15:41:18 >  
 # 15:41:18 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-7576" "--port=32696"
diff --git a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out 
b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
@@ -19,17 +19,6 @@ stdout of test 'upgrade` in directory 's
 # MonetDB/SQL module loaded
 
 Ready.
-Running database upgrade commands:
-GRANT SELECT ON sys.keywords TO PUBLIC;
-GRANT SELECT ON sys.table_types TO PUBLIC;
-GRANT SELECT ON sys.dependency_types TO PUBLIC;
-GRANT SELECT ON sys.function_types TO PUBLIC;
-GRANT SELECT ON sys.function_languages TO PUBLIC;
-GRANT SELECT ON sys.key_types TO PUBLIC;
-GRANT SELECT ON sys.index_types TO PUBLIC;
-GRANT SELECT ON sys.privilege_codes TO PUBLIC;
-GRANT EXECUTE ON FUNCTION sys.environment() TO PUBLIC;
-GRANT SELECT ON sys.environment TO PUBLIC;
 
 # 13:21:58 >  
 # 13:21:58 >  "/usr/bin/python2" "upgrade.SQL.py" "upgrade"
diff --git a/sql/test/testdb-upgrade/Tests/upgrade.stable.out 
b/sql/test/testdb-upgrade/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade/Tests/upgrade.stable.out
@@ -19,17 +19,6 @@ stdout of test 'upgrade` in directory 's
 # MonetDB/SQL module loaded
 
 Ready.
-Running database upgrade commands:
-GRANT SELECT ON sys.keywords TO PUBLIC;
-GRANT SELECT ON sys.table_types TO PUBLIC;
-GRANT SELECT ON sys.dependency_types TO PUBLIC;
-GRANT SELECT ON sys.function_types TO PUBLIC;
-GRANT SELECT ON sys.function_languages TO PUBLIC;
-GRANT SELECT ON sys.key_types TO PUBLIC;
-GRANT SELECT ON sys.index_types TO PUBLIC;
-GRANT SELECT ON sys.privilege_codes TO PUBLIC;
-GRANT EXECUTE ON FUNCTION sys.environment() TO PUBLIC;
-GRANT SELECT ON sys.environment TO PUBLIC;
 
 # 16:00:56 >  
 # 16:00:56 >  "/usr/bin/python2" "upgrade.SQL.py" "upgrade"
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Clang on FreeBSD has problems with an assignm...

2017-11-07 Thread Sjoerd Mullender
Changeset: eebe2e1f921f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=eebe2e1f921f
Modified Files:
gdk/gdk_select.c
Branch: default
Log Message:

Clang on FreeBSD has problems with an assignment as argument to isnan.


diffs (31 lines):

diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -2399,9 +2399,11 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
 #endif
case TYPE_flt: {
flt vl, vh;
-   if (is_flt_nil((vl = *(flt *) vrl)))
+   vl = *(flt *) vrl;
+   if (is_flt_nil(vl))
continue;
-   if (is_flt_nil((vh = *(flt *) vrh)))
+   vh = *(flt *) vrh;
+   if (is_flt_nil(vh))
continue;
if (!li) {
if (vl == MAXVALUEflt)
@@ -2431,9 +2433,11 @@ rangejoin(BAT *r1, BAT *r2, BAT *l, BAT 
}
case TYPE_dbl: {
dbl vl, vh;
-   if (is_dbl_nil((vl = *(dbl *) vrl)))
+   vl = *(dbl *) vrl;
+   if (is_dbl_nil(vl))
continue;
-   if (is_dbl_nil((vh = *(dbl *) vrh)))
+   vh = *(dbl *) vrh;
+   if (is_dbl_nil(vh))
continue;
if (!li) {
if (vl == MAXVALUEdbl)
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Work around issues with Intel compiler.

2017-11-07 Thread Sjoerd Mullender
Changeset: d12146e172a5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d12146e172a5
Modified Files:
NT/monetdb_config.h.in
gdk/gdk_atoms.c
gdk/gdk_atoms.h
gdk/gdk_utils.c
Branch: default
Log Message:

Work around issues with Intel compiler.
- On Windows, make sure mathimf.h is included before there is any chance
  math.h is included.
- On both Windows and Linux, initialize flt_nil and dbl_nil to NAN at
  run time, since the Intel compiler uses a value that cannot be used
  as static initializer.


diffs (73 lines):

diff --git a/NT/monetdb_config.h.in b/NT/monetdb_config.h.in
--- a/NT/monetdb_config.h.in
+++ b/NT/monetdb_config.h.in
@@ -33,6 +33,12 @@
 #define _CRT_SECURE_NO_DEPRECATE 1
 #endif
 
+/* include Intel's mathimf.h early, before any other include files
+ * might try to include math.h */
+#ifdef __INTEL_COMPILER
+#include 
+#endif
+
 #include 
 
 #if defined(_DEBUG) && defined(_CRTDBG_MAP_ALLOC)
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -251,8 +251,15 @@ ATOMisdescendant(int tpe, int parent)
 const bte bte_nil = GDK_bte_min-1;
 const sht sht_nil = GDK_sht_min-1;
 const int int_nil = GDK_int_min-1;
+#ifdef __INTEL_COMPILER
+/* stupid Intel compiler uses a value that cannot be used in an
+ * initializer for NAN, so we have to initialize at run time */
+flt flt_nil;
+dbl dbl_nil;
+#else
 const flt flt_nil = NAN;
 const dbl dbl_nil = NAN;
+#endif
 const lng lng_nil = GDK_lng_min-1;
 #ifdef HAVE_HGE
 const hge hge_nil = GDK_hge_min-1;
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -106,8 +106,15 @@ gdk_export size_t escapedStr(char *dst, 
 gdk_export const bte bte_nil;
 gdk_export const sht sht_nil;
 gdk_export const int int_nil;
-gdk_export const flt flt_nil;
-gdk_export const dbl dbl_nil;
+#ifdef __INTEL_COMPILER
+/* stupid Intel compiler uses a value that cannot be used in an
+ * initializer for NAN, so we have to initialize at run time */
+#define NANCONST
+#else
+#define NANCONST const
+#endif
+gdk_export NANCONST flt flt_nil;
+gdk_export NANCONST dbl dbl_nil;
 gdk_export const lng lng_nil;
 #ifdef HAVE_HGE
 gdk_export const hge hge_nil;
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -449,6 +449,13 @@ GDKinit(opt *set, int setlen)
assert(sizeof(size_t) == SIZEOF_SIZE_T);
assert(SIZEOF_OID == SIZEOF_INT || SIZEOF_OID == SIZEOF_LNG);
 
+#ifdef __INTEL_COMPILER
+   /* stupid Intel compiler uses a value that cannot be used in an
+* initializer for NAN, so we have to initialize at run time */
+   flt_nil = NAN;
+   dbl_nil = NAN;
+#endif
+
 #ifdef NEED_MT_LOCK_INIT
MT_lock_init(&MT_system_lock,"MT_system_lock");
ATOMIC_INIT(GDKstoppedLock);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: default - Approved after d12146e172a5.

2017-11-07 Thread Sjoerd Mullender
Changeset: e451183b4d0b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e451183b4d0b
Modified Files:
clients/Tests/exports.stable.out
Branch: default
Log Message:

Approved after d12146e172a5.


diffs (21 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -377,7 +377,7 @@ const bte bte_nil;
 int closedir(DIR *dir);
 ssize_t dblFromStr(const char *src, size_t *len, dbl **dst);
 ssize_t dblToStr(str *dst, size_t *len, const dbl *src);
-const dbl dbl_nil;
+NANCONST dbl dbl_nil;
 char *dirname(char *path);
 int dlclose(void *handle);
 char *dlerror(void);
@@ -387,7 +387,7 @@ size_t escapedStr(char *dst, const char 
 size_t escapedStrlen(const char *src, const char *sep1, const char *sep2, int 
quote);
 ssize_t fltFromStr(const char *src, size_t *len, flt **dst);
 ssize_t fltToStr(str *dst, size_t *len, const flt *src);
-const flt flt_nil;
+NANCONST flt flt_nil;
 geomcatalogfix_fptr geomcatalogfix_get(void);
 void geomcatalogfix_set(geomcatalogfix_fptr);
 geomsqlfix_fptr geomsqlfix_get(void);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jul2017 - Properly support dates, times and timestamps ...

2017-11-07 Thread Mark Raasveldt
Changeset: 839bd7161d60 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=839bd7161d60
Modified Files:
sql/backends/monet5/Tests/pyloader07.sql
sql/backends/monet5/Tests/pyloader07.stable.out
sql/backends/monet5/Tests/pyloader07.stable.out.Windows
sql/backends/monet5/UDF/pyapi/convert_loops.h
sql/backends/monet5/UDF/pyapi/emit.c
Branch: Jul2017
Log Message:

Properly support dates, times and timestamps in Python loader functions.


diffs (247 lines):

diff --git a/sql/backends/monet5/Tests/pyloader07.sql 
b/sql/backends/monet5/Tests/pyloader07.sql
--- a/sql/backends/monet5/Tests/pyloader07.sql
+++ b/sql/backends/monet5/Tests/pyloader07.sql
@@ -9,3 +9,21 @@ SELECT * FROM pyloader07table;
 DROP TABLE pyloader07table;
 DROP LOADER pyloader07;
 ROLLBACK;
+
+START TRANSACTION;
+
+CREATE TABLE tstamp(d DATE, s TIME, t TIMESTAMP);
+
+
+CREATE LOADER pyloader07() LANGUAGE PYTHON {
+_emit.emit({'d': '2014-05-20', 's': '00:02:30', 't': '2014-05-20 
00:02:30'});
+_emit.emit({'d': ['2014-05-20'], 's': ['00:02:30'], 't': ['2014-05-20 
00:02:30']});
+};
+
+COPY LOADER INTO tstamp FROM pyloader07();
+
+SELECT * FROM tstamp;
+DROP TABLE tstamp;
+DROP LOADER pyloader07;
+
+ROLLBACK;
diff --git a/sql/backends/monet5/Tests/pyloader07.stable.out 
b/sql/backends/monet5/Tests/pyloader07.stable.out
--- a/sql/backends/monet5/Tests/pyloader07.stable.out
+++ b/sql/backends/monet5/Tests/pyloader07.stable.out
@@ -75,6 +75,24 @@ Ready.
 #DROP TABLE pyloader07table;
 #DROP LOADER pyloader07;
 #ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE tstamp(d DATE, s TIME, t TIMESTAMP);
+#CREATE LOADER pyloader07() LANGUAGE PYTHON {
+#_emit.emit({'d': '2014-05-20', 's': '00:02:30', 't': '2014-05-20 
00:02:30'});
+#_emit.emit({'d': ['2014-05-20'], 's': ['00:02:30'], 't': ['2014-05-20 
00:02:30']});
+#};
+#COPY LOADER INTO tstamp FROM pyloader07();
+[ 2]
+#SELECT * FROM tstamp;
+% sys.tstamp,  sys.tstamp, sys.tstamp # table_name
+% d,   s,  t # name
+% date,time,   timestamp # type
+% 10,  8,  26 # length
+[ 2014-05-20,  00:02:30,   2014-05-20 00:02:30.00  ]
+[ 2014-05-20,  00:02:30,   2014-05-20 00:02:30.00  ]
+#DROP TABLE tstamp;
+#DROP LOADER pyloader07;
+#ROLLBACK;
 
 # 15:06:46 >  
 # 15:06:46 >  "Done."
diff --git a/sql/backends/monet5/Tests/pyloader07.stable.out.Windows 
b/sql/backends/monet5/Tests/pyloader07.stable.out.Windows
--- a/sql/backends/monet5/Tests/pyloader07.stable.out.Windows
+++ b/sql/backends/monet5/Tests/pyloader07.stable.out.Windows
@@ -75,6 +75,24 @@ Ready.
 #DROP TABLE pyloader07table;
 #DROP LOADER pyloader07;
 #ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE tstamp(d DATE, s TIME, t TIMESTAMP);
+#CREATE LOADER pyloader07() LANGUAGE PYTHON {
+#_emit.emit({'d': '2014-05-20', 's': '00:02:30', 't': '2014-05-20 
00:02:30'});
+#_emit.emit({'d': ['2014-05-20'], 's': ['00:02:30'], 't': ['2014-05-20 
00:02:30']});
+#};
+#COPY LOADER INTO tstamp FROM pyloader07();
+[ 2]
+#SELECT * FROM tstamp;
+% sys.tstamp,  sys.tstamp, sys.tstamp # table_name
+% d,   s,  t # name
+% date,time,   timestamp # type
+% 10,  8,  26 # length
+[ 2014-05-20,  00:02:30,   2014-05-20 00:02:30.00  ]
+[ 2014-05-20,  00:02:30,   2014-05-20 00:02:30.00  ]
+#DROP TABLE tstamp;
+#DROP LOADER pyloader07;
+#ROLLBACK;
 
 # 15:06:46 >  
 # 15:06:46 >  "Done."
diff --git a/sql/backends/monet5/UDF/pyapi/convert_loops.h 
b/sql/backends/monet5/UDF/pyapi/convert_loops.h
--- a/sql/backends/monet5/UDF/pyapi/convert_loops.h
+++ b/sql/backends/monet5/UDF/pyapi/convert_loops.h
@@ -282,6 +282,24 @@
}   
   \
}
 
+
+static gdk_return
+convert_and_append(BAT* b, const char* text, bit force) {
+   if (b->ttype == TYPE_str) {
+   return BUNappend(b, text, force);   
+   } else if (text == str_nil) {
+   return BUNappend(b, BATatoms[b->ttype].atomNull, force);
+   } else {
+   void* element = NULL;
+   int len = 0;
+
+   BATatoms[b->ttype].atomFromStr(text, &len, &element);
+   gdk_return ret = BUNappend(b, element, force);
+   GDKfree(element);
+   return ret;
+   }
+}
+
 // This #define is for converting a numeric numpy array into a string BAT.
 // 'conv' is a function that turns a numeric value of type 'mtpe' to a char*
 // array.
@@ -291,7 +309,7 @@
snprintf(utf8_string, utf8string_minlength, fmt,
   \
 *((mtpe *)&data[(index_offset * 
ret->count + iu) *\
 
ret->memory_size]));  \
-   if (BUNappend(bat, utf8_string, FALSE) != GDK_SUCCEED) 
{   \
+   if (convert_and_append(bat, u