@@ -65,18 +65,36 @@ public virtual inherited sharing class SOQL implements Queryable {
6565 Queryable count ();
6666 Queryable count (SObjectField field );
6767 Queryable count (SObjectField field , String alias );
68+ Queryable count (String relationshipName , SObjectField field );
69+ Queryable count (String relationshipName , SObjectField field , String alias );
6870 Queryable avg (SObjectField field );
6971 Queryable avg (SObjectField field , String alias );
72+ Queryable avg (String relationshipName , SObjectField field );
73+ Queryable avg (String relationshipName , SObjectField field , String alias );
7074 Queryable countDistinct (SObjectField field );
7175 Queryable countDistinct (SObjectField field , String alias );
76+ Queryable countDistinct (String relationshipName , SObjectField field );
77+ Queryable countDistinct (String relationshipName , SObjectField field , String alias );
7278 Queryable min (SObjectField field );
7379 Queryable min (SObjectField field , String alias );
80+ Queryable min (String relationshipName , SObjectField field );
81+ Queryable min (String relationshipName , SObjectField field , String alias );
7482 Queryable max (SObjectField field );
7583 Queryable max (SObjectField field , String alias );
84+ Queryable max (String relationshipName , SObjectField field );
85+ Queryable max (String relationshipName , SObjectField field , String alias );
7686 Queryable sum (SObjectField field );
7787 Queryable sum (SObjectField field , String alias );
88+ Queryable sum (String relationshipName , SObjectField field );
89+ Queryable sum (String relationshipName , SObjectField field , String alias );
7890 // SELECT - GROUPING
7991 Queryable grouping (SObjectField field , String alias );
92+ // SELECT - toLabel
93+ Queryable toLabel (SObjectField field );
94+ Queryable toLabel (String field );
95+ // SELECT - FORMAT
96+ Queryable format (SObjectField field );
97+ Queryable format (SObjectField field , String alias );
8098 // USING SCOPE
8199 Queryable delegatedScope ();
82100 Queryable mineScope ();
@@ -363,6 +381,15 @@ public virtual inherited sharing class SOQL implements Queryable {
363381 return this ;
364382 }
365383
384+ public SOQL count (String relationshipName , SObjectField field ) {
385+ return count (relationshipName , field , ' ' );
386+ }
387+
388+ public SOQL count (String relationshipName , SObjectField field , String alias ) {
389+ builder .fields .count (relationshipName , field , alias );
390+ return this ;
391+ }
392+
366393 public SOQL avg (SObjectField field ) {
367394 return avg (field , ' ' );
368395 }
@@ -372,6 +399,15 @@ public virtual inherited sharing class SOQL implements Queryable {
372399 return this ;
373400 }
374401
402+ public SOQL avg (String relationshipName , SObjectField field ) {
403+ return avg (relationshipName , field , ' ' );
404+ }
405+
406+ public SOQL avg (String relationshipName , SObjectField field , String alias ) {
407+ builder .fields .avg (relationshipName , field , alias );
408+ return this ;
409+ }
410+
375411 public SOQL countDistinct (SObjectField field ) {
376412 return countDistinct (field , ' ' );
377413 }
@@ -381,6 +417,15 @@ public virtual inherited sharing class SOQL implements Queryable {
381417 return this ;
382418 }
383419
420+ public SOQL countDistinct (String relationshipName , SObjectField field ) {
421+ return countDistinct (relationshipName , field , ' ' );
422+ }
423+
424+ public SOQL countDistinct (String relationshipName , SObjectField field , String alias ) {
425+ builder .fields .countDistinct (relationshipName , field , alias );
426+ return this ;
427+ }
428+
384429 public SOQL min (SObjectField field ) {
385430 return min (field , ' ' );
386431 }
@@ -390,6 +435,15 @@ public virtual inherited sharing class SOQL implements Queryable {
390435 return this ;
391436 }
392437
438+ public SOQL min (String relationshipName , SObjectField field ) {
439+ return min (relationshipName , field , ' ' );
440+ }
441+
442+ public SOQL min (String relationshipName , SObjectField field , String alias ) {
443+ builder .fields .min (relationshipName , field , alias );
444+ return this ;
445+ }
446+
393447 public SOQL max (SObjectField field ) {
394448 return max (field , ' ' );
395449 }
@@ -399,6 +453,15 @@ public virtual inherited sharing class SOQL implements Queryable {
399453 return this ;
400454 }
401455
456+ public SOQL max (String relationshipName , SObjectField field ) {
457+ return max (relationshipName ,field , ' ' );
458+ }
459+
460+ public SOQL max (String relationshipName , SObjectField field , String alias ) {
461+ builder .fields .max (relationshipName , field , alias );
462+ return this ;
463+ }
464+
402465 public SOQL sum (SObjectField field ) {
403466 return sum (field , ' ' );
404467 }
@@ -408,11 +471,38 @@ public virtual inherited sharing class SOQL implements Queryable {
408471 return this ;
409472 }
410473
474+ public SOQL sum (String relationshipName , SObjectField field ) {
475+ return sum (relationshipName , field , ' ' );
476+ }
477+
478+ public SOQL sum (String relationshipName , SObjectField field , String alias ) {
479+ builder .fields .sum (relationshipName , field , alias );
480+ return this ;
481+ }
482+
411483 public SOQL grouping (SObjectField field , String alias ) {
412484 builder .fields .grouping (field , alias );
413485 return this ;
414486 }
415487
488+ public SOQL toLabel (SObjectField field ) {
489+ return toLabel (field .getDescribe ().getName ());
490+ }
491+
492+ public SOQL toLabel (String field ) {
493+ builder .fields .toLabel (field );
494+ return this ;
495+ }
496+
497+ public SOQL format (SObjectField field ) {
498+ return format (field , ' ' );
499+ }
500+
501+ public SOQL format (SObjectField field , String alias ) {
502+ builder .fields .format (field , alias );
503+ return this ;
504+ }
505+
416506 public SOQL delegatedScope () {
417507 builder .scope .delegated ();
418508 return this ;
@@ -795,31 +885,63 @@ public virtual inherited sharing class SOQL implements Queryable {
795885 }
796886
797887 public void count (SObjectField field , String alias ) {
798- withAggregateFunction (' COUNT(' + field + ' )' , alias );
888+ with (' COUNT' , field , alias );
889+ }
890+
891+ public void count (String relationshipName , SObjectField field , String alias ) {
892+ with (' COUNT' , relationshipName , field , alias );
893+ }
894+
895+ public void avg (SObjectField field , String alias ) {
896+ with (' AVG' , field , alias );
897+ }
898+
899+ public void avg (String relationshipName , SObjectField field , String alias ) {
900+ with (' AVG' , relationshipName , field , alias );
901+ }
902+
903+ public void countDistinct (SObjectField field , String alias ) {
904+ with (' COUNT_DISTINCT' , field , alias );
905+ }
906+
907+ public void countDistinct (String relationshipName , SObjectField field , String alias ) {
908+ with (' COUNT_DISTINCT' , relationshipName , field , alias );
909+ }
910+
911+ public void min (SObjectField field , String alias ) {
912+ with (' MIN' , field , alias );
799913 }
800914
801- private void avg ( SObjectField field , String alias ) {
802- withAggregateFunction ( ' AVG( ' + field + ' ) ' , alias );
915+ public void min ( String relationshipName , SObjectField field , String alias ) {
916+ with ( ' MIN ' , relationshipName , field , alias );
803917 }
804918
805- private void countDistinct (SObjectField field , String alias ) {
806- withAggregateFunction ( ' COUNT_DISTINCT( ' + field + ' ) ' , alias );
919+ public void max (SObjectField field , String alias ) {
920+ with ( ' MAX ' , field , alias );
807921 }
808922
809- private void min ( SObjectField field , String alias ) {
810- withAggregateFunction ( ' MIN( ' + field + ' ) ' , alias );
923+ public void max ( String relationshipName , SObjectField field , String alias ) {
924+ with ( ' MAX ' , relationshipName , field , alias );
811925 }
812926
813- private void max (SObjectField field , String alias ) {
814- withAggregateFunction ( ' MAX( ' + field + ' ) ' , alias );
927+ public void sum (SObjectField field , String alias ) {
928+ with ( ' SUM ' , field , alias );
815929 }
816930
817- private void sum (SObjectField field , String alias ) {
818- withAggregateFunction (' SUM( ' + field + ' ) ' , alias );
931+ public void sum (String relationshipName , SObjectField field , String alias ) {
932+ with (' SUM' , relationshipName , field , alias );
819933 }
820934
821935 public void grouping (SObjectField field , String alias ) {
822- withAggregateFunction (' GROUPING(' + field + ' )' , alias );
936+ with (' GROUPING' , field , alias );
937+ }
938+
939+ public void with (String function , String relationshipName , SObjectField field , String alias ) {
940+ withAggregateFunction (function + ' (' + relationshipName + ' .' + field + ' )' , alias );
941+ }
942+
943+ public void with (String function , SObjectField field , String alias ) {
944+ withAggregateFunction (function + ' (' + field + ' )' , alias );
823945 }
824946
825947 public void with (SObjectField field , String alias ) {
@@ -865,6 +987,14 @@ public virtual inherited sharing class SOQL implements Queryable {
865987 fields .add (field .getDescribe ().getName ());
866988 }
867989
990+ public void toLabel (String field ) {
991+ fields .add (' toLabel(' + field + ' )' );
992+ }
993+
994+ private void format (SObjectField field , String alias ) {
995+ fields .add (' FORMAT(' + field + ' ) ' + alias );
996+ }
997+
868998 public void with (String relationshipPath , List <SObjectField > fields ) {
869999 for (SObjectField field : fields ) {
8701000 with (relationshipPath , field );
0 commit comments