Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Remove a recently added NEVER() macro from a branch that can be taken in obscure circumstances. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
2aa210030ae414782adab9291cc43a14 |
User & Date: | dan 2018-04-24 18:59:18.950 |
Context
2018-04-25
| ||
10:30 | Add an assert() to ensure that schema mutexes are held prior to accessing the DB_SchemaLoaded flag inside of sqlite3Init(). (check-in: d8b46290bb user: drh tags: trunk) | |
2018-04-24
| ||
19:21 | Merge latest trunk changes into this branch. (check-in: b27bd799ea user: dan tags: begin-concurrent) | |
18:59 | Remove a recently added NEVER() macro from a branch that can be taken in obscure circumstances. (check-in: 2aa210030a user: dan tags: trunk) | |
18:53 | Fix a problem with processing "LEFT JOIN tbl ON tbl.a = ? AND (tbl.b=? OR tbl.c=?)" in cases where there are indexes on both tbl(a, b) and tbl(a, c). (check-in: ce35e39c5c user: dan tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
5539 5540 5541 5542 5543 5544 5545 | /* Sometimes the code for a subquery will be generated more than ** once, if the subquery is part of the WHERE clause in a LEFT JOIN, ** for example. In that case, do not regenerate the code to manifest ** a view or the co-routine to implement a view. The first instance ** is sufficient, though the subroutine to manifest the view does need ** to be invoked again. */ | | | 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 | /* Sometimes the code for a subquery will be generated more than ** once, if the subquery is part of the WHERE clause in a LEFT JOIN, ** for example. In that case, do not regenerate the code to manifest ** a view or the co-routine to implement a view. The first instance ** is sufficient, though the subroutine to manifest the view does need ** to be invoked again. */ if( pItem->addrFillSub ){ if( pItem->fg.viaCoroutine==0 ){ /* The subroutine that manifests the view might be a one-time routine, ** or it might need to be rerun on each iteration because it ** encodes a correlated subquery. */ testcase( sqlite3VdbeGetOp(v, pItem->addrFillSub)->opcode==OP_Once ); sqlite3VdbeAddOp2(v, OP_Gosub, pItem->regReturn, pItem->addrFillSub); } |
︙ | ︙ |
Changes to test/where.test.
︙ | ︙ | |||
1387 1388 1389 1390 1391 1392 1393 1394 1395 | CREATE TABLE t202(y, z); INSERT INTO t201 VALUES('key'); INSERT INTO t202 VALUES('key', -1); CREATE INDEX t202i ON t202(y, ifnull(z, 0)); SELECT count(*) FROM t201 LEFT JOIN t202 ON (x=y) WHERE ifnull(z, 0) >=0; } {0} finish_test | > > > > > > > > > > > > > > > > > > > > > | 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 | CREATE TABLE t202(y, z); INSERT INTO t201 VALUES('key'); INSERT INTO t202 VALUES('key', -1); CREATE INDEX t202i ON t202(y, ifnull(z, 0)); SELECT count(*) FROM t201 LEFT JOIN t202 ON (x=y) WHERE ifnull(z, 0) >=0; } {0} do_execsql_test where-21.0 { CREATE TABLE t12(a, b, c); CREATE TABLE t13(x); CREATE INDEX t12ab ON t12(b, a); CREATE INDEX t12ac ON t12(c, a); INSERT INTO t12 VALUES(4, 0, 1); INSERT INTO t12 VALUES(4, 1, 0); INSERT INTO t12 VALUES(5, 0, 1); INSERT INTO t12 VALUES(5, 1, 0); INSERT INTO t13 VALUES(1), (2), (3), (4); } do_execsql_test where-21.1 { SELECT * FROM t12 WHERE a = (SELECT * FROM (SELECT count(*) FROM t13 LIMIT 5) ORDER BY 1 LIMIT 10) AND (b=1 OR c=1); } { 4 1 0 4 0 1 } finish_test |