Skip to main content

SOQL Evaluator

Apex Classes: SOQLEvaluator.cls and SOQLEvaluator_Test.cls.

The lib evaluator class for processing of queried records.

Basic Usage Example
List<Account> accounts = SOQLEvaluator.of([
SELECT Id, Name
FROM Account
WITH USER_MODE
]).toList();

Methods

The following are methods for using SOQLEvaluator:

INIT

FIELD-LEVEL SECURITY

MOCKING

RESULT

INIT

of

Constructs a SOQLEvaluator from existing SObject records.

Signature

Method Signature
SObjectEvaluable of(List<SObject> staticQueryRecords)

Example

Constructor 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

Method Signatures
SObjectEvaluable stripInaccessible()
SObjectEvaluable stripInaccessible(AccessType accessType)

Example

Strip Inaccessible Fields 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);

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);