SOQL
Apex Classes: SOQL.cls
and SOQL_Test.cls
.
The lib main class for query construction.
SOQL.of(Account.SObjectType)
.with(Account.Id, Account.Name)
.toList();
Methods
The following are methods for using SOQL
:
with(SObjectField field)
with(SObjectField field1, SObjectField field2)
with(SObjectField field1, SObjectField field2, SObjectField field3)
with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4)
with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5)
with(List<SObjectField> fields)
with(List<String> fields)
with(String fields)
with(String relationshipName, SObjectField field)
with(String relationshipName, SObjectField field1, SObjectField field2)
with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3)
with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4)
with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5)
with(String relationshipName, Iterable<SObjectField> fields)
withFieldSet(String fieldSetName)
count()
count(SObjectField field)
count(SObjectField field, String alias)
count(String relationshipName, SObjectField field)
count(String relationshipName, SObjectField field, String alias)
avg(SObjectField field)
avg(SObjectField field, String alias)
avg(String relationshipName, SObjectField field)
avg(String relationshipName, SObjectField field, String alias)
countDistinct(SObjectField field)
countDistinct(SObjectField field, String alias)
countDistinct(String relationshipName, SObjectField field)
countDistinct(String relationshipName, SObjectField field, String alias)
min(SObjectField field)
min(SObjectField field, String alias)
min(String relationshipName, SObjectField field)
min(String relationshipName, SObjectField field)
max(SObjectField field)
max(SObjectField field, String alias)
max(String relationshipName, SObjectField field)
max(String relationshipName, SObjectField field, String alias)
sum(SObjectField field)
sum(SObjectField field, String alias)
sum(String relationshipName, SObjectField field)
sum(String relationshipName, SObjectField field, String alias)
toLabel(SObjectField field)
toLabel(SObjectField field, String alias)
toLabel(String field)
toLabel(String field, String alias)
delegatedScope()
mineScope()
mineAndMyGroupsScope()
myTerritoryScope()
myTeamTerritoryScope()
teamScope()
whereAre(FilterGroup filterGroup)
whereAre(Filter filter)
whereAre(String dynamicCondition)
conditionLogic(String order)
anyConditionMatching()
;
groupBy(SObjectField field)
groupBy(String relationshipName, SObjectField field)
groupByRollup(SObjectField field)
groupByRollup(String relationshipName, SObjectField field)
groupByCube(SObjectField field)
groupByCube(String relationshipName, SObjectField field)
have(HavingFilterGroup filterGroup)
have(HavingFilter filter)
have(String dynamicCondition)
havingConditionLogic(String order)
anyHavingConditionMatching()
orderBy(SObjectField field)
orderBy(String field)
orderBy(String field, String direction)
orderBy(String relationshipName, SObjectField field)
sordDesc()
sort(String direction)
nullsLast()
mockId(String id)
SOQL.setMock(String mockId, SObject record)
SOQL.setMock(String mockId, List<SObject> records)
SOQL.setCountMock(String mockId, Integer amount)
byId(SObject record)
byId(Id recordId)
byIds(Iterable<Id> recordIds)
byIds(List<SObject> records)
byRecordType(String recordTypeDeveloperName)
toId()
doExist()
toValueOf(SObjectField fieldToExtract)
toValuesOf(SObjectField fieldToExtract)
toInteger()
toObject()
toList()
toAggregated()
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)
toQueryLocator()
INIT
of
Conctructs an SOQL
.
Signature
Queryable of(SObjectType ofObject)
Queryable of(String ofObject)
Example
SELECT Id FROM Account
SOQL.of(Account.SObjectType).toList();
String ofObject = 'Account';
SOQL.of(ofObject).toList();
SELECT
with field1 - field5
Signature
Queryable with(SObjectField field)
Queryable with(SObjectField field1, SObjectField field2);
Queryable with(SObjectField field1, SObjectField field2, SObjectField field3);
Queryable with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4);
Queryable with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5);
Example
SELECT Id, Name
FROM Account
SOQL.of(Account.SObjectType)
.with(Account.Id, Account.Name)
.toList();
SOQL.of(Account.SObjectType)
.with(Account.Id)
.with(Account.Name)
.toList();
with fields
SELECT
statement that specifies the fields to query. The fieldList in theSELECT
statement specifies the list of one or more fields, separated by commas, that you want to retrieve.
Use for more than 5 fields.
Signature
Queryable with(List<SObjectField> fields)
Queryable with(List<String> fields)
Example
SELECT Id, Name, Industry, AccountNumber, AnnualRevenue, BillingCity
FROM Account
SOQL.of(Account.SObjectType)
.with(new List<SObjectField>{
Account.Id,
Account.Name,
Account.Industry,
Account.AccountNumber,
Account.AnnualRevenue,
Account.BillingCity
}).toList();
SOQL.of(Account.SObjectType)
.with(new List<String>{
'Id',
'Name',
'Industry',
'AccountNumber',
'AnnualRevenue',
'BillingCity'
}).toList();
with string fields
NOTE! With String Apex does not create reference to field. Use SObjectField
whenever it possible. Method below should be only use for dynamic queries.
Signature
Queryable with(String fields)
Example
SELECT Id, Name, Industry
FROM Account
SOQL.of(Account.SObjectType)
.with('Id, Name, Industry')
.toList();
with related field1 - field5
Allows to add parent field to a query.
Signature
Queryable with(String relationshipName, SObjectField field)
Queryable with(String relationshipName, SObjectField field1, SObjectField field2);
Queryable with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3);
Queryable with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4);
Queryable with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5);
Example
SELECT CreatedBy.Name
FROM Account
SOQL.of(Account.SObjectType)
.with('CreatedBy', User.Name)
.toList();
SOQL.of(Account.SObjectType)
.with('CreatedBy', User.Id, User.Name, User.Phone)
.toList();
with related fields
Allows to add parent fields to a query.
Use for more than 5 parent fields.
Signature
Queryable with(String relationshipName, Iterable<SObjectField> fields)
Example
SELECT
CreatedBy.Id,
CreatedBy.Name,
CreatedBy.Phone,
CreatedBy.FirstName,
CreatedBy.LastName,
CreatedBy.Email
FROM Account
SOQL.of(Account.SObjectType)
.with('CreatedBy', new List<SObjectField>{
User.Id,
User.Name,
User.Phone,
User.FirstName,
User.LastName,
User.Email
}).toList();
with field set
Pass FieldSet name to get dynamic fields.
Signature
Queryable withFieldSet(String fieldSetName)
Example
SELECT
Id,
Name,
Industry
FROM Account
SOQL.of(Account.SObjectType)
.withFieldSet('AccountFieldSet')
.toList();
SUB-QUERY
with subquery
Use SOQL to query several relationship types.
For more details check SOQL.SubQuery
class.
Signature
Queryable with(SOQL.SubQuery subQuery)
Example
SELECT Id, (
SELECT Id, Name
FROM Contacts
) FROM Account
SOQL.of(Account.SObjectType)
.with(SOQL.SubQuery.of('Contacts')
.with(Contact.Id, Contact.Name)
).toList();
AGGREGATE FUNCTIONS
Note! To avoid the Field must be grouped or aggregated
error, any default fields that are neither in Aggregation Functions nor included in the GROUP BY clause will be automatically removed.
count
COUNT()
returns the number of rows that match the filtering conditions.
Note! COUNT() must be the only element in the SELECT list, any other fields will be automatically removed.
Signature
Queryable count()
Example
SELECT COUNT()
FROM Account
SOQL.of(Account.SObjectType)
.count()
.toInteger();
count field
Signature
count(SObjectField field)
Note! To avoid the Field must be grouped or aggregated
error, any default fields will be automatically removed.
You can still specify additional fields, but they should be placed after the COUNT() function in the SELECT statement.
Example
SELECT COUNT(Id), COUNT(CampaignId)
FROM Opportunity
SOQL.of(Opportunity.SObjectType)
.count(Opportunity.Id)
.count(Opportunity.CampaignId)
.toAggregated();
count with alias
Signature
Queryable count(SObjectField field, String alias)
Example
SELECT COUNT(Name) names FROM Account
SOQL.of(Account.SObjectType)
.count(Account.Name, 'names')
.toAggregated();
count related field
Signature
count(String relationshipName, SObjectField field)
Example
SELECT COUNT(Account.Name) FROM Contact
SOQL.of(Contact.SObjectType)
.count('Account', Account.Name)
.toAggregated();
count related field with alias
Signature
Queryable count(String relationshipName, SObjectField field, String alias)
Example
SELECT COUNT(Account.Name) names FROM Contact
SOQL.of(Contact.SObjectType)
.count('Account', Account.Name, 'names')
.toAggregated();
avg
Signature
Queryable avg(SObjectField field)
Example
SELECT CampaignId, AVG(Amount) FROM Opportunity GROUP BY CampaignId
SOQL.of(Opportunity.SObjectType)
.with(Opportunity.CampaignId)
.avg(Opportunity.Amount)
.groupBy(Opportunity.CampaignId)
.toAggregate();
avg with alias
Signature
Queryable avg(SObjectField field, String alias)
Example
SELECT CampaignId, AVG(Amount) amount FROM Opportunity GROUP BY CampaignId
SOQL.of(Opportunity.SObjectType)
.with(Opportunity.CampaignId)
.avg(Opportunity.Amount, 'amount')
.groupBy(Opportunity.CampaignId)
.toAggregate();
avg related field
Signature
avg(String relationshipName, SObjectField field)
Example
SELECT AVG(Opportunity.Amount) FROM OpportunityLineItem
SOQL.of(OpportunityLineItem.SObjectType)
.avg('Opportunity', Opportunity.Amount)
.toAggregate();
avg related field with alias
Signature
Queryable avg(String relationshipName, SObjectField field, String alias)
Example
SELECT AVG(Opportunity.Amount) amount FROM OpportunityLineItem
SOQL.of(OpportunityLineItem.SObjectType)
.avg('Opportunity', Opportunity.Amount, 'amount')
.toAggregate();
count_distinct
Signature
Queryable countDistinct(SObjectField field
Example
SELECT COUNT_DISTINCT(Company) FROM Lead
SOQL.of(Lead.SObjectType).countDistinct(Lead.Company).toAggregate();
count_distinct with alias
Signature
Queryable countDistinct(SObjectField field, String alias)
Example
SELECT COUNT_DISTINCT(Company) company FROM Lead
SOQL.of(Lead.SObjectType).countDistinct(Lead.Company, 'company').toAggregate();
count_distinct related field
Signature
Queryable countDistinct(String relationshipName, SObjectField field)
Example
SELECT COUNT_DISTINCT(Lead.Company) FROM CampaignMember
SOQL.of(CampaignMember.SObjectType)
.countDistinct('Lead', Lead.Company)
.toAggregate();
count_distinct related field with aliast
Signature
Queryable countDistinct(String relationshipName, SObjectField field, String alias)
Example
SELECT COUNT_DISTINCT(Lead.Company) company FROM CampaignMember
SOQL.of(CampaignMember.SObjectType)
.countDistinct('Lead', Lead.Company, 'company')
.toAggregate();
min
Signature
Queryable min(SObjectField field)
Example
SELECT FirstName, LastName, MIN(CreatedDate)
FROM Contact
GROUP BY FirstName, LastName
SOQL.of(Contact.SObjectType)
.with(Contact.FirstName, Contact.LastName)
.min(Contact.CreatedDate)
.groupBy(Contact.FirstName)
.groupBy(Contact.LastName)
.toAggregate();
min with alias
Signature
Queryable min(SObjectField field, String alias)
Example
SELECT FirstName, LastName, MIN(CreatedDate) createDate
FROM Contact
GROUP BY FirstName, LastName
SOQL.of(Contact.SObjectType)
.with(Contact.FirstName, Contact.LastName)
.min(Contact.CreatedDate, 'createDate')
.groupBy(Contact.FirstName)
.groupBy(Contact.LastName)
.toAggregate();
min related field
Signature
Queryable min(String relationshipName, SObjectField field)
Example
SELECT MIN(Account.CreatedDate) FROM Contact
SOQL.of(Contact.SObjectType)
.min('Account', Account.CreatedDate)
.toAggregate();
min related field with alias
Signature
Queryable min(String relationshipName, SObjectField field, String alias)
Example
SELECT MIN(Account.CreatedDate) createdDate FROM Contact
SOQL.of(Contact.SObjectType)
.min('Account', Account.CreatedDate, 'createdDate')
.toAggregate();
max
Signature
Queryable max(SObjectField field)
Example
SELECT Name, MAX(BudgetedCost)
FROM Campaign
GROUP BY Name
SOQL.of(Campaign.SObjectType)
.with(Campaign.Name)
.max(Campaign.BudgetedCost)
.groupBy(Campaign.Name)
.toAggregate();
max with alias
Signature
Queryable max(SObjectField field, String alias)
Example
SELECT Name, MAX(BudgetedCost) budgetedCost
FROM Campaign
GROUP BY Name
SOQL.of(Campaign.SObjectType)
.with(Campaign.Name)
.max(Campaign.BudgetedCost, 'budgetedCost')
.groupBy(Campaign.Name)
.toAggregate();
max related field
Signature
Queryable max(String relationshipName, SObjectField field)
Example
SELECT MAX(Campaign.BudgetedCost) FROM CampaignMember
SOQL.of(CampaignMember.SObjectType)
.max('Campaign', Campaign.BudgetedCost)
.toAggregate();
max related field with alias
Signature
Queryable max(String relationshipName, SObjectField field, String alias)
Example
SELECT MAX(Campaign.BudgetedCost) budgetedCost FROM CampaignMember
SOQL.of(CampaignMember.SObjectType)
.max('Campaign', Campaign.BudgetedCost, 'budgetedCost')
.toAggregate();
sum
Signature
Queryable sum(SObjectField field)
Example
SELECT SUM(Amount) FROM Opportunity
SOQL.of(Opportunity.SObjectType).sum(Opportunity.Amount).toAggregate();
sum with alias
Signature
Queryable sum(SObjectField field, String alias)
Example
SELECT SUM(Amount) amount FROM Opportunity
SOQL.of(Opportunity.SObjectType).sum(Opportunity.Amount, 'amount').toAggregate();
GROUPING
grouping
Signature
Queryable grouping(SObjectField field, String alias)
Example
SELECT LeadSource, Rating,
GROUPING(LeadSource) grpLS, GROUPING(Rating) grpRating,
COUNT(Name) cnt
FROM Lead
GROUP BY ROLLUP(LeadSource, Rating)
SOQL.of(Lead.SObjectType)
.with(Lead.LeadSource, Lead.Rating)
.grouping(Lead.LeadSource, 'grpLS')
.grouping(Lead.Rating, 'grpRating')
.count(Lead.Name, 'cnt')
.groupByRollup(Lead.LeadSource)
.groupByRollup(Lead.Rating)
.toAggregated();
sum related field
Signature
sum(String relationshipName, SObjectField field)
Example
SELECT SUM(Opportunity.Amount) FROM OpportunityLineItem
SOQL.of(OpportunityLineItem.SObjectType)
.sum('Opportunity', Opportunity.Amount)
.toAggregate();
sum related field with alias
Signature
Queryable sum(String relationshipName, SObjectField field, String alias)
Example
SELECT SUM(Opportunity.Amount) amount FROM OpportunityLineItem
SOQL.of(OpportunityLineItem.SObjectType)
.sum('Opportunity', Opportunity.Amount, 'amount')
.toAggregate();
toLabel
To translate SOQL query results into the language of the user who submits the query, use the toLabel method.
Signature
Queryable toLabel(SObjectField field)
Queryable toLabel(SObjectField field, String alias)
Queryable toLabel(String field)
Queryable toLabel(String field, String alias)
Example
SELECT Company, toLabel(Status) FROM Lead
SOQL.of(Lead.SObjectType)
.with(Lead.Company)
.toLabel(Lead.Status)
.toList();
SELECT Company, toLabel(Status) leadStatus FROM Lead
SOQL.of(Lead.SObjectType)
.with(Lead.Company)
.toLabel(Lead.Status, 'leadStatus')
.toList();
SELECT Company, toLabel(Recordtype.Name) FROM Lead
SOQL.of(Lead.SObjectType)
.with(Lead.Company)
.toLabel('Recordtype.Name')
.toList();
SELECT Company, toLabel(Recordtype.Name) recordTypeName FROM Lead
SOQL.of(Lead.SObjectType)
.with(Lead.Company)
.toLabel('Recordtype.Name', 'recordTypeName')
.toList();
format
Signature
format(SObjectField field)
format(SObjectField field, String alias)
Example
SELECT FORMAT(Amount) FROM Opportunity
SOQL.of(Opportunity.SObjectType)
.format(Opportunity.Amount)
.toList();
SELECT FORMAT(Amount) amt FROM Opportunity
SOQL.of(Opportunity.SObjectType)
.format(Opportunity.Amount, 'amt')
.toList();