]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Add a new OP_BColumn opcode where the cursor is guaranteed to be of type btree-column-opcode
authordrh <drh@noemail.net>
Sat, 21 Nov 2015 17:53:06 +0000 (17:53 +0000)
committerdrh <drh@noemail.net>
Sat, 21 Nov 2015 17:53:06 +0000 (17:53 +0000)
CURTYPE_BTREE and is thus able to skip some checks and run slightly faster.

FossilOrigin-Name: 093e0d10a81adc078dcb3e08e33ce89bdbe53789

manifest
manifest.uuid
src/vdbe.c
src/vdbeaux.c

index 48ad5f5d35ad38bfd26e1f5eaba1824bf8ef53af..2e1305c8e214cae2944ad448f083be9d1995fc29 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Fix\sover-length\ssource\scode\slines.\s\sNo\slogic\schanges.
-D 2015-11-21T17:27:42.127
+C Add\sa\snew\sOP_BColumn\sopcode\swhere\sthe\scursor\sis\sguaranteed\sto\sbe\sof\stype\nCURTYPE_BTREE\sand\sis\sthus\sable\sto\sskip\ssome\schecks\sand\srun\sslightly\sfaster.
+D 2015-11-21T17:53:06.758
 F Makefile.in d828db6afa6c1fa060d01e33e4674408df1942a1
 F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
 F Makefile.msc e928e68168df69b353300ac87c10105206653a03
@@ -402,11 +402,11 @@ F src/update.c 40e51cd0883cb5bfd6abb7d8a7cd8aa47fab2945
 F src/utf.c fc6b889ba0779b7722634cdeaa25f1930d93820c
 F src/util.c e802e8e311a0d6c48cd1b3e89db164f6f0248d70
 F src/vacuum.c 2ddd5cad2a7b9cef7f9e431b8c7771634c6b1701
-F src/vdbe.c b56b2fc9b2f2d0a99d1dbd02d47efaacec253a4c
+F src/vdbe.c 8694c0e6497cd21e19e30ac059f933ac5d9abea2
 F src/vdbe.h efb7a8c1459e31f3ea4377824c6a7e4cb5068637
 F src/vdbeInt.h 75c2e82ee3357e9210c06474f8d9bdf12c81105d
 F src/vdbeapi.c 020681b943e77766b32ae1cddf86d7831b7374ca
-F src/vdbeaux.c b660c995256e3d3e2cb47ccd20b82a1c342fa093
+F src/vdbeaux.c 16e21a6ae0c290f17f6e7395d80686622cafeaa2
 F src/vdbeblob.c fdc4a81605ae7a35ae94a55bd768b66d6be16f15
 F src/vdbemem.c fdd1578e47bea61390d472de53c565781d81e045
 F src/vdbesort.c a7ec02da4494c59dfd071126dd3726be5a11459d
@@ -1404,7 +1404,10 @@ F tool/vdbe_profile.tcl 246d0da094856d72d2c12efec03250d71639d19f
 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
 F tool/warnings.sh 48bd54594752d5be3337f12c72f28d2080cb630b
 F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P ff5716b89f99d9c4568a39f1f52524528a631623
-R 558d15295cc22b403e8d5cb8c3ebd48a
+P 198d191b2f5ef7d63ac0093c701955c9052fd734
+R 047e676af06478b15f87435c78af3c91
+T *branch * btree-column-opcode
+T *sym-btree-column-opcode *
+T -sym-trunk *
 U drh
-Z 0a3988f827c1f289bd36fdbbf324f548
+Z d7290cc1ec32ea2c40df94d6965d7340
index 48582621bbe5a9438118871f49705006b44a5c58..f1aff2cebc7559f4fb5fdced073b3603a8135831 100644 (file)
@@ -1 +1 @@
-198d191b2f5ef7d63ac0093c701955c9052fd734
\ No newline at end of file
+093e0d10a81adc078dcb3e08e33ce89bdbe53789
\ No newline at end of file
index 66b507b2856799492e41e1401304b1163e2951f3..10ebe8c3bfe70adbab5e378f8afbb7ffb6dc2140 100644 (file)
@@ -2375,12 +2375,20 @@ case OP_Column: {
   u16 fx;            /* pDest->flags value */
   Mem *pReg;         /* PseudoTable input register */
 
+  pC = p->apCsr[pOp->p1];
+  if( pC->eCurType==CURTYPE_PSEUDO ) goto skip_moveto;
+  pOp->opcode = OP_BColumn;
+
+case OP_BColumn:
+  pC = p->apCsr[pOp->p1];
+  rc = sqlite3VdbeCursorMoveto(pC);
+  if( rc ) goto abort_due_to_error;
+skip_moveto:
   p2 = pOp->p2;
   assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
   pDest = &aMem[pOp->p3];
   memAboutToChange(p, pDest);
   assert( pOp->p1>=0 && pOp->p1<p->nCursor );
-  pC = p->apCsr[pOp->p1];
   assert( pC!=0 );
   assert( p2<pC->nField );
   aOffset = pC->aOffset;
@@ -2390,8 +2398,6 @@ case OP_Column: {
   pCrsr = pC->uc.pCursor;
 
   /* If the cursor cache is stale, bring it up-to-date */
-  rc = sqlite3VdbeCursorMoveto(pC);
-  if( rc ) goto abort_due_to_error;
   if( pC->cacheStatus!=p->cacheCtr ){
     if( pC->nullRow ){
       if( pC->eCurType==CURTYPE_PSEUDO ){
index 9ced9480b7f2ffc70c956f1e06e74d0d593ed662..6b9692874aade62e063c096433207d757931d834 100644 (file)
@@ -3000,13 +3000,12 @@ int sqlite3VdbeCursorRestore(VdbeCursor *p){
 ** not been deleted out from under the cursor, then this routine is a no-op.
 */
 int sqlite3VdbeCursorMoveto(VdbeCursor *p){
-  if( p->eCurType==CURTYPE_BTREE ){
-    if( p->deferredMoveto ){
-      return handleDeferredMoveto(p);
-    }
-    if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
-      return handleMovedCursor(p);
-    }
+  assert( p->eCurType==CURTYPE_BTREE );
+  if( p->deferredMoveto ){
+    return handleDeferredMoveto(p);
+  }
+  if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){
+    return handleMovedCursor(p);
   }
   return SQLITE_OK;
 }