Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import java.util.ArrayList;
import java.util.List;

import jakarta.persistence.criteria.Nulls;
import org.hibernate.metamodel.mapping.BasicValuedModelPart;
import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart;
import org.hibernate.metamodel.mapping.EntityValuedModelPart;
Expand All @@ -15,7 +16,6 @@
import org.hibernate.metamodel.mapping.SelectableMapping;
import org.hibernate.metamodel.mapping.ordering.ast.DomainPath;
import org.hibernate.metamodel.mapping.ordering.ast.OrderingExpression;
import org.hibernate.query.NullPrecedence;
import org.hibernate.query.SortDirection;
import org.hibernate.sql.ast.spi.SqlAstCreationState;
import org.hibernate.sql.ast.spi.SqlSelection;
Expand Down Expand Up @@ -117,7 +117,7 @@ public void apply(
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
apply(
getReferenceModelPart(),
Expand All @@ -131,14 +131,14 @@ public void apply(
);
}

public void apply(
private void apply(
ModelPart referenceModelPart,
QuerySpec ast,
TableGroup tableGroup,
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
final BasicValuedModelPart basicPart = referenceModelPart.asBasicValuedModelPart();
if ( basicPart != null ) {
Expand Down Expand Up @@ -193,7 +193,7 @@ private void addSortSpecification(
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
if ( embeddableValuedModelPart.getFetchableName()
.equals( modelPartName ) || ELEMENT_TOKEN.equals( modelPartName ) ) {
Expand Down Expand Up @@ -231,7 +231,7 @@ private void addSortSpecification(
TableGroup tableGroup,
String collation,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
final TableReference tableReference = tableGroup.resolveTableReference( null, selection.getContainingTableExpression() );
final Expression expression = creationState.getSqlExpressionResolver().resolveSqlExpression(
Expand Down Expand Up @@ -271,7 +271,7 @@ private void addSortSpecification(
collation,
creationState
);
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence.getJpaValue() ) );
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence ) );
}

private static boolean selectClauseDoesNotContainOrderExpression(Expression expression, SelectClause selectClause) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@
*/
package org.hibernate.metamodel.mapping.ordering.ast;

import jakarta.persistence.criteria.Nulls;
import org.hibernate.metamodel.UnsupportedMappingException;
import org.hibernate.metamodel.mapping.MappingType;
import org.hibernate.metamodel.mapping.ModelPartContainer;
import org.hibernate.metamodel.mapping.PluralAttributeMapping;
import org.hibernate.metamodel.mapping.ordering.TranslationContext;
import org.hibernate.persister.entity.EntityPersister;
import org.hibernate.query.NullPrecedence;
import org.hibernate.query.SortDirection;
import org.hibernate.sql.ast.spi.SqlAstCreationState;
import org.hibernate.sql.ast.spi.SqlExpressionResolver;
Expand Down Expand Up @@ -86,7 +85,7 @@ public void apply(
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
final Expression expression = resolve( ast, tableGroup, modelPartName, creationState );
// It makes no sense to order by an expression multiple times
Expand All @@ -99,12 +98,9 @@ public void apply(
}
}

final Expression sortExpression = OrderingExpression.applyCollation(
expression,
collation,
creationState
);
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence.getJpaValue() ) );
final Expression sortExpression =
OrderingExpression.applyCollation( expression, collation, creationState );
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence ) );
}

