Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Changes In Branch btree-column-opcode Excluding Merge-Ins
This is equivalent to a diff from 198d191b2f to 093e0d10a8
2015-11-21
| ||
19:43 | Fix an obscure memory leak found by libfuzzer that may occur under some circumstances if expanding a "*" expression causes a SELECT to return more than 32767 columns. (check-in: 60de5f2342 user: dan tags: trunk) | |
17:53 | Add a new OP_BColumn opcode where the cursor is guaranteed to be of type CURTYPE_BTREE and is thus able to skip some checks and run slightly faster. (Leaf check-in: 093e0d10a8 user: drh tags: btree-column-opcode) | |
17:27 | Fix over-length source code lines. No logic changes. (check-in: 198d191b2f user: drh tags: trunk) | |
13:24 | Do not allow table-valued function syntax on ordinary tables and views as those objects are not table-valued functions. Fix for ticket [73eba7ba5c7c0fc]. Problem found by [http://llvm.org/docs/LibFuzzer.html|libFuzzer]. (check-in: ff5716b89f user: drh tags: trunk) | |
Changes to src/vdbe.c.
︙ | ︙ | |||
2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 | u32 offset; /* Offset into the data */ u64 offset64; /* 64-bit offset */ u32 avail; /* Number of bytes of available data */ u32 t; /* A type code from the record header */ u16 fx; /* pDest->flags value */ Mem *pReg; /* PseudoTable input register */ 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 ); | > > > > > > > > > < < < | 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 | u32 offset; /* Offset into the data */ u64 offset64; /* 64-bit offset */ u32 avail; /* Number of bytes of available data */ u32 t; /* A type code from the record header */ 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 ); assert( pC!=0 ); assert( p2<pC->nField ); aOffset = pC->aOffset; assert( pC->eCurType!=CURTYPE_VTAB ); assert( pC->eCurType!=CURTYPE_PSEUDO || pC->nullRow ); assert( pC->eCurType!=CURTYPE_SORTER ); pCrsr = pC->uc.pCursor; /* If the cursor cache is stale, bring it up-to-date */ if( pC->cacheStatus!=p->cacheCtr ){ if( pC->nullRow ){ if( pC->eCurType==CURTYPE_PSEUDO ){ assert( pC->uc.pseudoTableReg>0 ); pReg = &aMem[pC->uc.pseudoTableReg]; assert( pReg->flags & MEM_Blob ); assert( memIsValid(pReg) ); |
︙ | ︙ |
Changes to src/vdbeaux.c.
︙ | ︙ | |||
2996 2997 2998 2999 3000 3001 3002 | ** deleted out from under the cursor and if it has, mark the row as ** a NULL row. ** ** If the cursor is already pointing to the correct row and that row has ** not been deleted out from under the cursor, then this routine is a no-op. */ int sqlite3VdbeCursorMoveto(VdbeCursor *p){ | | | | | | | < | 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 | ** deleted out from under the cursor and if it has, mark the row as ** a NULL row. ** ** If the cursor is already pointing to the correct row and that row has ** not been deleted out from under the cursor, then this routine is a no-op. */ int sqlite3VdbeCursorMoveto(VdbeCursor *p){ assert( p->eCurType==CURTYPE_BTREE ); if( p->deferredMoveto ){ return handleDeferredMoveto(p); } if( sqlite3BtreeCursorHasMoved(p->uc.pCursor) ){ return handleMovedCursor(p); } return SQLITE_OK; } /* ** The following functions: ** |
︙ | ︙ |