Skip to content

Commit

Permalink
multiple filtergroup fix (#123)
Browse files Browse the repository at this point in the history
* multiple filtergroup fix

Signed-off-by: Piotr PG Gajek <[email protected]>

* unit test update

Signed-off-by: Piotr PG Gajek <[email protected]>

---------

Signed-off-by: Piotr PG Gajek <[email protected]>
  • Loading branch information
pgajek2 authored May 13, 2024
1 parent 98b45ce commit 6094715
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 1 deletion.
2 changes: 1 addition & 1 deletion force-app/main/default/classes/SOQL.cls
Original file line number Diff line number Diff line change
Expand Up @@ -1305,7 +1305,7 @@ public virtual inherited sharing class SOQL implements Queryable {
String orderWithSpecialCharacters = getConditionsLogic();

for (Integer i = 0; i < queryConditions.size(); i++) {
orderWithSpecialCharacters = orderWithSpecialCharacters.replace(String.valueOf(i + 1), '{' + i + '}');
orderWithSpecialCharacters = orderWithSpecialCharacters.replaceFirst(String.valueOf(i + 1), '{' + i + '}');
}

return orderWithSpecialCharacters; // e.g ({0} AND ({1} AND {2}))
Expand Down
37 changes: 37 additions & 0 deletions force-app/main/default/classes/SOQL_Test.cls
Original file line number Diff line number Diff line change
Expand Up @@ -1522,6 +1522,43 @@ private class SOQL_Test {
Assert.areEqual('Krakow', binding.get('v3'));
}

@IsTest
static void multipleFiltersGroups() {
// Test
SOQL builder = SOQL.of(Account.SObjectType)
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('1')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('2')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('3')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('4')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('5')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('6')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('7')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('8')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('9')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('10')))
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('11')));

// Verify
String soql = builder.toString();
Assert.areEqual(
'SELECT Id FROM Account WHERE (Name LIKE :v1) AND (Name LIKE :v2) AND (Name LIKE :v3) AND (Name LIKE :v4) AND (Name LIKE :v5) AND (Name LIKE :v6) AND (Name LIKE :v7) AND (Name LIKE :v8) AND (Name LIKE :v9) AND (Name LIKE :v10) AND (Name LIKE :v11)',
soql
);

Map<String, Object> binding = builder.binding();
Assert.areEqual('%1%', binding.get('v1'));
Assert.areEqual('%2%', binding.get('v2'));
Assert.areEqual('%3%', binding.get('v3'));
Assert.areEqual('%4%', binding.get('v4'));
Assert.areEqual('%5%', binding.get('v5'));
Assert.areEqual('%6%', binding.get('v6'));
Assert.areEqual('%7%', binding.get('v7'));
Assert.areEqual('%8%', binding.get('v8'));
Assert.areEqual('%9%', binding.get('v9'));
Assert.areEqual('%10%', binding.get('v10'));
Assert.areEqual('%11%', binding.get('v11'));
}

@IsTest
static void anyConditionMatchingForInnerGroup() {
// Test
Expand Down

0 comments on commit 6094715

Please sign in to comment.