blob: e8b36deba24d65ece1b27d0ebdbe534cb884d30f (
plain)
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
|
This file is part of MXE.
See index.html for further information.
From ea6e95e804cfff4d79cf1bee8275a30611e336b1 Mon Sep 17 00:00:00 2001
From: Mark Brand <mabrand@mabrand.nl>
Date: Sat, 22 Aug 2015 10:58:38 +0200
Subject: [PATCH] backport fix for severe LEFT JOIN bug
Do not apply the WHERE-clause pushdown optimization to terms that
originate in the ON or USING clause of a LEFT JOIN.
taken from https://www.sqlite.org/src/info/351bc22fa9b5a2e5
diff --git a/sqlite3.c b/sqlite3.c
index 1344938..a8a1a83 100644
--- a/sqlite3.c
+++ b/sqlite3.c
@@ -111380,6 +111380,9 @@ static int flattenSubquery(
** enforces this restriction since this routine does not have enough
** information to know.)
**
+** (5) The WHERE clause expression originates in the ON or USING clause
+** of a LEFT JOIN.
+**
** Return 0 if no changes are made and non-zero if one or more WHERE clause
** terms are duplicated into the subquery.
*/
@@ -111402,6 +111405,7 @@ static int pushDownWhereTerms(
nChng += pushDownWhereTerms(db, pSubq, pWhere->pRight, iCursor);
pWhere = pWhere->pLeft;
}
+ if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction 5 */
if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){
nChng++;
while( pSubq ){
--
2.1.4
|