mirror of https://github.com/sqlite/sqlite
Improvements to opcode documentation in the bytecode engine.
No changes to code. FossilOrigin-Name: e54c9f8db5b2fa8ea82c6eab7482255431af16901f7992c9667b56a0e50a9f4f
This commit is contained in:
parent
bc43995f99
commit
bb6783b86f
13
manifest
13
manifest
|
@ -1,5 +1,5 @@
|
|||
C Evaluate\sWHERE\sclause\sterms\sthat\sreference\sonly\sthe\sindex\sbefore\sevaluating\nterms\sthat\srequire\sthe\stable,\sand\sthereby\savoid\sseeking\sthe\stable\srow\sif\nindex\sterms\sare\sfalse.\nThis\sis\scalled\sthe\s"push-down"\soptimization\sin\sthe\sMySQL\sworld,\swe\sare\stold.
|
||||
D 2017-04-29T15:27:04.896
|
||||
C Improvements\sto\sopcode\sdocumentation\sin\sthe\sbytecode\sengine.\nNo\schanges\sto\scode.
|
||||
D 2017-04-29T18:02:49.909
|
||||
F Makefile.in 1cc758ce3374a32425e4d130c2fe7b026b20de5b8843243de75f087c0a2661fb
|
||||
F Makefile.linux-gcc 7bc79876b875010e8c8f9502eb935ca92aa3c434
|
||||
F Makefile.msc 6a8c838220f7c00820e1fc0ac1bccaaa8e5676067e1dbfa1bafa7a4ffecf8ae6
|
||||
|
@ -469,7 +469,7 @@ F src/update.c c443935c652af9365e033f756550b5032d02e1b06eb2cb890ed7511ae0c051dc
|
|||
F src/utf.c 699001c79f28e48e9bcdf8a463da029ea660540c
|
||||
F src/util.c ca8440ede81e155d15cff7c101654f60b55a9ae6
|
||||
F src/vacuum.c 1fe4555cd8c9b263afb85b5b4ee3a4a4181ad569
|
||||
F src/vdbe.c 1eba07ffa0e4ff5e14ceca17e366c26f58c11d12cc56e55a9a13157a93533b7e
|
||||
F src/vdbe.c 349eb6789cf8b03ef1aa42271aa9a17a6a7794c07448d27c5405904ba1b21715
|
||||
F src/vdbe.h f7d1456e28875c2dcb964056589b5b7149ab7edf39edeca801596a39bb3d3848
|
||||
F src/vdbeInt.h c070bc5c8b913bda0ceaa995cd4d939ded5e4fc96cf7c3c1c602d41b871f8ade
|
||||
F src/vdbeapi.c 5b08d82592bcff4470601fe78aaabebd50837860
|
||||
|
@ -1577,8 +1577,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||
P 2d0b64316d66a362f5891ceb71a1fd8e4607732274b09b0a8472b97eef68ebc2 91dfb61a1a25763bb0b5c1e353a9d584bc6de3f6eb445f54202ffe7f6fee6e8d
|
||||
R d3fbd82e46a4092d676255e41f20df5b
|
||||
T +closed 91dfb61a1a25763bb0b5c1e353a9d584bc6de3f6eb445f54202ffe7f6fee6e8d
|
||||
P d7bb79ed3a40419d143fbe35c310e51fe7b384a22f082a61ad788671d2d33ee0
|
||||
R 5c1f22cfd852090783654b7cdddcbe29
|
||||
U drh
|
||||
Z d8af2da2fe4450264227719b4f172b61
|
||||
Z 979167fc5393ee8033851cc4ccc2f64f
|
||||
|
|
|
@ -1 +1 @@
|
|||
d7bb79ed3a40419d143fbe35c310e51fe7b384a22f082a61ad788671d2d33ee0
|
||||
e54c9f8db5b2fa8ea82c6eab7482255431af16901f7992c9667b56a0e50a9f4f
|
42
src/vdbe.c
42
src/vdbe.c
|
@ -764,7 +764,7 @@ jump_to_p2_and_check_for_interrupt:
|
|||
pOp = &aOp[pOp->p2 - 1];
|
||||
|
||||
/* Opcodes that are used as the bottom of a loop (OP_Next, OP_Prev,
|
||||
** OP_VNext, OP_RowSetNext, or OP_SorterNext) all jump here upon
|
||||
** OP_VNext, or OP_SorterNext) all jump here upon
|
||||
** completion. Check to see if sqlite3_interrupt() has been called
|
||||
** or if the progress callback needs to be invoked.
|
||||
**
|
||||
|
@ -1567,7 +1567,7 @@ arithmetic_result_is_null:
|
|||
|
||||
/* Opcode: CollSeq P1 * * P4
|
||||
**
|
||||
** P4 is a pointer to a CollSeq struct. If the next call to a user function
|
||||
** P4 is a pointer to a CollSeq object. If the next call to a user function
|
||||
** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
|
||||
** be returned. This is used by the built-in min(), max() and nullif()
|
||||
** functions.
|
||||
|
@ -1848,11 +1848,11 @@ case OP_RealAffinity: { /* in1 */
|
|||
** Force the value in register P1 to be the type defined by P2.
|
||||
**
|
||||
** <ul>
|
||||
** <li value="97"> TEXT
|
||||
** <li value="98"> BLOB
|
||||
** <li value="99"> NUMERIC
|
||||
** <li value="100"> INTEGER
|
||||
** <li value="101"> REAL
|
||||
** <li> P2=='A' → BLOB
|
||||
** <li> P2=='B' → TEXT
|
||||
** <li> P2=='C' → NUMERIC
|
||||
** <li> P2=='D' → INTEGER
|
||||
** <li> P2=='E' → REAL
|
||||
** </ul>
|
||||
**
|
||||
** A NULL value is not changed by this routine. It remains NULL.
|
||||
|
@ -2723,8 +2723,8 @@ op_column_out:
|
|||
**
|
||||
** Apply affinities to a range of P2 registers starting with P1.
|
||||
**
|
||||
** P4 is a string that is P2 characters long. The nth character of the
|
||||
** string indicates the column affinity that should be used for the nth
|
||||
** P4 is a string that is P2 characters long. The N-th character of the
|
||||
** string indicates the column affinity that should be used for the N-th
|
||||
** memory cell in the range.
|
||||
*/
|
||||
case OP_Affinity: {
|
||||
|
@ -2751,8 +2751,8 @@ case OP_Affinity: {
|
|||
** use as a data record in a database table or as a key
|
||||
** in an index. The OP_Column opcode can decode the record later.
|
||||
**
|
||||
** P4 may be a string that is P2 characters long. The nth character of the
|
||||
** string indicates the column affinity that should be used for the nth
|
||||
** P4 may be a string that is P2 characters long. The N-th character of the
|
||||
** string indicates the column affinity that should be used for the N-th
|
||||
** field of the index key.
|
||||
**
|
||||
** The mapping from character to affinity is given by the SQLITE_AFF_
|
||||
|
@ -5748,7 +5748,7 @@ case OP_IntegrityCk: {
|
|||
/* Opcode: RowSetAdd P1 P2 * * *
|
||||
** Synopsis: rowset(P1)=r[P2]
|
||||
**
|
||||
** Insert the integer value held by register P2 into a boolean index
|
||||
** Insert the integer value held by register P2 into a RowSet object
|
||||
** held in register P1.
|
||||
**
|
||||
** An assertion fails if P2 is not an integer.
|
||||
|
@ -5768,8 +5768,9 @@ case OP_RowSetAdd: { /* in1, in2 */
|
|||
/* Opcode: RowSetRead P1 P2 P3 * *
|
||||
** Synopsis: r[P3]=rowset(P1)
|
||||
**
|
||||
** Extract the smallest value from boolean index P1 and put that value into
|
||||
** register P3. Or, if boolean index P1 is initially empty, leave P3
|
||||
** Extract the smallest value from the RowSet object in P1
|
||||
** and put that value into register P3.
|
||||
** Or, if RowSet object P1 is initially empty, leave P3
|
||||
** unchanged and jump to instruction P2.
|
||||
*/
|
||||
case OP_RowSetRead: { /* jump, in1, out3 */
|
||||
|
@ -5800,15 +5801,14 @@ case OP_RowSetRead: { /* jump, in1, out3 */
|
|||
** integer in P3 into the RowSet and continue on to the
|
||||
** next opcode.
|
||||
**
|
||||
** The RowSet object is optimized for the case where successive sets
|
||||
** of integers, where each set contains no duplicates. Each set
|
||||
** of values is identified by a unique P4 value. The first set
|
||||
** must have P4==0, the final set P4=-1. P4 must be either -1 or
|
||||
** non-negative. For non-negative values of P4 only the lower 4
|
||||
** bits are significant.
|
||||
** The RowSet object is optimized for the case where sets of integers
|
||||
** are inserted in distinct phases, which each set contains no duplicates.
|
||||
** Each set is identified by a unique P4 value. The first set
|
||||
** must have P4==0, the final set must have P4==-1, and for all other sets
|
||||
** must have P4>0.
|
||||
**
|
||||
** This allows optimizations: (a) when P4==0 there is no need to test
|
||||
** the rowset object for P3, as it is guaranteed not to contain it,
|
||||
** the RowSet object for P3, as it is guaranteed not to contain it,
|
||||
** (b) when P4==-1 there is no need to insert the value, as it will
|
||||
** never be tested for, and (c) when a value that is part of set X is
|
||||
** inserted, there is no need to search to see if the same value was
|
||||
|
|
Loading…
Reference in New Issue