mirror of
https://github.com/sqlite/sqlite.git
synced 2025-08-05 15:55:57 +03:00
Merge all fixes and enhancements from trunk.
FossilOrigin-Name: b878c30f03e895bbc5c4c99c0f727d49093bb78bdc275593cf4852148579ae69
This commit is contained in:
28
manifest
28
manifest
@@ -1,5 +1,5 @@
|
|||||||
C Merge\sthe\slatest\sfixes\sfrom\strunk.
|
C Merge\sall\sfixes\sand\senhancements\sfrom\strunk.
|
||||||
D 2020-01-04T15:37:57.154
|
D 2020-01-04T19:19:54.288
|
||||||
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
|
||||||
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
|
||||||
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
|
||||||
@@ -469,7 +469,7 @@ F src/auth.c a3d5bfdba83d25abed1013a8c7a5f204e2e29b0c25242a56bc02bb0c07bf1e06
|
|||||||
F src/backup.c f70077d40c08b7787bfe934e4d1da8030cb0cc57d46b345fba2294b7d1be23ab
|
F src/backup.c f70077d40c08b7787bfe934e4d1da8030cb0cc57d46b345fba2294b7d1be23ab
|
||||||
F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
|
F src/bitvec.c 17ea48eff8ba979f1f5b04cc484c7bb2be632f33
|
||||||
F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
|
F src/btmutex.c 8acc2f464ee76324bf13310df5692a262b801808984c1b79defb2503bbafadb6
|
||||||
F src/btree.c 615294ab54a0f6970bfb17f97638ecbf1c0b8d475e2ea46e691cbdf11d3493a1
|
F src/btree.c c457b6a97835d44b326c6579cdb382bfb8e09651e6544915b7becf8b8e539191
|
||||||
F src/btree.h 6111552f19ed7a40f029cf4b33badc6fef9880314fffd80a945f0b7f43ab7471
|
F src/btree.h 6111552f19ed7a40f029cf4b33badc6fef9880314fffd80a945f0b7f43ab7471
|
||||||
F src/btreeInt.h 6794084fad08c9750b45145743c0e3e5c27c94dee89f26dd8df7073314934fd2
|
F src/btreeInt.h 6794084fad08c9750b45145743c0e3e5c27c94dee89f26dd8df7073314934fd2
|
||||||
F src/build.c 67b1a8d3ac700747687dbdc49ded847a3c17fef450a8c919ac0399b44cbd4215
|
F src/build.c 67b1a8d3ac700747687dbdc49ded847a3c17fef450a8c919ac0399b44cbd4215
|
||||||
@@ -478,7 +478,7 @@ F src/complete.c a3634ab1e687055cd002e11b8f43eb75c17da23e
|
|||||||
F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251
|
F src/ctime.c 1b0724e66f95f33b160b1af85caaf9cceb325d22abf39bd24df4f54a73982251
|
||||||
F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
|
F src/date.c e1d8ac7102f3f283e63e13867acb0efa33861cf34f0faf4cdbaf9fa7a1eb7041
|
||||||
F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
|
F src/dbpage.c 135eb3b5e74f9ef74bde5cec2571192c90c86984fa534c88bf4a055076fa19b7
|
||||||
F src/dbstat.c 427b13c25884ffdf55739a1d23c989326adbba284637b9d767d1aa7b21cadfc2
|
F src/dbstat.c 5125f559b33787a29f7ded750f2a69080f50a85bced98fe8ad02a99e543c4b44
|
||||||
F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4
|
F src/delete.c a5c59b9c0251cf7682bc52af0d64f09b1aefc6781a63592c8f1136f7b73c66e4
|
||||||
F src/expr.c e25df342c1b8b9b87b5d6f9990e5b36f94469b1227c0a492cb5894e379f983ea
|
F src/expr.c e25df342c1b8b9b87b5d6f9990e5b36f94469b1227c0a492cb5894e379f983ea
|
||||||
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
F src/fault.c 460f3e55994363812d9d60844b2a6de88826e007
|
||||||
@@ -600,7 +600,7 @@ F src/upsert.c 2920de71b20f04fe25eb00b655d086f0ba60ea133c59d7fa3325c49838818e78
|
|||||||
F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
|
F src/utf.c 2f0fac345c7660d5c5bd3df9e9d8d33d4c27f366bcfb09e07443064d751a0507
|
||||||
F src/util.c 2c92bc706bbdb1c45a25180291e7e05a56e297aa5dd7b2bcd2b1c47e8bb05b17
|
F src/util.c 2c92bc706bbdb1c45a25180291e7e05a56e297aa5dd7b2bcd2b1c47e8bb05b17
|
||||||
F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
|
F src/vacuum.c 82dcec9e7b1afa980288718ad11bc499651c722d7b9f32933c4d694d91cb6ebf
|
||||||
F src/vdbe.c 459a233a60aba8b8b2462f42bd6e93623e13beafc5e0c40c6646e0527e444fd0
|
F src/vdbe.c d0e32097985670ff4afee241f2c1f6f466fe12b41f9c2d6a014ec0ba8a793f6f
|
||||||
F src/vdbe.h defd693289c7bb8d325f109be9490c77138061211a116827da7244b6015a4934
|
F src/vdbe.h defd693289c7bb8d325f109be9490c77138061211a116827da7244b6015a4934
|
||||||
F src/vdbeInt.h e02ccac0334f7c71c952210657e6e18de1917605887c7bc6167a80a17f62da18
|
F src/vdbeInt.h e02ccac0334f7c71c952210657e6e18de1917605887c7bc6167a80a17f62da18
|
||||||
F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02
|
F src/vdbeapi.c 1252d80c548711e47a6d84dae88ed4e95d3fbb4e7bd0eaa1347299af7efddf02
|
||||||
@@ -614,9 +614,9 @@ F src/vxworks.h d2988f4e5a61a4dfe82c6524dd3d6e4f2ce3cdb9
|
|||||||
F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1
|
F src/wal.c 15a2845769f51ba132f9cf0b2c7a6887a91fc8437892dbcce9fcdc68b66d60a1
|
||||||
F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
|
F src/wal.h 606292549f5a7be50b6227bd685fa76e3a4affad71bb8ac5ce4cb5c79f6a176a
|
||||||
F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d
|
F src/walker.c a137468bf36c92e64d2275caa80c83902e3a0fc59273591b96c6416d3253d05d
|
||||||
F src/where.c 9353093c2a444580857006fc959494edc40e2393ac08a1f7e1eefe455c079cdb
|
F src/where.c 4ca6c066554247a69dc54616755f68c301c16e23ec36d40170f07763fd0737b3
|
||||||
F src/whereInt.h d2b771335083070ff82991cc43603e2db27b7ba1313da72de092c50c68f2be9c
|
F src/whereInt.h e1d1db6bbec0ba4f345acc338f956c8237a6f06413afa68c6414e82fb5b06745
|
||||||
F src/wherecode.c b8acf97f95de7398455e238036e96aeda8563d87c6b8108c967396431b6f2307
|
F src/wherecode.c 75ad6cbb8dfe585ffe0fc71008750b5158fc4811c3a498327033920b18f0a4be
|
||||||
F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396
|
F src/whereexpr.c 4b34be1434183e7bb8a05d4bf42bd53ea53021b0b060936fbd12062b4ff6b396
|
||||||
F src/window.c 659d613248f8bb8630f51409dc08235e4494c3c84162a535d9f88b38515f390a
|
F src/window.c 659d613248f8bb8630f51409dc08235e4494c3c84162a535d9f88b38515f390a
|
||||||
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
F test/8_3_names.test ebbb5cd36741350040fd28b432ceadf495be25b2
|
||||||
@@ -1018,7 +1018,7 @@ F test/fuzzdata4.db b502c7d5498261715812dd8b3c2005bad08b3a26e6489414bd13926cd3e4
|
|||||||
F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5
|
F test/fuzzdata5.db e35f64af17ec48926481cfaf3b3855e436bd40d1cfe2d59a9474cb4b748a52a5
|
||||||
F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7
|
F test/fuzzdata6.db 92a80e4afc172c24f662a10a612d188fb272de4a9bd19e017927c95f737de6d7
|
||||||
F test/fuzzdata7.db e7a86fd83dda151d160445d542e32e5c6019c541b3a74c2a525b6ac640639711
|
F test/fuzzdata7.db e7a86fd83dda151d160445d542e32e5c6019c541b3a74c2a525b6ac640639711
|
||||||
F test/fuzzdata8.db 709b31ecba6c40e9a9e6db6a0b2ffb3938c3b4ab901e6cdc67615563d0016569
|
F test/fuzzdata8.db f747246bddfff9ca89e59e5d3eda5490fabaccbf3cf2385cad47ee9f82f20e43
|
||||||
F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
|
F test/fuzzer1.test 3d4c4b7e547aba5e5511a2991e3e3d07166cfbb8
|
||||||
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
|
F test/fuzzer2.test a85ef814ce071293bce1ad8dffa217cbbaad4c14
|
||||||
F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
|
F test/fuzzerfault.test 8792cd77fd5bce765b05d0c8e01b9edcf8af8536
|
||||||
@@ -1036,7 +1036,7 @@ F test/imposter1.test c3f1db2d3db2c24611a6596a3fc0ffc14f1466c8
|
|||||||
F test/in.test 3e9bd58597a444123a40a9ac94cae0fec8897e17e9f519b02fc370bcf5ba5175
|
F test/in.test 3e9bd58597a444123a40a9ac94cae0fec8897e17e9f519b02fc370bcf5ba5175
|
||||||
F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75
|
F test/in2.test 5d4c61d17493c832f7d2d32bef785119e87bde75
|
||||||
F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0
|
F test/in3.test 3cbf58c87f4052cee3a58b37b6389777505aa0c0
|
||||||
F test/in4.test 0f77b0ff371549e6a119d0356be10bdba72258162e9701e83527a560482f5e98
|
F test/in4.test 65460600d48933adba4283c6ebd089aae173d16136ab9d01f74c89089090c5a5
|
||||||
F test/in5.test b32ce7f4a93f44c5dee94af16886d922cc16ebe33c8e1765c73d4049d0f4b40f
|
F test/in5.test b32ce7f4a93f44c5dee94af16886d922cc16ebe33c8e1765c73d4049d0f4b40f
|
||||||
F test/in6.test 62d943a02f722948f4410ee0b53c3cb39acd7c41afb083df8d7004238fe90a20
|
F test/in6.test 62d943a02f722948f4410ee0b53c3cb39acd7c41afb083df8d7004238fe90a20
|
||||||
F test/incrblob.test c9b96afc292aeff43d6687bcb09b0280aa599822
|
F test/incrblob.test c9b96afc292aeff43d6687bcb09b0280aa599822
|
||||||
@@ -1376,7 +1376,7 @@ F test/spellfix4.test 51c7c26514ade169855c66bcf130bd5acfb4d7fd090cc624645ab275ae
|
|||||||
F test/sqldiff1.test 28cd737cf1b0078b1ec1bbf425e674c47785835e
|
F test/sqldiff1.test 28cd737cf1b0078b1ec1bbf425e674c47785835e
|
||||||
F test/sqllimits1.test 264f4b0f941800ba139d25e33ee919c5d95fea06dfbe8ac291d6811a30984ca5
|
F test/sqllimits1.test 264f4b0f941800ba139d25e33ee919c5d95fea06dfbe8ac291d6811a30984ca5
|
||||||
F test/sqllog.test 6af6cb0b09f4e44e1917e06ce85be7670302517a
|
F test/sqllog.test 6af6cb0b09f4e44e1917e06ce85be7670302517a
|
||||||
F test/stat.test f36f58c0acf5f280d1c427b94de41d9bf5877309bc1ea0f029a05f773df9fd22
|
F test/stat.test 423257dc36e5865fb9dd1d9051ac985763b6fba1daec134932f37772d5ed1e64
|
||||||
F test/statfault.test f525a7bf633e50afd027700e9a486090684b1ac1
|
F test/statfault.test f525a7bf633e50afd027700e9a486090684b1ac1
|
||||||
F test/stmt.test 54ed2cc0764bf3e48a058331813c3dbd19fc1d0827c3d8369914a5d8f564ec75
|
F test/stmt.test 54ed2cc0764bf3e48a058331813c3dbd19fc1d0827c3d8369914a5d8f564ec75
|
||||||
F test/stmtvtab1.test 6873dfb24f8e79cbb5b799b95c2e4349060eb7a3b811982749a84b359468e2d5
|
F test/stmtvtab1.test 6873dfb24f8e79cbb5b799b95c2e4349060eb7a3b811982749a84b359468e2d5
|
||||||
@@ -1853,7 +1853,7 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
|
|||||||
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
|
||||||
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
|
||||||
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
|
||||||
P 9ca906d24a2e88eddb2fd067783512b66cfc49dce1596d816a1c38a09d128218 9da48a5ca66dc67c8f7fb2d2471dac7ea696e35ecba5ddf65747d08d452436c1
|
P 26ef709a47294c512a70aecd37d29caecec2af261977d9fb2c4d78d09b12f77a 5b246b47aeadc25dbec0956e2d6edcd49fbe874a01734fdf15b770507648222d
|
||||||
R f1e8c2fdadd2c7adf9f3f606e5523e89
|
R 23b6db5bd743b43a08b2a78aa5bfe764
|
||||||
U drh
|
U drh
|
||||||
Z e63518841f864c4385c87d6e5e95c38e
|
Z df93cd8dd048f13be0eda50d95f72385
|
||||||
|
@@ -1 +1 @@
|
|||||||
26ef709a47294c512a70aecd37d29caecec2af261977d9fb2c4d78d09b12f77a
|
b878c30f03e895bbc5c4c99c0f727d49093bb78bdc275593cf4852148579ae69
|
@@ -7104,7 +7104,7 @@ static int pageFreeArray(
|
|||||||
}
|
}
|
||||||
pFree = pCell;
|
pFree = pCell;
|
||||||
szFree = sz;
|
szFree = sz;
|
||||||
if( NEVER(pFree+sz>pEnd) ) return 0;
|
if( pFree+sz>pEnd ) return 0;
|
||||||
}else{
|
}else{
|
||||||
pFree = pCell;
|
pFree = pCell;
|
||||||
szFree += sz;
|
szFree += sz;
|
||||||
|
10
src/dbstat.c
10
src/dbstat.c
@@ -237,18 +237,14 @@ static int statBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
|
|||||||
i = 0;
|
i = 0;
|
||||||
if( iSchema>=0 ){
|
if( iSchema>=0 ){
|
||||||
pIdxInfo->aConstraintUsage[iSchema].argvIndex = ++i;
|
pIdxInfo->aConstraintUsage[iSchema].argvIndex = ++i;
|
||||||
pIdxInfo->aConstraintUsage[iSchema].omit = 1;
|
|
||||||
pIdxInfo->idxNum |= 0x01;
|
pIdxInfo->idxNum |= 0x01;
|
||||||
}
|
}
|
||||||
if( iName>=0 ){
|
if( iName>=0 ){
|
||||||
pIdxInfo->aConstraintUsage[iName].argvIndex = ++i;
|
pIdxInfo->aConstraintUsage[iName].argvIndex = ++i;
|
||||||
pIdxInfo->aConstraintUsage[iName].omit = 1;
|
|
||||||
pIdxInfo->idxNum |= 0x02;
|
pIdxInfo->idxNum |= 0x02;
|
||||||
}
|
}
|
||||||
if( iAgg>=0 ){
|
if( iAgg>=0 ){
|
||||||
pIdxInfo->aConstraintUsage[iAgg].argvIndex = ++i;
|
pIdxInfo->aConstraintUsage[iAgg].argvIndex = ++i;
|
||||||
/* As of ticket [727074e2], this constraint is not omitted. */
|
|
||||||
/* pIdxInfo->aConstraintUsage[iAgg].omit = 1; */
|
|
||||||
pIdxInfo->idxNum |= 0x04;
|
pIdxInfo->idxNum |= 0x04;
|
||||||
}
|
}
|
||||||
pIdxInfo->estimatedCost = 1.0;
|
pIdxInfo->estimatedCost = 1.0;
|
||||||
@@ -704,9 +700,9 @@ static int statFilter(
|
|||||||
const char *zDbase = (const char*)sqlite3_value_text(argv[iArg++]);
|
const char *zDbase = (const char*)sqlite3_value_text(argv[iArg++]);
|
||||||
pCsr->iDb = sqlite3FindDbName(pTab->db, zDbase);
|
pCsr->iDb = sqlite3FindDbName(pTab->db, zDbase);
|
||||||
if( pCsr->iDb<0 ){
|
if( pCsr->iDb<0 ){
|
||||||
sqlite3_free(pCursor->pVtab->zErrMsg);
|
pCsr->iDb = 0;
|
||||||
pCursor->pVtab->zErrMsg = sqlite3_mprintf("no such schema: %s", zDbase);
|
pCsr->isEof = 1;
|
||||||
return pCursor->pVtab->zErrMsg ? SQLITE_ERROR : SQLITE_NOMEM_BKPT;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
pCsr->iDb = pTab->iDb;
|
pCsr->iDb = pTab->iDb;
|
||||||
|
22
src/vdbe.c
22
src/vdbe.c
@@ -4374,7 +4374,7 @@ seek_not_found:
|
|||||||
** Synopsis: seekHit=P2
|
** Synopsis: seekHit=P2
|
||||||
**
|
**
|
||||||
** Set the seekHit flag on cursor P1 to the value in P2.
|
** Set the seekHit flag on cursor P1 to the value in P2.
|
||||||
** The seekHit flag is used by the IfNoHope opcode.
|
* The seekHit flag is used by the IfNoHope opcode.
|
||||||
**
|
**
|
||||||
** P1 must be a valid b-tree cursor. P2 must be a boolean value,
|
** P1 must be a valid b-tree cursor. P2 must be a boolean value,
|
||||||
** either 0 or 1.
|
** either 0 or 1.
|
||||||
@@ -4389,6 +4389,20 @@ case OP_SeekHit: {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Opcode: IfNotOpen P1 P2 * * *
|
||||||
|
** Synopsis: if( !csr[P1] ) goto P2
|
||||||
|
**
|
||||||
|
** If cursor P1 is not open, jump to instruction P2. Otherwise, fall through.
|
||||||
|
*/
|
||||||
|
case OP_IfNotOpen: { /* jump */
|
||||||
|
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
|
||||||
|
VdbeBranchTaken(p->apCsr[pOp->p1]==0, 2);
|
||||||
|
if( !p->apCsr[pOp->p1] ){
|
||||||
|
goto jump_to_p2_and_check_for_interrupt;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
/* Opcode: Found P1 P2 P3 P4 *
|
/* Opcode: Found P1 P2 P3 P4 *
|
||||||
** Synopsis: key=r[P3@P4]
|
** Synopsis: key=r[P3@P4]
|
||||||
**
|
**
|
||||||
@@ -7914,6 +7928,12 @@ default: { /* This is really OP_Noop, OP_Explain */
|
|||||||
if( opProperty & OPFLG_OUT3 ){
|
if( opProperty & OPFLG_OUT3 ){
|
||||||
registerTrace(pOrigOp->p3, &aMem[pOrigOp->p3]);
|
registerTrace(pOrigOp->p3, &aMem[pOrigOp->p3]);
|
||||||
}
|
}
|
||||||
|
if( opProperty==0xff ){
|
||||||
|
/* Never happens. This code exists to avoid a harmless linkage
|
||||||
|
** warning aboud sqlite3VdbeRegisterDump() being defined but not
|
||||||
|
** used. */
|
||||||
|
sqlite3VdbeRegisterDump(p);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif /* SQLITE_DEBUG */
|
#endif /* SQLITE_DEBUG */
|
||||||
#endif /* NDEBUG */
|
#endif /* NDEBUG */
|
||||||
|
18
src/where.c
18
src/where.c
@@ -5273,11 +5273,27 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){
|
|||||||
if( pIn->eEndLoopOp!=OP_Noop ){
|
if( pIn->eEndLoopOp!=OP_Noop ){
|
||||||
if( pIn->nPrefix ){
|
if( pIn->nPrefix ){
|
||||||
assert( pLoop->wsFlags & WHERE_IN_EARLYOUT );
|
assert( pLoop->wsFlags & WHERE_IN_EARLYOUT );
|
||||||
|
if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ){
|
||||||
sqlite3VdbeAddOp4Int(v, OP_IfNoHope, pLevel->iIdxCur,
|
sqlite3VdbeAddOp4Int(v, OP_IfNoHope, pLevel->iIdxCur,
|
||||||
sqlite3VdbeCurrentAddr(v)+2,
|
sqlite3VdbeCurrentAddr(v)+2+(pLevel->iLeftJoin!=0),
|
||||||
pIn->iBase, pIn->nPrefix);
|
pIn->iBase, pIn->nPrefix);
|
||||||
VdbeCoverage(v);
|
VdbeCoverage(v);
|
||||||
}
|
}
|
||||||
|
if( pLevel->iLeftJoin ){
|
||||||
|
/* For LEFT JOIN queries, cursor pIn->iCur may not have been
|
||||||
|
** opened yet. This occurs for WHERE clauses such as
|
||||||
|
** "a = ? AND b IN (...)", where the index is on (a, b). If
|
||||||
|
** the RHS of the (a=?) is NULL, then the "b IN (...)" may
|
||||||
|
** never have been coded, but the body of the loop run to
|
||||||
|
** return the null-row. So, if the cursor is not open yet,
|
||||||
|
** jump over the OP_Next or OP_Prev instruction about to
|
||||||
|
** be coded. */
|
||||||
|
sqlite3VdbeAddOp2(v, OP_IfNotOpen, pIn->iCur,
|
||||||
|
sqlite3VdbeCurrentAddr(v) + 2
|
||||||
|
);
|
||||||
|
VdbeCoverage(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop);
|
sqlite3VdbeAddOp2(v, pIn->eEndLoopOp, pIn->iCur, pIn->addrInTop);
|
||||||
VdbeCoverage(v);
|
VdbeCoverage(v);
|
||||||
VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Prev);
|
VdbeCoverageIf(v, pIn->eEndLoopOp==OP_Prev);
|
||||||
|
@@ -473,10 +473,10 @@ struct WhereInfo {
|
|||||||
i8 nOBSat; /* Number of ORDER BY terms satisfied by indices */
|
i8 nOBSat; /* Number of ORDER BY terms satisfied by indices */
|
||||||
u8 eOnePass; /* ONEPASS_OFF, or _SINGLE, or _MULTI */
|
u8 eOnePass; /* ONEPASS_OFF, or _SINGLE, or _MULTI */
|
||||||
u8 eDistinct; /* One of the WHERE_DISTINCT_* values */
|
u8 eDistinct; /* One of the WHERE_DISTINCT_* values */
|
||||||
u8 bDeferredSeek : 1; /* Uses OP_DeferredSeek */
|
unsigned bDeferredSeek :1; /* Uses OP_DeferredSeek */
|
||||||
u8 untestedTerms : 1; /* Not all WHERE terms resolved by outer loop */
|
unsigned untestedTerms :1; /* Not all WHERE terms resolved by outer loop */
|
||||||
u8 bOrderedInnerLoop : 1; /* True if only the inner-most loop is ordered */
|
unsigned bOrderedInnerLoop:1;/* True if only the inner-most loop is ordered */
|
||||||
u8 sorted : 1; /* True if really sorted (not just grouped) */
|
unsigned sorted :1; /* True if really sorted (not just grouped) */
|
||||||
LogEst nRowOut; /* Estimated number of output rows */
|
LogEst nRowOut; /* Estimated number of output rows */
|
||||||
int iTop; /* The very beginning of the WHERE loop */
|
int iTop; /* The very beginning of the WHERE loop */
|
||||||
WhereLoop *pLoops; /* List of all WhereLoop objects */
|
WhereLoop *pLoops; /* List of all WhereLoop objects */
|
||||||
|
@@ -593,7 +593,7 @@ static int codeEqualityTerm(
|
|||||||
if( i==iEq ){
|
if( i==iEq ){
|
||||||
pIn->iCur = iTab;
|
pIn->iCur = iTab;
|
||||||
pIn->eEndLoopOp = bRev ? OP_Prev : OP_Next;
|
pIn->eEndLoopOp = bRev ? OP_Prev : OP_Next;
|
||||||
if( iEq>0 && (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 ){
|
if( iEq>0 ){
|
||||||
pIn->iBase = iReg - i;
|
pIn->iBase = iReg - i;
|
||||||
pIn->nPrefix = i;
|
pIn->nPrefix = i;
|
||||||
pLoop->wsFlags |= WHERE_IN_EARLYOUT;
|
pLoop->wsFlags |= WHERE_IN_EARLYOUT;
|
||||||
|
Binary file not shown.
@@ -13,6 +13,7 @@
|
|||||||
|
|
||||||
set testdir [file dirname $argv0]
|
set testdir [file dirname $argv0]
|
||||||
source $testdir/tester.tcl
|
source $testdir/tester.tcl
|
||||||
|
set testprefix in4
|
||||||
|
|
||||||
do_test in4-1.1 {
|
do_test in4-1.1 {
|
||||||
execsql {
|
execsql {
|
||||||
@@ -338,5 +339,30 @@ do_execsql_test in4-6.2-eqp {
|
|||||||
SELECT * FROM t6a, t6b WHERE a=3 AND c IN (b);
|
SELECT * FROM t6a, t6b WHERE a=3 AND c IN (b);
|
||||||
} {~/SCAN/}
|
} {~/SCAN/}
|
||||||
|
|
||||||
|
reset_db
|
||||||
|
do_execsql_test 7.0 {
|
||||||
|
CREATE TABLE t1(a, b, c);
|
||||||
|
CREATE TABLE t2(d, e);
|
||||||
|
CREATE INDEX t1bc ON t1(c, b);
|
||||||
|
INSERT INTO t2(e) VALUES(1);
|
||||||
|
INSERT INTO t1 VALUES(NULL, NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 7.1 {
|
||||||
|
SELECT * FROM t2 LEFT JOIN t1 ON c = d AND b IN (10,10,10);
|
||||||
|
} {{} 1 {} {} {}}
|
||||||
|
|
||||||
|
ifcapable rtree {
|
||||||
|
reset_db
|
||||||
|
do_execsql_test 7.2 {
|
||||||
|
CREATE VIRTUAL TABLE t1 USING rtree(a, b, c);
|
||||||
|
CREATE TABLE t2(d INTEGER, e INT);
|
||||||
|
INSERT INTO t2(e) VALUES(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
do_execsql_test 7.3 {
|
||||||
|
SELECT * FROM t2 LEFT JOIN t1 ON c IN (d) AND b IN (10,10,10);
|
||||||
|
} {{} 1 {} {} {}}
|
||||||
|
}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
@@ -298,14 +298,21 @@ do_catchsql_test 7.2.4 {
|
|||||||
SELECT * FROM x3;
|
SELECT * FROM x3;
|
||||||
} {1 {unrecognized token: "123corp"}}
|
} {1 {unrecognized token: "123corp"}}
|
||||||
|
|
||||||
|
|
||||||
do_execsql_test 8.1 {
|
do_execsql_test 8.1 {
|
||||||
CREATE VIRTUAL TABLE st4 USING dbstat;
|
CREATE VIRTUAL TABLE st4 USING dbstat;
|
||||||
}
|
}
|
||||||
do_execsql_test 8.2 {
|
do_execsql_test 8.2 {
|
||||||
SELECT * FROM st4 WHERE st4.aggregate = NULL
|
SELECT * FROM st4 WHERE st4.aggregate = NULL;
|
||||||
}
|
}
|
||||||
do_execsql_test 8.3 {
|
do_execsql_test 8.3 {
|
||||||
SELECT aggregate=1 FROM st4 WHERE aggregate = 5
|
SELECT aggregate=1 FROM st4 WHERE aggregate = 5
|
||||||
}
|
}
|
||||||
|
do_execsql_test 8.4 {
|
||||||
|
SELECT * FROM st4 WHERE name = NULL;
|
||||||
|
} {}
|
||||||
|
do_execsql_test 8.5 {
|
||||||
|
SELECT * FROM st4 WHERE schema = NULL;
|
||||||
|
} {}
|
||||||
|
|
||||||
finish_test
|
finish_test
|
||||||
|
Reference in New Issue
Block a user