From d75c817fd926be045779710ec500324d13d66507 Mon Sep 17 00:00:00 2001 From: Christian Beikov Date: Thu, 30 Mar 2023 13:35:31 +0200 Subject: [PATCH] HHH-16402 Fix default window frame mode to be RANGE instead of ROWS --- .../hibernate/query/hql/internal/SemanticQueryBuilder.java | 2 +- .../org/hibernate/query/sqm/tree/expression/SqmWindow.java | 5 +++-- .../org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java | 4 ++-- .../java/org/hibernate/sql/ast/tree/expression/Over.java | 2 +- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java index 4d0c1e587a..11608cf6c7 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/query/hql/internal/SemanticQueryBuilder.java @@ -4732,7 +4732,7 @@ public class SemanticQueryBuilder extends HqlParserBaseVisitor implem } } else { - mode = FrameMode.ROWS; + mode = FrameMode.RANGE; startKind = FrameKind.UNBOUNDED_PRECEDING; startExpression = null; endKind = FrameKind.CURRENT_ROW; diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmWindow.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmWindow.java index e2413aba2f..0570d86b42 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmWindow.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/tree/expression/SqmWindow.java @@ -28,6 +28,7 @@ import jakarta.persistence.criteria.Order; import static org.hibernate.query.sqm.FrameExclusion.NO_OTHERS; import static org.hibernate.query.sqm.FrameKind.CURRENT_ROW; import static org.hibernate.query.sqm.FrameKind.UNBOUNDED_PRECEDING; +import static org.hibernate.query.sqm.FrameMode.RANGE; import static org.hibernate.query.sqm.FrameMode.ROWS; /** @@ -49,7 +50,7 @@ public class SqmWindow extends AbstractSqmNode implements JpaWindow, SqmVisitabl nodeBuilder, new ArrayList<>(), new ArrayList<>(), - ROWS, + RANGE, UNBOUNDED_PRECEDING, null, CURRENT_ROW, @@ -221,7 +222,7 @@ public class SqmWindow extends AbstractSqmNode implements JpaWindow, SqmVisitabl orderList.get( i ).appendHqlString( sb ); } } - if ( mode == ROWS && startKind == UNBOUNDED_PRECEDING && endKind == CURRENT_ROW && exclusion == NO_OTHERS ) { + if ( mode == RANGE && startKind == UNBOUNDED_PRECEDING && endKind == CURRENT_ROW && exclusion == NO_OTHERS ) { // This is the default, so we don't need to render anything } else { diff --git a/hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java b/hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java index 0ae27d5c0c..c5cc11a1a9 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/ast/spi/AbstractSqlAstTranslator.java @@ -4766,7 +4766,7 @@ public abstract class AbstractSqlAstTranslator implemen visitOverClause( partitionExpressions, sortSpecifications, - FrameMode.ROWS, + FrameMode.RANGE, FrameKind.UNBOUNDED_PRECEDING, null, FrameKind.CURRENT_ROW, @@ -4793,7 +4793,7 @@ public abstract class AbstractSqlAstTranslator implemen if ( !orderedSetAggregate ) { renderOrderBy( !partitionExpressions.isEmpty(), sortSpecifications ); } - if ( mode == FrameMode.ROWS && startKind == FrameKind.UNBOUNDED_PRECEDING && endKind == FrameKind.CURRENT_ROW && exclusion == FrameExclusion.NO_OTHERS ) { + if ( mode == FrameMode.RANGE && startKind == FrameKind.UNBOUNDED_PRECEDING && endKind == FrameKind.CURRENT_ROW && exclusion == FrameExclusion.NO_OTHERS ) { // This is the default, so we don't need to render anything } else { diff --git a/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/Over.java b/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/Over.java index 549c4fae4f..13d4c435ec 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/Over.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/ast/tree/expression/Over.java @@ -43,7 +43,7 @@ public class Over implements Expression, DomainResultProducer { this.expression = expression; this.partitions = partitions; this.orderList = orderList; - this.mode = FrameMode.ROWS; + this.mode = FrameMode.RANGE; this.startKind = FrameKind.UNBOUNDED_PRECEDING; this.startExpression = null; this.endKind = FrameKind.CURRENT_ROW;