6 - SQM based on JPA type system

This commit is contained in:
Andrea Boriero 2019-05-23 16:38:34 +01:00
parent e551311eaa
commit fa754a77e2
39 changed files with 78 additions and 95 deletions

View File

@ -10,7 +10,7 @@ package org.hibernate.query;
import javax.persistence.ParameterMode;
import org.hibernate.Incubating;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.domain.AllowableParameterType;
/**
* Represents a parameter defined in the source (HQL/JPQL or criteria) query.

View File

@ -20,7 +20,6 @@ import org.hibernate.engine.spi.LoadQueryInfluencers;
import org.hibernate.graph.spi.GraphImplementor;
import org.hibernate.internal.util.collections.Stack;
import org.hibernate.internal.util.collections.StandardStack;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.mapping.spi.EmbeddedValuedNavigable;
import org.hibernate.metamodel.model.mapping.EntityTypeDescriptor;
import org.hibernate.metamodel.model.mapping.spi.NavigableContainer;

View File

@ -48,7 +48,7 @@ public class SqmCreationHelper {
public static void resolveAsLhs(
SqmPath lhs,
SqmPath processingPath,
SqmPathSource<?,?> subNavigable,
SqmPathSource<?> subNavigable,
boolean isSubRefTerminal,
SqmCreationState creationState) {
SqmTreeCreationLogger.LOGGER.tracef(

View File

@ -8,7 +8,7 @@ package org.hibernate.query.sqm.produce.function;
import java.util.List;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.tree.SqmTypedNode;
/**

View File

@ -8,7 +8,7 @@ package org.hibernate.query.sqm.produce.function;
import java.util.List;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.internal.SelfRenderingSqmFunction;
import org.hibernate.query.sqm.produce.function.spi.AbstractSqmFunctionTemplate;

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.produce.function;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.produce.function.spi.NamedSqmFunctionTemplate;
import org.jboss.logging.Logger;

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.produce.function;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.produce.function.internal.PatternRenderer;
import org.hibernate.query.sqm.produce.function.spi.PatternBasedSqmFunctionTemplate;

View File

@ -9,7 +9,7 @@ package org.hibernate.query.sqm.produce.function;
import java.util.Map;
import java.util.TreeMap;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.jboss.logging.Logger;

View File

@ -10,10 +10,10 @@ import java.sql.Types;
import java.util.List;
import java.util.Locale;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.QueryException;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* @author Steve Ebersole
@ -107,7 +107,7 @@ public class StandardFunctionReturnTypeResolvers {
private static AllowableFunctionReturnType extractArgumentType(List<SqmTypedNode<?>> arguments, int position) {
final SqmTypedNode specifiedArgument = arguments.get( position-1 );
final ExpressableType specifiedArgType = specifiedArgument.getNodeType();
final SqmExpressable specifiedArgType = specifiedArgument.getNodeType();
if ( !(specifiedArgType instanceof AllowableFunctionReturnType) ) {
throw new QueryException(
String.format(

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.produce.function;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.produce.function.spi.FunctionAsExpressionTemplate;
import org.jboss.logging.Logger;

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.produce.function.internal;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.produce.function.spi.SelfRenderingFunctionSupport;
import org.hibernate.query.sqm.tree.SqmTypedNode;

View File

@ -8,7 +8,7 @@ package org.hibernate.query.sqm.produce.function.spi;
import java.util.List;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;

View File

@ -8,7 +8,7 @@ package org.hibernate.query.sqm.produce.function.spi;
import java.util.List;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;

View File

@ -9,7 +9,7 @@ package org.hibernate.query.sqm.produce.function.spi;
import java.util.List;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;

View File

@ -7,7 +7,7 @@
package org.hibernate.query.sqm.produce.function.spi;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.produce.function.spi;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.SqmFunctionTemplate;
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
@ -35,7 +35,8 @@ public class PairedFunctionTemplate extends AbstractSqmFunctionTemplate {
QueryEngine queryEngine,
String name,
AllowableFunctionReturnType type,
String pattern2, String pattern3) {
String pattern2,
String pattern3) {
queryEngine.getSqmFunctionRegistry().register(
name,
new PairedFunctionTemplate(
@ -53,6 +54,7 @@ public class PairedFunctionTemplate extends AbstractSqmFunctionTemplate {
);
}
@Override
protected <T> SelfRenderingSqmFunction<T> generateSqmFunctionExpression(
List<SqmTypedNode<?>> arguments,

View File

@ -7,7 +7,7 @@
package org.hibernate.query.sqm.produce.function.spi;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.spi.QueryEngine;
import org.hibernate.query.sqm.produce.function.ArgumentsValidator;
import org.hibernate.query.sqm.produce.function.FunctionReturnTypeResolver;

View File

@ -13,6 +13,7 @@ import javax.persistence.criteria.Expression;
import org.hibernate.metamodel.model.mapping.spi.BasicValuedNavigable;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.produce.path.spi.SemanticPathPart;
import org.hibernate.query.sqm.produce.spi.SqmCreationState;
@ -22,7 +23,6 @@ import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.query.sqm.tree.expression.SqmLiteral;
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
import org.hibernate.sql.ast.produce.metamodel.spi.BasicValuedExpressableType;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.type.descriptor.java.spi.EnumJavaDescriptor;
import org.hibernate.type.spi.StandardSpiBasicTypes;
@ -65,7 +65,7 @@ public class SqmStaticEnumReference<T extends Enum<T>>
}
@Override
protected void internalApplyInferableType(ExpressableType<?> newType) {
protected void internalApplyInferableType(SqmExpressable<?> newType) {
//noinspection StatementWithEmptyBody
if ( newType instanceof BasicValuedNavigable ) {
final BasicValuedNavigable basicValuedNavigable = (BasicValuedNavigable) newType;

View File

@ -12,6 +12,7 @@ import java.math.BigInteger;
import org.hibernate.metamodel.model.mapping.spi.BasicValuedNavigable;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.produce.SqmProductionException;
import org.hibernate.query.sqm.produce.path.spi.SemanticPathPart;
@ -21,7 +22,6 @@ import org.hibernate.query.sqm.tree.expression.AbstractSqmExpression;
import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.query.sqm.tree.expression.SqmLiteral;
import org.hibernate.sql.ast.produce.metamodel.spi.BasicValuedExpressableType;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.type.descriptor.java.spi.BasicJavaDescriptor;
/**
@ -78,7 +78,7 @@ public class SqmStaticFieldReference<T>
}
@Override
protected void internalApplyInferableType(ExpressableType<?> newType) {
protected void internalApplyInferableType(SqmExpressable<?> newType) {
//noinspection StatementWithEmptyBody
if ( newType instanceof BasicValuedNavigable ) {
// basic valued navigable may have a ValueConverter associated

View File

@ -45,7 +45,7 @@ public abstract class AbstractSqmAttributeJoin<O,T>
@SuppressWarnings("WeakerAccess")
public AbstractSqmAttributeJoin(
SqmFrom<?,O> lhs,
SqmJoinable<O,T> joinedNavigable,
SqmJoinable joinedNavigable,
String alias,
SqmJoinType joinType,
boolean fetched,

View File

@ -60,7 +60,7 @@ public interface SqmPath<T> extends SqmExpression<T>, SemanticPathPart, JpaPath<
SqmPathSource<T> getNodeType();
@Override
default void applyInferableType(SqmExpressable<T> type) {
default void applyInferableType(SqmExpressable<?> type) {
// do nothing
}

View File

@ -17,6 +17,7 @@ import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.produce.SqmTreeCreationLogger;
import org.hibernate.query.sqm.tree.jpa.AbstractJpaSelection;
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import static org.hibernate.query.internal.QueryHelper.highestPrecedenceType;
@ -130,4 +131,9 @@ public abstract class AbstractSqmExpression<T> extends AbstractJpaSelection<T> i
setAlias( name );
return this;
}
@Override
public JavaTypeDescriptor<T> getJavaTypeDescriptor() {
return getNodeType().getExpressableJavaTypeDescriptor();
}
}

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.domain.AllowableParameterType;
import org.hibernate.query.sqm.NodeBuilder;
/**

View File

@ -9,7 +9,7 @@ package org.hibernate.query.sqm.tree.expression;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
/**
* @author Steve Ebersole

View File

@ -9,9 +9,9 @@ package org.hibernate.query.sqm.tree.expression;
import org.hibernate.metamodel.spi.MetamodelImplementor;
import org.hibernate.query.BinaryArithmeticOperator;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.sql.ast.produce.metamodel.spi.BasicValuedExpressableType;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* @author Steve Ebersole
@ -29,7 +29,7 @@ public class SqmBinaryArithmetic<T> extends AbstractSqmExpression<T> {
NodeBuilder nodeBuilder) {
//noinspection unchecked
super(
(ExpressableType<T>) domainModel.getTypeConfiguration().resolveArithmeticType(
(SqmExpressable<T>) domainModel.getTypeConfiguration().resolveArithmeticType(
(BasicValuedExpressableType) lhsOperand.getNodeType(),
(BasicValuedExpressableType) rhsOperand.getNodeType(),
operator
@ -99,7 +99,7 @@ public class SqmBinaryArithmetic<T> extends AbstractSqmExpression<T> {
}
@Override
protected void internalApplyInferableType(ExpressableType<?> type) {
protected void internalApplyInferableType(SqmExpressable<?> type) {
rhsOperand.applyInferableType( type );
lhsOperand.applyInferableType( type );

View File

@ -14,10 +14,9 @@ import javax.persistence.criteria.Expression;
import org.hibernate.query.criteria.JpaExpression;
import org.hibernate.query.criteria.JpaSearchedCase;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
import org.hibernate.sql.ast.produce.metamodel.spi.BasicValuedExpressableType;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* @author Steve Ebersole
@ -53,7 +52,7 @@ public class SqmCaseSearched<R> extends AbstractSqmExpression<R> implements JpaS
}
@Override
protected void internalApplyInferableType(ExpressableType<?> newType) {
protected void internalApplyInferableType(SqmExpressable<?> newType) {
super.internalApplyInferableType( newType );
if ( otherwise != null ) {

View File

@ -6,14 +6,13 @@
*/
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.domain.AllowableParameterType;
import org.hibernate.query.ParameterMetadata;
import org.hibernate.query.named.spi.ParameterMemento;
import org.hibernate.query.spi.QueryParameterImplementor;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
/**
* SqmParameter created via JPA {@link javax.persistence.criteria.CriteriaBuilder}
@ -102,15 +101,10 @@ public class SqmCriteriaParameter<T>
}
@Override
protected void internalApplyInferableType(ExpressableType<?> newType) {
protected void internalApplyInferableType(SqmExpressable<?> newType) {
super.internalApplyInferableType( newType );
}
@Override
public JavaTypeDescriptor<T> getJavaTypeDescriptor() {
return this.getNodeType().getJavaTypeDescriptor();
}
@Override
public <X> X accept(SemanticQueryWalker<X> walker) {
return walker.visitCriteriaParameter( this );

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.domain.AllowableParameterType;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.domain.AllowableParameterType;
import org.hibernate.query.criteria.JpaParameterExpression;
/**

View File

@ -7,13 +7,12 @@
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.sql.ast.produce.metamodel.spi.EntityValuedExpressableType;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.sql.results.spi.DomainResult;
import org.hibernate.sql.results.spi.DomainResultCreationState;
import org.hibernate.sql.results.spi.DomainResultProducer;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
/**
* Entity type expression based on a parameter - `TYPE( :someParam )`
@ -35,7 +34,7 @@ public class SqmParameterizedEntityType<T> extends AbstractSqmExpression<T> impl
}
@Override
public void internalApplyInferableType(ExpressableType<?> type) {
public void internalApplyInferableType(SqmExpressable<?> type) {
setExpressableType( type );
//noinspection unchecked
@ -60,8 +59,4 @@ public class SqmParameterizedEntityType<T> extends AbstractSqmExpression<T> impl
// todo (6.0) : but could be ^^ - consider adding support for this (returning Class)
}
@Override
public JavaTypeDescriptor<T> getJavaTypeDescriptor() {
return getNodeType().getJavaTypeDescriptor();
}
}

View File

@ -6,7 +6,7 @@
*/
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.metamodel.model.mapping.spi.AllowableParameterType;
import org.hibernate.metamodel.model.domain.AllowableParameterType;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;

