Changeset: 84bf4a8b096d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=84bf4a8b096d Added Files: sql/backends/monet5/Tests/int_notation_1e5.sql sql/backends/monet5/Tests/int_notation_1e5.stable.err sql/backends/monet5/Tests/int_notation_1e5.stable.out sql/backends/monet5/Tests/pyapi31.stable.err sql/backends/monet5/Tests/pyapi31.stable.out sql/backends/monet5/Tests/pyloader01.sql sql/backends/monet5/Tests/pyloader01.stable.err sql/backends/monet5/Tests/pyloader01.stable.out sql/backends/monet5/Tests/pyloader02.sql sql/backends/monet5/Tests/pyloader02.stable.err sql/backends/monet5/Tests/pyloader02.stable.out sql/backends/monet5/Tests/pyloader03.sql sql/backends/monet5/Tests/pyloader03.stable.err sql/backends/monet5/Tests/pyloader03.stable.out sql/backends/monet5/Tests/pyloader04.sql sql/backends/monet5/Tests/pyloader04.stable.err sql/backends/monet5/Tests/pyloader04.stable.out sql/backends/monet5/Tests/pyloader05.sql sql/backends/monet5/Tests/pyloader05.stable.err sql/backends/monet5/Tests/pyloader05.stable.out sql/backends/monet5/Tests/pyloader07.sql sql/backends/monet5/Tests/pyloader07.stable.err sql/backends/monet5/Tests/pyloader07.stable.out sql/backends/monet5/UDF/pyapi/convert_loops.h sql/backends/monet5/UDF/pyapi/emit.c sql/backends/monet5/UDF/pyapi/emit.h sql/backends/monet5/UDF/pyapi/pyloader.c Modified Files: clients/Tests/MAL-signatures.stable.out clients/Tests/MAL-signatures.stable.out.int128 clients/Tests/exports.stable.out clients/mapiclient/tomograph.c gdk/ChangeLog gdk/gdk.h gdk/gdk_atoms.c gdk/gdk_bat.c gdk/gdk_bbp.c gdk/gdk_bbp.h gdk/gdk_join.c gdk/gdk_private.h gdk/gdk_select.c gdk/gdk_storage.c gdk/gdk_utils.c gdk/gdk_utils.h geom/monetdb5/30_geom.mal monetdb5/ChangeLog monetdb5/extras/mal_optimizer_template/91_opt_sql_append.mal monetdb5/extras/rapi/50_rapi.mal monetdb5/extras/rapi/rapi.c monetdb5/extras/sphinx/30_sphinx.mal monetdb5/mal/Tests/dynamicload.malC monetdb5/mal/Tests/dynamicload.stable.err monetdb5/mal/Tests/tst275.stable.out monetdb5/mal/mal.h monetdb5/mal/mal_client.c monetdb5/mal/mal_debugger.c monetdb5/mal/mal_function.c monetdb5/mal/mal_instruction.c monetdb5/mal/mal_instruction.h monetdb5/mal/mal_interpreter.c monetdb5/mal/mal_linker.c monetdb5/mal/mal_linker.h monetdb5/mal/mal_listing.c monetdb5/mal/mal_module.c monetdb5/mal/mal_module.h monetdb5/mal/mal_parser.c monetdb5/mal/mal_readline.c monetdb5/mal/mal_runtime.c monetdb5/mal/mal_scenario.c monetdb5/mal/mal_session.c monetdb5/modules/kernel/algebra.c monetdb5/modules/kernel/bat5.c monetdb5/modules/kernel/status.c monetdb5/modules/mal/bbp.c monetdb5/modules/mal/bbp.h monetdb5/modules/mal/bbp.mal monetdb5/modules/mal/manual.c monetdb5/modules/mal/manual.h monetdb5/modules/mal/manual.mal monetdb5/modules/mal/sysmon.c monetdb5/modules/mal/tablet.c monetdb5/optimizer/Tests/inlineFunction.stable.out monetdb5/optimizer/Tests/inlineFunction1.stable.out monetdb5/optimizer/Tests/inlineFunction3.stable.out monetdb5/optimizer/Tests/inlineFunction4.stable.out monetdb5/optimizer/opt_generator.c monetdb5/optimizer/opt_macro.c monetdb5/optimizer/opt_mitosis.c monetdb5/optimizer/opt_pipes.c monetdb5/optimizer/opt_support.c sql/backends/monet5/40_sql.mal sql/backends/monet5/LSST/80_lsst.mal sql/backends/monet5/Tests/All sql/backends/monet5/Tests/pyapi30.stable.out sql/backends/monet5/UDF/cudf/80_udf.mal sql/backends/monet5/UDF/cudf/Tests/udf-fuse.stable.out sql/backends/monet5/UDF/cudf/Tests/udf-reverse.stable.out sql/backends/monet5/UDF/pyapi/Makefile.ag sql/backends/monet5/UDF/pyapi/connection.c sql/backends/monet5/UDF/pyapi/connection.h sql/backends/monet5/UDF/pyapi/formatinput.c sql/backends/monet5/UDF/pyapi/formatinput.h sql/backends/monet5/UDF/pyapi/pyapi.c sql/backends/monet5/UDF/pyapi/pyapi.h sql/backends/monet5/UDF/pyapi/pyapi.mal sql/backends/monet5/UDF/pyapi/pytypes.h sql/backends/monet5/UDF/pyapi/type_conversion.c sql/backends/monet5/UDF/pyapi/type_conversion.h sql/backends/monet5/generator/90_generator.mal sql/backends/monet5/gsl/73_gsl.mal sql/backends/monet5/rel_bin.c sql/backends/monet5/sql.c sql/backends/monet5/sql.h sql/backends/monet5/sql_gencode.c sql/backends/monet5/sql_optimizer.c sql/backends/monet5/vaults/bam/85_bam.mal sql/backends/monet5/vaults/fits/72_fits.mal sql/backends/monet5/vaults/lidar/75_lidar.mal sql/backends/monet5/vaults/netcdf/74_netcdf.mal sql/backends/monet5/vaults/shp/75_shp.mal sql/benchmarks/ssbm/Tests/01-explain.stable.out sql/benchmarks/ssbm/Tests/01-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/02-explain.stable.out sql/benchmarks/ssbm/Tests/02-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/03-explain.stable.out sql/benchmarks/ssbm/Tests/03-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/04-explain.stable.out sql/benchmarks/ssbm/Tests/04-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/05-explain.stable.out sql/benchmarks/ssbm/Tests/05-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/06-explain.stable.out sql/benchmarks/ssbm/Tests/06-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/07-explain.stable.out sql/benchmarks/ssbm/Tests/07-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/08-explain.stable.out sql/benchmarks/ssbm/Tests/08-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/09-explain.stable.out sql/benchmarks/ssbm/Tests/09-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/10-explain.stable.out sql/benchmarks/ssbm/Tests/10-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/11-explain.stable.out sql/benchmarks/ssbm/Tests/11-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/12-explain.stable.out sql/benchmarks/ssbm/Tests/12-explain.stable.out.int128 sql/benchmarks/ssbm/Tests/13-explain.stable.out sql/benchmarks/ssbm/Tests/13-explain.stable.out.int128 sql/benchmarks/tpch/Tests/01-explain.stable.out.int128 sql/benchmarks/tpch/Tests/02-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out sql/benchmarks/tpch/Tests/03-explain.stable.out.int128 sql/benchmarks/tpch/Tests/04-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out sql/benchmarks/tpch/Tests/05-explain.stable.out.int128 sql/benchmarks/tpch/Tests/06-explain.stable.out.int128 sql/benchmarks/tpch/Tests/07-explain.stable.out sql/benchmarks/tpch/Tests/07-explain.stable.out.int128 sql/benchmarks/tpch/Tests/08-explain.stable.out sql/benchmarks/tpch/Tests/08-explain.stable.out.int128 sql/benchmarks/tpch/Tests/09-explain.stable.out sql/benchmarks/tpch/Tests/09-explain.stable.out.int128 sql/benchmarks/tpch/Tests/10-explain.stable.out.int128 sql/benchmarks/tpch/Tests/11-explain.stable.out sql/benchmarks/tpch/Tests/11-explain.stable.out.int128 sql/benchmarks/tpch/Tests/12-explain.stable.out sql/benchmarks/tpch/Tests/12-explain.stable.out.int128 sql/benchmarks/tpch/Tests/13-explain.stable.out sql/benchmarks/tpch/Tests/14-explain.stable.out.int128 sql/benchmarks/tpch/Tests/15-explain.stable.out sql/benchmarks/tpch/Tests/15-explain.stable.out.int128 sql/benchmarks/tpch/Tests/16-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out sql/benchmarks/tpch/Tests/17-explain.stable.out.int128 sql/benchmarks/tpch/Tests/18-explain.stable.out sql/benchmarks/tpch/Tests/18-explain.stable.out.int128 sql/benchmarks/tpch/Tests/19-explain.stable.out sql/benchmarks/tpch/Tests/19-explain.stable.out.int128 sql/benchmarks/tpch/Tests/20-explain.stable.out sql/benchmarks/tpch/Tests/20-explain.stable.out.int128 sql/benchmarks/tpch/Tests/21-explain.stable.out sql/benchmarks/tpch/Tests/22-explain.stable.out sql/benchmarks/tpch/Tests/22-explain.stable.out.int128 sql/include/sql_catalog.h sql/scripts/25_debug.sql sql/server/rel_psm.c sql/server/rel_select.c sql/server/rel_semantic.c sql/server/rel_updates.c sql/server/sql_mvc.h sql/server/sql_parser.h sql/server/sql_parser.y sql/server/sql_scan.c sql/test/BugTracker-2009/Tests/POWER_vs_prod.SF-2596114.stable.out sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out sql/test/BugTracker-2010/Tests/group-by_ordered_column.Bug-2564.stable.out sql/test/BugTracker-2011/Tests/func_iter_vs_bulk.Bug-2826.stable.out sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out sql/test/BugTracker-2014/Tests/nil_2dec_lng.Bug-3592.stable.out.single sql/test/BugTracker-2015/Tests/useless_casts.Bug-3756.stable.out sql/test/BugTracker-2016/Tests/querylog.stable.out sql/test/BugTracker/Tests/explain.SF-1739353.stable.out sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out sql/test/malloc_fail/Tests/setmemorylimit-fail.sql sql/test/malloc_fail/Tests/setmemorylimit-fail2.sql sql/test/malloc_fail/Tests/setmemorylimit.sql sql/test/mergetables/Tests/mergequery.stable.out testing/Mtest.py.in tools/mserver/mserver5.c Branch: sfcgal Log Message:
Merge with default diffs (truncated from 13133 to 300 lines): diff --git a/clients/Tests/MAL-signatures.stable.out b/clients/Tests/MAL-signatures.stable.out --- a/clients/Tests/MAL-signatures.stable.out +++ b/clients/Tests/MAL-signatures.stable.out @@ -1877,6 +1877,14 @@ pattern batpyapimap.subeval_aggr(fptr:pt address PyAPIevalAggrMap; comment grouped aggregates through Python +pattern batpyapi.eval_loader(fptr:ptr,expr:str,arg:any...):any... +address PyAPIevalLoader; +comment loader functions through Python + +pattern batpyapi.eval_loader(fptr:ptr,expr:str):any... +address PyAPIevalLoader; +comment loader functions through Python + pattern batpyapi.eval_aggr(fptr:ptr,expr:str,arg:any...):any... address PyAPIevalAggr; comment grouped aggregates through Python @@ -24056,10 +24064,6 @@ command bbp.getDirty():bat[:str] address CMDbbpDirty; comment Create a BAT with the dirty/ diffs/clean status -command bbp.getHeat():bat[:int] -address CMDbbpHeat; -comment Create a BAT with the heat values - command bbp.getLocation():bat[:str] address CMDbbpLocation; comment Create a BAT with their disk locations @@ -31653,6 +31657,14 @@ pattern pyapimap.subeval_aggr(fptr:ptr,e address PyAPIevalAggrMap; comment grouped aggregates through Python +pattern pyapi.eval_loader(fptr:ptr,expr:str,arg:any...):any... +address PyAPIevalLoader; +comment loader functions through Python + +pattern pyapi.eval_loader(fptr:ptr,expr:str):any... +address PyAPIevalLoader; +comment loader functions through Python + pattern pyapi.eval_aggr(fptr:ptr,expr:str,arg:any...):any... address PyAPIevalAggr; comment grouped aggregates through Python diff --git a/clients/Tests/MAL-signatures.stable.out.int128 b/clients/Tests/MAL-signatures.stable.out.int128 --- a/clients/Tests/MAL-signatures.stable.out.int128 +++ b/clients/Tests/MAL-signatures.stable.out.int128 @@ -2269,6 +2269,14 @@ pattern batpyapimap.subeval_aggr(fptr:pt address PyAPIevalAggrMap; comment grouped aggregates through Python +pattern batpyapi.eval_loader(fptr:ptr,expr:str,arg:any...):any... +address PyAPIevalLoader; +comment loader functions through Python + +pattern batpyapi.eval_loader(fptr:ptr,expr:str):any... +address PyAPIevalLoader; +comment loader functions through Python + pattern batpyapi.eval_aggr(fptr:ptr,expr:str,arg:any...):any... address PyAPIevalAggr; comment grouped aggregates through Python @@ -31915,10 +31923,6 @@ command bbp.getDirty():bat[:str] address CMDbbpDirty; comment Create a BAT with the dirty/ diffs/clean status -command bbp.getHeat():bat[:int] -address CMDbbpHeat; -comment Create a BAT with the heat values - command bbp.getLocation():bat[:str] address CMDbbpLocation; comment Create a BAT with their disk locations @@ -41074,6 +41078,14 @@ pattern pyapimap.subeval_aggr(fptr:ptr,e address PyAPIevalAggrMap; comment grouped aggregates through Python +pattern pyapi.eval_loader(fptr:ptr,expr:str,arg:any...):any... +address PyAPIevalLoader; +comment loader functions through Python + +pattern pyapi.eval_loader(fptr:ptr,expr:str):any... +address PyAPIevalLoader; +comment loader functions through Python + pattern pyapi.eval_aggr(fptr:ptr,expr:str,arg:any...):any... address PyAPIevalAggr; comment grouped aggregates through Python 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 @@ -177,7 +177,6 @@ BAT *BATunique(BAT *b, BAT *s); BBPrec *BBP[N_BBPINIT]; void BBPaddfarm(const char *dirname, int rolemask); void BBPclear(bat bid); -int BBPcurstamp(void); int BBPdecref(bat b, int logical); BAT *BBPdescriptor(bat b); int BBPin; @@ -974,7 +973,6 @@ str CMDbbp(bat *ID, bat *NS, bat *TT, ba str CMDbbpCount(bat *ret); str CMDbbpDirty(bat *ret); str CMDbbpDiskSpace(lng *ret); -str CMDbbpHeat(bat *ret); str CMDbbpKind(bat *ret); str CMDbbpLRefCount(bat *ret); str CMDbbpLocation(bat *ret); @@ -1282,7 +1280,6 @@ str MANIFOLDevaluate(Client cntxt, MalBl str MANIFOLDremapMultiplex(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr p); MALfcn MANIFOLDtypecheck(Client cntxt, MalBlkPtr mb, InstrPtr pci); str MANUALcreateOverview(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -str MANUALhelp(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); str MATHbinary_ATAN2dbl(dbl *res, const dbl *a, const dbl *b); str MATHbinary_ATAN2flt(flt *res, const flt *a, const flt *b); str MATHbinary_POWdbl(dbl *res, const dbl *a, const dbl *b); @@ -2035,8 +2032,6 @@ str diffRef; str disconnectRef; str divRef; void dumpExceptionsToStream(stream *out, str msg); -void dumpHelpTable(stream *f, Module s, str text, int flag); -void dumpSearchTable(stream *f, str text); str eqRef; str escape_str(str *retval, str s); str evalFile(Client c, str fname, int listing); @@ -2076,7 +2071,7 @@ str fstrcmp_impl(dbl *ret, str *string1, void garbageCollector(Client cntxt, MalBlkPtr mb, MalStkPtr stk, int flag); void garbageElement(Client cntxt, ValPtr v); str generatorRef; -MALfcn getAddress(stream *out, str filename, str modnme, str fcnname, int silent); +MALfcn getAddress(stream *out, str filename, str fcnname, int silent); str getArgDefault(MalBlkPtr mb, InstrPtr p, int idx); ptr getArgReference(MalStkPtr stk, InstrPtr pci, int k); int getAtomIndex(str nme, int len, int deftpe); @@ -2096,8 +2091,6 @@ enum malexception getExceptionType(str); int getFltConstant(MalBlkPtr mb, flt val); Scenario getFreeScenario(void); Symbol getFunctionSymbol(Module scope, InstrPtr p); -char **getHelp(Module m, str pat, int flag); -char **getHelpMatch(char *pat); int getHgeConstant(MalBlkPtr mb, hge val); int getIntConstant(MalBlkPtr mb, int val); int getLngConstant(MalBlkPtr mb, lng val); @@ -2139,7 +2132,6 @@ str ilikesubselectRef; str ilikethetasubselectRef; str ilikeuselectRef; void initHeartbeat(void); -void initLibraries(void); void initNamespace(void); void initParser(void); void initProfiler(void); @@ -2167,7 +2159,6 @@ int isFragmentGroup2(InstrPtr q); int isIdentifier(str s); int isInvariant(MalBlkPtr mb, int pcf, int pcl, int varid); int isLikeOp(InstrPtr q); -int isLoaded(str modulename); int isLoopBarrier(MalBlkPtr mb, int pc); int isMapOp(InstrPtr q); int isMatJoinOp(InstrPtr q); @@ -2178,7 +2169,6 @@ int isNotUsedIn(InstrPtr p, int start, i int isOptimizerEnabled(MalBlkPtr mb, str opt); int isOptimizerPipe(str name); int isOrderby(InstrPtr q); -int isPreloaded(str nme); int isProcedure(MalBlkPtr mb, InstrPtr p); int isSample(InstrPtr q); int isSideEffectFree(MalBlkPtr mb); @@ -2452,7 +2442,6 @@ void showCurrentScenario(void); void showErrors(Client cntxt); void showException(stream *out, enum malexception, const char *, _In_z_ _Printf_format_string_ const char *, ...) __attribute__((__format__(__printf__, 4, 5))); void showFlowGraph(MalBlkPtr mb, MalStkPtr stk, str fname); -void showHelp(Module m, str txt, stream *fs); void showMalBlkHistory(stream *out, MalBlkPtr mb); void showOptimizerHistory(void); void showOptimizerStep(str fnme, int i, int flg); @@ -2524,13 +2513,12 @@ int timestamp_tz_fromstr(const char *buf int timestamp_tz_tostr(str *buf, int *len, const timestamp *val, const tzone *timezone); str transRef; void trimMalVariables(MalBlkPtr mb, MalStkPtr stk); -void trimMalVariables_(MalBlkPtr mb, bit *used, MalStkPtr glb); +void trimMalVariables_(MalBlkPtr mb, MalStkPtr glb); void typeChecker(stream *out, Module scope, MalBlkPtr mb, InstrPtr p, int silent); int tzone_fromstr(const char *buf, int *len, tzone **d); tzone tzone_local; int tzone_tostr(str *buf, int *len, const tzone *z); str unescape_str(str *retval, str s); -void unloadLibraries(void); str unlockRef; str unpackRef; str unpinRef; diff --git a/clients/mapiclient/tomograph.c b/clients/mapiclient/tomograph.c --- a/clients/mapiclient/tomograph.c +++ b/clients/mapiclient/tomograph.c @@ -1877,6 +1877,8 @@ main(int argc, char **argv) resetTomograph(); conn = mapi_get_from(dbh); while ((m = mnstr_read(conn, buffer + len, 1, buflen - len-1)) >= 0) { + if (m == 0 && (m = mnstr_read(conn, buffer + len, 1, buflen - len-1)) <= 0) + break; buffer[len + m] = 0; response = buffer; while ((e = strchr(response, '\n')) != NULL) { diff --git a/gdk/ChangeLog b/gdk/ChangeLog --- a/gdk/ChangeLog +++ b/gdk/ChangeLog @@ -1,6 +1,14 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Tue Jul 26 2016 Sjoerd Mullender <sjo...@acm.org> +- BATattach now can also create a str BAT from a file consisting of + null-terminated strings. The input file must be encoded using UTF-8. +- BATattach now copies the input file instead of "stealing" it. +- Removed the lastused "timestamp" from the BBP. +- Removed batStamp field from BAT descriptor, and removed the BBPcurstamp + function. + * Fri Jul 22 2016 Sjoerd Mullender <sjo...@acm.org> - Removed unused functions BBPhot and BBPcold. diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -795,7 +795,6 @@ gdk_export int VALisnil(const ValRecord typedef struct { /* dynamic bat properties */ MT_Id tid; /* which thread created it */ - int stamp; /* BAT recent creation stamp */ unsigned int copiedtodisk:1, /* once written */ dirty:2, /* dirty wrt disk? */ @@ -884,7 +883,6 @@ typedef struct BATiter { #define batInserted S.inserted #define batCount S.count #define batCapacity S.capacity -#define batStamp S.stamp #define batSharecnt S.sharecnt #define batRestricted S.restricted #define batRole S.role @@ -1669,7 +1667,6 @@ typedef struct { str options; /* A string list of options */ int refs; /* in-memory references on which the loaded status of a BAT relies */ int lrefs; /* logical references on which the existence of a BAT relies */ - int lastused; /* BBP LRU stamp */ volatile int status; /* status mask used for spin locking */ /* MT_Id pid; non-zero thread-id if this BAT is private */ } BBPrec; @@ -1695,14 +1692,12 @@ gdk_export BBPrec *BBP[N_BBPINIT]; #define BBP_desc(i) BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].desc #define BBP_refs(i) BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].refs #define BBP_lrefs(i) BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].lrefs -#define BBP_lastused(i) BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].lastused #define BBP_status(i) BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].status #define BBP_pid(i) BBP[(i)>>BBPINITLOG][(i)&(BBPINIT-1)].pid /* macros that nicely check parameters */ #define BBPcacheid(b) ((b)->batCacheid) #define BBPstatus(i) (BBPcheck((i),"BBPstatus")?BBP_status(i):-1) -gdk_export int BBPcurstamp(void); #define BBPrefs(i) (BBPcheck((i),"BBPrefs")?BBP_refs(i):-1) #define BBPcache(i) (BBPcheck((i),"BBPcache")?BBP_cache(i):(BAT*) NULL) #define BBPname(i) \ diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c --- a/gdk/gdk_atoms.c +++ b/gdk/gdk_atoms.c @@ -578,6 +578,7 @@ batWrite(const bat *a, stream *s, size_t return mnstr_writeIntArray(s, (const int *) a, cnt) ? GDK_SUCCEED : GDK_FAIL; } + /* * numFromStr parses the head of the string for a number, accepting an * optional sign. The code has been prepared to continue parsing by @@ -592,9 +593,11 @@ numFromStr(const char *src, int *len, vo int sz = ATOMsize(tp); #ifdef HAVE_HGE hge base = 0; + hge expbase = -1; const hge maxdiv10 = GDK_hge_max / 10; #else lng base = 0; + lng expbase = -1; const lng maxdiv10 = LL_CONSTANT(922337203685477580); /*7*/ #endif const int maxmod10 = 7; /* max value % 10 */ @@ -636,8 +639,37 @@ numFromStr(const char *src, int *len, vo } base = 10 * base + base10(*p); p++; + /* Special case: xEy = x*10^y handling part 1 */ + if (*p == 'E' || *p == 'e') { + // if there is a second E in the string we give up + if (expbase > -1) { + memcpy(*dst, ATOMnilptr(tp), sz); + return 0; + } + expbase = base; + base = 0; + p++; + } } while (num10(*p)); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list