Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add a missing test that prevented double LEFT JOINs with transitive constraints from working correctly. Fix for ticket [868145d012]. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
72919ec34f0d663d551c1070285ad93b |
User & Date: | drh 2013-07-01 17:27:19.953 |
Context
2013-07-01
| ||
20:02 | Add a query planner test case submitted by Elan Feingold and based on the Plex project. (check-in: 3d49c593dc user: drh tags: trunk) | |
17:27 | Add a missing test that prevented double LEFT JOINs with transitive constraints from working correctly. Fix for ticket [868145d012]. (check-in: 72919ec34f user: drh tags: trunk) | |
11:05 | Further minor comment corrections and enhancements in where.c. (check-in: 0d68d4d018 user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 | for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ Expr *pE; WhereTerm *pAlt; Expr sEq; if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; if( pTerm->eOperator!=(WO_EQUIV|WO_EQ) ) continue; if( pTerm->leftCursor!=iCur ) continue; pE = pTerm->pExpr; assert( !ExprHasProperty(pE, EP_FromJoin) ); assert( (pTerm->prereqRight & newNotReady)!=0 ); pAlt = findTerm(pWC, iCur, pTerm->u.leftColumn, notReady, WO_EQ|WO_IN, 0); if( pAlt==0 ) continue; if( pAlt->wtFlags & (TERM_CODED) ) continue; testcase( pAlt->eOperator & WO_EQ ); | > | 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 | for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){ Expr *pE; WhereTerm *pAlt; Expr sEq; if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue; if( pTerm->eOperator!=(WO_EQUIV|WO_EQ) ) continue; if( pTerm->leftCursor!=iCur ) continue; if( pLevel->iLeftJoin ) continue; pE = pTerm->pExpr; assert( !ExprHasProperty(pE, EP_FromJoin) ); assert( (pTerm->prereqRight & newNotReady)!=0 ); pAlt = findTerm(pWC, iCur, pTerm->u.leftColumn, notReady, WO_EQ|WO_IN, 0); if( pAlt==0 ) continue; if( pAlt->wtFlags & (TERM_CODED) ) continue; testcase( pAlt->eOperator & WO_EQ ); |
︙ | ︙ |
Added test/tkt-868145d012.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | # 2013 March 05 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements regression tests for SQLite library. Specifically, # it tests that ticket [868145d012a1] is fixed. # set testdir [file dirname $argv0] source $testdir/tester.tcl do_execsql_test tkt-868145d012.100 { CREATE TABLE p ( id INTEGER PRIMARY KEY, uid VARCHAR(36), t INTEGER ); CREATE TABLE pa ( id INTEGER PRIMARY KEY, a_uid VARCHAR(36) ); CREATE TABLE a ( id INTEGER PRIMARY KEY, uid VARCHAR(36), t INTEGER ); INSERT INTO pa VALUES(1,'1234'); INSERT INTO pa VALUES(2,'2345'); INSERT INTO p VALUES(3,'1234',97); INSERT INTO p VALUES(4,'1234',98); INSERT INTO a VALUES(5,'1234',98); INSERT INTO a VALUES(6,'1234',99); } {} do_execsql_test tkt-868145d012.110 { SELECT DISTINCT pa.id, p.id, a.id FROM pa LEFT JOIN p ON p.uid='1234' LEFT JOIN a ON a.uid=pa.a_uid WHERE a.t=p.t ; } {1 4 5} do_execsql_test tkt-868145d012.120 { SELECT DISTINCT pa.id, p.id, a.id FROM pa LEFT JOIN p ON p.uid='1234' LEFT JOIN a ON a.uid=pa.a_uid AND a.t=p.t ORDER BY 1, 2, 3 ; } {1 3 {} 1 4 5 2 3 {} 2 4 {}} finish_test |