From 0de3ae95d5dafdb602f8df24014397b4a63fb0f9 Mon Sep 17 00:00:00 2001 From: drh Date: Mon, 28 Apr 2008 16:55:26 +0000 Subject: [PATCH] Change the implementation of the NaN recognition to be more cross-platform. Ticket #3089. (CVS 5060) FossilOrigin-Name: 07fd9a8c6ca0876f7ec447ce65173957005dc75c --- manifest | 22 +++++++++++----------- manifest.uuid | 2 +- src/printf.c | 2 +- src/sqliteInt.h | 6 +++--- src/util.c | 10 +++++++++- src/vdbe.c | 4 ++-- src/vdbemem.c | 2 +- 7 files changed, 28 insertions(+), 20 deletions(-) diff --git a/manifest b/manifest index 09462d54c3..b88de430cb 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Fix\sa\sshared-cache\smode\sproblem\striggered\swhen\ssqlite3_open16()\swas\sused\sto\sopen\sthe\ssecond\sor\ssubsequent\sconnections\sto\sa\sutf-8\sdatabase.\s(CVS\s5059) -D 2008-04-28T16:19:35 +C Change\sthe\simplementation\sof\sthe\sNaN\srecognition\sto\sbe\smore\scross-platform.\nTicket\s#3089.\s(CVS\s5060) +D 2008-04-28T16:55:26 F Makefile.arm-wince-mingw32ce-gcc ac5f7b2cef0cd850d6f755ba6ee4ab961b1fadf7 F Makefile.in 25b3282a4ac39388632c2fb0e044ff494d490952 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -127,14 +127,14 @@ F src/pager.h 45ec2188593afd48a25c743529646771d75e83e4 F src/parse.y fc4bd35c6088901f7c8daead26c6fb11c87d22e7 F src/pragma.c 2e4bb2e76e48a32750529fdc4bfe86ac5f54e01b F src/prepare.c adc7e1fc08dfbab63cd213d4c0aff8f3fa70d477 -F src/printf.c 05d2b44d7b5b80c8a4a09108ddad9c20e254370d +F src/printf.c 2d9bac813d1319babf3c6e925cf7ec5be1281c94 F src/random.c 2b2db2de4ab491f5a14d3480466f8f4b5a5db74a F src/select.c b02ee16591f0194739e7deb12099d3e98e60b7f3 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96 F src/shell.c be22ec05c8c4a43a95a6ad3b8068542200451e07 F src/sqlite.h.in abb785d2afcf45bb9344fe6edc1c7b428e1b719f F src/sqlite3ext.h faacd0e6a81aabee0861c6d7883c9172e74ef5b3 -F src/sqliteInt.h d038951808706ae039b05090e068674d307f3e3f +F src/sqliteInt.h 1884454ab9c29b331c31a659c56d73ff2af2e077 F src/sqliteLimit.h f435e728c6b620ef7312814d660a81f9356eb5c8 F src/table.c 46ccf9b7892a86f57420ae7bac69ecd5e72d26b5 F src/tclsqlite.c 2877726bf32f7d72ff057b37ed6c93485b667ea1 @@ -167,16 +167,16 @@ F src/tokenize.c a96abe15a8db6fea2e964cdce2acba9ed17bc26f F src/trigger.c 9bd3b6fa0beff4a02d262c96466f752ec15a7fc3 F src/update.c 57282dae1ffffaf4aedc3201ed77f8ef09be4f45 F src/utf.c 8c94fa10efc78c2568d08d436acc59df4df7191b -F src/util.c 943caa4071488b20ed90588f0704c6825f91836b +F src/util.c 6b030399aa362338316ba5726cb625318ea74bed F src/vacuum.c 3524411bfb58aac0d87eadd3e5b7cd532772af30 -F src/vdbe.c 2d75ac15ec69721340f0320e5b2fefbbd1aa2831 +F src/vdbe.c 1e0ee231e5b035195c6d0043f059fe7f3df563da F src/vdbe.h bfd84bda447f39cb599302c7ec85067dae20453c F src/vdbeInt.h 05316345da487b0cf540482576f9ae3337d133cd F src/vdbeapi.c 0e1b5a808bb0e556f2a975eb7d11fd3153e922bf F src/vdbeaux.c 7a0d0f021ebc54ae581a4f1ba833a2bee576228e F src/vdbeblob.c 554736781ee273a8089c776e96bdb53e66f57ce6 F src/vdbefifo.c a30c237b2a3577e1415fb6e288cbb6b8ed1e5736 -F src/vdbemem.c e2450d6c798f35a30413a79c5fa9b1a24058629d +F src/vdbemem.c 8cdc5d4c9558338a2c5ae81135d0826136833b5e F src/vtab.c 13cd7f225c685a71aeba79c0ef521022913f185a F src/where.c 85719d58e0f680b5d8239dc6af82b159775d7376 F tclinstaller.tcl 4356d9d94d2b5ed5e68f9f0c80c4df3048dd7617 @@ -630,7 +630,7 @@ F www/tclsqlite.tcl 8be95ee6dba05eabcd27a9d91331c803f2ce2130 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b F www/whentouse.tcl fc46eae081251c3c181bd79c5faef8195d7991a5 -P 7bf8213ce9f591f4c2ef6c1e19a17712e3bae9e3 -R 613b7949fdaa0711be115c0f2be92a3b -U danielk1977 -Z 355fdcb5723cd5025089cad5f7c888ad +P 20946bf6dd704416c41edd863103e85fc7ab4ef2 +R 80368d71b836d83e7f2e7f2f1d8e19df +U drh +Z 00d3002a00844183e10c99274d36883e diff --git a/manifest.uuid b/manifest.uuid index 036e360041..c9448b3dc4 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -20946bf6dd704416c41edd863103e85fc7ab4ef2 \ No newline at end of file +07fd9a8c6ca0876f7ec447ce65173957005dc75c \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index 4e75257989..eb90de4d92 100644 --- a/src/printf.c +++ b/src/printf.c @@ -474,7 +474,7 @@ static void vxprintf( if( xtype==etFLOAT ) realvalue += rounder; /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */ exp = 0; - if( sqlite3_isnan(realvalue) ){ + if( sqlite3IsNaN(realvalue) ){ bufpt = "NaN"; length = 3; break; diff --git a/src/sqliteInt.h b/src/sqliteInt.h index d52a04cf13..fd7d7602ff 100644 --- a/src/sqliteInt.h +++ b/src/sqliteInt.h @@ -11,7 +11,7 @@ ************************************************************************* ** Internal interface definitions for SQLite. ** -** @(#) $Id: sqliteInt.h,v 1.697 2008/04/28 12:54:15 drh Exp $ +** @(#) $Id: sqliteInt.h,v 1.698 2008/04/28 16:55:26 drh Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ @@ -191,8 +191,6 @@ #include #include -#define sqlite3_isnan(X) ((X)!=(X)) - /* ** If compiling for a processor that lacks floating point support, ** substitute integer for floating-point @@ -1766,6 +1764,8 @@ void *sqlite3DbReallocOrFree(sqlite3 *, void *, int); void *sqlite3DbRealloc(sqlite3 *, void *, int); int sqlite3MallocSize(void *); +int sqlite3IsNaN(double); + char *sqlite3MPrintf(sqlite3*,const char*, ...); char *sqlite3VMPrintf(sqlite3*,const char*, va_list); #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) diff --git a/src/util.c b/src/util.c index 28cfffa4a6..2a7d7a2b00 100644 --- a/src/util.c +++ b/src/util.c @@ -14,13 +14,21 @@ ** This file contains functions for allocating memory, comparing ** strings, and stuff like that. ** -** $Id: util.c,v 1.222 2008/04/16 00:49:12 drh Exp $ +** $Id: util.c,v 1.223 2008/04/28 16:55:26 drh Exp $ */ #include "sqliteInt.h" #include #include +/* +** Return true if the floating point value is Not a Number. +*/ +int sqlite3IsNaN(double x){ + volatile double y = x; + return x!=y; +} + /* ** Set the most recent error code and error string for the sqlite ** handle "db". The error code is set to "err_code". diff --git a/src/vdbe.c b/src/vdbe.c index 78183fcfaa..2f027e95cc 100644 --- a/src/vdbe.c +++ b/src/vdbe.c @@ -43,7 +43,7 @@ ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** -** $Id: vdbe.c,v 1.735 2008/04/25 12:25:42 drh Exp $ +** $Id: vdbe.c,v 1.736 2008/04/28 16:55:26 drh Exp $ */ #include "sqliteInt.h" #include @@ -1195,7 +1195,7 @@ case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */ break; } } - if( sqlite3_isnan(b) ){ + if( sqlite3IsNaN(b) ){ goto arithmetic_result_is_null; } pOut->r = b; diff --git a/src/vdbemem.c b/src/vdbemem.c index f45f384263..9f831ecc9a 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -482,7 +482,7 @@ void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){ ** manifest type REAL. */ void sqlite3VdbeMemSetDouble(Mem *pMem, double val){ - if( sqlite3_isnan(val) ){ + if( sqlite3IsNaN(val) ){ sqlite3VdbeMemSetNull(pMem); }else{ sqlite3VdbeMemRelease(pMem);