Skip to content

Commit f829d5e

Browse files
committed
HHH-18765 - additional fix needed for the generic array_to_string function
Signed-off-by: Jan Schatteman <[email protected]>
1 parent d730688 commit f829d5e

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

hibernate-core/src/main/java/org/hibernate/dialect/function/array/ArrayToStringFunction.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,7 @@ public ArrayToStringFunction(TypeConfiguration typeConfiguration) {
3232
"array_to_string",
3333
FunctionKind.NORMAL,
3434
StandardArgumentsValidators.composite(
35-
new ArgumentTypesValidator( StandardArgumentsValidators.between( 2, 3 ), ANY, STRING, ANY ),
36-
new ArrayAndElementArgumentValidator( 0, 2 )
35+
new ArgumentTypesValidator( StandardArgumentsValidators.between( 2, 3 ), ANY, STRING, ANY )
3736
),
3837
StandardFunctionReturnTypeResolvers.invariant(
3938
typeConfiguration.getBasicTypeRegistry().resolve( StandardBasicTypes.STRING )

hibernate-core/src/main/java/org/hibernate/dialect/function/array/H2ArrayToStringFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,13 @@ public void render(
4040
arrayExpression.accept( walker );
4141
sqlAppender.append( " is not null then coalesce((select listagg(" );
4242
if ( defaultExpression != null ) {
43-
sqlAppender.append( "coalesce(" );
43+
sqlAppender.append( "coalesce(cast(" );
4444
}
4545
sqlAppender.append( "array_get(" );
4646
arrayExpression.accept( walker );
4747
sqlAppender.append(",i.idx)" );
4848
if ( defaultExpression != null ) {
49-
sqlAppender.append( "," );
49+
sqlAppender.append( " as varchar2)," );
5050
defaultExpression.accept( walker );
5151
sqlAppender.append( ")" );
5252
}

hibernate-core/src/main/java/org/hibernate/dialect/function/array/HSQLArrayToStringFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ public void render(
3636
arrayExpression.accept( walker );
3737
sqlAppender.append( " is not null then coalesce((select group_concat(" );
3838
if ( defaultExpression != null ) {
39-
sqlAppender.append( "coalesce(" );
39+
sqlAppender.append( "coalesce(cast(" );
4040
}
4141
sqlAppender.append( "t.val" );
4242
if ( defaultExpression != null ) {
43-
sqlAppender.append( "," );
43+
sqlAppender.append( " as varchar)," );
4444
defaultExpression.accept( walker );
4545
sqlAppender.append( ")" );
4646
}

hibernate-core/src/test/java/org/hibernate/orm/test/type/BooleanArrayToStringTest.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import jakarta.persistence.Entity;
88
import jakarta.persistence.Id;
99
import org.hibernate.dialect.OracleDialect;
10+
import org.hibernate.dialect.PostgreSQLDialect;
1011
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
1112
import org.hibernate.testing.orm.junit.DomainModel;
1213
import org.hibernate.testing.orm.junit.Jira;
@@ -37,9 +38,17 @@ public void testBooleanArrayToStringFunction(SessionFactoryScope scope) {
3738
);
3839
scope.inTransaction(
3940
session -> {
41+
String expected = session.getDialect().getClass().isAssignableFrom( PostgreSQLDialect.class ) ?
42+
"f;f;null;t" : "false;false;null;true";
43+
4044
String s = session.createQuery( "select array_to_string(t.theBoolean, ';', 'null') "
4145
+ "from TestEntity t", String.class ).getSingleResult();
42-
Assertions.assertEquals("false;false;null;true", s);
46+
Assertions.assertEquals(expected, s.toLowerCase());
47+
// todo: review these other cases
48+
// String s = session.createQuery( "select array_to_string(t.theBoolean, ';', null) "
49+
// + "from TestEntity t", String.class ).getSingleResult();
50+
// String s = session.createQuery( "select array_to_string(t.theBoolean, ';') "
51+
// + "from TestEntity t", String.class ).getSingleResult();
4352
}
4453
);
4554
scope.inTransaction(

0 commit comments

Comments
 (0)