View File

@ -7,9 +7,9 @@
package org.hibernate.query.sqm.tree.expression;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.tree.select.SqmSubQuery;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* Represents a {@link Modifier#ALL}, {@link Modifier#ANY}, {@link Modifier#SOME} modifier appplied to a subquery as
@ -42,7 +42,7 @@ public class SqmRestrictedSubQueryExpression<T> extends AbstractSqmExpression<T>
public SqmRestrictedSubQueryExpression(
SqmSubQuery<T> subQuery,
Modifier modifier,
ExpressableType<T> resultType,
SqmExpressable<T> resultType,
NodeBuilder builder) {
super( resultType, builder );
this.subQuery = subQuery;

View File

@ -13,10 +13,9 @@ import org.hibernate.QueryException;
import org.hibernate.query.criteria.JpaCompoundSelection;
import org.hibernate.query.criteria.JpaSelection;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
/**
* Models a tuple of values, generally defined as a series of values
@ -37,7 +36,7 @@ public class SqmTuple<T> extends AbstractSqmExpression<T> implements JpaCompound
this( Arrays.asList( groupedExpressions ), nodeBuilder );
}
public SqmTuple(NodeBuilder nodeBuilder, ExpressableType<T> type, SqmExpression<?>... groupedExpressions) {
public SqmTuple(NodeBuilder nodeBuilder, SqmExpressable<T> type, SqmExpression<?>... groupedExpressions) {
this( Arrays.asList( groupedExpressions ), nodeBuilder );
applyInferableType( type );
}
@ -50,21 +49,21 @@ public class SqmTuple<T> extends AbstractSqmExpression<T> implements JpaCompound
this.groupedExpressions = groupedExpressions;
}
public SqmTuple(List<SqmExpression<?>> groupedExpressions, ExpressableType<T> type, NodeBuilder nodeBuilder) {
public SqmTuple(List<SqmExpression<?>> groupedExpressions, SqmExpressable<T> type, NodeBuilder nodeBuilder) {
this( groupedExpressions, nodeBuilder );
applyInferableType( type );
}
@Override
public ExpressableType<T> getNodeType() {
final ExpressableType<T> expressableType = super.getNodeType();
public SqmExpressable<T> getNodeType() {
final SqmExpressable<T> expressableType = super.getNodeType();
if ( expressableType != null ) {
return expressableType;
}
for ( SqmExpression groupedExpression : groupedExpressions ) {
//noinspection unchecked
final ExpressableType<T> groupedExpressionExpressableType = groupedExpression.getNodeType();
final SqmExpressable<T> groupedExpressionExpressableType = groupedExpression.getNodeType();
if ( groupedExpressionExpressableType != null ) {
return groupedExpressionExpressableType;
}
@ -85,7 +84,7 @@ public class SqmTuple<T> extends AbstractSqmExpression<T> implements JpaCompound
@Override
public JavaTypeDescriptor<T> getJavaTypeDescriptor() {
return getNodeType().getJavaTypeDescriptor();
return getNodeType().getExpressableJavaTypeDescriptor();
}
@Override

View File

@ -6,13 +6,13 @@
*/
package org.hibernate.query.sqm.tree.expression.function;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.AbstractSqmNode;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.query.sqm.tree.SqmVisitableNode;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* @author Gavin King
@ -35,7 +35,7 @@ public class SqmCastTarget<T> extends AbstractSqmNode implements SqmTypedNode<T>
}
@Override
public ExpressableType getNodeType() {
public SqmExpressable<T> getNodeType() {
return type;
}
}

View File

@ -11,7 +11,7 @@ import java.util.List;
import javax.persistence.criteria.Expression;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.criteria.JpaCoalesce;
import org.hibernate.query.criteria.JpaExpression;
import org.hibernate.query.sqm.NodeBuilder;
@ -19,7 +19,6 @@ import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.produce.function.SqmFunctionTemplate;
import org.hibernate.query.sqm.tree.expression.AbstractSqmExpression;
import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
/**
* @author Steve Ebersole
@ -39,15 +38,6 @@ public class SqmCoalesce<T> extends AbstractSqmExpression<T> implements JpaCoale
coalesceFunction = nodeBuilder.getQueryEngine().getSqmFunctionRegistry().findFunctionTemplate("coalesce");
}
@Override
public JavaTypeDescriptor<T> getJavaTypeDescriptor() {
if ( getNodeType() == null ) {
return null;
}
return getNodeType().getExpressableJavaTypeDescriptor();
}
public void value(SqmExpression<? extends T> expression) {
arguments.add( expression );

View File

@ -7,12 +7,12 @@
package org.hibernate.query.sqm.tree.expression.function;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.AbstractSqmNode;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.query.sqm.tree.SqmVisitableNode;
import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* @author Gavin King
@ -31,7 +31,7 @@ public class SqmDistinct<T> extends AbstractSqmNode implements SqmTypedNode<T>,
}
@Override
public ExpressableType<T> getNodeType() {
public SqmExpressable<T> getNodeType() {
return expression.getNodeType();
}

View File

@ -6,13 +6,13 @@
*/
package org.hibernate.query.sqm.tree.expression.function;
import org.hibernate.metamodel.model.mapping.spi.AllowableFunctionReturnType;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.AbstractSqmNode;
import org.hibernate.query.sqm.tree.SqmTypedNode;
import org.hibernate.query.sqm.tree.SqmVisitableNode;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
/**
* @author Gavin King
@ -41,7 +41,7 @@ public class SqmExtractUnit<T> extends AbstractSqmNode implements SqmTypedNode<T
}
@Override
public ExpressableType getNodeType() {
public SqmExpressable<T> getNodeType() {
return type;
}
}

View File

@ -11,10 +11,10 @@ import java.util.List;
import org.hibernate.query.criteria.JpaCompoundSelection;
import org.hibernate.query.criteria.JpaSelection;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.expression.AbstractSqmExpression;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
/**
* @asciidoctor
@ -26,7 +26,7 @@ import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
*/
public class SqmJpaCompoundSelection<T>
extends AbstractSqmExpression<T>
implements JpaCompoundSelection<T>, ExpressableType<T> {
implements JpaCompoundSelection<T>, SqmExpressable<T> {
private final List<SqmSelectableNode<?>> selectableNodes;
private final JavaTypeDescriptor<T> javaTypeDescriptor;

View File

@ -22,10 +22,10 @@ import javax.persistence.criteria.Selection;
import javax.persistence.criteria.SetJoin;
import org.hibernate.NotYetImplementedFor6Exception;
import org.hibernate.metamodel.model.domain.DomainType;
import org.hibernate.query.criteria.JpaSelection;
import org.hibernate.query.criteria.JpaSubQuery;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.consume.spi.SemanticQueryWalker;
import org.hibernate.query.sqm.tree.SqmQuery;
import org.hibernate.query.sqm.tree.domain.SqmBagJoin;
@ -37,8 +37,7 @@ import org.hibernate.query.sqm.tree.expression.SqmExpression;
import org.hibernate.query.sqm.tree.from.SqmRoot;
import org.hibernate.query.sqm.tree.predicate.SqmInPredicate;
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
import org.hibernate.sql.ast.produce.metamodel.spi.ExpressableType;
import org.hibernate.type.descriptor.java.spi.JavaTypeDescriptor;
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.hibernate.type.spi.StandardSpiBasicTypes;
/**
@ -47,7 +46,7 @@ import org.hibernate.type.spi.StandardSpiBasicTypes;
public class SqmSubQuery<T> extends AbstractSqmSelectQuery<T> implements SqmSelectQuery<T>, JpaSubQuery<T>, SqmExpression<T> {
private final SqmQuery<?> parent;
private ExpressableType<T> expressableType;
private SqmExpressable<T> expressableType;
private String alias;
public SqmSubQuery(
@ -226,15 +225,15 @@ public class SqmSubQuery<T> extends AbstractSqmSelectQuery<T> implements SqmSele
}
@Override
public ExpressableType<T> getNodeType() {
public SqmExpressable<T> getNodeType() {
return expressableType;
}
@Override
public void applyInferableType(DomainType<T> type) {
public void applyInferableType(SqmExpressable<?> type) {
//noinspection unchecked
this.expressableType = (ExpressableType<T>) type;
setResultType( type == null ? null : type.getJavaType() );
this.expressableType = (SqmExpressable) type;
setResultType( type == null ? null : type.getExpressableJavaTypeDescriptor().getJavaType() );
}
@Override
@ -282,7 +281,7 @@ public class SqmSubQuery<T> extends AbstractSqmSelectQuery<T> implements SqmSele
if ( getNodeType() == null ) {
return null;
}
return getNodeType().getJavaTypeDescriptor();
return getNodeType().getExpressableJavaTypeDescriptor();
}
@Override