Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | When handling ORDER BY expressions, do not assume all values of an indexed expressions are distinct. Fix for [4766f444]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
aebe429e52ffef026cb0803fb164339d |
User & Date: | dan 2016-10-10 14:34:00.108 |
References
2016-10-10
| ||
14:38 | • Closed ticket [4766f44486]: ORDER BY handling with indexes on expressions plus 6 other changes (artifact: 498d1d7a4d user: dan) | |
Context
2016-10-10
| ||
14:48 | Remove a stray line from session4.test causing a memory leak. No changes to SQLite code. (check-in: 6624c4964b user: dan tags: trunk) | |
14:34 | When handling ORDER BY expressions, do not assume all values of an indexed expressions are distinct. Fix for [4766f444]. (check-in: aebe429e52 user: dan tags: trunk) | |
13:29 | Make sure indexes on expressions skip over initial NULL values in the index. Fix for ticket [4baa464912129477f3c9] (check-in: 71797ba431 user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
3665 3666 3667 3668 3669 3670 3671 | }else{ rev = revIdx ^ pOrderBy->a[i].sortOrder; if( rev ) *pRevMask |= MASKBIT(iLoop); revSet = 1; } } if( isMatch ){ | | | 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 | }else{ rev = revIdx ^ pOrderBy->a[i].sortOrder; if( rev ) *pRevMask |= MASKBIT(iLoop); revSet = 1; } } if( isMatch ){ if( iColumn==XN_ROWID ){ testcase( distinctColumns==0 ); distinctColumns = 1; } obSat |= MASKBIT(i); }else{ /* No match found */ if( j==0 || j<nKeyCol ){ |
︙ | ︙ |
Changes to test/indexexpr1.test.
︙ | ︙ | |||
335 336 337 338 339 340 341 342 343 | SELECT '1:', typeof(a), a FROM t1 WHERE a<10; SELECT '2:', typeof(a), a FROM t1 WHERE a+0<10; CREATE INDEX t1x1 ON t1(a); CREATE INDEX t1x2 ON t1(a+0); SELECT '3:', typeof(a), a FROM t1 WHERE a<10; SELECT '4:', typeof(a), a FROM t1 WHERE a+0<10; } {1: integer 1 2: integer 1 3: integer 1 4: integer 1} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | SELECT '1:', typeof(a), a FROM t1 WHERE a<10; SELECT '2:', typeof(a), a FROM t1 WHERE a+0<10; CREATE INDEX t1x1 ON t1(a); CREATE INDEX t1x2 ON t1(a+0); SELECT '3:', typeof(a), a FROM t1 WHERE a<10; SELECT '4:', typeof(a), a FROM t1 WHERE a+0<10; } {1: integer 1 2: integer 1 3: integer 1 4: integer 1} do_execsql_test indexexpr1-1200 { CREATE TABLE t10(a int, b int, c int, d int); INSERT INTO t10(a, b, c, d) VALUES(0, 0, 2, 2); INSERT INTO t10(a, b, c, d) VALUES(0, 0, 0, 0); INSERT INTO t10(a, b, c, d) VALUES(0, 0, 1, 1); INSERT INTO t10(a, b, c, d) VALUES(1, 1, 1, 1); INSERT INTO t10(a, b, c, d) VALUES(1, 1, 0, 0); INSERT INTO t10(a, b, c, d) VALUES(2, 2, 0, 0); SELECT a+b, c+d FROM t10 ORDER BY a+b, c+d; } { 0 0 0 2 0 4 2 0 2 2 4 0 } do_execsql_test indexexpr1-1200.1 { CREATE INDEX t10_ab ON t10(a+b); } do_execsql_test indexexpr1-1200.2 { SELECT a+b, c+d FROM t10 ORDER BY a+b, c+d; } { 0 0 0 2 0 4 2 0 2 2 4 0 } do_execsql_test indexexpr1-1200.3 { CREATE INDEX t10_abcd ON t10(a+b,c+d); } do_execsql_test indexexpr1-1200.4 { SELECT a+b, c+d FROM t10 ORDER BY a+b, c+d; } { 0 0 0 2 0 4 2 0 2 2 4 0 } finish_test |