diff options
author | drh <drh@noemail.net> | 2008-04-29 00:15:20 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2008-04-29 00:15:20 +0000 |
commit | 2eaf93d34fb46993458504ee32ee984e39b56f8a (patch) | |
tree | 42004558358a12bd2886cda2313092925701415e /src/expr.c | |
parent | 7d133d88892b2af22c79957a8ba3815cbbdba695 (diff) | |
download | sqlite-2eaf93d34fb46993458504ee32ee984e39b56f8a.tar.gz sqlite-2eaf93d34fb46993458504ee32ee984e39b56f8a.zip |
Always convert IEEE NaN into NULL. Ticket #3060. Add test cases to verify
that this is happening. (CVS 5066)
FossilOrigin-Name: 9b07e59e510e2de39c2081653662fbc654ca6fbb
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/expr.c b/src/expr.c index 9dfd6fc78..e0c5ecfbc 100644 --- a/src/expr.c +++ b/src/expr.c @@ -12,7 +12,7 @@ ** This file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** -** $Id: expr.c,v 1.369 2008/04/25 00:08:38 drh Exp $ +** $Id: expr.c,v 1.370 2008/04/29 00:15:21 drh Exp $ */ #include "sqliteInt.h" #include <ctype.h> @@ -1938,9 +1938,13 @@ static void codeReal(Vdbe *v, const char *z, int n, int negateFlag, int iMem){ char *zV; assert( !isdigit(z[n]) ); sqlite3AtoF(z, &value); - if( negateFlag ) value = -value; - zV = dup8bytes(v, (char*)&value); - sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL); + if( sqlite3IsNaN(value) ){ + sqlite3VdbeAddOp2(v, OP_Null, 0, iMem); + }else{ + if( negateFlag ) value = -value; + zV = dup8bytes(v, (char*)&value); + sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL); + } } } |