From e385aaf61961a9169de313216e33d45942c2667b Mon Sep 17 00:00:00 2001 From: nwcm <111259588+nwcm@users.noreply.github.com> Date: Sun, 5 Jul 2026 17:59:49 +1000 Subject: [PATCH] align subquery interface with querable for with(relationship__r..) (#310) * align subquery interface with querable for with(relationship__r..) * remove ns from subquery methods * Update documentation for SubQuery --- .../default/classes/standard-soql/SOQL.cls | 30 ++++++++++++++ website/docs/soql/api/soql-sub.md | 41 +++++++++++++++++++ 2 files changed, 71 insertions(+) diff --git a/force-app/main/default/classes/standard-soql/SOQL.cls b/force-app/main/default/classes/standard-soql/SOQL.cls index 8483528e..2b300367 100644 --- a/force-app/main/default/classes/standard-soql/SOQL.cls +++ b/force-app/main/default/classes/standard-soql/SOQL.cls @@ -218,6 +218,11 @@ public virtual inherited sharing class SOQL implements Queryable { SubQuery with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5); SubQuery with(Iterable fields); SubQuery with(String fields); + SubQuery with(String relationshipName, SObjectField field); + SubQuery with(String relationshipName, SObjectField field1, SObjectField field2); + SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3); + SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4); + SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5); SubQuery with(String relationshipName, Iterable fields); SubQuery with(SubQuery subQuery); SubQuery toLabel(SObjectField field); @@ -1721,6 +1726,31 @@ public virtual inherited sharing class SOQL implements Queryable { return this; } + public SubQuery with(String relationshipName, SObjectField field) { + this.builder.fields.relationshipFields.add(relationshipName, new List{ field }); + return this; + } + + public SubQuery with(String relationshipName, SObjectField field1, SObjectField field2) { + this.builder.fields.relationshipFields.add(relationshipName, new List{ field1, field2 }); + return this; + } + + public SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3) { + this.builder.fields.relationshipFields.add(relationshipName, new List{ field1, field2, field3 }); + return this; + } + + public SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4) { + this.builder.fields.relationshipFields.add(relationshipName, new List{ field1, field2, field3, field4 }); + return this; + } + + public SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5) { + this.builder.fields.relationshipFields.add(relationshipName, new List{ field1, field2, field3, field4, field5 }); + return this; + } + public SubQuery with(String relationshipName, Iterable fields) { this.builder.fields.relationshipFields.add(relationshipName, fields); return this; diff --git a/website/docs/soql/api/soql-sub.md b/website/docs/soql/api/soql-sub.md index fc9c8ca0..9e4d3831 100644 --- a/website/docs/soql/api/soql-sub.md +++ b/website/docs/soql/api/soql-sub.md @@ -30,6 +30,11 @@ The following are methods for `SubQuery`. - [`with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4)`](#with-field1---field5) - [`with(SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5)`](#with-field1---field5) - [`with(List fields)`](#with-fields) +- [`with(String relationshipName, SObjectField field)`](#with-related-field1---field5) +- [`with(String relationshipName, SObjectField field1, SObjectField field2)`](#with-related-field1---field5) +- [`with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3)`](#with-related-field1---field5) +- [`with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4)`](#with-related-field1---field5) +- [`with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5)`](#with-related-field1---field5) - [`with(String relationshipName, Iterable fields)`](#with-related-fields) - [`with(String fields)`](#with-string-fields) @@ -160,6 +165,42 @@ SOQL.of(Account.SObjectType) .toList(); ``` +### with related field1 - field5 + +Allows to add parent field to a query. + +**Signature** + +```apex title="Single Related Field Method" +SubQuery with(String relationshipName, SObjectField field) +``` +```apex title="Two Related Fields Method" +SubQuery with(String relationshipName, SObjectField field1, SObjectField field2); +``` +```apex title="Three Related Fields Method" +SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3); +``` +```apex title="Four Related Fields Method" +SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4); +``` +```apex title="Five Related Fields Method" +SubQuery with(String relationshipName, SObjectField field1, SObjectField field2, SObjectField field3, SObjectField field4, SObjectField field5); +``` + +**Example** + +```sql title="SOQL Query" +SELECT (SELECT CreatedBy.Id, CreatedBy.Name FROM Contacts) +FROM Account +``` +```apex title="SOQL Lib Related Fields" +SOQL.of(Account.SObjectType) + .with(SOQL.SubQuery.of('Contacts') + .with('CreatedBy', User.Id, User.Name) + ) + .toList(); +``` + ### with related fields **Signature**