Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Avoid omitting the rhs of FULL JOINs in cases where it is only correct to omit the rhs of a LEFT JOIN. Fix for the problem reported by forum post 5610c17c3d. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
f23a429d4153518d37387e121f22a30b |
User & Date: | dan 2022-06-17 11:39:24 |
Original Comment: | Avoid omitting the rhs of FULL JOINs in cases where it is only correct to omit the rhs of a LEFT JOIN. |
References
2022-06-17
| ||
16:09 | Improve query-invariants to the point that it would have discovered the [f23a429d4153518d] bug if that bug had not already been fixed. (check-in: 2a7251ed user: drh tags: query-invariants) | |
Context
2022-06-17
| ||
12:25 | Fix the new --query-invariants option on fuzzcheck so that it does not use an unprotected sqlite3_value object as an argument to sqlite3_value_int64(). (check-in: d9f82015 user: drh tags: trunk) | |
11:39 | Avoid omitting the rhs of FULL JOINs in cases where it is only correct to omit the rhs of a LEFT JOIN. Fix for the problem reported by forum post 5610c17c3d. (check-in: f23a429d user: dan tags: trunk) | |
2022-06-16
| ||
20:29 | Minor fix to the query invariant testing logic of fuzzcheck. (check-in: 447e62a0 user: drh tags: trunk) | |
Changes
Changes to src/where.c.
︙ | ︙ | |||
5242 5243 5244 5245 5246 5247 5248 | } for(i=pWInfo->nLevel-1; i>=1; i--){ WhereTerm *pTerm, *pEnd; SrcItem *pItem; WhereLoop *pLoop; pLoop = pWInfo->a[i].pWLoop; pItem = &pWInfo->pTabList->a[pLoop->iTab]; | | | 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 | } for(i=pWInfo->nLevel-1; i>=1; i--){ WhereTerm *pTerm, *pEnd; SrcItem *pItem; WhereLoop *pLoop; pLoop = pWInfo->a[i].pWLoop; pItem = &pWInfo->pTabList->a[pLoop->iTab]; if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ) continue; if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT)==0 && (pLoop->wsFlags & WHERE_ONEROW)==0 ){ continue; } if( (tabUsed & pLoop->maskSelf)!=0 ) continue; pEnd = pWInfo->sWC.a + pWInfo->sWC.nTerm; |
︙ | ︙ |
Added test/joinH.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 | # 2022 May 17 # # 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. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix joinH do_execsql_test 1.0 { CREATE TABLE t1(a INT); CREATE TABLE t2(b INT); INSERT INTO t2(b) VALUES(NULL); } db nullvalue NULL do_execsql_test 1.1 { SELECT DISTINCT a FROM t1 FULL JOIN t2 ON true WHERE (b ISNULL); } {NULL} do_execsql_test 1.2 { SELECT a FROM t1 FULL JOIN t2 ON true; } {NULL} do_execsql_test 1.3 { SELECT a FROM t1 FULL JOIN t2 ON true WHERE (b ISNULL); } {NULL} do_execsql_test 1.4 { SELECT DISTINCT a FROM t1 FULL JOIN t2 ON true; } {NULL} #----------------------------------------------------------- reset_db do_execsql_test 2.0 { CREATE TABLE r3(x); CREATE TABLE r4(y INTEGER PRIMARY KEY); INSERT INTO r4 VALUES(55); } do_execsql_test 2.1 { SELECT 'value!' FROM r3 FULL JOIN r4 ON (y=x); } {value!} do_execsql_test 2.2 { SELECT 'value!' FROM r3 FULL JOIN r4 ON (y=x) WHERE +y=55; } {value!} finish_test |