Remove != '' filter from queries

This effectively reverts dc7d8d08 (changes were moved to different files,
so it is more transparent to do this in a new commit).

Fixes issues with negative filters #358 #380 #656

TODO: Correct filtering on prefixed/postfixed fields, like the original commit was supposed to do, but without side effects that break normal non-prefixed fields.
This commit is contained in:
Anna Dabrowska
2023-12-11 16:01:58 +01:00
parent 8708bc53d1
commit 521b204a41
2 changed files with 13 additions and 18 deletions

View File

@ -24,7 +24,7 @@ class TextTest extends StructTest
'', // postfix
'=', // comp
'val', // value
'((T.col != \'\' AND T.col = ?))', // expect sql
'(T.col = ?)', // expect sql
['val'], // expect opts
],
[
@ -32,7 +32,7 @@ class TextTest extends StructTest
'', // postfix
'=', // comp
'val', // value
'((T.col != \'\' AND ? || T.col = ?))', // expect sql
'(? || T.col = ?)', // expect sql
['before', 'val'], // expect opts
],
[
@ -40,7 +40,7 @@ class TextTest extends StructTest
'after', // postfix
'=', // comp
'val', // value
'((T.col != \'\' AND T.col || ? = ?))', // expect sql
'(T.col || ? = ?)', // expect sql
['after', 'val'], // expect opts
],
[
@ -48,7 +48,7 @@ class TextTest extends StructTest
'after', // postfix
'=', // comp
'val', // value
'((T.col != \'\' AND ? || T.col || ? = ?))', // expect sql
'(? || T.col || ? = ?)', // expect sql
['before', 'after', 'val'], // expect opts
],
// LIKE
@ -57,7 +57,7 @@ class TextTest extends StructTest
'', // postfix
'LIKE', // comp
'%val%', // value
'((T.col != \'\' AND T.col LIKE ?))', // expect sql
'(T.col LIKE ?)', // expect sql
['%val%'], // expect opts
],
[
@ -65,7 +65,7 @@ class TextTest extends StructTest
'', // postfix
'LIKE', // comp
'%val%', // value
'((T.col != \'\' AND ? || T.col LIKE ?))', // expect sql
'(? || T.col LIKE ?)', // expect sql
['before', '%val%'], // expect opts
],
[
@ -73,7 +73,7 @@ class TextTest extends StructTest
'after', // postfix
'LIKE', // comp
'%val%', // value
'((T.col != \'\' AND T.col || ? LIKE ?))', // expect sql
'(T.col || ? LIKE ?)', // expect sql
['after', '%val%'], // expect opts
],
[
@ -81,7 +81,7 @@ class TextTest extends StructTest
'after', // postfix
'LIKE', // comp
'%val%', // value
'((T.col != \'\' AND ? || T.col || ? LIKE ?))', // expect sql
'(? || T.col || ? LIKE ?)', // expect sql
['before', 'after', '%val%'], // expect opts
],
// NOT LIKE
@ -90,7 +90,7 @@ class TextTest extends StructTest
'', // postfix
'NOT LIKE', // comp
'%val%', // value
'((T.col != \'\' AND T.col NOT LIKE ?))', // expect sql
'(T.col NOT LIKE ?)', // expect sql
['%val%'], // expect opts
],
[
@ -98,7 +98,7 @@ class TextTest extends StructTest
'', // postfix
'NOT LIKE', // comp
'%val%', // value
'((T.col != \'\' AND ? || T.col NOT LIKE ?))', // expect sql
'(? || T.col NOT LIKE ?)', // expect sql
['before', '%val%'], // expect opts
],
[
@ -106,7 +106,7 @@ class TextTest extends StructTest
'after', // postfix
'NOT LIKE', // comp
'%val%', // value
'((T.col != \'\' AND T.col || ? NOT LIKE ?))', // expect sql
'(T.col || ? NOT LIKE ?)', // expect sql
['after', '%val%'], // expect opts
],
[
@ -114,7 +114,7 @@ class TextTest extends StructTest
'after', // postfix
'NOT LIKE', // comp
'%val%', // value
'((T.col != \'\' AND ? || T.col || ? NOT LIKE ?))', // expect sql
'(? || T.col || ? NOT LIKE ?)', // expect sql
['before', 'after', '%val%'], // expect opts
],
@ -124,7 +124,7 @@ class TextTest extends StructTest
'after', // postfix
'NOT LIKE', // comp
['%val1%', '%val2%'], // multiple values
'((T.col != \'\' AND (? || T.col || ? NOT LIKE ? OR ? || T.col || ? NOT LIKE ?)))', // expect sql
'((? || T.col || ? NOT LIKE ? OR ? || T.col || ? NOT LIKE ?))', // expect sql
['before', 'after', '%val1%', 'before', 'after', '%val2%',], // expect opts
],
];

View File

@ -26,11 +26,6 @@ trait TraitFilterPrefix
*/
public function filter(QueryBuilderWhere $add, $tablealias, $colname, $comp, $value, $op)
{
$add = $add->where($op); // open a subgroup
$add->where('AND', "$tablealias.$colname != ''");
// make sure the field isn't empty
$op = 'AND';
/** @var QueryBuilderWhere $add Where additionional queries are added to */
if (is_array($value)) {
$add = $add->where($op); // sub where group