From 6fec0762389cc1ae09c0071b79e40845d8284f43 Mon Sep 17 00:00:00 2001 From: drh Date: Sun, 30 May 2004 01:38:43 +0000 Subject: [PATCH] Do not include the P3 parameter on OP_Integer opcodes if the integer will fit in 32 bits. The P3 conversion is slow. (CVS 1494) FossilOrigin-Name: fcd84ebabca72023e76e6954514948aa9a3ab999 --- manifest | 14 +++++++------- manifest.uuid | 2 +- src/expr.c | 8 +++++--- src/vdbemem.c | 7 ++++--- 4 files changed, 17 insertions(+), 14 deletions(-) diff --git a/manifest b/manifest index d97887ae3e..7450fb533e 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C A\sfile\sformat\schange\sfor\sbtree.c\smakes\sit\sbetween\s10\sand\s20%\sfaster.\s(CVS\s1493) -D 2004-05-29T21:46:49 +C Do\snot\sinclude\sthe\sP3\sparameter\son\sOP_Integer\sopcodes\sif\sthe\sinteger\swill\sfit\nin\s32\sbits.\s\sThe\sP3\sconversion\sis\sslow.\s(CVS\s1494) +D 2004-05-30T01:38:43 F Makefile.in ab7b0d5118e2da97bac66be8684a1034e3500f5a F Makefile.linux-gcc b86a99c493a5bfb402d1d9178dcdc4bd4b32f906 F README f1de682fbbd94899d50aca13d387d1b3fd3be2dd @@ -30,7 +30,7 @@ F src/build.c fd36c4a603e23df35aa7f57772d965e1865e39e0 F src/date.c 0eb922af5c5f5e2455f8dc2f98023ed3e04a857e F src/delete.c 72f8febf6170cda830f509c8f9dffbed3df3596c F src/encode.c a876af473d1d636faa3dca51c7571f2e007eea37 -F src/expr.c 416e8970fd0f0b66ac8b4d9f58f6f73239e47568 +F src/expr.c 5145de7d25a4b960a4afdb754a9e88b60cce0405 F src/func.c 1fe0763675eb38b6e3992d3edfbec2271798b658 F src/hash.c 440c2f8cb373ee1b4e13a0988489c7cd95d55b6f F src/hash.h 762d95f1e567664d1eafc1687de755626be962fb @@ -74,7 +74,7 @@ F src/vdbe.h e73f890e0f2a6c42b183d7d6937947930fe4fdeb F src/vdbeInt.h c2bcd6e5a6e6a3753e4c5a368629c3a625719bfc F src/vdbeapi.c 0c5d64c81871cb4fe5407e639604ee95738b6942 F src/vdbeaux.c 79dbad52ba653c0f26adcab1a054432669775b0d -F src/vdbemem.c c97c145ff6d9fc5b4236704c04a65849117e6214 +F src/vdbemem.c d5f96663627d54ee8ea47f182c92faa57a015704 F src/where.c 444a7c3a8b1eb7bba072e489af628555d21d92a4 F test/all.test 569a92a8ee88f5300c057cc4a8f50fbbc69a3242 F test/attach.test 0dd7cf9bf9bc915bce2da4fb616c4ea9c3da64af @@ -204,7 +204,7 @@ F www/sqlite.tcl 3c83b08cf9f18aa2d69453ff441a36c40e431604 F www/tclsqlite.tcl b9271d44dcf147a93c98f8ecf28c927307abd6da F www/vdbe.tcl 9b9095d4495f37697fd1935d10e14c6015e80aa1 F www/whentouse.tcl a8335bce47cc2fddb07f19052cb0cb4d9129a8e4 -P 3225de8902b0e7e60c4d9f3a5ef51bc74f57d364 -R 702efc72950b18adf9baf0d005935d93 +P cbcaece7f45a0bc994e6c54a996afa4e6529da6a +R 258b847515a631fd85af8a899101683c U drh -Z e0fe70a1953600e894856c5d74936688 +Z b2fca084d3ec68b05f90cc6a90870693 diff --git a/manifest.uuid b/manifest.uuid index 5f97a8ca8e..0a1c977bd5 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -cbcaece7f45a0bc994e6c54a996afa4e6529da6a \ No newline at end of file +fcd84ebabca72023e76e6954514948aa9a3ab999 \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 1e87ed8189..12dbd9992d 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.132 2004/05/29 11:24:50 danielk1977 Exp $ +** $Id: expr.c,v 1.133 2004/05/30 01:38:43 drh Exp $ */ #include "sqliteInt.h" #include @@ -1068,8 +1068,10 @@ int sqlite3ExprType(Expr *p){ */ static void codeInteger(Vdbe *v, const char *z, int n){ int i; - if( sqlite3GetInt32(z, &i) || (i=0, sqlite3FitsIn64Bits(z))!=0 ){ - sqlite3VdbeOp3(v, OP_Integer, i, 0, z, n); + if( sqlite3GetInt32(z, &i) ){ + sqlite3VdbeAddOp(v, OP_Integer, i, 0); + }else if( sqlite3FitsIn64Bits(z) ){ + sqlite3VdbeOp3(v, OP_Integer, 0, 0, z, n); }else{ sqlite3VdbeOp3(v, OP_Real, 0, 0, z, n); } diff --git a/src/vdbemem.c b/src/vdbemem.c index d3e3860ffc..69e1c393a2 100644 --- a/src/vdbemem.c +++ b/src/vdbemem.c @@ -209,11 +209,12 @@ static void releaseMem(Mem *p){ ** prior representations are invalidated. NULL is converted into 0. */ int sqlite3VdbeMemIntegerify(Mem *pMem){ - if( pMem->flags & MEM_Int ){ + int flags = pMem->flags; + if( flags & MEM_Int ){ /* Do nothing */ - }else if( pMem->flags & MEM_Real ){ + }else if( flags & MEM_Real ){ pMem->i = (i64)pMem->r; - }else if( pMem->flags & (MEM_Str|MEM_Blob) ){ + }else if( flags & (MEM_Str|MEM_Blob) ){ if( sqlite3VdbeChangeEncoding(pMem, TEXT_Utf8) || sqlite3VdbeMemNulTerminate(pMem) ){ return SQLITE_NOMEM; -- 2.47.3