Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix the OR-optimization so that it always ignores subplans that do not use an index. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
66f92a16866e5825363636b9cc4b8f9b |
User & Date: | drh 2015-08-27 23:18:55.309 |
Context
2015-08-28
| ||
03:33 | Enhance the json_insert(), json_replace(), and json_set() functions with the ability to add JSON instead of text if the argument is text and if the PATH begins with '$$' instead of just '$'. (check-in: 44f103d886 user: drh tags: trunk) | |
02:12 | Merge trunk enhancements into the apple-osx branch. Most tests works, but there are yet a few issues to be resolved. (check-in: da8646582a user: drh tags: apple-osx) | |
2015-08-27
| ||
23:42 | Fix the OR-optimization so that it always ignores subplans that do not use an index. (check-in: cf452028d1 user: drh tags: index-expr) | |
23:18 | Fix the OR-optimization so that it always ignores subplans that do not use an index. (check-in: 66f92a1686 user: drh tags: trunk) | |
2015-08-26
| ||
21:08 | Reduce the size of the WhereScan object by 24 bytes while also clarifying its operation. (check-in: cbc3c9a8bf user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
1919 1920 1921 1922 1923 1924 1925 1926 | WhereInfo *pWInfo = pBuilder->pWInfo; sqlite3 *db = pWInfo->pParse->db; /* If pBuilder->pOrSet is defined, then only keep track of the costs ** and prereqs. */ if( pBuilder->pOrSet!=0 ){ #if WHERETRACE_ENABLED | > | | | | | | | > | 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 | WhereInfo *pWInfo = pBuilder->pWInfo; sqlite3 *db = pWInfo->pParse->db; /* If pBuilder->pOrSet is defined, then only keep track of the costs ** and prereqs. */ if( pBuilder->pOrSet!=0 ){ if( pTemplate->nLTerm ){ #if WHERETRACE_ENABLED u16 n = pBuilder->pOrSet->n; int x = #endif whereOrInsert(pBuilder->pOrSet, pTemplate->prereq, pTemplate->rRun, pTemplate->nOut); #if WHERETRACE_ENABLED /* 0x8 */ if( sqlite3WhereTrace & 0x8 ){ sqlite3DebugPrintf(x?" or-%d: ":" or-X: ", n); whereLoopPrint(pTemplate, pBuilder->pWC); } #endif } return SQLITE_OK; } /* Look for an existing WhereLoop to replace with pTemplate */ whereLoopAdjustCost(pWInfo->pLoops, pTemplate); ppPrev = whereLoopFindLesser(&pWInfo->pLoops, pTemplate); |
︙ | ︙ |
Changes to test/where2.test.
︙ | ︙ | |||
318 319 320 321 322 323 324 | do_test where2-6.3 { queryplan { SELECT * FROM t1 WHERE w=99 OR w=100 OR 6=+w ORDER BY +w } } {6 2 49 51 99 6 10000 10006 100 6 10201 10207 sort t1 *} do_test where2-6.4 { queryplan { | | | > > > > > | 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 | do_test where2-6.3 { queryplan { SELECT * FROM t1 WHERE w=99 OR w=100 OR 6=+w ORDER BY +w } } {6 2 49 51 99 6 10000 10006 100 6 10201 10207 sort t1 *} do_test where2-6.4 { queryplan { SELECT *, '|' FROM t1 WHERE w=99 OR +w=100 OR 6=w ORDER BY +w } } {6 2 49 51 | 99 6 10000 10006 | 100 6 10201 10207 | sort t1 *} do_test where2-6.5 { queryplan { SELECT *, '|' FROM t1 WHERE w=99 OR y=10201 OR 6=w ORDER BY +w } } {6 2 49 51 | 99 6 10000 10006 | 100 6 10201 10207 | sort t1 *} set ::idx {} ifcapable subquery {set ::idx i1zyx} do_test where2-6.5 { queryplan { SELECT b.* FROM t1 a, t1 b WHERE a.w=1 AND (a.y=b.z OR b.z=10) |
︙ | ︙ |