Skip to content

Commit

Permalink
Upgraded to Summer '19 (API v46.0)
Browse files Browse the repository at this point in the history
  • Loading branch information
jongpie committed Sep 19, 2019
1 parent b26d786 commit 2d90db7
Show file tree
Hide file tree
Showing 18 changed files with 278 additions and 241 deletions.
28 changes: 14 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,23 +21,23 @@ A dynamic SOQL query & SOSL search library for for Salesforce Apex<br /><br />
## Overview
There are 3 main builder classes

&nbsp; | SobjectQueryBuilder | AggregateQueryBuilder | SearchBuilder
&nbsp; | SObjectQueryBuilder | AggregateQueryBuilder | SearchBuilder
------- | --------------------|-----------------------|--------------
Super Class | Soql.cls (Queries) | Soql.cls (Queries) | Sosl.cls (Searches) | -
Action | Queries an Sobject | Queries an Sobject | Searches 1 or more Sobjects
Returns | `Sobject` or `List<Sobject>` | `AggregateResult` or `List<AggregateResult>` | `Sobject`, `List<Sobject>` or `List<List<Sobject>>`
Action | Queries an SObject | Queries an SObject | Searches 1 or more SObjects
Returns | `SObject` or `List<SObject>` | `AggregateResult` or `List<AggregateResult>` | `SObject`, `List<SObject>` or `List<List<SObject>>`

## SOQL Sobject Query Examples
## SOQL SObject Query Examples
**Basic Usage:** Query an object & return the object's ID and display name field (typically the 'Name' field, but some objects use other fields, like Task.Subject and Case.CaseNumber). Since no filters have been added, this query would also return all accounts.

```
List<Account> accounts = new SobjectQueryBuilder(Schema.Account.SobjectType).getResults();
List<Account> accounts = new SObjectQueryBuilder(Schema.Account.SObjectType).getResults();
```

**Advanced Usage:** Query an object & leverage the query builder methods. The order of the builder methods does not matter - you can arrange the calls to these methods in any order that you prefer.

