From 4f7a13f4bd28a2bc981e4244dd9500c56464ccda Mon Sep 17 00:00:00 2001 From: Yury Bondarau Date: Thu, 16 Nov 2023 17:55:31 +0100 Subject: [PATCH 1/5] Ignore field configuration for count query --- src/classes/Query.cls | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/classes/Query.cls b/src/classes/Query.cls index 22db5c0..4d48e1e 100644 --- a/src/classes/Query.cls +++ b/src/classes/Query.cls @@ -1585,9 +1585,11 @@ public class Query { } public Integer countQuery() { - count(''); + this.isCountQuery = true; String queryString = formQueryString(); - return Database.countQuery(queryString); + Integer count = Database.countQuery(queryString); + this.isCountQuery; + return count; } public List toIdList() { @@ -1741,6 +1743,7 @@ public class Query { private String objectName; private Schema.SObjectType objectType; private Map childRelationships; + private Boolean isCountQuery = false; private Query addAllFields() { // Get all the fields @@ -2095,6 +2098,10 @@ public class Query { private String formFieldString() { String fieldString = ''; + if (isCountQuery) { + return 'COUNT()'; + } + for (String parentName : parentReferences) { addParentFields(parentName); } From 63c48c1f26a809ca79c5030b175d9591333a34c1 Mon Sep 17 00:00:00 2001 From: Yury Bondarau Date: Thu, 16 Nov 2023 23:10:18 +0100 Subject: [PATCH 2/5] Fixed logic to avoid parent fields impact count query, added test assertion --- src/classes/Query.cls | 26 +++++++++++++------------- src/classes/QueryTest.cls | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/classes/Query.cls b/src/classes/Query.cls index 4d48e1e..d8a603d 100644 --- a/src/classes/Query.cls +++ b/src/classes/Query.cls @@ -1585,11 +1585,11 @@ public class Query { } public Integer countQuery() { - this.isCountQuery = true; + count(''); + isCountQuery = true; String queryString = formQueryString(); - Integer count = Database.countQuery(queryString); - this.isCountQuery; - return count; + isCountQuery = false; + return Database.countQuery(queryString); } public List toIdList() { @@ -2041,12 +2041,16 @@ public class Query { finalConditionArgsIdx = 0; String query = 'SELECT '; + + if (this.isCountQuery) { + query += 'COUNT()'; + } else { + query += formFieldString(); - query += formFieldString(); - - if (!functionFieldList.isEmpty()) { - query += ' ' + formAggregateString(); - } + if (!functionFieldList.isEmpty()) { + query += ' ' + formAggregateString(); + } + } query += ' FROM ' + objectName; @@ -2098,10 +2102,6 @@ public class Query { private String formFieldString() { String fieldString = ''; - if (isCountQuery) { - return 'COUNT()'; - } - for (String parentName : parentReferences) { addParentFields(parentName); } diff --git a/src/classes/QueryTest.cls b/src/classes/QueryTest.cls index 6bad447..13066ef 100644 --- a/src/classes/QueryTest.cls +++ b/src/classes/QueryTest.cls @@ -1119,6 +1119,7 @@ public class QueryTest { System.assertEquals(4, new Query('Account').countQuery()); System.assertEquals(2, new Query('Account').addConditionEq('Rating', '1').countQuery()); + System.assertEquals(4, new Query('Account').selectAllFields('Account').addConditionEq('Rating', '1').countQuery()); } @isTest From 578aafd7afbdec3a94ce8ed1ea533d7ff0d8ab82 Mon Sep 17 00:00:00 2001 From: Yury Bondarau Date: Thu, 16 Nov 2023 23:28:45 +0100 Subject: [PATCH 3/5] Fixed test method --- src/classes/QueryTest.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/classes/QueryTest.cls b/src/classes/QueryTest.cls index 13066ef..e3ba105 100644 --- a/src/classes/QueryTest.cls +++ b/src/classes/QueryTest.cls @@ -1119,7 +1119,7 @@ public class QueryTest { System.assertEquals(4, new Query('Account').countQuery()); System.assertEquals(2, new Query('Account').addConditionEq('Rating', '1').countQuery()); - System.assertEquals(4, new Query('Account').selectAllFields('Account').addConditionEq('Rating', '1').countQuery()); + System.assertEquals(2, new Query('Account').selectAllFields('Account').addConditionEq('Rating', '1').countQuery()); } @isTest From 5b9be39b603504656e8442507ec6f6af9d6a74a0 Mon Sep 17 00:00:00 2001 From: Yury Bondarau Date: Fri, 17 Nov 2023 17:56:21 +0100 Subject: [PATCH 4/5] Updated maximum number of conditions --- src/classes/Query.cls | 63 +++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 61 insertions(+), 2 deletions(-) diff --git a/src/classes/Query.cls b/src/classes/Query.cls index d8a603d..a01b8b1 100644 --- a/src/classes/Query.cls +++ b/src/classes/Query.cls @@ -1585,7 +1585,6 @@ public class Query { } public Integer countQuery() { - count(''); isCountQuery = true; String queryString = formQueryString(); isCountQuery = false; @@ -1622,7 +1621,7 @@ public class Query { private ParentFieldSetting parentFieldSetting; private List conditions = new List(); - private static final Integer maxArgSize = 20; + private static final Integer maxArgSize = 40; private Integer finalConditionArgsIdx = 0; private List conditionArgs = new List(); private List finalConditionArgs = new List(); @@ -1646,6 +1645,26 @@ public class Query { private Object conditionArgs17; private Object conditionArgs18; private Object conditionArgs19; + private Object conditionArgs20; + private Object conditionArgs21; + private Object conditionArgs22; + private Object conditionArgs23; + private Object conditionArgs24; + private Object conditionArgs25; + private Object conditionArgs26; + private Object conditionArgs27; + private Object conditionArgs28; + private Object conditionArgs29; + private Object conditionArgs30; + private Object conditionArgs31; + private Object conditionArgs32; + private Object conditionArgs33; + private Object conditionArgs34; + private Object conditionArgs35; + private Object conditionArgs36; + private Object conditionArgs37; + private Object conditionArgs38; + private Object conditionArgs39; private String conditionOperator = 'AND'; private String optionalClause = ''; @@ -2019,6 +2038,46 @@ public class Query { conditionArgs18 = arg; } else if (idx == 19) { conditionArgs19 = arg; + } else if (idx == 20) { + conditionArgs20 = arg; + } else if (idx == 21) { + conditionArgs21 = arg; + } else if (idx == 22) { + conditionArgs22 = arg; + } else if (idx == 23) { + conditionArgs23 = arg; + } else if (idx == 24) { + conditionArgs24 = arg; + } else if (idx == 25) { + conditionArgs25 = arg; + } else if (idx == 26) { + conditionArgs26 = arg; + } else if (idx == 27) { + conditionArgs27 = arg; + } else if (idx == 28) { + conditionArgs28 = arg; + } else if (idx == 29) { + conditionArgs29 = arg; + } else if (idx == 30) { + conditionArgs30 = arg; + } else if (idx == 31) { + conditionArgs31 = arg; + } else if (idx == 32) { + conditionArgs32 = arg; + } else if (idx == 33) { + conditionArgs33 = arg; + } else if (idx == 34) { + conditionArgs34 = arg; + } else if (idx == 35) { + conditionArgs35 = arg; + } else if (idx == 36) { + conditionArgs36 = arg; + } else if (idx == 37) { + conditionArgs37 = arg; + } else if (idx == 38) { + conditionArgs38 = arg; + } else if (idx == 39) { + conditionArgs39 = arg; } } From 7bdd1c3f74c0be48c8a747bf47c60960974be13e Mon Sep 17 00:00:00 2001 From: Yury Bondarau Date: Tue, 26 Dec 2023 15:14:06 +0100 Subject: [PATCH 5/5] Increased list of were condittions to 60 --- src/classes/Query.cls | 65 +++++++++++++++++++++++++++++- src/classes/Query.cls-meta.xml | 2 +- src/classes/QueryTest.cls | 31 +++++++++++++- src/classes/QueryTest.cls-meta.xml | 2 +- 4 files changed, 95 insertions(+), 5 deletions(-) diff --git a/src/classes/Query.cls b/src/classes/Query.cls index a01b8b1..400cb16 100644 --- a/src/classes/Query.cls +++ b/src/classes/Query.cls @@ -1621,7 +1621,8 @@ public class Query { private ParentFieldSetting parentFieldSetting; private List conditions = new List(); - private static final Integer maxArgSize = 40; + @testVisible + private static final Integer maxArgSize = 60; private Integer finalConditionArgsIdx = 0; private List conditionArgs = new List(); private List finalConditionArgs = new List(); @@ -1665,6 +1666,26 @@ public class Query { private Object conditionArgs37; private Object conditionArgs38; private Object conditionArgs39; + private Object conditionArgs40; + private Object conditionArgs41; + private Object conditionArgs42; + private Object conditionArgs43; + private Object conditionArgs44; + private Object conditionArgs45; + private Object conditionArgs46; + private Object conditionArgs47; + private Object conditionArgs48; + private Object conditionArgs49; + private Object conditionArgs50; + private Object conditionArgs51; + private Object conditionArgs52; + private Object conditionArgs53; + private Object conditionArgs54; + private Object conditionArgs55; + private Object conditionArgs56; + private Object conditionArgs57; + private Object conditionArgs58; + private Object conditionArgs59; private String conditionOperator = 'AND'; private String optionalClause = ''; @@ -2078,6 +2099,46 @@ public class Query { conditionArgs38 = arg; } else if (idx == 39) { conditionArgs39 = arg; + } else if (idx == 40) { + conditionArgs40 = arg; + } else if (idx == 41) { + conditionArgs41 = arg; + } else if (idx == 42) { + conditionArgs42 = arg; + } else if (idx == 43) { + conditionArgs43 = arg; + } else if (idx == 44) { + conditionArgs44 = arg; + } else if (idx == 45) { + conditionArgs45 = arg; + } else if (idx == 46) { + conditionArgs46 = arg; + } else if (idx == 47) { + conditionArgs47 = arg; + } else if (idx == 48) { + conditionArgs48 = arg; + } else if (idx == 49) { + conditionArgs49 = arg; + } else if (idx == 50) { + conditionArgs50 = arg; + } else if (idx == 51) { + conditionArgs51 = arg; + } else if (idx == 52) { + conditionArgs52 = arg; + } else if (idx == 53) { + conditionArgs53 = arg; + } else if (idx == 54) { + conditionArgs54 = arg; + } else if (idx == 55) { + conditionArgs55 = arg; + } else if (idx == 56) { + conditionArgs56 = arg; + } else if (idx == 57) { + conditionArgs57 = arg; + } else if (idx == 58) { + conditionArgs58 = arg; + } else if (idx == 59) { + conditionArgs59 = arg; } } @@ -2655,4 +2716,4 @@ public class Query { private String conditionString; private List args; } -} +} \ No newline at end of file diff --git a/src/classes/Query.cls-meta.xml b/src/classes/Query.cls-meta.xml index db9bf8c..7a51829 100644 --- a/src/classes/Query.cls-meta.xml +++ b/src/classes/Query.cls-meta.xml @@ -1,5 +1,5 @@ - 48.0 + 58.0 Active diff --git a/src/classes/QueryTest.cls b/src/classes/QueryTest.cls index e3ba105..065d3b0 100644 --- a/src/classes/QueryTest.cls +++ b/src/classes/QueryTest.cls @@ -1351,6 +1351,35 @@ public class QueryTest { System.assert(c != null); } + @isTest + static void largeWhereClauseTest() { + Integer maxWhereConditions = Query.maxArgSize; + + Query query = new Query('Account'); + for (Integer i = 0; i < maxWhereConditions; i++) { + query.addConditionEq('Name', 'Name' + i); + } + + Exception excptn; + + try { + query.run(); + } catch (Exception ex) { + excptn = ex; + } + + Assert.areEqual(null, excptn); + + Test.startTest(); + try { + query.addConditionEq('Name', 'Name' + maxWhereConditions); + query.run(); + } catch (Exception qex) { + Assert.isNotNull(qex); + //Assert.areEqual('The number of arguments exceeds the limit', qex.getMessage()); + } + Test.stopTest(); + } static void createData() { Account acc = new Account(); acc.Name = 'ABC Ltd'; @@ -1401,4 +1430,4 @@ public class QueryTest { System.assertEquals(task.Subject, 'New Task'); } -} +} \ No newline at end of file diff --git a/src/classes/QueryTest.cls-meta.xml b/src/classes/QueryTest.cls-meta.xml index db9bf8c..7a51829 100644 --- a/src/classes/QueryTest.cls-meta.xml +++ b/src/classes/QueryTest.cls-meta.xml @@ -1,5 +1,5 @@ - 48.0 + 58.0 Active