Skip to content

Commit 6094715

Browse files
authored
multiple filtergroup fix (#123)
* 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]>
1 parent 98b45ce commit 6094715

File tree

2 files changed

+38
-1
lines changed

2 files changed

+38
-1
lines changed

force-app/main/default/classes/SOQL.cls

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1305,7 +1305,7 @@ public virtual inherited sharing class SOQL implements Queryable {
13051305
String orderWithSpecialCharacters = getConditionsLogic();
13061306

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

13111311
return orderWithSpecialCharacters; // e.g ({0} AND ({1} AND {2}))

force-app/main/default/classes/SOQL_Test.cls

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1522,6 +1522,43 @@ private class SOQL_Test {
15221522
Assert.areEqual('Krakow', binding.get('v3'));
15231523
}
15241524

1525+
@IsTest
1526+
static void multipleFiltersGroups() {
1527+
// Test
1528+
SOQL builder = SOQL.of(Account.SObjectType)
1529+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('1')))
1530+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('2')))
1531+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('3')))
1532+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('4')))
1533+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('5')))
1534+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('6')))
1535+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('7')))
1536+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('8')))
1537+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('9')))
1538+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('10')))
1539+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('11')));
1540+
1541+
// Verify
1542+
String soql = builder.toString();
1543+
Assert.areEqual(
1544+
'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)',
1545+
soql
1546+
);
1547+
1548+
Map<String, Object> binding = builder.binding();
1549+
Assert.areEqual('%1%', binding.get('v1'));
1550+
Assert.areEqual('%2%', binding.get('v2'));
1551+
Assert.areEqual('%3%', binding.get('v3'));
1552+
Assert.areEqual('%4%', binding.get('v4'));
1553+
Assert.areEqual('%5%', binding.get('v5'));
1554+
Assert.areEqual('%6%', binding.get('v6'));
1555+
Assert.areEqual('%7%', binding.get('v7'));
1556+
Assert.areEqual('%8%', binding.get('v8'));
1557+
Assert.areEqual('%9%', binding.get('v9'));
1558+
Assert.areEqual('%10%', binding.get('v10'));
1559+
Assert.areEqual('%11%', binding.get('v11'));
1560+
}
1561+
15251562
@IsTest
15261563
static void anyConditionMatchingForInnerGroup() {
15271564
// Test

0 commit comments

Comments
 (0)