aboutsummaryrefslogtreecommitdiff
path: root/src/expr.c
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2014-07-24 16:23:51 +0000
committerdrh <drh@noemail.net>2014-07-24 16:23:51 +0000
commit35c3d8cc75623d1fe890c8aaaaabb174e5de8d23 (patch)
tree2e2cfdc5e4f43a0595f60d7b92f546a88d13366e /src/expr.c
parentf257b4c61332fc7d64ad870e912338d0f31ef027 (diff)
parentba5b09319e2f79707bcc55a84a5f059ea0949334 (diff)
downloadsqlite-35c3d8cc75623d1fe890c8aaaaabb174e5de8d23.tar.gz
sqlite-35c3d8cc75623d1fe890c8aaaaabb174e5de8d23.zip
Merge recent trunk changes into the sessions branch.
FossilOrigin-Name: a9db017eabdefafcda87c497e8bafa07002ac0fe
Diffstat (limited to 'src/expr.c')
-rw-r--r--src/expr.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c
index 803d93f30..72286dfdf 100644
--- a/src/expr.c
+++ b/src/expr.c
@@ -2075,7 +2075,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
i64 value;
const char *z = pExpr->u.zToken;
assert( z!=0 );
- c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
+ c = sqlite3DecOrHexToI64(z, &value);
if( c==0 || (c==2 && negFlag) ){
char *zV;
if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
@@ -2085,7 +2085,14 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
#ifdef SQLITE_OMIT_FLOATING_POINT
sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
#else
- codeReal(v, z, negFlag, iMem);
+#ifndef SQLITE_OMIT_HEX_INTEGER
+ if( sqlite3_strnicmp(z,"0x",2)==0 ){
+ sqlite3ErrorMsg(pParse, "hex literal too big: %s", z);
+ }else
+#endif
+ {
+ codeReal(v, z, negFlag, iMem);
+ }
#endif
}
}