aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2008-04-29 00:15:20 +0000
committerdrh <drh@noemail.net>2008-04-29 00:15:20 +0000
commit2eaf93d34fb46993458504ee32ee984e39b56f8a (patch)
tree42004558358a12bd2886cda2313092925701415e /src/expr.c
parent7d133d88892b2af22c79957a8ba3815cbbdba695 (diff)
downloadsqlite-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.c12
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);
+ }
}
}