From 22def92a4d86d85831e74dd946ae8c31e57a50ba Mon Sep 17 00:00:00 2001 From: seregamorph Date: Mon, 28 Sep 2020 09:51:15 +0300 Subject: [PATCH] HHH-13884 Order.reverse() contract --- .../sqm/tree/select/SqmSortSpecification.java | 7 +-- .../query/sqm/tree/select/HHH13884Test.java | 47 +++++++++++++++++++ 2 files changed, 51 insertions(+), 3 deletions(-) create mode 100644 hibernate-core/src/test/java/org/hibernate/query/sqm/tree/select/HHH13884Test.java diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSortSpecification.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSortSpecification.java index 6361dc89585b..6ef34ffec3be 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSortSpecification.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/select/SqmSortSpecification.java @@ -18,7 +18,8 @@ public class SqmSortSpecification implements JpaOrder { private final SqmExpression sortExpression; private final String collation; - private SortOrder sortOrder; + private final SortOrder sortOrder; + private NullPrecedence nullPrecedence; public SqmSortSpecification( @@ -73,8 +74,8 @@ public NullPrecedence getNullPrecedence() { @Override public JpaOrder reverse() { - this.sortOrder = this.sortOrder == null ? SortOrder.DESCENDING : sortOrder.reverse(); - return this; + SortOrder newSortOrder = this.sortOrder == null ? SortOrder.DESCENDING : sortOrder.reverse(); + return new SqmSortSpecification( sortExpression, collation, newSortOrder, nullPrecedence ); } @Override diff --git a/hibernate-core/src/test/java/org/hibernate/query/sqm/tree/select/HHH13884Test.java b/hibernate-core/src/test/java/org/hibernate/query/sqm/tree/select/HHH13884Test.java new file mode 100644 index 000000000000..2b6f698602bf --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/query/sqm/tree/select/HHH13884Test.java @@ -0,0 +1,47 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later. + * See the lgpl.txt file in the root directory or . + */ +package org.hibernate.query.sqm.tree.select; + +import org.hibernate.query.criteria.JpaOrder; +import org.hibernate.query.sqm.tree.expression.SqmExpression; + +import org.hibernate.testing.TestForIssue; +import org.junit.Test; + +import static org.hibernate.NullPrecedence.FIRST; +import static org.hibernate.SortOrder.ASCENDING; +import static org.hibernate.SortOrder.DESCENDING; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; +import static org.mockito.Mockito.mock; + +/** + * @author seregamorph + */ +@TestForIssue(jiraKey = "HHH-13884") +public class HHH13884Test { + + @Test + public void testDefaultSqmSortSpecificationReverse() { + SqmExpression sortExpression = mock( SqmExpression.class ); + String collation = "collation"; + + SqmSortSpecification order = new SqmSortSpecification( sortExpression, collation, ASCENDING, FIRST ); + + assertEquals( sortExpression, order.getSortExpression() ); + assertEquals( collation, order.getCollation() ); + assertEquals( ASCENDING, order.getSortOrder() ); + assertEquals( FIRST, order.getNullPrecedence() ); + + JpaOrder reversed = order.reverse(); + + assertEquals( DESCENDING, reversed.getSortOrder() ); + assertEquals( FIRST, reversed.getNullPrecedence() ); + + assertNotSame( "Order.reverse() should create new instance", order, reversed ); + } +}