TableReference getTableReference(TableGroup tableGroup) {
Expand All @@ -114,9 +110,8 @@ TableReference getTableReference(TableGroup tableGroup) {
return tableGroup.getPrimaryTableReference();
}

final MappingType elementMappingType = pluralAttribute.getElementDescriptor().getPartMappingType();

if ( elementMappingType instanceof EntityPersister entityPersister ) {
if ( pluralAttribute.getElementDescriptor().getPartMappingType()
instanceof EntityPersister entityPersister ) {
final String tableName = entityPersister.getTableNameForColumn( columnExpression );
return tableGroup.getTableReference( tableGroup.getNavigablePath(), tableName );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
import java.util.Collections;
import java.util.List;

import jakarta.persistence.criteria.Nulls;
import org.hibernate.metamodel.mapping.CollectionPart;
import org.hibernate.metamodel.mapping.internal.AbstractDomainPath;
import org.hibernate.query.NullPrecedence;
import org.hibernate.metamodel.model.domain.ReturnableType;
import org.hibernate.query.SortDirection;
import org.hibernate.query.sqm.function.FunctionRenderer;
Expand Down Expand Up @@ -93,15 +93,14 @@ public void apply(
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
final SelfRenderingFunctionSqlAstExpression expression = resolve( ast, tableGroup, modelPartName, creationState );
final Expression sortExpression = OrderingExpression.applyCollation(
expression,
resolve( ast, tableGroup, modelPartName, creationState ),
collation,
creationState
);
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence.getJpaValue() ) );
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence ) );
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*/
package org.hibernate.metamodel.mapping.ordering.ast;

