diff options
author | drh <drh@noemail.net> | 2017-09-20 10:47:10 +0000 |
---|---|---|
committer | drh <drh@noemail.net> | 2017-09-20 10:47:10 +0000 |
commit | 84d4f1a328dd47fcaf5c6899babbdb64aff89184 (patch) | |
tree | 046388758bd7733b4e4570aaddd42df83e38026d /src/expr.c | |
parent | 9a243e69c2a067040aa2fe373cb25ec1278e9112 (diff) | |
download | sqlite-84d4f1a328dd47fcaf5c6899babbdb64aff89184.tar.gz sqlite-84d4f1a328dd47fcaf5c6899babbdb64aff89184.zip |
Improved resolution of large integer values in "CAST(x AS NUMERIC)".
FossilOrigin-Name: 7f2bd4ff45fba29528c18cac6da983bd9b164303525d3965056f5b40f85dc83f
Diffstat (limited to 'src/expr.c')
-rw-r--r-- | src/expr.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/expr.c b/src/expr.c index f3326d02e..b482fafc0 100644 --- a/src/expr.c +++ b/src/expr.c @@ -3076,7 +3076,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ const char *z = pExpr->u.zToken; assert( z!=0 ); c = sqlite3DecOrHexToI64(z, &value); - if( c==1 || (c==2 && !negFlag) || (negFlag && value==SMALLEST_INT64)){ + if( (c==3 && !negFlag) || (c==2) || (negFlag && value==SMALLEST_INT64)){ #ifdef SQLITE_OMIT_FLOATING_POINT sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z); #else @@ -3090,7 +3090,7 @@ static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){ } #endif }else{ - if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; } + if( negFlag ){ value = c==3 ? SMALLEST_INT64 : -value; } sqlite3VdbeAddOp4Dup8(v, OP_Int64, 0, iMem, 0, (u8*)&value, P4_INT64); } } |