1010 * - PropertyNamingConventions: It was intentional to make the lib more fluent and readable
1111 * - FieldDeclarationsShouldBeAtStart: Developer who uses lib should see what's important at start
1212 * - ApexDoc: Variable names are self-documented.
13+ * - ExcessiveParameterList - Make methods similar to native SOQL
1314**/
14- @SuppressWarnings(' PMD.ExcessivePublicCount, PMD.ExcessiveClassLength, PMD.CyclomaticComplexity, PMD.CognitiveComplexity, PMD.PropertyNamingConventions, PMD.FieldDeclarationsShouldBeAtStart, PMD.ApexDoc' )
15+ @SuppressWarnings(' PMD.ExcessivePublicCount, PMD.ExcessiveClassLength, PMD.CyclomaticComplexity, PMD.CognitiveComplexity, PMD.PropertyNamingConventions, PMD.FieldDeclarationsShouldBeAtStart, PMD.ApexDoc, PMD.ExcessiveParameterList ' )
1516public inherited sharing class SOQL implements Queryable {
1617
1718 public static SubQuery SubQuery {
@@ -46,11 +47,22 @@ public inherited sharing class SOQL implements Queryable {
4647 SOQL of (SObjectType ofObject );
4748
4849 SOQL with (SObjectField field );
50+ SOQL with (SObjectField field1 , SObjectField field2 );
51+ SOQL with (SObjectField field1 , SObjectField field2 , SObjectField field3 );
52+ SOQL with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 );
53+ SOQL with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 , SObjectField field5 );
4954 SOQL with (Set <SObjectField > fields );
5055 SOQL with (List <SObjectField > fields );
56+
5157 SOQL with (String fields );
58+
5259 SOQL with (String relationshipName , SObjectField field );
60+ SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 );
61+ SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 , SObjectField field3 );
62+ SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 );
63+ SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 , SObjectField field5 );
5364 SOQL with (String relationshipName , List <SObjectField > fields );
65+
5466 SOQL with (SubQuery subQuery ); // SOQL.SubQuery
5567
5668 SOQL count ();
@@ -118,6 +130,10 @@ public inherited sharing class SOQL implements Queryable {
118130 SubQuery of (String ofObject );
119131
120132 SubQuery with (SObjectField field );
133+ SubQuery with (SObjectField field1 , SObjectField field2 );
134+ SubQuery with (SObjectField field1 , SObjectField field2 , SObjectField field3 );
135+ SubQuery with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 );
136+ SubQuery with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 , SObjectField field5 );
121137 SubQuery with (List <SObjectField > fields );
122138 SubQuery with (String relationshipName , List <SObjectField > fields );
123139
@@ -225,9 +241,24 @@ public inherited sharing class SOQL implements Queryable {
225241 return this ;
226242 }
227243
244+ public SOQL with (SObjectField field1 , SObjectField field2 ) {
245+ return with (field1 ).with (field2 );
246+ }
247+
248+ public SOQL with (SObjectField field1 , SObjectField field2 , SObjectField field3 ) {
249+ return with (field1 ).with (field2 ).with (field3 );
250+ }
251+
252+ public SOQL with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 ) {
253+ return with (field1 ).with (field2 ).with (field3 ).with (field4 );
254+ }
255+
256+ public SOQL with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 , SObjectField field5 ) {
257+ return with (field1 ).with (field2 ).with (field3 ).with (field4 ).with (field5 );
258+ }
259+
228260 public SOQL with (Set <SObjectField > fields ) {
229- with (new List <SObjectField >(fields ));
230- return this ;
261+ return with (new List <SObjectField >(fields ));
231262 }
232263
233264 public SOQL with (List <SObjectField > fields ) {
@@ -241,8 +272,23 @@ public inherited sharing class SOQL implements Queryable {
241272 }
242273
243274 public SOQL with (String relationshipName , SObjectField field ) {
244- builder .fields .with (relationshipName , field );
245- return this ;
275+ return with (relationshipName , new List <SObjectField >{ field });
276+ }
277+
278+ public SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 ) {
279+ return with (relationshipName , new List <SObjectField >{ field1 , field2 });
280+ }
281+
282+ public SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 , SObjectField field3 ) {
283+ return with (relationshipName , new List <SObjectField >{ field1 , field2 , field3 });
284+ }
285+
286+ public SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 ) {
287+ return with (relationshipName , new List <SObjectField >{ field1 , field2 , field3 , field4 });
288+ }
289+
290+ public SOQL with (String relationshipName , SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 , SObjectField field5 ) {
291+ return with (relationshipName , new List <SObjectField >{ field1 , field2 , field3 , field4 , field5 });
246292 }
247293
248294 public SOQL with (String relationshipName , List <SObjectField > fields ) {
@@ -616,7 +662,7 @@ public inherited sharing class SOQL implements Queryable {
616662
617663 public void with (List <SObjectField > fields ) {
618664 for (SObjectField field : fields ) {
619- with (field );
665+ queryFields . add (field . getDescribe (). getName () );
620666 }
621667 }
622668
@@ -666,6 +712,22 @@ public inherited sharing class SOQL implements Queryable {
666712 return this ;
667713 }
668714
715+ public SubQuery with (SObjectField field1 , SObjectField field2 ) {
716+ return with (field1 ).with (field2 );
717+ }
718+
719+ public SubQuery with (SObjectField field1 , SObjectField field2 , SObjectField field3 ) {
720+ return with (field1 ).with (field2 ).with (field3 );
721+ }
722+
723+ public SubQuery with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 ) {
724+ return with (field1 ).with (field2 ).with (field3 ).with (field4 );
725+ }
726+
727+ public SubQuery with (SObjectField field1 , SObjectField field2 , SObjectField field3 , SObjectField field4 , SObjectField field5 ) {
728+ return with (field1 ).with (field2 ).with (field3 ).with (field4 ).with (field5 );
729+ }
730+
669731 public SubQuery with (List <SObjectField > fields ) {
670732 builder .fields .with (fields );
671733 return this ;
@@ -1130,18 +1192,16 @@ public inherited sharing class SOQL implements Queryable {
11301192 private String sortingOrder = ' ASC' ;
11311193 private String nullsOrder = ' FIRST' ;
11321194
1133- public QOrderBy with (String field ) {
1134- orderField = field ;
1135- return this ;
1136- }
1137-
11381195 public QOrderBy with (SObjectField field ) {
1139- orderField = field .getDescribe ().getName ();
1140- return this ;
1196+ return with (field .getDescribe ().getName ());
11411197 }
11421198
11431199 public QOrderBy with (String relationshipName , SObjectField field ) {
1144- orderField = relationshipName + ' .' + field .getDescribe ().getName ();
1200+ return with (relationshipName + ' .' + field .getDescribe ().getName ());
1201+ }
1202+
1203+ public QOrderBy with (String field ) {
1204+ orderField = field ;
11451205 return this ;
11461206 }
11471207
@@ -1227,12 +1287,6 @@ public inherited sharing class SOQL implements Queryable {
12271287 }
12281288 }
12291289
1230- private enum SharingLevel {
1231- INHERITED ,
1232- WITH_SHARING ,
1233- WITHOUT_SHARING
1234- }
1235-
12361290 // Mocking
12371291
12381292 private class Mock {
@@ -1278,31 +1332,22 @@ public inherited sharing class SOQL implements Queryable {
12781332 }
12791333
12801334 private inherited sharing class Executor {
1281- private SObjectType ofObject ;
1282-
1283- private SharingLevel sharingMode = SharingLevel .INHERITED ;
12841335 private AccessLevel accessMode = AccessLevel .USER_MODE ; // The object permissions, field-level security, sharing rules are enforced.
1336+ private DatabaseQuery sharingExecutor = new InheritedSharing ();
1337+ private SObjectType ofObject ;
12851338 private AccessType accessType ;
1286-
12871339 private String mockId ;
12881340
1289- @SuppressWarnings('PMD.FieldNamingConventions')
1290- private final Map <SharingLevel , DatabaseQuery > MODE_TO_EXECUTOR = new Map <SharingLevel , DatabaseQuery >{
1291- SharingLevel .WITH_SHARING = > new WithSharing (),
1292- SharingLevel .WITHOUT_SHARING = > new WithoutSharing (),
1293- SharingLevel .INHERITED = > new InheritedSharing ()
1294- };
1295-
12961341 public Executor (SObjectType ofObject ) {
12971342 this .ofObject = ofObject ;
12981343 }
12991344
13001345 public void withSharing () {
1301- sharingMode = SharingLevel . WITH_SHARING ;
1346+ sharingExecutor = new WithSharing () ;
13021347 }
13031348
13041349 public void withoutSharing () {
1305- sharingMode = SharingLevel . WITHOUT_SHARING ;
1350+ sharingExecutor = new WithoutSharing () ;
13061351 }
13071352
13081353 public void stripInaccessible (AccessType type ) {
@@ -1330,7 +1375,7 @@ public inherited sharing class SOQL implements Queryable {
13301375 return mock .getCountMock (mockId );
13311376 }
13321377
1333- return MODE_TO_EXECUTOR . get ( sharingMode ) .executeCount (query , binding , accessMode );
1378+ return sharingExecutor .executeCount (query , binding , accessMode );
13341379 }
13351380
13361381 public List <SObject > toList (String query , Map <String , Object > binding ) {
@@ -1343,12 +1388,12 @@ public inherited sharing class SOQL implements Queryable {
13431388 }
13441389
13451390 if (accessType == null ) {
1346- return MODE_TO_EXECUTOR . get ( sharingMode ) .execute (query , binding , accessMode );
1391+ return sharingExecutor .execute (query , binding , accessMode );
13471392 }
13481393
13491394 return Security .stripInaccessible (
13501395 accessType ,
1351- MODE_TO_EXECUTOR . get ( sharingMode ) .execute (query , binding , accessMode )
1396+ sharingExecutor .execute (query , binding , accessMode )
13521397 ).getRecords ();
13531398 }
13541399
0 commit comments