Skip to content

re-enable tests #3912

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
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 @@ -769,7 +769,15 @@ castFunction
;

castTarget
: identifier (LEFT_PAREN INTEGER_LITERAL (COMMA INTEGER_LITERAL)? RIGHT_PAREN)?
: castTargetType (LEFT_PAREN INTEGER_LITERAL (COMMA INTEGER_LITERAL)? RIGHT_PAREN)?
;

/**
* Like the `entityName` rule, we have a specialized dotIdentifierSequence rule
*/
castTargetType
returns [String fullTargetName]
: (i=identifier { $fullTargetName = _localctx.i.getText(); }) (DOT c=identifier { $fullTargetName += ("." + _localctx.c.getText() ); })*
;

concatFunction
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,28 @@

import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.internal.util.collections.Stack;
import org.hibernate.metamodel.mapping.BasicValuedMapping;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.query.ComparisonOperator;
import org.hibernate.query.sqm.sql.internal.SqmParameterInterpretation;
import org.hibernate.sql.ast.Clause;
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
import org.hibernate.sql.ast.spi.SqlAppender;
import org.hibernate.sql.ast.tree.SqlAstNode;
import org.hibernate.sql.ast.spi.SqlSelection;
import org.hibernate.sql.ast.tree.SqlAstNode;
import org.hibernate.sql.ast.tree.Statement;
import org.hibernate.sql.ast.tree.cte.CteStatement;
import org.hibernate.sql.ast.tree.expression.CastTarget;
import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.sql.ast.tree.expression.FunctionExpression;
import org.hibernate.sql.ast.tree.expression.JdbcLiteral;
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
import org.hibernate.sql.ast.tree.expression.Literal;
import org.hibernate.sql.ast.tree.expression.NullnessLiteral;
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
import org.hibernate.sql.ast.tree.expression.SelfRenderingExpression;
import org.hibernate.sql.ast.tree.predicate.SelfRenderingPredicate;
import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.sql.ast.tree.expression.JdbcParameter;
import org.hibernate.sql.ast.tree.expression.Literal;
import org.hibernate.sql.ast.tree.expression.NullnessLiteral;
import org.hibernate.sql.ast.tree.expression.SqlTuple;
import org.hibernate.sql.ast.tree.expression.Summarization;
import org.hibernate.sql.ast.tree.predicate.SelfRenderingPredicate;
import org.hibernate.sql.ast.tree.select.QueryGroup;
import org.hibernate.sql.ast.tree.select.QueryPart;
import org.hibernate.sql.ast.tree.select.QuerySpec;
Expand Down Expand Up @@ -247,7 +244,7 @@ public void visitParameter(JdbcParameter jdbcParameter) {
final JdbcMapping jdbcMapping = jdbcParameter.getExpressionType().getJdbcMappings().get( 0 );
final List<SqlAstNode> arguments = new ArrayList<>( 2 );
arguments.add( jdbcParameter );
arguments.add( new CastTarget( (BasicValuedMapping) jdbcMapping ) );
arguments.add( new CastTarget( jdbcMapping ) );
castFunction().render( this, arguments, this );
}
finally {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

import org.hibernate.dialect.Dialect;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.SqlExpressable;
import org.hibernate.query.CastType;
import org.hibernate.query.sqm.function.AbstractSqmSelfRenderingFunctionDescriptor;
import org.hibernate.query.sqm.produce.function.StandardArgumentsValidators;
Expand Down Expand Up @@ -54,11 +53,11 @@ private CastType getBooleanCastType(int preferredSqlTypeCodeForBoolean) {
@Override
public void render(SqlAppender sqlAppender, List<SqlAstNode> arguments, SqlAstTranslator<?> walker) {
final Expression source = (Expression) arguments.get( 0 );
final JdbcMapping sourceMapping = ( (SqlExpressable) source.getExpressionType() ).getJdbcMapping();
final JdbcMapping sourceMapping = source.getExpressionType().getJdbcMappings().get( 0 );
final CastType sourceType = getCastType( sourceMapping );

final CastTarget castTarget = (CastTarget) arguments.get( 1 );
final JdbcMapping targetJdbcMapping = castTarget.getExpressionType().getJdbcMapping();
final JdbcMapping targetJdbcMapping = castTarget.getExpressionType().getJdbcMappings().get( 0 );
final CastType targetType = getCastType( targetJdbcMapping );

String cast = dialect.castPattern( sourceType, targetType );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import org.hibernate.Incubating;
import org.hibernate.NotYetImplementedFor6Exception;
import org.hibernate.engine.spi.SharedSessionContractImplementor;
import org.hibernate.internal.util.MutableInteger;
import org.hibernate.mapping.IndexedConsumer;
import org.hibernate.sql.ast.Clause;

Expand All @@ -24,7 +25,7 @@
* @author Steve Ebersole
*/
@Incubating
public interface Bindable {
public interface Bindable extends JdbcMappingContainer {
/*
* todo (6.0) : much of this contract uses Clause which (1) kludgy and (2) not always necessary
* - e.g. see the note below wrt "2 forms of JDBC-type visiting"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@
*/
package org.hibernate.metamodel.mapping;

import java.util.Collections;
import java.util.List;

import org.hibernate.mapping.IndexedConsumer;
import org.hibernate.query.CastType;
import org.hibernate.type.descriptor.ValueBinder;
import org.hibernate.type.descriptor.ValueExtractor;
Expand All @@ -17,7 +21,7 @@
*
* @author Steve Ebersole
*/
public interface JdbcMapping extends MappingType {
public interface JdbcMapping extends MappingType, JdbcMappingContainer {
/**
* The descriptor for the Java type represented by this
* expressable type
Expand Down Expand Up @@ -50,4 +54,26 @@ default CastType getCastType() {
default JavaTypeDescriptor getMappedJavaTypeDescriptor() {
return getJavaTypeDescriptor();
}

@Override
default int getJdbcTypeCount() {
return 1;
}

@Override
default List<JdbcMapping> getJdbcMappings() {
return Collections.singletonList( this );
}

@Override
default int forEachJdbcType(IndexedConsumer<JdbcMapping> action) {
action.accept( 0, this );
return 1;
}

@Override
default int forEachJdbcType(int offset, IndexedConsumer<JdbcMapping> action) {
action.accept( 0, this );
return 1;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
/*
* 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 http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.metamodel.mapping;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.NotYetImplementedFor6Exception;
import org.hibernate.mapping.IndexedConsumer;

/**
* Container for one-or-more JdbcMappings
*/
public interface JdbcMappingContainer {
/**
* The number of JDBC mappings
*/
default int getJdbcTypeCount() {
return forEachJdbcType( (index, jdbcMapping) -> {} );
}

/**
* The list of JDBC mappings
*/
default List<JdbcMapping> getJdbcMappings() {
final List<JdbcMapping> results = new ArrayList<>();
forEachJdbcType( (index, jdbcMapping) -> results.add( jdbcMapping ) );
return results;
}

/**
* Visit each of JdbcMapping
*
* @apiNote Same as {@link #forEachJdbcType(int, IndexedConsumer)} starting from `0`
*/
default int forEachJdbcType(IndexedConsumer<JdbcMapping> action) {
return forEachJdbcType( 0, action );
}

/**
* Visit each JdbcMapping starting from the given offset
*/
default int forEachJdbcType(int offset, IndexedConsumer<JdbcMapping> action) {
throw new NotYetImplementedFor6Exception( getClass() );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
*
* @author Steve Ebersole
*/
public interface SqlExpressable {
public interface SqlExpressable extends JdbcMappingContainer {
/**
* Any thing that is expressable at the SQL AST level
* would be of basic type.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3388,7 +3388,7 @@ public SqmExpression<?> visitCastFunction(HqlParser.CastFunctionContext ctx) {

@Override
public SqmCastTarget<?> visitCastTarget(HqlParser.CastTargetContext castTargetContext) {
String targetName = castTargetContext.identifier().getText();
final String targetName = castTargetContext.castTargetType().fullTargetName;

List<TerminalNode> args = castTargetContext.INTEGER_LITERAL();
Long length = args.size() == 1 ? Long.valueOf( args.get(0).getText() ) : null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,14 @@
*/
package org.hibernate.query.sqm.function;

import java.util.List;

import org.hibernate.dialect.Dialect;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.mapping.Selectable;
import org.hibernate.mapping.Table;
import org.hibernate.metamodel.mapping.JdbcMapping;
import org.hibernate.metamodel.mapping.MappingModelExpressable;
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
import org.hibernate.metamodel.mapping.SqlExpressable;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.SemanticException;
Expand All @@ -32,8 +34,6 @@
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
import org.hibernate.type.spi.TypeConfiguration;

import java.util.List;

/**
* Representation of a function call in the SQL AST for impls that know how to
* render themselves.
Expand All @@ -46,14 +46,14 @@ public class SelfRenderingFunctionSqlAstExpression
private final FunctionRenderingSupport renderer;
private final List<SqlAstNode> sqlAstArguments;
private final AllowableFunctionReturnType<?> type;
private final MappingModelExpressable<?> expressable;
private final JdbcMappingContainer expressable;

public SelfRenderingFunctionSqlAstExpression(
String functionName,
FunctionRenderingSupport renderer,
List<SqlAstNode> sqlAstArguments,
AllowableFunctionReturnType<?> type,
MappingModelExpressable<?> expressable) {
JdbcMappingContainer expressable) {
this.functionName = functionName;
this.renderer = renderer;
this.sqlAstArguments = sqlAstArguments;
Expand All @@ -73,7 +73,7 @@ public List<SqlAstNode> getArguments() {
}

@Override
public MappingModelExpressable getExpressionType() {
public JdbcMappingContainer getExpressionType() {
return expressable;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,14 @@
*/
package org.hibernate.query.sqm.produce.function;

import java.sql.Types;
import java.util.List;
import java.util.Locale;
import java.util.function.Supplier;

import org.hibernate.QueryException;
import org.hibernate.metamodel.mapping.BasicValuedMapping;
import org.hibernate.metamodel.mapping.MappingModelExpressable;
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType;
import org.hibernate.query.sqm.SqmExpressable;
import org.hibernate.query.sqm.tree.SqmTypedNode;
Expand All @@ -17,11 +22,6 @@
import org.hibernate.type.BasicType;
import org.hibernate.type.spi.TypeConfiguration;

import java.sql.Types;
import java.util.List;
import java.util.Locale;
import java.util.function.Supplier;

/**
* @author Steve Ebersole
*/
Expand Down Expand Up @@ -90,7 +90,7 @@ public BasicValuedMapping resolveFunctionReturnType(Supplier<BasicValuedMapping>
continue;
}

final MappingModelExpressable<?> nodeType = ( (Expression) arg ).getExpressionType();
final JdbcMappingContainer nodeType = ( (Expression) arg ).getExpressionType();
if ( nodeType instanceof BasicValuedMapping ) {
final BasicValuedMapping argType = (BasicValuedMapping) nodeType;
return useImpliedTypeIfPossible( argType, impliedTypeAccess.get() );
Expand Down Expand Up @@ -220,7 +220,7 @@ public static AllowableFunctionReturnType<?> extractArgumentType(List<SqmTypedNo

public static BasicValuedMapping extractArgumentValuedMapping(List<? extends SqlAstNode> arguments, int position) {
final SqlAstNode specifiedArgument = arguments.get( position-1 );
final MappingModelExpressable<?> specifiedArgType = specifiedArgument instanceof Expression
final JdbcMappingContainer specifiedArgType = specifiedArgument instanceof Expression
? ( (Expression) specifiedArgument ).getExpressionType()
: null;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import org.hibernate.metamodel.mapping.EntityMappingType;
import org.hibernate.metamodel.mapping.EntityVersionMapping;
import org.hibernate.metamodel.mapping.ForeignKeyDescriptor;
import org.hibernate.metamodel.mapping.JdbcMappingContainer;
import org.hibernate.metamodel.mapping.MappingModelExpressable;
import org.hibernate.metamodel.mapping.ModelPart;
import org.hibernate.metamodel.mapping.ModelPartContainer;
Expand Down Expand Up @@ -2226,7 +2227,7 @@ else if ( appliedByUnit != null ) {
// we must convert this duration from
// nanoseconds to the given unit

MappingModelExpressable durationType = scaledExpression.getExpressionType();
JdbcMappingContainer durationType = scaledExpression.getExpressionType();
Duration duration = new Duration( scaledExpression, NANOSECOND, (BasicValuedMapping) durationType );

TemporalUnit appliedUnit = appliedByUnit.getUnit().getUnit();
Expand Down Expand Up @@ -2344,12 +2345,12 @@ public Expression visitLiteral(SqmLiteral<?> literal) {
);
}

private MappingModelExpressable<?> getKeyExpressable(MappingModelExpressable<?> mappingModelExpressable) {
private MappingModelExpressable<?> getKeyExpressable(JdbcMappingContainer mappingModelExpressable) {
if ( mappingModelExpressable instanceof EntityAssociationMapping ) {
return ( (EntityAssociationMapping) mappingModelExpressable ).getKeyTargetMatchPart();
}
else {
return mappingModelExpressable;
return (MappingModelExpressable<?>) mappingModelExpressable;
}
}

Expand Down Expand Up @@ -2734,7 +2735,7 @@ public Object visitCastTarget(SqmCastTarget target) {
targetType = InferredBasicValueResolver.resolveSqlTypeIndicators( this, (BasicType<?>) targetType );
}
return new CastTarget(
targetType,
targetType.getJdbcMapping(),
target.getLength(),
target.getPrecision(),
target.getScale()
Expand Down Expand Up @@ -3249,7 +3250,7 @@ private Object transformDurationArithmetic(SqmBinaryArithmetic<?> expression) {
Expression timestamp = adjustedTimestamp;
SqmExpressable<?> timestampType = adjustedTimestampType;
adjustedTimestamp = toSqlExpression( expression.getLeftHandOperand().accept( this ) );
MappingModelExpressable type = adjustedTimestamp.getExpressionType();
JdbcMappingContainer type = adjustedTimestamp.getExpressionType();
if ( type instanceof SqmExpressable ) {
adjustedTimestampType = (SqmExpressable) type;
}
Expand Down
Loading