Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Skip-ahead does not always work. So we still have to check for redundancy. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | skip-ahead-distinct |
Files: | files | file ages | folders |
SHA1: |
db5a2364ebfbb6e54e0141ca57ccabdc |
User & Date: | drh 2016-04-15 16:17:31.207 |
Context
2016-04-15
| ||
16:27 | Skip-ahead is now just an optimization. If it gets confused, it falls back to an incremental scan with redundancy elimination. (check-in: 6fac0b9212 user: drh tags: skip-ahead-distinct) | |
16:17 | Skip-ahead does not always work. So we still have to check for redundancy. (check-in: db5a2364eb user: drh tags: skip-ahead-distinct) | |
15:54 | Fixes to the skip-ahead distinct logic. More issues remain. (check-in: 45a70b2bb8 user: drh tags: skip-ahead-distinct) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
742 743 744 745 746 747 748 | /* If the DISTINCT keyword was present on the SELECT statement ** and this row has been seen before, then do not make this row ** part of the result. */ if( hasDistinct ){ switch( pDistinct->eTnctType ){ case WHERE_DISTINCT_ORDERED: { | | | 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 | /* If the DISTINCT keyword was present on the SELECT statement ** and this row has been seen before, then do not make this row ** part of the result. */ if( hasDistinct ){ switch( pDistinct->eTnctType ){ case WHERE_DISTINCT_ORDERED: { #if 1 VdbeOp *pOp; /* No longer required OpenEphemeral instr. */ int iJump; /* Jump destination */ int regPrev; /* Previous row content */ /* Allocate space for the previous row */ regPrev = pParse->nMem+1; pParse->nMem += nResultCol; |
︙ | ︙ |
Changes to test/distinct2.test.
︙ | ︙ | |||
73 74 75 76 77 78 79 80 81 | CREATE TABLE t5(a INT, b INT); CREATE UNIQUE INDEX t5x ON t5(a+b); INSERT INTO t5(a,b) VALUES(0,0),(1,0),(1,1),(0,3); CREATE TEMP TABLE out AS SELECT DISTINCT a+b FROM t5; SELECT * FROM out ORDER BY 1; } {0 1 2 3} finish_test | > > > > > > > | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | CREATE TABLE t5(a INT, b INT); CREATE UNIQUE INDEX t5x ON t5(a+b); INSERT INTO t5(a,b) VALUES(0,0),(1,0),(1,1),(0,3); CREATE TEMP TABLE out AS SELECT DISTINCT a+b FROM t5; SELECT * FROM out ORDER BY 1; } {0 1 2 3} do_execsql_test 600 { CREATE TABLE t6a(x INTEGER PRIMARY KEY); INSERT INTO t6a VALUES(1); CREATE TABLE t6b(y INTEGER PRIMARY KEY); INSERT INTO t6b VALUES(2),(3); SELECT DISTINCT x, x FROM t6a, t6b; } {1 1} finish_test |