Skip to content

Commit 33665af

Browse files
committed
HHH-19663 Add arrayToString/collectionToString variant that accepts default element
1 parent 0fe88e8 commit 33665af

File tree

4 files changed

+193
-0
lines changed

4 files changed

+193
-0
lines changed

hibernate-core/src/main/java/org/hibernate/query/criteria/HibernateCriteriaBuilder.java

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2782,6 +2782,43 @@ <T> JpaExpression<T[]> arrayAgg(
27822782
*/
27832783
@Incubating
27842784
JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator);
2785+
2786+
/**
2787+
* Concatenates the array elements with a separator, as specified by the arguments. Null array elements are replaced
2788+
* with the given default element.
2789+
*
2790+
* @since 7.1
2791+
*/
2792+
@Incubating
2793+
JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, Expression<String> defaultExpression);
2794+
2795+
/**
2796+
* Concatenates the array elements with a separator, as specified by the arguments. Null array elements are replaced
2797+
* with the given default element.
2798+
*
2799+
* @since 7.1
2800+
*/
2801+
@Incubating
2802+
JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, String defaultValue);
2803+
2804+
/**
2805+
* Concatenates the array elements with a separator, as specified by the arguments. Null array elements are replaced
2806+
* with the given default element.
2807+
*
2808+
* @since 7.1
2809+
*/
2810+
@Incubating
2811+
JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, Expression<String> defaultExpression);
2812+
2813+
/**
2814+
* Concatenates the array elements with a separator, as specified by the arguments. Null array elements are replaced
2815+
* with the given default element.
2816+
*
2817+
* @since 7.1
2818+
*/
2819+
@Incubating
2820+
JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, String defaultValue);
2821+
27852822
/**
27862823
* Whether an array contains an element.
27872824
*
@@ -3405,6 +3442,42 @@ default <T> JpaPredicate arrayOverlapsNullable(T[] array1, Expression<T[]> array
34053442
@Incubating
34063443
JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator);
34073444

3445+
/**
3446+
* Concatenates the collection elements with a separator, as specified by the arguments. Null collection elements
3447+
* are replaced with the given default element.
3448+
*
3449+
* @since 7.1
3450+
*/
3451+
@Incubating
3452+
JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, Expression<String> defaultExpression);
3453+
3454+
/**
3455+
* Concatenates the collection elements with a separator, as specified by the arguments. Null collection elements
3456+
* are replaced with the given default element.
3457+
*
3458+
* @since 7.1
3459+
*/
3460+
@Incubating
3461+
JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, String defaultValue);
3462+
3463+
/**
3464+
* Concatenates the collection elements with a separator, as specified by the arguments. Null collection elements
3465+
* are replaced with the given default element.
3466+
*
3467+
* @since 7.1
3468+
*/
3469+
@Incubating
3470+
JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, Expression<String> defaultExpression);
3471+
3472+
/**
3473+
* Concatenates the collection elements with a separator, as specified by the arguments. Null collection elements
3474+
* are replaced with the given default element.
3475+
*
3476+
* @since 7.1
3477+
*/
3478+
@Incubating
3479+
JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, String defaultValue);
3480+
34083481
/**
34093482
* Whether a basic collection contains an element.
34103483
*

hibernate-core/src/main/java/org/hibernate/query/criteria/spi/HibernateCriteriaBuilderDelegate.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2576,6 +2576,30 @@ public JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayE
25762576
return criteriaBuilder.arrayToString( arrayExpression, separator );
25772577
}
25782578

2579+
@Incubating
2580+
@Override
2581+
public JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, Expression<String> defaultExpression) {
2582+
return criteriaBuilder.arrayToString( arrayExpression, separatorExpression, defaultExpression );
2583+
}
2584+
2585+
@Incubating
2586+
@Override
2587+
public JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, String defaultValue) {
2588+
return criteriaBuilder.arrayToString( arrayExpression, separatorExpression, defaultValue );
2589+
}
2590+
2591+
@Incubating
2592+
@Override
2593+
public JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, Expression<String> defaultExpression) {
2594+
return criteriaBuilder.arrayToString( arrayExpression, separator, defaultExpression );
2595+
}
2596+
2597+
@Incubating
2598+
@Override
2599+
public JpaExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, String defaultValue) {
2600+
return criteriaBuilder.arrayToString( arrayExpression, separator, defaultValue );
2601+
}
2602+
25792603
@Override
25802604
@Incubating
25812605
public <T> JpaPredicate arrayContains(Expression<T[]> arrayExpression, Expression<T> elementExpression) {
@@ -3100,6 +3124,30 @@ public JpaExpression<String> collectionToString(
31003124
return criteriaBuilder.collectionToString( collectionExpression, separator );
31013125
}
31023126

3127+
@Incubating
3128+
@Override
3129+
public JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, Expression<String> defaultExpression) {
3130+
return criteriaBuilder.collectionToString( collectionExpression, separatorExpression, defaultExpression );
3131+
}
3132+
3133+
@Incubating
3134+
@Override
3135+
public JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, String defaultValue) {
3136+
return criteriaBuilder.collectionToString( collectionExpression, separatorExpression, defaultValue );
3137+
}
3138+
3139+
@Incubating
3140+
@Override
3141+
public JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, Expression<String> defaultExpression) {
3142+
return criteriaBuilder.collectionToString( collectionExpression, separator, defaultExpression );
3143+
}
3144+
3145+
@Incubating
3146+
@Override
3147+
public JpaExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, String defaultValue) {
3148+
return criteriaBuilder.collectionToString( collectionExpression, separator, defaultValue );
3149+
}
3150+
31033151
@Override
31043152
@Incubating
31053153
public <E> JpaPredicate collectionContains(

hibernate-core/src/main/java/org/hibernate/query/sqm/NodeBuilder.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,18 @@ <T> SqmExpression<T[]> arrayAgg(
263263
@Override
264264
SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator);
265265

266+
@Override
267+
SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, Expression<String> defaultExpression);
268+
269+
@Override
270+
SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, String defaultValue);
271+
272+
@Override
273+
SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, Expression<String> defaultExpression);
274+
275+
@Override
276+
SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, String defaultValue);
277+
266278
@Override
267279
<T> SqmPredicate arrayContains(Expression<T[]> arrayExpression, Expression<T> elementExpression);
268280

@@ -503,6 +515,18 @@ default <T> SqmPredicate arrayOverlapsNullable(T[] array1, Expression<T[]> array
503515
@Override
504516
SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator);
505517

518+
@Override
519+
SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, Expression<String> defaultExpression);
520+
521+
@Override
522+
SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, String defaultValue);
523+
524+
@Override
525+
SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, Expression<String> defaultExpression);
526+
527+
@Override
528+
SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, String defaultValue);
529+
506530
@Override
507531
<E> SqmPredicate collectionContains(Expression<? extends Collection<E>> collectionExpression, Expression<? extends E> elementExpression);
508532

hibernate-core/src/main/java/org/hibernate/query/sqm/internal/SqmCriteriaNodeBuilder.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4695,6 +4695,30 @@ public SqmExpression<String> arrayToString(
46954695
);
46964696
}
46974697

4698+
@Override
4699+
public SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, Expression<String> defaultExpression) {
4700+
return getFunctionDescriptor( "array_to_string" ).generateSqmExpression(
4701+
asList( (SqmExpression<?>) arrayExpression, (SqmExpression<?>) separatorExpression, (SqmExpression<?>) defaultExpression ),
4702+
null,
4703+
queryEngine
4704+
);
4705+
}
4706+
4707+
@Override
4708+
public SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, Expression<String> separatorExpression, String defaultValue) {
4709+
return arrayToString( arrayExpression, separatorExpression, value( defaultValue ) );
4710+
}
4711+
4712+
@Override
4713+
public SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, Expression<String> defaultExpression) {
4714+
return arrayToString( arrayExpression, value( separator ), defaultExpression );
4715+
}
4716+
4717+
@Override
4718+
public SqmExpression<String> arrayToString(Expression<? extends Object[]> arrayExpression, String separator, String defaultValue) {
4719+
return arrayToString( arrayExpression, value( separator ), value( defaultValue ) );
4720+
}
4721+
46984722
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
46994723
// Array functions for collection types
47004724

@@ -5348,6 +5372,30 @@ public SqmExpression<String> collectionToString(
53485372
);
53495373
}
53505374

5375+
@Override
5376+
public SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, Expression<String> defaultExpression) {
5377+
return getFunctionDescriptor( "array_to_string" ).generateSqmExpression(
5378+
asList( (SqmExpression<?>) collectionExpression, (SqmExpression<?>) separatorExpression, (SqmExpression<?>) defaultExpression ),
5379+
null,
5380+
queryEngine
5381+
);
5382+
}
5383+
5384+
@Override
5385+
public SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, Expression<String> separatorExpression, String defaultValue) {
5386+
return collectionToString( collectionExpression, separatorExpression, value( defaultValue ) );
5387+
}
5388+
5389+
@Override
5390+
public SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, Expression<String> defaultExpression) {
5391+
return collectionToString( collectionExpression, value( separator ), defaultExpression );
5392+
}
5393+
5394+
@Override
5395+
public SqmExpression<String> collectionToString(Expression<? extends Collection<?>> collectionExpression, String separator, String defaultValue) {
5396+
return collectionToString( collectionExpression, value( separator ), value( defaultValue ) );
5397+
}
5398+
53515399
@Override
53525400
public SqmJsonValueExpression<String> jsonValue(Expression<?> jsonDocument, String jsonPath) {
53535401
return jsonValue( jsonDocument, value( jsonPath ), null );

0 commit comments

Comments
 (0)