Skip to content

Commit

Permalink
HHH-18765 - additional fix needed for the generic array_to_string fun…
Browse files Browse the repository at this point in the history
…ction

Signed-off-by: Jan Schatteman <[email protected]>
  • Loading branch information
jrenaat committed Oct 31, 2024
1 parent d730688 commit f829d5e
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,7 @@ public ArrayToStringFunction(TypeConfiguration typeConfiguration) {
"array_to_string",
FunctionKind.NORMAL,
StandardArgumentsValidators.composite(
new ArgumentTypesValidator( StandardArgumentsValidators.between( 2, 3 ), ANY, STRING, ANY ),
new ArrayAndElementArgumentValidator( 0, 2 )
new ArgumentTypesValidator( StandardArgumentsValidators.between( 2, 3 ), ANY, STRING, ANY )
),
StandardFunctionReturnTypeResolvers.invariant(
typeConfiguration.getBasicTypeRegistry().resolve( StandardBasicTypes.STRING )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,13 +40,13 @@ public void render(
arrayExpression.accept( walker );
sqlAppender.append( " is not null then coalesce((select listagg(" );
if ( defaultExpression != null ) {
sqlAppender.append( "coalesce(" );
sqlAppender.append( "coalesce(cast(" );
}
sqlAppender.append( "array_get(" );
arrayExpression.accept( walker );
sqlAppender.append(",i.idx)" );
if ( defaultExpression != null ) {
sqlAppender.append( "," );
sqlAppender.append( " as varchar2)," );
defaultExpression.accept( walker );
sqlAppender.append( ")" );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,11 @@ public void render(
arrayExpression.accept( walker );
sqlAppender.append( " is not null then coalesce((select group_concat(" );
if ( defaultExpression != null ) {
sqlAppender.append( "coalesce(" );
sqlAppender.append( "coalesce(cast(" );
}
sqlAppender.append( "t.val" );
if ( defaultExpression != null ) {
sqlAppender.append( "," );
sqlAppender.append( " as varchar)," );
defaultExpression.accept( walker );
sqlAppender.append( ")" );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import org.hibernate.dialect.OracleDialect;
import org.hibernate.dialect.PostgreSQLDialect;
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
import org.hibernate.testing.orm.junit.DomainModel;
import org.hibernate.testing.orm.junit.Jira;
Expand Down Expand Up @@ -37,9 +38,17 @@ public void testBooleanArrayToStringFunction(SessionFactoryScope scope) {
);
scope.inTransaction(
session -> {
String expected = session.getDialect().getClass().isAssignableFrom( PostgreSQLDialect.class ) ?
"f;f;null;t" : "false;false;null;true";

String s = session.createQuery( "select array_to_string(t.theBoolean, ';', 'null') "
+ "from TestEntity t", String.class ).getSingleResult();
Assertions.assertEquals("false;false;null;true", s);
Assertions.assertEquals(expected, s.toLowerCase());
// todo: review these other cases
// String s = session.createQuery( "select array_to_string(t.theBoolean, ';', null) "
// + "from TestEntity t", String.class ).getSingleResult();
// String s = session.createQuery( "select array_to_string(t.theBoolean, ';') "
// + "from TestEntity t", String.class ).getSingleResult();
}
);
scope.inTransaction(
Expand Down

0 comments on commit f829d5e

Please sign in to comment.