diff --git a/.forceignore b/.forceignore
new file mode 100644
index 00000000..7b5b5a71
--- /dev/null
+++ b/.forceignore
@@ -0,0 +1,12 @@
+# List files or directories below to ignore them when running force:source:push, force:source:pull, and force:source:status
+# More information: https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_exclude_source.htm
+#
+
+package.xml
+
+# LWC configuration files
+**/jsconfig.json
+**/.eslintrc.json
+
+# LWC Jest
+**/__tests__/**
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 00000000..140f4745
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+# Folders to exclude
+.settings/
+.sfdx/
+.vscode/
+*/main/default/
+
+# Files to exclude
+*.log
+
diff --git a/.travis.yml b/.travis.yml
index 22f74c66..7aa5a3f9 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,27 @@
-language: node_js
-node_js:
- - "7"
-install:
- - npm install -g jsforce-metadata-tools
+sudo: true
+os: trusty
+cache: false
+
+env:
+- URL=https://developer.salesforce.com/media/salesforce-cli/sfdx-linux-amd64.tar.xz
+
+before_install:
+ #- openssl aes-256-cbc -K $encrypted_b1fbf710b918_key -iv $encrypted_b1fbf710b918_iv
+ # -in assets/server.key.enc -out assets/server.key -d
+ - export SFDX_AUTOUPDATE_DISABLE=false
+ - export SFDX_USE_GENERIC_UNIX_KEYCHAIN=true
+ - export SFDX_DOMAIN_RETRY=300
+ - export SFDX_DISABLE_APP_HUB=true
+ - export SFDX_LOG_LEVEL=DEBUG
+ - mkdir sfdx
+ - wget -qO- $URL | tar xJ -C sfdx --strip-components 1
+ - "./sfdx/install"
+ - export PATH=./sfdx/$(pwd):$PATH
+ - sfdx --version
+ - sfdx plugins --core
+ - echo $SFDX_URL > sfdx_url_file
+ - sfdx force:auth:sfdxurl:store --sfdxurlfile sfdx_url_file --setalias nebula_ci
+
script:
- - jsforce-deploy --checkOnly -u $DEPLOYMENT_USERNAME -p $DEPLOYMENT_PASSWORD$DEPLOYMENT_TOKEN -D $TRAVIS_BUILD_DIR/src -l $DEPLOYMENT_LOGIN_URL --rollbackOnError true --testLevel $DEPLOYMENT_TEST_LEVEL --pollTimeout $POLL_TIMEOUT --pollInterval $POLL_INTERVAL--verbose
\ No newline at end of file
+ - sfdx force:config:set apiVersion=49.0
+ - sfdx force:source:deploy --checkonly --manifest ./manifest/package.xml --testlevel RunLocalTests --targetusername nebula_ci --verbose
diff --git a/README.md b/README.md
index 0ce74eee..2fc9bcdd 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ A dynamic SOQL query & SOSL search library for for Salesforce Apex
## Overview
There are 3 main builder classes
- | SObjectQueryBuilder | AggregateQueryBuilder | SearchBuilder
+ | Query | AggregateQuery | RecordSearch
------- | --------------------|-----------------------|--------------
Super Class | Soql.cls (Queries) | Soql.cls (Queries) | Sosl.cls (Searches) | -
Action | Queries an SObject | Queries an SObject | Searches 1 or more SObjects
@@ -31,13 +31,13 @@ Returns | `SObject` or `List` | `AggregateResult` or `List accounts = new SObjectQueryBuilder(Schema.Account.SObjectType).getResults();
+List accounts = new Query(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
+Query accountQuery = new Query(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
@@ -74,9 +74,9 @@ 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
-List userSearchResults = userSearch.getFirstResults(); // SearchBuilder returns a list of lists of sobjects - getFirstResults() returns the first list
+Query userQuery = new Query(Schema.User.SObjectType); // Create an instance of Query for an SObject - you can include additional fields, filters, etc
+RecordSearch userSearch = new RecordSearch('my search term', userQuery); // Create a new RecordSearch instance with a search term & instance of Query
+List userSearchResults = userSearch.getFirstResults(); // RecordSearch returns a list of lists of sobjects - getFirstResults() returns the first list
/****** Resulting output *******
FIND 'my search term' IN ALL FIELDS RETURNING User(Id, Name)
@@ -88,12 +88,12 @@ 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 queries = new List{contactQuery, accountQuery, leadQuery}; // Add the SObjectQueryBuilder queries to a list
+Query accountQuery = new Query(Schema.Account.SObjectType); // Create an instance of Query for the Account object
+Query contactQuery = new Query(Schema.Contact.SObjectType); // Create an instance of Query for the Contact object
+Query leadQuery = new Query(Schema.Lead.SObjectType); // Create an instance of Query for the Lead object
+List queries = new List{contactQuery, accountQuery, leadQuery}; // Add the Query 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
+RecordSearch mySearch = new RecordSearch('my search term', queries); // Create a new RecordSearch instance with a search term & the list of Query queries
List> searchResults = mySearch.getResults(); // Returns all search results
/****** Resulting output *******
diff --git a/manifest/package.xml b/manifest/package.xml
new file mode 100644
index 00000000..282efc9d
--- /dev/null
+++ b/manifest/package.xml
@@ -0,0 +1,16 @@
+
+
+ NebulaQueryAndSearch
+
+ AggregateQuery
+ AggregateQuery_Tests
+ Query
+ Query_Tests
+ RecordSearch
+ RecordSearch_Tests
+ Soql
+ Sosl
+ ApexClass
+
+ 49.0
+
diff --git a/src/classes/AggregateQueryBuilder.cls b/nebula-app-framework/main/query-and-search/classes/AggregateQuery.cls
similarity index 69%
rename from src/classes/AggregateQueryBuilder.cls
rename to nebula-app-framework/main/query-and-search/classes/AggregateQuery.cls
index 22df2be6..abd06e4f 100644
--- a/src/classes/AggregateQueryBuilder.cls
+++ b/nebula-app-framework/main/query-and-search/classes/AggregateQuery.cls
@@ -2,28 +2,28 @@
* This file is part of the Nebula Query & Search project, released under the MIT License. *
* See LICENSE file or go to https://github.com/jongpie/NebulaQueryAndSearch for full license details. *
******************************************************************************************************/
-public class AggregateQueryBuilder extends Soql {
+public class AggregateQuery extends Soql {
private Soql.GroupingDimension groupingDimension;
private List aggregateFields;
private List havingConditions;
- public AggregateQueryBuilder(Schema.SObjectType sobjectType) {
+ public AggregateQuery(Schema.SObjectType sobjectType) {
super(sobjectType, false);
this.aggregateFields = new List();
this.havingConditions = new List();
}
- public AggregateQueryBuilder groupByField(Schema.SObjectField field) {
+ public AggregateQuery groupByField(Schema.SObjectField field) {
return this.groupByFields(new List{field});
}
- public AggregateQueryBuilder groupByField(Soql.QueryField queryField) {
+ public AggregateQuery groupByField(Soql.QueryField queryField) {
return this.groupByFields(new List{queryField});
}
- public AggregateQueryBuilder groupByFields(List fields) {
+ public AggregateQuery groupByFields(List fields) {
List queryFields = new List();
for(Schema.SObjectField field : fields) {
queryFields.add(new Soql.QueryField(field));
@@ -31,12 +31,12 @@ public class AggregateQueryBuilder extends Soql {
return this.groupByFields(queryFields);
}
- public AggregateQueryBuilder groupByFields(List queryFields) {
+ public AggregateQuery groupByFields(List queryFields) {
super.doAddFields(queryFields, null);
return this.setHasChanged();
}
- public AggregateQueryBuilder groupByFieldSet(Schema.FieldSet fieldSet) {
+ public AggregateQuery groupByFieldSet(Schema.FieldSet fieldSet) {
List queryFields = new List();
for(Schema.FieldSetMember fieldSetMember : fieldSet.getFields()) {
queryFields.add(new Soql.QueryField(this.sobjectType, fieldSetMember.getFieldPath()));
@@ -44,120 +44,120 @@ public class AggregateQueryBuilder extends Soql {
return this.groupByFields(queryFields);
}
- public AggregateQueryBuilder usingGroupingDimension(Soql.GroupingDimension groupingDimension) {
+ public AggregateQuery usingGroupingDimension(Soql.GroupingDimension groupingDimension) {
this.groupingDimension = groupingDimension;
return this.setHasChanged();
}
- public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field) {
+ public AggregateQuery 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 AggregateQuery addAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, String fieldAlias) {
return this.addAggregate(aggregateFunction, new Soql.QueryField(field), fieldAlias);
}
- public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField) {
+ public AggregateQuery addAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField) {
return this.addAggregate(aggregateFunction, queryField, null);
}
- public AggregateQueryBuilder addAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, String fieldAlias) {
+ public AggregateQuery addAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, String 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 AggregateQuery havingAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, Soql.Operator operator, Object value) {
return this.havingAggregate(aggregateFunction, new Soql.QueryField(field), operator, value);
}
- public AggregateQueryBuilder havingAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, Soql.Operator operator, Object value) {
+ public AggregateQuery havingAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, Soql.Operator operator, Object value) {
this.havingConditions.add(aggregateFunction.name() + '(' + queryField + ') ' + Soql.getOperatorValue(operator) + ' ' + value);
return this.setHasChanged();
}
- public AggregateQueryBuilder filterWhere(Schema.SObjectField field, Soql.Operator operator, Object value) {
+ public AggregateQuery filterWhere(Schema.SObjectField field, Soql.Operator operator, Object value) {
return this.filterWhere(new Soql.QueryField(field), operator, value);
}
- public AggregateQueryBuilder filterWhere(Soql.QueryField queryField, Soql.Operator operator, Object value) {
+ public AggregateQuery filterWhere(Soql.QueryField queryField, Soql.Operator operator, Object value) {
return this.filterWhere(new Soql.QueryFilter(queryField, operator, value));
}
- public AggregateQueryBuilder filterWhere(Soql.QueryFilter filter) {
+ public AggregateQuery filterWhere(Soql.QueryFilter filter) {
return this.filterWhere(new List{filter});
}
- public AggregateQueryBuilder filterWhere(List filters) {
+ public AggregateQuery filterWhere(List filters) {
super.doFilterWhere(filters);
return this.setHasChanged();
}
- public AggregateQueryBuilder orFilterWhere(List filters) {
+ public AggregateQuery orFilterWhere(List filters) {
super.doOrFilterWhere(filters);
return this.setHasChanged();
}
- public AggregateQueryBuilder orderByField(Schema.SObjectField field) {
+ public AggregateQuery orderByField(Schema.SObjectField field) {
return this.orderByField(field, null);
}
- public AggregateQueryBuilder orderByField(Soql.QueryField queryField) {
+ public AggregateQuery orderByField(Soql.QueryField queryField) {
return this.orderByField(queryField, null);
}
- public AggregateQueryBuilder orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder) {
+ public AggregateQuery orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder) {
return this.orderByField(field, sortOrder, null);
}
- public AggregateQueryBuilder orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder) {
+ public AggregateQuery 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 AggregateQuery orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
return this.orderByField(new Soql.QueryField(field), sortOrder, sortNullsFirst);
}
- public AggregateQueryBuilder orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
+ public AggregateQuery orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
super.doOrderBy(queryField, sortOrder, sortNullsFirst);
return this.setHasChanged();
}
- public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field) {
+ public AggregateQuery 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 AggregateQuery 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 AggregateQuery orderByAggregate(Soql.Aggregate aggregateFunction, Schema.SObjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
return this.orderByAggregate(aggregateFunction, new Soql.QueryField(field), sortOrder, sortNullsFirst);
}
- public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField) {
+ public AggregateQuery orderByAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField) {
return this.orderByAggregate(aggregateFunction, queryField, null);
}
- public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, Soql.SortOrder sortOrder) {
+ public AggregateQuery orderByAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, Soql.SortOrder sortOrder) {
return this.orderByAggregate(aggregateFunction, queryField, sortOrder, null);
}
- public AggregateQueryBuilder orderByAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
+ public AggregateQuery orderByAggregate(Soql.Aggregate aggregateFunction, Soql.QueryField queryField, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
super.doOrderBy(aggregateFunction.name() + '(' + queryField + ')', sortOrder, sortNullsFirst);
return this.setHasChanged();
}
- public AggregateQueryBuilder limitTo(Integer numberOfRecords) {
+ public AggregateQuery limitTo(Integer numberOfRecords) {
super.doLimitTo(numberOfRecords);
return this.setHasChanged();
}
- public AggregateQueryBuilder offsetBy(Integer offset) {
+ public AggregateQuery offsetBy(Integer offset) {
super.doOffsetBy(offset);
return this.setHasChanged();
}
- public AggregateQueryBuilder cacheResults() {
+ public AggregateQuery cacheResults() {
super.doCacheResults();
return this;
}
@@ -210,7 +210,7 @@ public class AggregateQueryBuilder extends Soql {
return (List)super.doGetResults();
}
- private AggregateQueryBuilder setHasChanged() {
+ private AggregateQuery setHasChanged() {
this.hasChanged = true;
return this;
}
@@ -219,7 +219,7 @@ public class AggregateQueryBuilder extends Soql {
if(this.aggregateFields.isEmpty()) return '';
List aggregateFieldStrings = new List();
- for(AggregateQueryBuilder.AggregateField aggregatedField : this.aggregateFields) {
+ for(AggregateQuery.AggregateField aggregatedField : this.aggregateFields) {
aggregateFieldStrings.add(aggregatedField.toString());
}
aggregateFieldStrings.sort();
diff --git a/src/classes/SObjectQueryBuilder.cls-meta.xml b/nebula-app-framework/main/query-and-search/classes/AggregateQuery.cls-meta.xml
similarity index 80%
rename from src/classes/SObjectQueryBuilder.cls-meta.xml
rename to nebula-app-framework/main/query-and-search/classes/AggregateQuery.cls-meta.xml
index 91b23b86..8e4d11f8 100644
--- a/src/classes/SObjectQueryBuilder.cls-meta.xml
+++ b/nebula-app-framework/main/query-and-search/classes/AggregateQuery.cls-meta.xml
@@ -1,5 +1,5 @@
- 46.0
+ 49.0
Active
diff --git a/src/classes/SObjectQueryBuilder.cls b/nebula-app-framework/main/query-and-search/classes/Query.cls
similarity index 80%
rename from src/classes/SObjectQueryBuilder.cls
rename to nebula-app-framework/main/query-and-search/classes/Query.cls
index 9813ac37..eb90bd61 100644
--- a/src/classes/SObjectQueryBuilder.cls
+++ b/nebula-app-framework/main/query-and-search/classes/Query.cls
@@ -2,14 +2,14 @@
* This file is part of the Nebula Query & Search project, released under the MIT License. *
* See LICENSE file or go to https://github.com/jongpie/NebulaQueryAndSearch for full license details. *
******************************************************************************************************/
-public class SObjectQueryBuilder extends Soql {
+public class Query extends Soql {
private String displayFieldApiName;
private List polymorphicFieldStatements;
private List childRelationshipQueries;
private Boolean forReference, forUpdate, forView, includeLabels, includeFormattedValues;
- public SObjectQueryBuilder(Schema.SObjectType sobjectType) {
+ public Query(Schema.SObjectType sobjectType) {
super(sobjectType, true);
this.displayFieldApiName = this.getDisplayFieldApiName(this.sobjectType);
@@ -24,27 +24,27 @@ public class SObjectQueryBuilder extends Soql {
this.addDefaultFields();
}
- public SObjectQueryBuilder addField(Schema.SObjectField field) {
+ public Query addField(Schema.SObjectField field) {
return this.addField(field, null);
}
- public SObjectQueryBuilder addField(Schema.SObjectField field, Soql.FieldCategory fieldCategory) {
+ public Query addField(Schema.SObjectField field, Soql.FieldCategory fieldCategory) {
return this.addFields(new List{field}, fieldCategory);
}
- public SObjectQueryBuilder addField(Soql.QueryField queryField) {
+ public Query addField(Soql.QueryField queryField) {
return this.addField(queryField, null);
}
- public SObjectQueryBuilder addField(Soql.QueryField queryField, Soql.FieldCategory fieldCategory) {
+ public Query addField(Soql.QueryField queryField, Soql.FieldCategory fieldCategory) {
return this.addFields(new List{queryField}, fieldCategory);
}
- public SObjectQueryBuilder addFields(List fields) {
+ public Query addFields(List fields) {
return this.addFields(fields, null);
}
- public SObjectQueryBuilder addFields(List fields, Soql.FieldCategory fieldCategory) {
+ public Query addFields(List fields, Soql.FieldCategory fieldCategory) {
List queryFields = new List();
for(Schema.SObjectField field : fields) {
queryFields.add(new Soql.QueryField(field));
@@ -52,11 +52,11 @@ public class SObjectQueryBuilder extends Soql {
return this.addFields(queryFields, fieldCategory);
}
- public SObjectQueryBuilder addFields(List queryFields) {
+ public Query addFields(List queryFields) {
return this.addFields(queryFields, null);
}
- public SObjectQueryBuilder addFields(Soql.FieldCategory fieldCategory) {
+ public Query addFields(Soql.FieldCategory fieldCategory) {
List queryFields = new List();
for(Schema.SObjectField field : this.sobjectDescribe.fields.getMap().values()) {
queryFields.add(new Soql.QueryField(field));
@@ -64,16 +64,16 @@ public class SObjectQueryBuilder extends Soql {
return this.addFields(queryFields, fieldCategory);
}
- public SObjectQueryBuilder addFields(List queryFields, Soql.FieldCategory fieldCategory) {
+ public Query addFields(List queryFields, Soql.FieldCategory fieldCategory) {
super.doAddFields(queryFields, fieldCategory);
return this.setHasChanged();
}
- public SObjectQueryBuilder addFieldSet(Schema.FieldSet fieldSet) {
+ public Query addFieldSet(Schema.FieldSet fieldSet) {
return this.addFieldSet(fieldSet, null);
}
- public SObjectQueryBuilder addFieldSet(Schema.FieldSet fieldSet, Soql.FieldCategory fieldCategory) {
+ public Query addFieldSet(Schema.FieldSet fieldSet, Soql.FieldCategory fieldCategory) {
List queryFields = new List();
for(Schema.FieldSetMember fieldSetMember : fieldSet.getFields()) {
queryFields.add(new Soql.QueryField(this.sobjectType, fieldSetMember.getFieldPath()));
@@ -81,11 +81,11 @@ public class SObjectQueryBuilder extends Soql {
return this.addFields(queryFields, fieldCategory);
}
- public SObjectQueryBuilder addPolymorphicFields(Schema.SObjectField polymorphicRelationshipField) {
+ public Query addPolymorphicFields(Schema.SObjectField polymorphicRelationshipField) {
return addPolymorphicFields(polymorphicRelationshipField, new Map>());
}
- public SObjectQueryBuilder addPolymorphicFields(Schema.SObjectField polymorphicRelationshipField, Map> fieldsBySObjectType) {
+ public Query addPolymorphicFields(Schema.SObjectField polymorphicRelationshipField, Map> fieldsBySObjectType) {
Map> queryFieldsBySObjectType = new Map>();
for(Schema.SObjectType sobjectType : fieldsBySObjectType.keySet()) {
List queryFields = new List();
@@ -97,7 +97,7 @@ public class SObjectQueryBuilder extends Soql {
return this.addPolymorphicFields(polymorphicRelationshipField, queryFieldsBySObjectType);
}
- public SObjectQueryBuilder addPolymorphicFields(Schema.SObjectField polymorphicRelationshipField, Map> queryFieldsBySObjectType) {
+ public Query addPolymorphicFields(Schema.SObjectField polymorphicRelationshipField, Map> queryFieldsBySObjectType) {
String polymorphicFieldStatement = queryFieldsBySObjectType.isEmpty() ? '' : 'TYPEOF ' + polymorphicRelationshipField.getDescribe().getRelationshipName();
for(Schema.SObjectType sobjectType : queryFieldsBySObjectType.keySet()) {
List fieldNames = new List();
@@ -128,25 +128,25 @@ public class SObjectQueryBuilder extends Soql {
return this.setHasChanged();
}
- public SObjectQueryBuilder includeLabels() {
+ public Query includeLabels() {
this.includeLabels = true;
return this.setHasChanged();
}
- public SObjectQueryBuilder includeFormattedValues() {
+ public Query includeFormattedValues() {
this.includeFormattedValues = true;
return this.setHasChanged();
}
- public SObjectQueryBuilder removeField(Schema.SObjectField field) {
+ public Query removeField(Schema.SObjectField field) {
return this.removeFields(new List{field});
}
- public SObjectQueryBuilder removeField(Soql.QueryField queryField) {
+ public Query removeField(Soql.QueryField queryField) {
return this.removeFields(new List{queryField});
}
- public SObjectQueryBuilder removeFields(Schema.FieldSet fieldSet) {
+ public Query removeFields(Schema.FieldSet fieldSet) {
List queryFields = new List();
for(Schema.FieldSetMember fieldSetMember : fieldSet.getFields()) {
queryFields.add(new Soql.QueryField(this.getSObjectType(), fieldSetMember.getFieldPath()));
@@ -154,7 +154,7 @@ public class SObjectQueryBuilder extends Soql {
return this.removeFields(queryFields);
}
- public SObjectQueryBuilder removeFields(List fields) {
+ public Query removeFields(List fields) {
List queryFields = new List();
for(Schema.SObjectField field : fields) {
queryFields.add(new Soql.QueryField(field));
@@ -162,116 +162,116 @@ public class SObjectQueryBuilder extends Soql {
return this.removeFields(queryFields);
}
- public SObjectQueryBuilder removeFields(List queryFields) {
+ public Query removeFields(List queryFields) {
super.doRemoveFields(queryFields);
return this.setHasChanged();
}
- public SObjectQueryBuilder includeRelatedRecords(Schema.SObjectField childToParentRelationshipField, SObjectQueryBuilder relatedSObjectQuery) {
+ public Query includeRelatedRecords(Schema.SObjectField childToParentRelationshipField, Query relatedSObjectQuery) {
this.childRelationshipQueries.add(relatedSObjectQuery.getRelatedRecordsQuery(childToParentRelationshipField));
return this.setHasChanged();
}
- public SObjectQueryBuilder usingScope(Scope scope) {
+ public Query usingScope(Scope scope) {
super.doUsingScope(scope);
return this.setHasChanged();
}
- public SObjectQueryBuilder filterWhere(Schema.SObjectField field, Soql.Operator operator, Object value) {
+ public Query filterWhere(Schema.SObjectField field, Soql.Operator operator, Object value) {
return this.filterWhere(new Soql.QueryField(field), operator, value);
}
- public SObjectQueryBuilder filterWhere(Soql.QueryField queryField, Soql.Operator operator, Object value) {
+ public Query filterWhere(Soql.QueryField queryField, Soql.Operator operator, Object value) {
return this.filterWhere(new Soql.QueryFilter(queryField, operator, value));
}
- public SObjectQueryBuilder filterWhere(Soql.QueryFilter filter) {
+ public Query filterWhere(Soql.QueryFilter filter) {
return this.filterWhere(new List{filter});
}
- public SObjectQueryBuilder filterWhere(List filters) {
+ public Query filterWhere(List filters) {
super.doFilterWhere(filters);
return this.setHasChanged();
}
- public SObjectQueryBuilder orFilterWhere(List filters) {
+ public Query orFilterWhere(List filters) {
super.doOrFilterWhere(filters);
return this.setHasChanged();
}
- //public SObjectQueryBuilder filterWhereInSubquery(Schema.SObjectType childSObjectType, Schema.SObjectField lookupFieldOnChildSObject) {
+ //public Query filterWhereInSubquery(Schema.SObjectType childSObjectType, Schema.SObjectField lookupFieldOnChildSObject) {
//this.whereFilters.add('Id IN (SELECT ' + lookupFieldOnChildSObject + ' FROM ' + childSObjectType + ')');
//return this.setHasChanged();
//}
//
- //public SObjectQueryBuilder filterWhereInSubquery(SObjectQueryBuilder childSObjectQueryBuilder, Schema.SObjectField lookupFieldOnChildSObject) {
- //String subqueryString = childSObjectQueryBuilder.getSubquery(lookupFieldOnChildSObject);
+ //public Query filterWhereInSubquery(Query childQuery, Schema.SObjectField lookupFieldOnChildSObject) {
+ //String subqueryString = childQuery.getSubquery(lookupFieldOnChildSObject);
//this.whereFilters.add('Id IN ' + subqueryString);
//return this.setHasChanged();
//}
//
- //public SObjectQueryBuilder filterWhereNotInSubquery(Schema.SObjectType childSObjectType, Schema.SObjectField lookupFieldOnChildSObject) {
+ //public Query filterWhereNotInSubquery(Schema.SObjectType childSObjectType, Schema.SObjectField lookupFieldOnChildSObject) {
//this.whereFilters.add('Id NOT IN (SELECT ' + lookupFieldOnChildSObject + ' FROM ' + childSObjectType + ')');
//return this.setHasChanged();
//}
//
- //public SObjectQueryBuilder filterWhereNotInSubquery(SObjectQueryBuilder childSObjectQueryBuilder, Schema.SObjectField lookupFieldOnChildSObject) {
- //String subqueryString = childSObjectQueryBuilder.getSubquery(lookupFieldOnChildSObject);
+ //public Query filterWhereNotInSubquery(Query childQuery, Schema.SObjectField lookupFieldOnChildSObject) {
+ //String subqueryString = childQuery.getSubquery(lookupFieldOnChildSObject);
//this.whereFilters.add('Id NOT IN ' + subqueryString);
//return this.setHasChanged();
//}
- public SObjectQueryBuilder orderByField(Schema.SObjectField field) {
+ public Query orderByField(Schema.SObjectField field) {
return this.orderByField(new Soql.QueryField(field));
}
- public SObjectQueryBuilder orderByField(Soql.QueryField queryField) {
+ public Query orderByField(Soql.QueryField queryField) {
return this.orderByField(queryField, null);
}
- public SObjectQueryBuilder orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder) {
+ public Query orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder) {
return this.orderByField(field, sortOrder, null);
}
- public SObjectQueryBuilder orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder) {
+ public Query orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder) {
return this.orderByField(queryField, sortOrder, null);
}
- public SObjectQueryBuilder orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
+ public Query orderByField(Schema.SObjectField field, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
return this.orderByField(new Soql.QueryField(field), sortOrder, sortNullsFirst);
}
- public SObjectQueryBuilder orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
+ public Query orderByField(Soql.QueryField queryField, Soql.SortOrder sortOrder, Boolean sortNullsFirst) {
super.doOrderBy(queryField, sortOrder, sortNullsFirst);
return this.setHasChanged();
}
- public SObjectQueryBuilder limitTo(Integer numberOfRecords) {
+ public Query limitTo(Integer numberOfRecords) {
super.doLimitTo(numberOfRecords);
return this.setHasChanged();
}
- public SObjectQueryBuilder offsetBy(Integer offset) {
+ public Query offsetBy(Integer offset) {
super.doOffsetBy(offset);
return this.setHasChanged();
}
- public SObjectQueryBuilder forReference() {
+ public Query forReference() {
this.forReference = true;
return this.setHasChanged();
}
- public SObjectQueryBuilder forUpdate() {
+ public Query forUpdate() {
this.forUpdate = true;
return this.setHasChanged();
}
- public SObjectQueryBuilder forView() {
+ public Query forView() {
this.forView = true;
return this.setHasChanged();
}
- public SObjectQueryBuilder cacheResults() {
+ public Query cacheResults() {
super.doCacheResults();
return this;
}
@@ -373,7 +373,7 @@ public class SObjectQueryBuilder extends Soql {
if(!String.isBlank(this.displayFieldApiName)) this.addField(fieldMap.get(this.displayFieldApiName));
}
- private SObjectQueryBuilder setHasChanged() {
+ private Query setHasChanged() {
this.hasChanged = true;
return this;
}
diff --git a/src/classes/AggregateQueryBuilder.cls-meta.xml b/nebula-app-framework/main/query-and-search/classes/Query.cls-meta.xml
similarity index 80%
rename from src/classes/AggregateQueryBuilder.cls-meta.xml
rename to nebula-app-framework/main/query-and-search/classes/Query.cls-meta.xml
index 91b23b86..8e4d11f8 100644
--- a/src/classes/AggregateQueryBuilder.cls-meta.xml
+++ b/nebula-app-framework/main/query-and-search/classes/Query.cls-meta.xml
@@ -1,5 +1,5 @@
- 46.0
+ 49.0
Active
diff --git a/src/classes/SearchBuilder.cls b/nebula-app-framework/main/query-and-search/classes/RecordSearch.cls
similarity index 74%
rename from src/classes/SearchBuilder.cls
rename to nebula-app-framework/main/query-and-search/classes/RecordSearch.cls
index 646b3696..9b23b3d1 100644
--- a/src/classes/SearchBuilder.cls
+++ b/nebula-app-framework/main/query-and-search/classes/RecordSearch.cls
@@ -2,28 +2,28 @@
* This file is part of the Nebula Query & Search project, released under the MIT License. *
* See LICENSE file or go to https://github.com/jongpie/NebulaQueryAndSearch for full license details. *
******************************************************************************************************/
-public class SearchBuilder extends Sosl {
+public class RecordSearch extends Sosl {
- public SearchBuilder(String searchTerm, SObjectQueryBuilder sobjectQuery) {
+ public RecordSearch(String searchTerm, Query sobjectQuery) {
super(searchTerm, sobjectQuery);
}
- public SearchBuilder(String searchTerm, List sobjectQueries) {
+ public RecordSearch(String searchTerm, List sobjectQueries) {
super(searchTerm, sobjectQueries);
}
- public SearchBuilder inSearchGroup(Sosl.SearchGroup searchGroup) {
+ public RecordSearch inSearchGroup(Sosl.SearchGroup searchGroup) {
if(searchGroup == null) return this;
this.searchGroup = searchGroup;
return this.setHasChanged();
}
- public SearchBuilder withDataCategory(Schema.DataCategory dataCategory, Sosl.DataCategoryLocation dataCategoryLocation, Schema.DataCategory childDataCategory) {
+ public RecordSearch withDataCategory(Schema.DataCategory dataCategory, Sosl.DataCategoryLocation dataCategoryLocation, Schema.DataCategory childDataCategory) {
return this.withDataCategory(dataCategory, dataCategoryLocation, new List{childDataCategory});
}
- public SearchBuilder withDataCategory(Schema.DataCategory dataCategory, Sosl.DataCategoryLocation dataCategoryLocation, List childDataCategories) {
+ public RecordSearch withDataCategory(Schema.DataCategory dataCategory, Sosl.DataCategoryLocation dataCategoryLocation, List childDataCategories) {
List childDataCategoryApiNames = new List();
for(Schema.DataCategory childDataCategory : childDataCategories) {
childDataCategoryApiNames.add(childDataCategory.getName());
@@ -32,27 +32,27 @@ public class SearchBuilder extends Sosl {
return this.setHasChanged();
}
- public SearchBuilder withHighlight() {
+ public RecordSearch withHighlight() {
this.withClauses.add('HIGHLIGHT');
return this.setHasChanged();
}
- public SearchBuilder withSnippet(Integer targetLength) {
+ public RecordSearch withSnippet(Integer targetLength) {
this.withClauses.add('SNIPPET (target_length=' + targetLength + ')');
return this.setHasChanged();
}
- public SearchBuilder withSpellCorrection() {
+ public RecordSearch withSpellCorrection() {
this.withClauses.add('SPELL_CORRECTION = true');
return this.setHasChanged();
}
- public SearchBuilder updateArticleReporting(Sosl.ArticleReporting articleReporting) {
+ public RecordSearch updateArticleReporting(Sosl.ArticleReporting articleReporting) {
this.articleReporting = articleReporting;
return this.setHasChanged();
}
- public SearchBuilder cacheResults() {
+ public RecordSearch cacheResults() {
this.cacheResults = true;
return this.setHasChanged();
}
@@ -86,7 +86,7 @@ public class SearchBuilder extends Sosl {
return super.doGetResults();
}
- private SearchBuilder setHasChanged() {
+ private RecordSearch setHasChanged() {
this.hasChanged = true;
return this;
}
diff --git a/src/classes/SObjectQueryBuilder_Tests.cls-meta.xml b/nebula-app-framework/main/query-and-search/classes/RecordSearch.cls-meta.xml
similarity index 80%
rename from src/classes/SObjectQueryBuilder_Tests.cls-meta.xml
rename to nebula-app-framework/main/query-and-search/classes/RecordSearch.cls-meta.xml
index 91b23b86..8e4d11f8 100644
--- a/src/classes/SObjectQueryBuilder_Tests.cls-meta.xml
+++ b/nebula-app-framework/main/query-and-search/classes/RecordSearch.cls-meta.xml
@@ -1,5 +1,5 @@
- 46.0
+ 49.0
Active
diff --git a/src/classes/Soql.cls b/nebula-app-framework/main/query-and-search/classes/Soql.cls
similarity index 98%
rename from src/classes/Soql.cls
rename to nebula-app-framework/main/query-and-search/classes/Soql.cls
index 93bbd90a..6d7b6efa 100644
--- a/src/classes/Soql.cls
+++ b/nebula-app-framework/main/query-and-search/classes/Soql.cls
@@ -411,9 +411,9 @@ public abstract class Soql implements Comparable {
this.filterString = 'Id ' + Soql.getOperatorValue(this.operator) + ' (SELECT ' + lookupFieldOnChildSObject + ' FROM ' + childSObjectType + ')';
}
- public QueryFilter(SObjectQueryBuilder childSObjectQueryBuilder, Boolean inOrNotIn, Schema.SObjectField lookupFieldOnChildSObject) {
+ public QueryFilter(Query childQuery, Boolean inOrNotIn, Schema.SObjectField lookupFieldOnChildSObject) {
this.operator = inOrNotIn ? Soql.Operator.IS_IN : Soql.Operator.IS_NOT_IN;
- this.filterString = 'Id ' + Soql.getOperatorValue(this.operator) + ' ' + childSObjectQueryBuilder.getSubquery(lookupFieldOnChildSObject);
+ this.filterString = 'Id ' + Soql.getOperatorValue(this.operator) + ' ' + childQuery.getSubquery(lookupFieldOnChildSObject);
}
public Integer compareTo(Object compareTo) {
diff --git a/src/classes/Soql.cls-meta.xml b/nebula-app-framework/main/query-and-search/classes/Soql.cls-meta.xml
similarity index 80%
rename from src/classes/Soql.cls-meta.xml
rename to nebula-app-framework/main/query-and-search/classes/Soql.cls-meta.xml
index 91b23b86..8e4d11f8 100644
--- a/src/classes/Soql.cls-meta.xml
+++ b/nebula-app-framework/main/query-and-search/classes/Soql.cls-meta.xml
@@ -1,5 +1,5 @@
- 46.0
+ 49.0
Active
diff --git a/src/classes/Sosl.cls b/nebula-app-framework/main/query-and-search/classes/Sosl.cls
similarity index 91%
rename from src/classes/Sosl.cls
rename to nebula-app-framework/main/query-and-search/classes/Sosl.cls
index fb2eb2be..48bac0d6 100644
--- a/src/classes/Sosl.cls
+++ b/nebula-app-framework/main/query-and-search/classes/Sosl.cls
@@ -11,18 +11,18 @@ public abstract class Sosl {
private static Map>> cachedSearchResultsByHashCode = new Map>>();
protected String searchQuery, searchTerm;
- protected List sobjectQueries;
+ protected List sobjectQueries;
protected Set sobjectTypes;
protected Boolean cacheResults, hasChanged;
protected Sosl.ArticleReporting articleReporting;
protected List withClauses, withDataCategoryClauses;
protected Sosl.SearchGroup searchGroup;
- protected Sosl(String searchTerm, SObjectQueryBuilder sobjectQuery) {
- this(searchTerm, new List{sobjectQuery});
+ protected Sosl(String searchTerm, Query sobjectQuery) {
+ this(searchTerm, new List{sobjectQuery});
}
- protected Sosl(String searchTerm, List sobjectQueries) {
+ protected Sosl(String searchTerm, List sobjectQueries) {
this.searchTerm = String.escapeSingleQuotes(searchTerm);
this.sobjectQueries = sobjectQueries;
@@ -37,7 +37,7 @@ public abstract class Sosl {
if(this.sobjectTypes != null) return this.sobjectTypes;
this.sobjectTypes = new Set();
- for(SObjectQueryBuilder query : this.sobjectQueries) {
+ for(Query query : this.sobjectQueries) {
this.sobjectTypes.add(query.getSObjectType());
}
return this.sobjectTypes;
@@ -69,7 +69,7 @@ public abstract class Sosl {
List queryStrings = new List();
this.sobjectQueries.sort();
- for(SObjectQueryBuilder query : this.sobjectQueries) {
+ for(Query query : this.sobjectQueries) {
queryStrings.add(query.getSearchQuery());
}
return ' RETURNING ' + String.join(queryStrings, ', ');
diff --git a/src/classes/Sosl.cls-meta.xml b/nebula-app-framework/main/query-and-search/classes/Sosl.cls-meta.xml
similarity index 80%
rename from src/classes/Sosl.cls-meta.xml
rename to nebula-app-framework/main/query-and-search/classes/Sosl.cls-meta.xml
index 91b23b86..8e4d11f8 100644
--- a/src/classes/Sosl.cls-meta.xml
+++ b/nebula-app-framework/main/query-and-search/classes/Sosl.cls-meta.xml
@@ -1,5 +1,5 @@
- 46.0
+ 49.0
Active
diff --git a/src/classes/AggregateQueryBuilder_Tests.cls b/nebula-app-framework/tests/query-and-search/classes/AggregateQuery_Tests.cls
similarity index 75%
rename from src/classes/AggregateQueryBuilder_Tests.cls
rename to nebula-app-framework/tests/query-and-search/classes/AggregateQuery_Tests.cls
index 02213137..2a90c6e0 100644
--- a/src/classes/AggregateQueryBuilder_Tests.cls
+++ b/nebula-app-framework/tests/query-and-search/classes/AggregateQuery_Tests.cls
@@ -3,16 +3,16 @@
* See LICENSE file or go to https://github.com/jongpie/NebulaQueryAndSearch for full license details. *
******************************************************************************************************/
@isTest
-private class AggregateQueryBuilder_Tests {
+private class AggregateQuery_Tests {
@isTest
static void it_should_be_usable_after_construction() {
// Query builders should be usable as soon as it's constructed - it should be able to execute a query with some default values
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType);
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType);
Test.startTest();
- AggregateResult result = (AggregateResult)aggregateQueryBuilder.getFirstResult();
+ AggregateResult result = (AggregateResult)AggregateQuery.getFirstResult();
Test.stopTest();
}
@@ -21,14 +21,14 @@ private class AggregateQueryBuilder_Tests {
static void it_should_return_results_when_filtering() {
String expectedQueryString = 'SELECT Type FROM Opportunity WHERE AccountId != null GROUP BY Type';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType)
.groupByField(Schema.Opportunity.Type)
.filterWhere(new Soql.QueryFilter(Schema.Opportunity.AccountId, Soql.Operator.NOT_EQUAL_TO, null));
Test.startTest();
- System.assertEquals(expectedQueryString, aggregateQueryBuilder.getQuery());
- List results = aggregateQueryBuilder.getResults();
+ System.assertEquals(expectedQueryString, AggregateQuery.getQuery());
+ List results = AggregateQuery.getResults();
Test.stopTest();
}
@@ -37,7 +37,7 @@ private class AggregateQueryBuilder_Tests {
static void it_should_return_results_when_filtering_with_an_or_statement() {
String expectedQueryString = 'SELECT Type, COUNT(Id) COUNT__Id FROM Account WHERE (AccountNumber = null OR Type = null) AND ParentId != null GROUP BY Type';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Account.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Account.SObjectType)
.groupByField(Schema.Account.Type)
.filterWhere(new Soql.QueryFilter(Schema.Account.ParentId, Soql.Operator.NOT_EQUAL_TO, null))
.orFilterWhere(new List{
@@ -46,20 +46,20 @@ private class AggregateQueryBuilder_Tests {
})
.addAggregate(Soql.Aggregate.COUNT, Schema.Account.Id);
- System.assertEquals(expectedQueryString, aggregateQueryBuilder.getQuery());
- List results = aggregateQueryBuilder.getResults();
+ System.assertEquals(expectedQueryString, AggregateQuery.getQuery());
+ List results = AggregateQuery.getResults();
}
@isTest
static void it_should_cache_results() {
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType);
- aggregateQueryBuilder.cacheResults();
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType);
+ AggregateQuery.cacheResults();
Test.startTest();
System.assertEquals(0, Limits.getQueries());
for(Integer i = 0; i < 3; i++) {
- aggregateQueryBuilder.getResults();
+ AggregateQuery.getResults();
}
System.assertEquals(1, Limits.getQueries());
@@ -71,7 +71,7 @@ private class AggregateQueryBuilder_Tests {
static void it_should_group_by_cube() {
String expectedQueryString = 'SELECT Type, StageName, SUM(Amount) SUM__Amount FROM Opportunity GROUP BY CUBE(Type, StageName)';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType)
.groupByField(Schema.Opportunity.Type)
.groupByField(Schema.Opportunity.StageName)
.addAggregate(Soql.Aggregate.SUM, Schema.Opportunity.Amount)
@@ -79,8 +79,8 @@ private class AggregateQueryBuilder_Tests {
Test.startTest();
- System.assertEquals(expectedQueryString, aggregateQueryBuilder.getQuery());
- List results = aggregateQueryBuilder.getResults();
+ System.assertEquals(expectedQueryString, AggregateQuery.getQuery());
+ List results = AggregateQuery.getResults();
Test.stopTest();
}
@@ -89,7 +89,7 @@ private class AggregateQueryBuilder_Tests {
static void it_should_group_by_rollup() {
String expectedQueryString = 'SELECT Type, StageName, SUM(Amount) SUM__Amount FROM Opportunity GROUP BY ROLLUP(Type, StageName)';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType)
.groupByField(Schema.Opportunity.Type)
.groupByField(Schema.Opportunity.StageName)
.addAggregate(Soql.Aggregate.SUM, Schema.Opportunity.Amount)
@@ -97,8 +97,8 @@ private class AggregateQueryBuilder_Tests {
Test.startTest();
- System.assertEquals(expectedQueryString, aggregateQueryBuilder.getQuery());
- List results = aggregateQueryBuilder.getResults();
+ System.assertEquals(expectedQueryString, AggregateQuery.getQuery());
+ List results = AggregateQuery.getResults();
Test.stopTest();
}
@@ -107,15 +107,15 @@ private class AggregateQueryBuilder_Tests {
static void it_should_group_by_having_aggregate() {
String expectedQueryString = 'SELECT Name, COUNT(Id) COUNT__Id FROM Account GROUP BY Name HAVING COUNT(Id) > 2';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Account.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Account.SObjectType)
.groupByField(Account.Name)
.addAggregate(Soql.Aggregate.COUNT, Account.Id)
.havingAggregate(Soql.Aggregate.COUNT, Account.Id, Soql.Operator.GREATER_THAN, 2);
Test.startTest();
- System.assertEquals(expectedQueryString, aggregateQueryBuilder.getQuery());
- List results = aggregateQueryBuilder.getResults();
+ System.assertEquals(expectedQueryString, AggregateQuery.getQuery());
+ List results = AggregateQuery.getResults();
Test.stopTest();
}
@@ -124,14 +124,14 @@ private class AggregateQueryBuilder_Tests {
static void it_should_group_by_a_date_function() {
String expectedQueryString = 'SELECT CALENDAR_MONTH(CloseDate), COUNT(Id) COUNT__Id FROM Opportunity GROUP BY CALENDAR_MONTH(CloseDate)';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType)
.groupByField(new Soql.QueryField(Soql.DateFunction.CALENDAR_MONTH, Schema.Opportunity.CloseDate))
.addAggregate(Soql.Aggregate.COUNT, Opportunity.Id);
Test.startTest();
- System.assertEquals(expectedQueryString, aggregateQueryBuilder.getQuery());
- List results = aggregateQueryBuilder.getResults();
+ System.assertEquals(expectedQueryString, AggregateQuery.getQuery());
+ List results = AggregateQuery.getResults();
Test.stopTest();
}
@@ -149,7 +149,7 @@ private class AggregateQueryBuilder_Tests {
+ ' LIMIT 100'
+ ' OFFSET 0';
- AggregateQueryBuilder aggregateQueryBuilder = new AggregateQueryBuilder(Schema.Opportunity.SObjectType)
+ AggregateQuery AggregateQuery = new AggregateQuery(Schema.Opportunity.SObjectType)
.addAggregate(Soql.Aggregate.MAX, Schema.Opportunity.CreatedDate)
.addAggregate(Soql.Aggregate.AVG, Schema.Opportunity.Amount)
.addAggregate(Soql.Aggregate.COUNT_DISTINCT, Schema.Opportunity.OwnerId)
@@ -180,7 +180,7 @@ private class AggregateQueryBuilder_Tests {
Test.startTest();
- String returnedQueryString = aggregateQueryBuilder.getQuery();
+ String returnedQueryString = AggregateQuery.getQuery();
Test.stopTest();
diff --git a/src/classes/AggregateQueryBuilder_Tests.cls-meta.xml b/nebula-app-framework/tests/query-and-search/classes/AggregateQuery_Tests.cls-meta.xml
similarity index 80%
rename from src/classes/AggregateQueryBuilder_Tests.cls-meta.xml
rename to nebula-app-framework/tests/query-and-search/classes/AggregateQuery_Tests.cls-meta.xml
index 91b23b86..8e4d11f8 100644
--- a/src/classes/AggregateQueryBuilder_Tests.cls-meta.xml
+++ b/nebula-app-framework/tests/query-and-search/classes/AggregateQuery_Tests.cls-meta.xml
@@ -1,5 +1,5 @@
- 46.0
+ 49.0
Active
diff --git a/src/classes/SObjectQueryBuilder_Tests.cls b/nebula-app-framework/tests/query-and-search/classes/Query_Tests.cls
similarity index 89%
rename from src/classes/SObjectQueryBuilder_Tests.cls
rename to nebula-app-framework/tests/query-and-search/classes/Query_Tests.cls
index 328a1ef5..636ca863 100644
--- a/src/classes/SObjectQueryBuilder_Tests.cls
+++ b/nebula-app-framework/tests/query-and-search/classes/Query_Tests.cls
@@ -3,13 +3,13 @@
* See LICENSE file or go to https://github.com/jongpie/NebulaQueryAndSearch for full license details. *
******************************************************************************************************/
@isTest
-private class SObjectQueryBuilder_Tests {
+private class Query_Tests {
@isTest
static void it_should_return_results_for_a_simple_query() {
String expectedQueryString = 'SELECT Id, Name FROM Account';
- SObjectQueryBuilder simpleAccountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType);
+ Query simpleAccountQuery = new Query(Schema.Account.SObjectType);
System.assertEquals(expectedQueryString, simpleAccountQuery.getQuery());
List accounts = simpleAccountQuery.getResults();
@@ -32,7 +32,7 @@ private class SObjectQueryBuilder_Tests {
List fieldsToQuery = new List{Schema.User.IsActive, Schema.User.Alias};
- SObjectQueryBuilder userQuery = new SObjectQueryBuilder(Schema.User.SObjectType)
+ Query userQuery = new Query(Schema.User.SObjectType)
.addFields(fieldsToQuery)
.addField(Schema.User.ProfileId)
.addField(Schema.User.Email, Soql.FieldCategory.UPDATEABLE)
@@ -67,7 +67,7 @@ private class SObjectQueryBuilder_Tests {
};
Soql.QueryField queryField = new Soql.QueryField(fieldChain);
- SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType);
+ Query accountQuery = new Query(Schema.Account.SObjectType);
accountQuery.addField(queryField);
System.assertEquals(expectedQueryString, accountQuery.getQuery());
@@ -78,7 +78,7 @@ private class SObjectQueryBuilder_Tests {
static void it_should_return_results_and_not_include_sobject_type_for_monomorphic_field() {
String expectedQueryString = 'SELECT Id, Name, Owner.Name, OwnerId FROM Account';
- SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType)
+ Query accountQuery = new Query(Schema.Account.SObjectType)
.addField(new Soql.QueryField(Schema.Account.OwnerId));
System.assertEquals(expectedQueryString, accountQuery.getQuery());
@@ -120,7 +120,7 @@ private class SObjectQueryBuilder_Tests {
fieldsBySObjectType.put(Schema.Lead.SObjectType, leadFields );
// Query the task object
- SObjectQueryBuilder taskQuery = new SObjectQueryBuilder(Schema.Task.SObjectType)
+ Query taskQuery = new Query(Schema.Task.SObjectType)
.addPolymorphicFields(Schema.Task.WhoId, fieldsBySObjectType);
Test.stopTest();
@@ -133,7 +133,7 @@ private class SObjectQueryBuilder_Tests {
static void it_should_return_results_and_include_sobject_type_for_polymorphic_field() {
String expectedQueryString = 'SELECT Id, Name, Owner.Name, Owner.Type, OwnerId FROM Lead';
- SObjectQueryBuilder leadQuery = new SObjectQueryBuilder(Schema.Lead.SObjectType)
+ Query leadQuery = new Query(Schema.Lead.SObjectType)
.addField(new Soql.QueryField(Schema.Lead.OwnerId));
System.assertEquals(expectedQueryString, leadQuery.getQuery());
@@ -144,10 +144,10 @@ private class SObjectQueryBuilder_Tests {
static void it_should_return_results_and_include_related_records() {
String expectedQueryString = 'SELECT Id, Name, Type, (SELECT Email, Id, Name FROM Contacts) FROM Account';
- SObjectQueryBuilder contactQuery = new SObjectQueryBuilder(Schema.Contact.SObjectType)
+ Query contactQuery = new Query(Schema.Contact.SObjectType)
.addField(Schema.Contact.Email);
- SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType)
+ Query accountQuery = new Query(Schema.Account.SObjectType)
.includeRelatedRecords(Schema.Contact.AccountId, contactQuery)
.addField(new Soql.QueryField(Schema.Account.Type));
@@ -159,7 +159,7 @@ private class SObjectQueryBuilder_Tests {
static void it_should_return_results_when_filtering_with_an_or_statement() {
String expectedQueryString = 'SELECT Id, Name FROM Account WHERE ParentId != null AND (AccountNumber = null OR Type = null)';
- SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType)
+ Query accountQuery = new Query(Schema.Account.SObjectType)
.addField(Schema.Account.AnnualRevenue)
.orFilterWhere(new List{
new Soql.QueryFilter(Schema.Account.Type, Soql.Operator.EQUALS, null),
@@ -175,7 +175,7 @@ private class SObjectQueryBuilder_Tests {
if(!UserInfo.isMultiCurrencyOrganization()) return;
// If multi-currency is enabled, then execute the test
- SObjectQueryBuilder accountQuery = new SObjectQueryBuilder(Schema.Account.SObjectType)
+ Query accountQuery = new Query(Schema.Account.SObjectType)
.addField(Schema.Account.AnnualRevenue)
.filterWhere(Schema.Account.AnnualRevenue, Soql.Operator.LESS_THAN, new Soql.IsoCurrency('USD', 100));
List accounts = accountQuery.getResults();
@@ -184,7 +184,7 @@ private class SObjectQueryBuilder_Tests {
@isTest
static void it_should_cache_query_results_when_enabled() {
Integer loops = 4;
- SObjectQueryBuilder userQuery = new SObjectQueryBuilder(Schema.User.SObjectType).limitTo(1);
+ Query userQuery = new Query(Schema.User.SObjectType).limitTo(1);
// First, verify that caching is not enabled by default
System.assertEquals(0, Limits.getQueries());
diff --git a/nebula-app-framework/tests/query-and-search/classes/Query_Tests.cls-meta.xml b/nebula-app-framework/tests/query-and-search/classes/Query_Tests.cls-meta.xml
new file mode 100644
index 00000000..8e4d11f8
--- /dev/null
+++ b/nebula-app-framework/tests/query-and-search/classes/Query_Tests.cls-meta.xml
@@ -0,0 +1,5 @@
+
+
+ 49.0
+ Active
+
diff --git a/src/classes/SearchBuilder_Tests.cls b/nebula-app-framework/tests/query-and-search/classes/RecordSearch_Tests.cls
similarity index 77%
rename from src/classes/SearchBuilder_Tests.cls
rename to nebula-app-framework/tests/query-and-search/classes/RecordSearch_Tests.cls
index 47498de5..01671b6d 100644
--- a/src/classes/SearchBuilder_Tests.cls
+++ b/nebula-app-framework/tests/query-and-search/classes/RecordSearch_Tests.cls
@@ -3,14 +3,14 @@
* See LICENSE file or go to https://github.com/jongpie/NebulaQueryAndSearch for full license details. *
******************************************************************************************************/
@isTest
-private class SearchBuilder_Tests {
+private class RecordSearch_Tests {
@isTest
static void it_should_return_first_result_for_a_single_sobject_type() {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name)';
- SObjectQueryBuilder userQuery = new SObjectQueryBuilder(Schema.User.SObjectType);
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), userQuery);
+ Query userQuery = new Query(Schema.User.SObjectType);
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), userQuery);
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
User userSearchResult = (User)userSearch.getFirstResult();
@@ -20,8 +20,8 @@ private class SearchBuilder_Tests {
static void it_should_return_results_for_a_single_sobject_type() {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name)';
- SObjectQueryBuilder userQuery = new SObjectQueryBuilder(Schema.User.SObjectType);
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), userQuery);
+ Query userQuery = new Query(Schema.User.SObjectType);
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), userQuery);
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
List userSearchResults = userSearch.getFirstResults();
@@ -31,11 +31,11 @@ private class SearchBuilder_Tests {
static void it_should_return_results_for_multiple_sobject_types() {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING Account(Id, Name), User(Id, Name)';
- List queries = new List{
- new SObjectQueryBuilder(Schema.User.SObjectType),
- new SObjectQueryBuilder(Schema.Account.SObjectType)
+ List queries = new List{
+ new Query(Schema.User.SObjectType),
+ new Query(Schema.Account.SObjectType)
};
- SearchBuilder search = new SearchBuilder(UserInfo.getUserEmail(), queries);
+ RecordSearch search = new RecordSearch(UserInfo.getUserEmail(), queries);
System.assertEquals(expectedSearchQueryString, search.getSearch());
List> searchResults = search.getResults();
@@ -45,7 +45,7 @@ private class SearchBuilder_Tests {
static void it_should_return_results_with_highlight_enabled() {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name) WITH HIGHLIGHT';
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), new SObjectQueryBuilder(Schema.User.SObjectType));
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), new Query(Schema.User.SObjectType));
userSearch.withHighlight();
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
@@ -58,7 +58,7 @@ private class SearchBuilder_Tests {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name)'
+ ' WITH SNIPPET (target_length=' + snippetTargetLength + ')';
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), new SObjectQueryBuilder(Schema.User.SObjectType));
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), new Query(Schema.User.SObjectType));
userSearch.withSnippet(snippetTargetLength);
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
@@ -70,7 +70,7 @@ private class SearchBuilder_Tests {
Integer snippetTargetLength = 10;
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN EMAIL FIELDS RETURNING User(Id, Name)';
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), new SObjectQueryBuilder(Schema.User.SObjectType));
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), new Query(Schema.User.SObjectType));
userSearch.inSearchGroup(Sosl.SearchGroup.EMAIL_FIELDS);
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
@@ -82,7 +82,7 @@ private class SearchBuilder_Tests {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name)'
+ ' WITH SPELL_CORRECTION = true';
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), new SObjectQueryBuilder(Schema.User.SObjectType));
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), new Query(Schema.User.SObjectType));
userSearch.withSpellCorrection();
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
@@ -98,7 +98,7 @@ private class SearchBuilder_Tests {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name)'
+ ' UPDATE TRACKING';
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), new SObjectQueryBuilder(Schema.User.SObjectType));
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), new Query(Schema.User.SObjectType));
userSearch.updateArticleReporting(Sosl.ArticleReporting.TRACKING);
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
@@ -114,7 +114,7 @@ private class SearchBuilder_Tests {
String expectedSearchQueryString = 'FIND \'' + UserInfo.getUserEmail() + '\' IN ALL FIELDS RETURNING User(Id, Name)'
+ ' UPDATE VIEWSTAT';
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), new SObjectQueryBuilder(Schema.User.SObjectType));
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), new Query(Schema.User.SObjectType));
userSearch.updateArticleReporting(Sosl.ArticleReporting.VIEWSTAT);
System.assertEquals(expectedSearchQueryString, userSearch.getSearch());
@@ -124,8 +124,8 @@ private class SearchBuilder_Tests {
@isTest
static void it_should_cache_search_results_when_enabled() {
Integer loops = 4;
- SObjectQueryBuilder userQuery = new SObjectQueryBuilder(Schema.User.SObjectType);
- SearchBuilder userSearch = new SearchBuilder(UserInfo.getUserEmail(), userQuery);
+ Query userQuery = new Query(Schema.User.SObjectType);
+ RecordSearch userSearch = new RecordSearch(UserInfo.getUserEmail(), userQuery);
// First, verify that caching is not enabled by default
System.assertEquals(0, Limits.getSoslQueries());
diff --git a/nebula-app-framework/tests/query-and-search/classes/RecordSearch_Tests.cls-meta.xml b/nebula-app-framework/tests/query-and-search/classes/RecordSearch_Tests.cls-meta.xml
new file mode 100644
index 00000000..8e4d11f8
--- /dev/null
+++ b/nebula-app-framework/tests/query-and-search/classes/RecordSearch_Tests.cls-meta.xml
@@ -0,0 +1,5 @@
+
+
+ 49.0
+ Active
+
diff --git a/sfdx-project.json b/sfdx-project.json
new file mode 100644
index 00000000..30cc68b0
--- /dev/null
+++ b/sfdx-project.json
@@ -0,0 +1,11 @@
+{
+ "packageDirectories": [
+ {
+ "path": "nebula-app-framework",
+ "default": true
+ }
+ ],
+ "namespace": "Nebula",
+ "sfdcLoginUrl": "https://nebulaframework-dev.my.salesforce.com",
+ "sourceApiVersion": "49.0"
+}
\ No newline at end of file
diff --git a/src/classes/SearchBuilder.cls-meta.xml b/src/classes/SearchBuilder.cls-meta.xml
deleted file mode 100644
index 91b23b86..00000000
--- a/src/classes/SearchBuilder.cls-meta.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 46.0
- Active
-
diff --git a/src/classes/SearchBuilder_Tests.cls-meta.xml b/src/classes/SearchBuilder_Tests.cls-meta.xml
deleted file mode 100644
index 91b23b86..00000000
--- a/src/classes/SearchBuilder_Tests.cls-meta.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
- 46.0
- Active
-
diff --git a/src/package.xml b/src/package.xml
deleted file mode 100644
index 1ec2ef4b..00000000
--- a/src/package.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
- NebulaQueryAndSearch
-
- AggregateQueryBuilder
- AggregateQueryBuilder_Tests
- SObjectQueryBuilder
- SObjectQueryBuilder_Tests
- SearchBuilder
- SearchBuilder_Tests
- Soql
- Sosl
- ApexClass
-
- 46.0
-