Skip to content

Commit 982490f

Browse files
committed
Add some more expression compilation tests, fix <> string for OGR
1 parent 35d0dd3 commit 982490f

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/core/qgssqlexpressioncompiler.cpp

+8
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ QgsSqlExpressionCompiler::Result QgsSqlExpressionCompiler::compileNode( const Qg
9494

9595
QString op;
9696
bool partialCompilation = false;
97+
bool failOnPartialNode = false;
9798
switch ( n->op() )
9899
{
99100
case QgsExpression::boEQ:
@@ -129,6 +130,7 @@ QgsSqlExpressionCompiler::Result QgsSqlExpressionCompiler::compileNode( const Qg
129130

130131
case QgsExpression::boIsNot:
131132
op = "IS NOT";
133+
failOnPartialNode = mFlags.testFlag( CaseInsensitiveStringMatch );
132134
break;
133135

134136
case QgsExpression::boLike:
@@ -146,9 +148,11 @@ QgsSqlExpressionCompiler::Result QgsSqlExpressionCompiler::compileNode( const Qg
146148
case QgsExpression::boNotLike:
147149
op = "NOT LIKE";
148150
partialCompilation = mFlags.testFlag( LikeIsCaseInsensitive );
151+
failOnPartialNode = mFlags.testFlag( CaseInsensitiveStringMatch );
149152
break;
150153

151154
case QgsExpression::boNotILike:
155+
failOnPartialNode = mFlags.testFlag( CaseInsensitiveStringMatch );
152156
if ( mFlags.testFlag( LikeIsCaseInsensitive ) )
153157
op = "NOT LIKE";
154158
else
@@ -164,6 +168,7 @@ QgsSqlExpressionCompiler::Result QgsSqlExpressionCompiler::compileNode( const Qg
164168
break;
165169

166170
case QgsExpression::boNE:
171+
failOnPartialNode = mFlags.testFlag( CaseInsensitiveStringMatch );
167172
op = "<>";
168173
break;
169174

@@ -211,6 +216,9 @@ QgsSqlExpressionCompiler::Result QgsSqlExpressionCompiler::compileNode( const Qg
211216
QString right;
212217
Result rr( compileNode( n->opRight(), right ) );
213218

219+
if ( failOnPartialNode && ( lr == Partial || rr == Partial ) )
220+
return Fail;
221+
214222
result = left + ' ' + op + ' ' + right;
215223
if ( lr == Complete && rr == Complete )
216224
return ( partialCompilation ? Partial : Complete );

tests/src/python/providertestbase.py

+11
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ def runGetFeatureTests(self, provider):
4141
self.assert_query(provider, '"name" NOT ILIKE \'QGIS\'', [1, 2, 3, 4])
4242
self.assert_query(provider, '"name" NOT ILIKE \'pEAR\'', [1, 2, 4])
4343
self.assert_query(provider, 'name = \'Apple\'', [2])
44+
self.assert_query(provider, 'name <> \'Apple\'', [1, 3, 4])
4445
self.assert_query(provider, 'name = \'apple\'', [])
46+
self.assert_query(provider, '"name" <> \'apple\'', [1, 2, 3, 4])
47+
self.assert_query(provider, '(name = \'Apple\') is not null', [1, 2, 3, 4])
4548
self.assert_query(provider, 'name LIKE \'Apple\'', [2])
4649
self.assert_query(provider, 'name LIKE \'aPple\'', [])
4750
self.assert_query(provider, 'name ILIKE \'aPple\'', [2])
@@ -84,6 +87,14 @@ def runGetFeatureTests(self, provider):
8487
self.assert_query(provider, 'not true', [])
8588
self.assert_query(provider, 'not false', [1, 2, 3, 4, 5])
8689
self.assert_query(provider, 'not null', [])
90+
#not
91+
self.assert_query(provider, 'not name = \'Apple\'', [1, 3, 4])
92+
self.assert_query(provider, 'not name IS NULL', [1, 2, 3, 4])
93+
self.assert_query(provider, 'not name = \'Apple\' or name = \'Apple\'', [1, 2, 3, 4])
94+
self.assert_query(provider, 'not name = \'Apple\' or not name = \'Apple\'', [1, 3, 4])
95+
self.assert_query(provider, 'not name = \'Apple\' and pk = 4', [4])
96+
self.assert_query(provider, 'not name = \'Apple\' and not pk = 4', [1, 3])
97+
self.assert_query(provider, 'not pk IN (1, 2, 4, 8)', [3, 5])
8798

8899
def testGetFeaturesUncompiled(self):
89100
try:

0 commit comments

Comments
 (0)