Skip to content

Commit 2525ecb

Browse files
authored
with up to 5 fields (#34)
* with up to 5 fields * refactoring
1 parent a2752ea commit 2525ecb

File tree

19 files changed

+391
-205
lines changed

19 files changed

+391
-205
lines changed

README.md

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,15 @@ List<Account> accounts = SOQL.of(Account.SObjectType).toList();
1717
```apex
1818
// SELECT Id, Name, Industry FROM Account
1919
List<Account> accounts = SOQL.of(Account.SObjectType)
20-
.with(new List<SObjectField>{
21-
Account.Id, Account.Name, Account.Industry
22-
}).toList();
20+
.with(Account.Id, Account.Name, Account.Industry)
21+
.toList();
2322
```
2423

2524
```apex
2625
public with sharing class AccountSelector implements SOQL.Selector {
2726
public static SOQL query() {
2827
return SOQL.of(Account.SObjectType)
29-
.with(new List<SObjectField>{
30-
Account.Id, Account.Name
31-
});
28+
.with(Account.Id, Account.Name);
3229
}
3330
}
3431
```
@@ -38,9 +35,7 @@ public with sharing class ExampleController {
3835
3936
@AuraEnabled
4037
public static List<Account> getAccounts() {
41-
return AccountSelector.query()
42-
.with(Account.Industry)
43-
.toList();
38+
return AccountSelector.query().with(Account.Industry).toList();
4439
}
4540
}
4641
```

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

Lines changed: 81 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@
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')
1516
public 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

Comments
 (0)