@@ -9,7 +9,7 @@ public abstract class SObjectRepository implements ISObjectRepository {
99 private Map <String , Schema .SObjectField > sobjectTypeFieldMap ;
1010 private Set <String > queryFields ;
1111 private String query ;
12- private Boolean addCommonQueryFields ;
12+ private Boolean shouldAddCommonFields ;
1313 private Schema.FieldSet fieldSet ;
1414 private List <String > whereClauseList ;
1515 private List <String > orderByList ;
@@ -20,87 +20,35 @@ public abstract class SObjectRepository implements ISObjectRepository {
2020 this (fieldSet , true );
2121 }
2222
23- protected SObjectRepository (Schema.FieldSet fieldSet , Boolean addCommonQueryFields ) {
24- this .fieldSet = fieldSet ;
25- this .addCommonQueryFields = addCommonQueryFields ;
23+ protected SObjectRepository (Schema.FieldSet fieldSet , Boolean shouldAddCommonFields ) {
24+ this .fieldSet = fieldSet ;
25+ this .shouldAddCommonFields = shouldAddCommonFields ;
2626
27- this .sobjectType = fieldSet .getSObjectType ();
28- this .sobjectTypeFieldMap = this .sobjectType .getDescribe ().fields .getMap ();
29- this .queryFields = new Set <String >();
30- this .whereClauseList = new List <String >();
31- this .orderByList = new List <String >();
32- this .forUpdate = false ;
27+ this .sobjectType = fieldSet .getSObjectType ();
28+ this .sobjectTypeFieldMap = this .sobjectType .getDescribe ().fields .getMap ();
29+ this .queryFields = new Set <String >();
30+ this .whereClauseList = new List <String >();
31+ this .orderByList = new List <String >();
32+ this .forUpdate = false ;
3333
3434 this .addCommonQueryFields ();
3535 this .addFieldSetMembers ();
3636 }
3737
38- protected SObjectRepository whereIdEquals ( Id recordId ) {
39- return this .whereFieldEquals ( sobjectTypeFieldMap . get ( ' Id ' ), SOQLUtils .toSOQLString (recordId ));
38+ protected SObjectRepository whereFieldOperatorEqualsValue (Schema. SObjectField field , String operator , Object value ) {
39+ return this .addCondition ( field , operator , SOQLUtils .toSOQLString (value ));
4040 }
4141
42- protected SObjectRepository whereIdIn (Set <Id > recordIdSet ) {
43- return this .whereFieldIn (sobjectTypeFieldMap .get (' Id' ), new List <Id >(recordIdSet ));
44- }
45-
46- protected SObjectRepository whereIdIn (List <Id > recordList ) {
47- return this .whereFieldIn (sobjectTypeFieldMap .get (' Id' ), recordList );
48- }
49-
50- protected SObjectRepository whereFieldEquals (Schema.SObjectField field , Object value ) {
51- return this .addCondition (field , ' =' , SOQLUtils .toSOQLString (value ));
52- }
53-
54- protected SObjectRepository whereFieldDoesNotEqual (Schema.SObjectField field , Object value ) {
55- return this .addCondition (field , ' !=' , SOQLUtils .toSOQLString (value ));
56- }
57-
58- protected SObjectRepository whereFieldGreaterThan (Schema.SObjectField field , Object value ) {
59- return this .addCondition (field , ' >' , SOQLUtils .toSOQLString (value ));
60- }
61-
62- protected SObjectRepository whereFieldGreaterThanOrEqualTo (Schema.SObjectField field , Object value ) {
63- return this .addCondition (field , ' >=' , SOQLUtils .toSOQLString (value ));
64- }
65-
66- protected SObjectRepository whereFieldLessThan (Schema.SObjectField field , Object value ) {
67- return this .addCondition (field , ' <' , SOQLUtils .toSOQLString (value ));
68- }
69-
70- protected SObjectRepository whereFieldLessThanOrEqualTo (Schema.SObjectField field , Object value ) {
71- return this .addCondition (field , ' <=' , SOQLUtils .toSOQLString (value ));
72- }
73-
74- protected SObjectRepository whereFieldIn (Schema.SObjectField field , List <Object > valueList ) {
75- return this .addCondition (field , ' IN' , SOQLUtils .toSOQLString (valueList ));
76- }
77-
78- protected SObjectRepository whereFieldNotIn (Schema.SObjectField field , List <Object > valueList ) {
79- return this .addCondition (field , ' NOT IN' , SOQLUtils .toSOQLString (valueList ));
80- }
81-
82- protected SObjectRepository whereFieldIncludes (Schema.SObjectField field , List <Object > valueList ) {
83- return this .addCondition (field , ' INCLUDES' , SOQLUtils .toSOQLString (valueList ));
84- }
85-
86- protected SObjectRepository whereFieldExcludes (Schema.SObjectField field , List <Object > valueList ) {
87- return this .addCondition (field , ' EXCLUDES' , SOQLUtils .toSOQLString (valueList ));
88- }
89-
90- protected SObjectRepository whereFieldLike (Schema.SObjectField field , String comparisonValue ) {
91- return this .addCondition (field , ' LIKE' , comparisonValue );
92- }
93-
94- protected SObjectRepository whereFieldNotLike (Schema.SObjectField field , String comparisonValue ) {
95- return this .addCondition (field , ' NOT LIKE' , comparisonValue );
42+ protected SObjectRepository whereFieldOperatorEqualsListValues (Schema.SObjectField field , String operator , List <Object > values ) {
43+ return this .addCondition (field , operator , SOQLUtils .toSOQLString (values ));
9644 }
9745
9846 protected SObjectRepository orderBy (Schema.SObjectField orderByField ) {
9947 return this .orderBy (orderByField , null , null );
10048 }
10149
10250 protected SObjectRepository orderBy (Schema.SObjectField orderByField , SObjectRepository.SortOrder sortOrder ) {
103- return orderBy (orderByField , sortOrder , null );
51+ return this . orderBy (orderByField , sortOrder , null );
10452 }
10553
10654 protected SObjectRepository orderBy (Schema.SObjectField orderByField , SObjectRepository.SortOrder sortOrder , SObjectRepository.NullsSortOrder nullsSortOrder ) {
@@ -137,29 +85,44 @@ public abstract class SObjectRepository implements ISObjectRepository {
13785 return Search .query (this .getSearchQuery (searchTerm , searchGroup ))[0 ];
13886 }
13987
88+
89+ // CRUD
90+ protected void doInsert (SObject record ) {doInsert (new List <SObject >{record });}
91+ protected void doInsert (List <SObject > records ) {Database .insert (records );}
92+ protected void doUpsert (List <SObject > records ) {Database .upsert (records );}
93+ protected void doUpdate (List <SObject > records ) {Database .update (records );}
94+ protected void doDelete (List <SObject > records ) {Database .delete (records );}
95+
14096 private void addCommonQueryFields () {
141- if (! this .addCommonQueryFields ) return ;
97+ if (! this .shouldAddCommonFields ) return ;
14298
14399 // Auto-add the common fields that are available for the SObject Type
144- List <String > commonFieldNameList = new List <String >{
100+ Set <String > commonFieldNameList = new Set <String >{
145101 ' Id' , ' CaseNumber' , ' CreatedById' , ' CreatedDate' , ' IsClosed' , ' LastModifiedById' , ' LastModifiedDate' ,
146102 ' Name' , ' OwnerId' , ' Subject' , ' RecordTypeId' , ' SystemModStamp'
147103 };
104+
148105 for (String commonFieldName : commonFieldNameList ) {
106+ // Verify that the field is available on the object being used
149107 if (! this .sobjectTypeFieldMap .containsKey (commonFieldName )) continue ;
150108
151- this .queryFields .add (commonFieldName );
109+ // Salesforce has some inconsistencies in casing for standard field names. We'll go lowercase
110+ // here and in addFieldSetMembers() to ensure the set is unique
111+ this .queryFields .add (commonFieldName .toLowerCase ());
152112 }
153113 }
154114
155115 private void addFieldSetMembers () {
156116 if (this .fieldSet == null ) return ;
157117
158- for (Schema .FieldSetMember field : this .fieldSet .getFields ()) this .queryFields .add (field .getFieldPath ());
118+ for (Schema .FieldSetMember field : this .fieldSet .getFields ()) {
119+ // Lowercase here as well to ensure strings added to the set are unique
120+ this .queryFields .add (field .getFieldPath ().toLowerCase ());
121+ }
159122 }
160123
161124 private SObjectRepository addCondition (Schema.SObjectField field , String operator , String value ) {
162- this .whereClauseList .add (' ( ' + field + ' ' + operator .trim () + ' ' + value + ' ) ' );
125+ this .whereClauseList .add (field + ' ' + operator .trim () + ' ' + value );
163126 return this ;
164127 }
165128
0 commit comments