import jakarta.persistence.criteria.Nulls;
import org.hibernate.query.NullPrecedence;
import org.hibernate.query.SortDirection;
import org.hibernate.query.spi.QueryEngine;
Expand All @@ -30,15 +31,29 @@ public interface OrderingExpression extends Node {
/**
* Apply the SQL AST sort-specifications associated with this ordering-expression
*/
void apply(
@Deprecated(since = "7.0", forRemoval = true)
default void apply(
QuerySpec ast,
TableGroup tableGroup,
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
SqlAstCreationState creationState);
SqlAstCreationState creationState) {
apply( ast, tableGroup, collation, modelPartName, sortOrder, nullPrecedence.getJpaValue(), creationState );
}

/**
* Apply the SQL AST sort-specifications associated with this ordering-expression
*/
void apply(
QuerySpec ast,
TableGroup tableGroup,
String collation,
String modelPartName,
SortDirection sortOrder,
Nulls nullPrecedence,
SqlAstCreationState creationState);

static Expression applyCollation(
Expression expression,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/
package org.hibernate.metamodel.mapping.ordering.ast;

import org.hibernate.query.NullPrecedence;
import jakarta.persistence.criteria.Nulls;
import org.hibernate.query.SortDirection;

/**
Expand All @@ -17,7 +17,7 @@ public class OrderingSpecification implements Node {

private String collation;
private SortDirection sortOrder = SortDirection.ASCENDING;
private NullPrecedence nullPrecedence = NullPrecedence.NONE;
private Nulls nullPrecedence = Nulls.NONE;
private String orderByValue;

public OrderingSpecification(OrderingExpression orderingExpression, String orderByValue) {
Expand Down Expand Up @@ -45,11 +45,11 @@ public void setSortOrder(SortDirection sortOrder) {
this.sortOrder = sortOrder;
}

public NullPrecedence getNullPrecedence() {
public Nulls getNullPrecedence() {
return nullPrecedence;
}

public void setNullPrecedence(NullPrecedence nullPrecedence) {
public void setNullPrecedence(Nulls nullPrecedence) {
this.nullPrecedence = nullPrecedence;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,10 @@
package org.hibernate.metamodel.mapping.ordering.ast;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;

import org.hibernate.internal.util.QuotingHelper;
import org.hibernate.query.NullPrecedence;
import jakarta.persistence.criteria.Nulls;
import org.hibernate.query.SortDirection;
import org.hibernate.grammars.ordering.OrderingParser;
import org.hibernate.grammars.ordering.OrderingParserBaseVisitor;
Expand All @@ -22,6 +20,9 @@
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.TerminalNode;

import static java.util.Collections.singletonList;
import static org.hibernate.internal.util.QuotingHelper.unquoteIdentifier;

/**
* @author Steve Ebersole
*/
Expand All @@ -41,18 +42,16 @@ public List<OrderingSpecification> visitOrderByFragment(OrderingParser.OrderByFr
final int size = ctx.getChildCount();
// Shift 1 bit instead of division by 2
final int specificationCount = ( size + 1 ) >> 1;

if ( specificationCount == 1 ) {
return Collections.singletonList( visitSortSpecification( (OrderingParser.SortSpecificationContext) ctx.getChild( 0 ) ) );
return singletonList( visitSortSpecification( (OrderingParser.SortSpecificationContext) ctx.getChild( 0 ) ) );
}

final List<OrderingSpecification> specifications = new ArrayList<>( specificationCount );

for ( int i = 0; i < size; i += 2 ) {
specifications.add( visitSortSpecification( (OrderingParser.SortSpecificationContext) ctx.getChild( i ) ) );
else {
final List<OrderingSpecification> specifications = new ArrayList<>( specificationCount );
for ( int i = 0; i < size; i += 2 ) {
specifications.add( visitSortSpecification( (OrderingParser.SortSpecificationContext) ctx.getChild( i ) ) );
}
return specifications;
}

return specifications;
}

@Override
Expand Down Expand Up @@ -103,10 +102,10 @@ public OrderingSpecification visitSortSpecification(OrderingParser.SortSpecifica
final ParseTree parseTree = parsedSpec.getChild( i );
if ( parseTree instanceof OrderingParser.NullsPrecedenceContext nullsCtx ) {
if ( ( (TerminalNode) nullsCtx.getChild( 1 ) ).getSymbol().getType() == OrderingParser.FIRST ) {
result.setNullPrecedence( NullPrecedence.FIRST );
result.setNullPrecedence( Nulls.FIRST );
}
else {
result.setNullPrecedence( NullPrecedence.LAST );
result.setNullPrecedence( Nulls.LAST );
}
}
}
Expand Down Expand Up @@ -216,16 +215,11 @@ public String visitCollationSpecification(OrderingParser.CollationSpecificationC

@Override
public Object visitTerminal(TerminalNode node) {
if ( node.getSymbol().getType() == OrderingParser.EOF ) {
return null;
}
switch ( node.getSymbol().getType() ) {
case OrderingParser.IDENTIFIER:
return node.getText();
case OrderingParser.QUOTED_IDENTIFIER:
return QuotingHelper.unquoteIdentifier( node.getText() );
default:
throw new ParsingException( "Unexpected terminal node [" + node.getText() + "]");
}
return switch ( node.getSymbol().getType() ) {
case OrderingParser.EOF -> null;
case OrderingParser.IDENTIFIER -> node.getText();
case OrderingParser.QUOTED_IDENTIFIER -> unquoteIdentifier( node.getText() );
default -> throw new ParsingException( "Unexpected terminal node [" + node.getText() + "]" );
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/
package org.hibernate.metamodel.mapping.ordering.ast;

import org.hibernate.query.NullPrecedence;
import jakarta.persistence.criteria.Nulls;
import org.hibernate.query.SortDirection;
import org.hibernate.sql.ast.spi.SqlAstCreationState;
import org.hibernate.sql.ast.tree.expression.Expression;
Expand Down Expand Up @@ -43,7 +43,7 @@ public void apply(
String collation,
String modelPartName,
SortDirection sortOrder,
NullPrecedence nullPrecedence,
Nulls nullPrecedence,
SqlAstCreationState creationState) {
final Expression expression = resolve( ast, tableGroup, modelPartName, creationState );
// It makes no sense to order by an expression multiple times
Expand All @@ -55,13 +55,10 @@ public void apply(
}
}
}
final Expression sortExpression = OrderingExpression.applyCollation(
expression,
collation,
creationState
);

ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence.getJpaValue() ) );
final Expression sortExpression =
OrderingExpression.applyCollation( expression, collation, creationState );
ast.addSortSpecification( new SortSpecification( sortExpression, sortOrder, nullPrecedence ) );
}

@Override
Expand Down
Loading
Loading