SOQL Evaluator
Apex Classes: SOQLEvaluator.cls
and SOQLEvaluator_Test.cls
.
The lib evaluator class for processing of queried records.
List<Account> accounts = SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toList();
Methods
The following are methods for using SOQLEvaluator
:
mockId(String mockId)
SOQLEvaluator.mock(String mockId).thenReturn(SObject record)
SOQLEvaluator.mock(String mockId).thenReturn(List<SObject> records)
toId()
toIds()
toIdsOf(SObjectField field)
toIdsOf(String relationshipName, SObjectField field)
doExist()
toValueOf(SObjectField fieldToExtract)
toValuesOf(SObjectField fieldToExtract)
toObject()
toList()
toMap()
toMap(SObjectField keyField)
toMap(String relationshipName, SObjectField targetKeyField)
toMap(SObjectField keyField, SObjectField valueField)
toAggregatedMap(SObjectField keyField)
toAggregatedMap(String relationshipName, SObjectField targetKeyField)
toAggregatedMap(SObjectField keyField, SObjectField valueField)
INIT
of
Constructs a SOQLEvaluator
from existing SObject records.
Signature
SObjectEvaluable of(List<SObject> staticQueryRecords)
Example
SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
]).toList();
FIELD-LEVEL SECURITY
stripInaccessible
The Security.stripInaccessible
method removes inaccessible fields from the existing records based on the current user's permissions.
Signature
SObjectEvaluable stripInaccessible()
SObjectEvaluable stripInaccessible(AccessType accessType)
Example
List<Account> accessibleAccounts = SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
]).stripInaccessible().toList();
// or with specific access type
List<Account> readableAccounts = SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
]).stripInaccessible(AccessType.READABLE).toList();
MOCKING
mockId
Evaluator needs unique id that allows for mocking.
Signature
SObjectEvaluable mockId(String mockId)
Example
SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).mockId('MyEvaluator').toList();
// In Unit Test
SOQLEvaluator.mock('MyEvaluator').thenReturn(new List<Account>{
new Account(Name = 'Mocked Account 1'),
new Account(Name = 'Mocked Account 2')
});
record mock
Signature
SOQLEvaluator.Mockable mock(String mockId).thenReturn(SObject record)
Example
SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).mockId('MyEvaluator').toObject();
// In Unit Test
SOQLEvaluator.mock('MyEvaluator').thenReturn(new Account(Name = 'Mocked Account'));
records mock
Signature
SOQLEvaluator.Mockable mock(String mockId).thenReturn(List<SObject> records)
Example
SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).mockId('MyEvaluator').toList();
// In Unit Test
SOQLEvaluator.mock('MyEvaluator').thenReturn(new List<Account>{
new Account(Name = 'Mocked Account 1'),
new Account(Name = 'Mocked Account 2')
});
RESULT
toId
Signature
Id toId()
Example
Id accountId = SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
LIMIT 1
]).toId();
toIds
Extract all record IDs from the collection.
Signature
Set<Id> toIds()
Example
Set<Id> accountIds = SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toIds();
toIdsOf
Extract field values as Set of IDs from the collection.
Signature
Set<Id> toIdsOf(SObjectField field)
Example
Set<Id> ownerIds = SOQLEvaluator.of([
SELECT Id, Name, OwnerId
FROM Account
WITH USER_MODE
]).toIdsOf(Account.OwnerId);
toIdsOf Related Field
Signature
Set<Id> toIdsOf(String relationshipName, SObjectField field)
Example
Set<Id> parentAccountIds = SOQLEvaluator.of([
SELECT Id, Name, Parent.Id
FROM Account
WITH USER_MODE
]).toIdsOf('Parent', Account.Id);
doExist
Signature
Boolean doExist()
Example
Boolean recordsExist = SOQLEvaluator.of([
SELECT Id
FROM Account
WHERE Name = 'Test'
WITH USER_MODE
]).doExist();
toValueOf
Extract field value from the first record in the collection.
Signature
Object toValueOf(SObjectField fieldToExtract)
Example
String accountName = (String) SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
LIMIT 1
]).toValueOf(Account.Name);
toValuesOf
Extract field values from all records in the collection.
Signature
Set<String> toValuesOf(SObjectField fieldToExtract)
Example
Set<String> accountNames = SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toValuesOf(Account.Name);
toObject
When the collection contains more than one record, the error List has more than 1 row for assignment to SObject
will occur.
When there are no records to assign, the error List has no rows for assignment to SObject
will NOT occur. This is automatically handled by the framework, and a null
value will be returned instead.
Signature
SObject toObject()
Example
Account account = (Account) SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
LIMIT 1
]).toObject();
toList
Signature
List<SObject> toList()
Example
List<Account> processedAccounts = SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toList();
toMap
Signature
Map<Id, SObject> toMap()
Example
Map<Id, Account> idToAccount = (Map<Id, Account>) SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toMap();
toMap with custom key
Signature
Map<String, SObject> toMap(SObjectField keyField)
Example
Map<String, Account> nameToAccount = (Map<String, Account>) SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toMap(Account.Name);
toMap with custom relationship key
Signature
Map<String, SObject> toMap(String relationshipName, SObjectField targetKeyField)
Example
Map<String, Account> createdByEmailToAccount = (Map<String, Account>) SOQLEvaluator.of([
SELECT Id, Name, CreatedBy.Email
FROM Account
WITH USER_MODE
]).toMap('CreatedBy', User.Email);
toMap with custom key and value
Signature
Map<String, String> toMap(SObjectField keyField, SObjectField valueField)
Example
Map<String, String> nameToIndustry = SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
]).toMap(Account.Name, Account.Industry);
toAggregatedMap
Signature
Map<String, List<SObject>> toAggregatedMap(SObjectField keyField)
Example
Map<String, List<Account>> industryToAccounts = (Map<String, List<Account>>) SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
]).toAggregatedMap(Account.Industry);
toAggregatedMap with custom relationship key
Signature
Map<String, List<SObject>> toAggregatedMap(String relationshipName, SObjectField targetKeyField)
Example
Map<String, List<Account>> createdByEmailToAccounts = (Map<String, List<Account>>) SOQLEvaluator.of([
SELECT Id, Name, CreatedBy.Email
FROM Account
WITH USER_MODE
]).toAggregatedMap('CreatedBy', User.Email);
toAggregatedMap with custom value
Signature
Map<String, List<String>> toAggregatedMap(SObjectField keyField, SObjectField valueField)
Example
Map<String, List<String>> industryToAccountNames = SOQLEvaluator.of([
SELECT Id, Name, Industry
FROM Account
WITH USER_MODE
]).toAggregatedMap(Account.Industry, Account.Name);