Skip to content

Commit 1e2a8f5

Browse files
authored
Duplicated Conditions (#127)
Signed-off-by: Piotr PG Gajek <[email protected]>
1 parent 32645c1 commit 1e2a8f5

File tree

2 files changed

+39
-1
lines changed

2 files changed

+39
-1
lines changed

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

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

13131313
for (Integer i = 0; i < queryConditions.size(); i++) {
1314-
orderWithSpecialCharacters = orderWithSpecialCharacters.replaceFirst(String.valueOf(i + 1), '{' + i + '}');
1314+
orderWithSpecialCharacters = orderWithSpecialCharacters.replaceAll('\\b' + String.valueOf(i + 1) + '\\b', '{' + i + '}');
13151315
}
13161316

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

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,44 @@ private class SOQL_Test {
15591559
Assert.areEqual('%11%', binding.get('v11'));
15601560
}
15611561

1562+
@IsTest
1563+
static void duplicatedConditionsInConditionOrder() {
1564+
// Test
1565+
SOQL builder = SOQL.of(Account.SObjectType)
1566+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('1')))
1567+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('2')))
1568+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('3')))
1569+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('4')))
1570+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('5')))
1571+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('6')))
1572+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('7')))
1573+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('8')))
1574+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('9')))
1575+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('10')))
1576+
.whereAre(SOQL.FilterGroup.add(SOQL.Filter.with(Account.Name).contains('11')))
1577+
.conditionLogic('(1 AND 2 AND 3 AND 4 AND 5 AND 5 AND 7 AND 8 AND 9 AND 10 AND 11) OR (11 AND 1 AND 10)');
1578+
1579+
// Verify
1580+
String soql = builder.toString();
1581+
Assert.areEqual(
1582+
'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 :v5) AND (Name LIKE :v7) AND (Name LIKE :v8) AND (Name LIKE :v9) AND (Name LIKE :v10) AND (Name LIKE :v11)) OR ((Name LIKE :v11) AND (Name LIKE :v1) AND (Name LIKE :v10))',
1583+
soql
1584+
);
1585+
1586+
Map<String, Object> binding = builder.binding();
1587+
Assert.areEqual('%1%', binding.get('v1'));
1588+
Assert.areEqual('%2%', binding.get('v2'));
1589+
Assert.areEqual('%3%', binding.get('v3'));
1590+
Assert.areEqual('%4%', binding.get('v4'));
1591+
Assert.areEqual('%5%', binding.get('v5'));
1592+
Assert.areEqual('%6%', binding.get('v6'));
1593+
Assert.areEqual('%7%', binding.get('v7'));
1594+
Assert.areEqual('%8%', binding.get('v8'));
1595+
Assert.areEqual('%9%', binding.get('v9'));
1596+
Assert.areEqual('%10%', binding.get('v10'));
1597+
Assert.areEqual('%11%', binding.get('v11'));
1598+
}
1599+
15621600
@IsTest
15631601
static void anyConditionMatchingForInnerGroup() {
15641602
// Test

0 commit comments

Comments
 (0)