```
SobjectQueryBuilder accountQuery = new SobjectQueryBuilder(Schema.Account.SobjectType) // Query the account object
SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType) // Query the account object
.addField(Schema.Account.ParentId) // Include the ParentId field, using SObjectField. The current user must have at least read access to the field
.addField(Schema.Account.Type, Soql.FieldCategory.UPDATEABLE) // Include the Type field if the current user has access to update it
.addFields(Soql.FieldCategory.CUSTOM) // Include all custom fields - only fields that are accessible to the user are included
Expand Down Expand Up @@ -74,8 +74,8 @@ System.debug(accountQuery.getQuery());
**Basic Usage:** Search a single object

```
SobjectQueryBuilder userQuery = new SobjectQueryBuilder(Schema.User.SobjectType); // Create an instance of SobjectQueryBuilder for an Sobject - you can include additional fields, filters, etc
SearchBuilder userSearch = new SearchBuilder('my search term', userQuery); // Create a new SearchBuilder instance with a search term & instance of SobjectQueryBuilder
SObjectQueryBuilder userQuery = new SObjectQueryBuilder(Schema.User.SObjectType); // Create an instance of SObjectQueryBuilder for an SObject - you can include additional fields, filters, etc
SearchBuilder userSearch = new SearchBuilder('my search term', userQuery); // Create a new SearchBuilder instance with a search term & instance of SObjectQueryBuilder
List<User> userSearchResults = userSearch.getFirstResults(); // SearchBuilder returns a list of lists of sobjects - getFirstResults() returns the first list
/****** Resulting output *******
Expand All @@ -88,13 +88,13 @@ System.debug(userSearch.getSearch());
**Advanced Usage:** Search several objects

```
SobjectQueryBuilder accountQuery = new SobjectQueryBuilder(Schema.Account.SobjectType); // Create an instance of SobjectQueryBuilder for the Account object
SobjectQueryBuilder contactQuery = new SobjectQueryBuilder(Schema.Contact.SobjectType); // Create an instance of SobjectQueryBuilder for the Contact object
SobjectQueryBuilder leadQuery = new SobjectQueryBuilder(Schema.Lead.SobjectType); // Create an instance of SobjectQueryBuilder for the Lead object
List<SobjectQueryBuilder> queries = new List<SobjectQueryBuilder>{contactQuery, accountQuery, leadQuery}; // Add the SobjectQueryBuilder queries to a list
SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType); // Create an instance of SObjectQueryBuilder for the Account object
SObjectQueryBuilder contactQuery = new SObjectQueryBuilder(Schema.Contact.SObjectType); // Create an instance of SObjectQueryBuilder for the Contact object
SObjectQueryBuilder leadQuery = new SObjectQueryBuilder(Schema.Lead.SObjectType); // Create an instance of SObjectQueryBuilder for the Lead object
List<SObjectQueryBuilder> queries = new List<SObjectQueryBuilder>{contactQuery, accountQuery, leadQuery}; // Add the SObjectQueryBuilder queries to a list
SearchBuilder mySearch = new SearchBuilder('my search term', queries); // Create a new SearchBuilder instance with a search term & the list of SobjectQueryBuilder queries
List<List<Sobject>> searchResults = mySearch.getResults(); // Returns all search results
SearchBuilder mySearch = new SearchBuilder('my search term', queries); // Create a new SearchBuilder instance with a search term & the list of SObjectQueryBuilder queries
List<List<SObject>> searchResults = mySearch.getResults(); // Returns all search results
/****** Resulting output *******
FIND 'my search term' IN ALL FIELDS RETURNING Account(Id, Name), Contact(Id, Name), Lead(Id, Name)
Expand Down
40 changes: 20 additions & 20 deletions src/classes/AggregateQueryBuilder.cls
Original file line number Diff line number Diff line change
Expand Up @@ -8,24 +8,24 @@ public class AggregateQueryBuilder extends Soql {
private List<AggregateField> aggregateFields;
private List<String> havingConditions;

public AggregateQueryBuilder(Schema.SobjectType sobjectType) {
public AggregateQueryBuilder(Schema.SObjectType sobjectType) {
super(sobjectType, false);

this.aggregateFields = new List<AggregateField>();
this.havingConditions = new List<String>();
}

public AggregateQueryBuilder groupByField(Schema.SobjectField field) {
return this.groupByFields(new List<Schema.SobjectField>{field});
public AggregateQueryBuilder groupByField(Schema.SObjectField field) {
return this.groupByFields(new List<Schema.SObjectField>{field});
}

public AggregateQueryBuilder groupByField(Soql.QueryField queryField) {
return this.groupByFields(new List<Soql.QueryField>{queryField});
}

public AggregateQueryBuilder groupByFields(List<Schema.SobjectField> fields) {
public AggregateQueryBuilder groupByFields(List<Schema.SObjectField> fields) {
List<Soql.QueryField> queryFields = new List<Soql.QueryField>();
for(Schema.SobjectField field : fields) {
for(Schema.SObjectField field : fields) {
queryFields.add(new Soql.QueryField(field));
}
return this.groupByFields(queryFields);
Expand All @@ -49,11 +49,11 @@ public class AggregateQueryBuilder extends Soql {
return this.setHasChanged();
}

public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Schema.SobjectField field) {
public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field) {
return this.addAggregate(aggregateFunction, field, null);
}

public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Schema.SobjectField field, String fieldAlias) {
public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, String fieldAlias) {
return this.addAggregate(aggregateFunction, new Soql.QueryField(field), fieldAlias);
}

Expand All @@ -62,11 +62,11 @@ public class AggregateQueryBuilder extends Soql {
}

public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, String fieldAlias) {
this.aggregateFields.add(new AggregateField(this.getSobjectType(), aggregateFunction, queryField, fieldAlias));
this.aggregateFields.add(new AggregateField(this.getSObjectType(), aggregateFunction, queryField, fieldAlias));
return this.setHasChanged();
}

public AggregateQueryBuilder havingAggregate(Soql.Aggregate aggregateFunction, Schema.SobjectField field, Soql.Operator operator, Object value) {
public AggregateQueryBuilder havingAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, Soql.Operator operator, Object value) {
return this.havingAggregate(aggregateFunction, new Soql.QueryField(field), operator, value);
}

Expand All @@ -75,7 +75,7 @@ public class AggregateQueryBuilder extends Soql {
return this.setHasChanged();
}

public AggregateQueryBuilder filterWhere(Schema.SobjectField field, Soql.Operator operator, Object value) {
public AggregateQueryBuilder filterWhere(Schema.SObjectField field, Soql.Operator operator, Object value) {
return this.filterWhere(new Soql.QueryField(field), operator, value);
}

Expand All @@ -97,23 +97,23 @@ public class AggregateQueryBuilder extends Soql {
return this.setHasChanged();
}

public AggregateQueryBuilder orderByField(Schema.SobjectField field) {
public AggregateQueryBuilder orderByField(Schema.SObjectField field) {
return this.orderByField(field, null);
}

public AggregateQueryBuilder orderByField(Soql.QueryField queryField) {
return this.orderByField(queryField, null);
}

public AggregateQueryBuilder orderByField(Schema.SobjectField field, Soql.SortOrder sortOrder) {
public AggregateQueryBuilder orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder) {
return this.orderByField(field, sortOrder, null);
}

public AggregateQueryBuilder orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder) {
return this.orderByField(queryField, sortOrder, null);
}

public AggregateQueryBuilder orderByField(Schema.SobjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
public AggregateQueryBuilder orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
return this.orderByField(new Soql.QueryField(field), sortOrder, sortNullsFirst);
}

Expand All @@ -122,15 +122,15 @@ public class AggregateQueryBuilder extends Soql {
return this.setHasChanged();
}

public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SobjectField field) {
public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field) {
return this.orderByAggregate(aggregateFunction, field, null);
}

public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SobjectField field, Soql.SortOrder sortOrder) {
public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, Soql.SortOrder sortOrder) {
return this.orderByAggregate(aggregateFunction, field, sortOrder, null);
}

public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SobjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
return this.orderByAggregate(aggregateFunction, new Soql.QueryField(field), sortOrder, sortNullsFirst);
}

Expand Down Expand Up @@ -171,8 +171,8 @@ public class AggregateQueryBuilder extends Soql {

String combinedFieldsString = queryFieldString + aggregateFieldDelimiter + aggregateQueryFieldString;
if(String.isBlank(combinedFieldsString)) {
Schema.SobjectField idField = this.getSobjectType().getDescribe().fields.getMap().get('Id');
combinedFieldsString = new AggregateField(this.getSobjectType(), Soql.Aggregate.COUNT, new Soql.QueryField(idField), null).toString();
Schema.SObjectField idField = this.getSObjectType().getDescribe().fields.getMap().get('Id');
combinedFieldsString = new AggregateField(this.getSObjectType(), Soql.Aggregate.COUNT, new Soql.QueryField(idField), null).toString();
}

this.query = 'SELECT ' + combinedFieldsString
Expand Down Expand Up @@ -245,10 +245,10 @@ public class AggregateQueryBuilder extends Soql {

private class AggregateField {

private Schema.SobjectType sobjectType;
private Schema.SObjectType sobjectType;
private String aggregateFieldPath;

public AggregateField(Schema.SobjectType sobjectType, Soql.Aggregate aggregateFunction, Soql.QueryField queryField, String fieldAlias) {
public AggregateField(Schema.SObjectType sobjectType, Soql.Aggregate aggregateFunction, Soql.QueryField queryField, String fieldAlias) {
this.sobjectType = sobjectType;
this.aggregateFieldPath = this.getAggregateFieldPath(aggregateFunction, queryField, fieldAlias);
}
Expand Down
2 changes: 1 addition & 1 deletion src/classes/AggregateQueryBuilder.cls-meta.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ApexClass xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>43.0</apiVersion>
<apiVersion>46.0</apiVersion>
<status>Active</status>
</ApexClass>
Loading

0 comments on commit 2d90db7

Please sign in to comment.