-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
-C Simplify\sthe\sOPFLG\sprocessing\slogic\sin\sthe\sVDBE\sfor\sa\sspeed\sboost\sin\sthe\nVDBE\sprocessing\sloop\sand\sa\sreduction\sin\scode\ssize.
-D 2009-11-13T19:43:44
+C Performance\simprovements\sand\ssize\sreductions\son\sthe\sOP_Seek*\sfamily\sof\nVDBE\sopcodes.
+D 2009-11-13T20:52:44
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 53f3dfa49f28ab5b80cb083fb7c9051e596bcfa1
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/utf.c dad16adcc0c35ef2437dca125a4b07419d361052
F src/util.c ad4f03079ba0fe83590d1cc9197e8e4844e38592
F src/vacuum.c 03309a08d549f9389cc3a3589afd4fadbdaf0679
-F src/vdbe.c bc7fe6c752a86adb63ddfdefe41c2912f0dbb207
+F src/vdbe.c 74158ea3fd68231720ba75ebec5072eda1ad8cf9
F src/vdbe.h 65cd747e36ad444cb1a17e529030942c45a61fe3
F src/vdbeInt.h 59c65e7b810836b9e946acee45c7b3c02b967d1b
F src/vdbeapi.c 17680ab7a75ec938c5ba039a6c87489d01faf2cb
F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
F tool/vdbe-compress.tcl d70ea6d8a19e3571d7ab8c9b75cba86d1173ff0f
-P bdc45ba77fb77771c8ff46b8d6c2dd29e6d3b019
-R 5ea278d36772610aa788376c8fbcebe2
+P 3352b3eba545c3128efb7665ec91d4df3b16011d
+R 2242fd95cd691be062201d4a6409f215
U drh
-Z 259be306ad269f147c546ad8a52bafc1
+Z fdb196c2be03c08f60c67969937fe987
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
-iD8DBQFK/bbzoxKgR168RlERAnLoAKCIVxGvqT+6vMWYcfnTE0ON/9WBLwCfXEdv
-WTqwwhvX+GL8mTOt3BiR/h8=
-=9zc9
+iD8DBQFK/ccfoxKgR168RlERAsHZAJ45TKVOQRlFzMf0pR03Ik5X3PWGHgCfbTo2
+sR7n4qre/qrfhmog3CvnvbQ=
+=5/U8
-----END PGP SIGNATURE-----
-3352b3eba545c3128efb7665ec91d4df3b16011d
\ No newline at end of file
+ed820f45cf4354b1e1db64049c47a07221a7ff6d
\ No newline at end of file
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( pC->pseudoTableReg==0 );
+ assert( OP_SeekLe == OP_SeekLt+1 );
+ assert( OP_SeekGe == OP_SeekLt+2 );
+ assert( OP_SeekGt == OP_SeekLt+3 );
if( pC->pCursor!=0 ){
oc = pOp->opcode;
pC->nullRow = 0;
** integer. */
res = 1;
if( pIn3->r<0 ){
- if( oc==OP_SeekGt || oc==OP_SeekGe ){
+ if( oc>=OP_SeekGe ){ assert( oc==OP_SeekGe || oc==OP_SeekGt );
rc = sqlite3BtreeFirst(pC->pCursor, &res);
if( rc!=SQLITE_OK ) goto abort_due_to_error;
}
}else{
- if( oc==OP_SeekLt || oc==OP_SeekLe ){
+ if( oc<=OP_SeekLe ){ assert( oc==OP_SeekLt || oc==OP_SeekLe );
rc = sqlite3BtreeLast(pC->pCursor, &res);
if( rc!=SQLITE_OK ) goto abort_due_to_error;
}
assert( nField>0 );
r.pKeyInfo = pC->pKeyInfo;
r.nField = (u16)nField;
- if( oc==OP_SeekGt || oc==OP_SeekLe ){
- r.flags = UNPACKED_INCRKEY;
- }else{
- r.flags = 0;
- }
+
+ /* The next line of code computes as follows, only faster:
+ ** if( oc==OP_SeekGt || oc==OP_SeekLe ){
+ ** r.flags = UNPACKED_INCRKEY;
+ ** }else{
+ ** r.flags = 0;
+ ** }
+ */
+ r.flags = UNPACKED_INCRKEY * (1 & (oc - OP_SeekLt));
+ assert( oc!=OP_SeekGt || r.flags==UNPACKED_INCRKEY );
+ assert( oc!=OP_SeekLe || r.flags==UNPACKED_INCRKEY );
+ assert( oc!=OP_SeekGe || r.flags==0 );
+ assert( oc!=OP_SeekLt || r.flags==0 );
+
r.aMem = &p->aMem[pOp->p3];
rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, &r, 0, 0, &res);
if( rc!=SQLITE_OK ){
#ifdef SQLITE_TEST
sqlite3_search_count++;
#endif
- if( oc==OP_SeekGe || oc==OP_SeekGt ){
+ if( oc>=OP_SeekGe ){ assert( oc==OP_SeekGe || oc==OP_SeekGt );
if( res<0 || (res==0 && oc==OP_SeekGt) ){
rc = sqlite3BtreeNext(pC->pCursor, &res);
if( rc!=SQLITE_OK ) goto abort_due_to_error;