Revert removal of JavaType from SqlSelectionProducer#createSqlSelection

This commit is contained in:
Christian Beikov 2022-11-18 11:44:21 +01:00
parent dfa3981a52
commit 30bb01d0fa
8 changed files with 38 additions and 5 deletions

View File

@ -16,6 +16,7 @@ import org.hibernate.sql.ast.spi.SqlSelection;
import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.sql.results.jdbc.spi.JdbcValuesMetadata;
import org.hibernate.type.descriptor.ValueExtractor;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.spi.TypeConfiguration;
/**
@ -50,6 +51,7 @@ public class ResultSetMappingSqlSelection implements SqlSelection, Expression, S
public SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration) {
return this;
}

View File

@ -89,8 +89,13 @@ public class SelfRenderingFunctionSqlAstExpression
public SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration) {
return new SqlSelectionImpl( jdbcPosition, valuesArrayPosition, this );
return new SqlSelectionImpl(
jdbcPosition,
valuesArrayPosition,
this
);
}
@Override

View File

@ -18,6 +18,7 @@ import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.sql.ast.tree.from.TableGroup;
import org.hibernate.sql.results.graph.DomainResult;
import org.hibernate.sql.results.graph.DomainResultCreationState;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.spi.TypeConfiguration;
/**
@ -52,6 +53,7 @@ public class DiscriminatorPathInterpretation extends AbstractSqmPathInterpretati
public SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration) {
return new ResultSetMappingSqlSelection( valuesArrayPosition, getDiscriminatorMapping() );
}

View File

@ -124,6 +124,7 @@ public class SqlAstQueryPartProcessingStateImpl
final SqlSelection sqlSelection = expression.createSqlSelection(
valuesArrayPosition + 1,
valuesArrayPosition,
javaType,
typeConfiguration
);

View File

@ -7,6 +7,7 @@
package org.hibernate.sql.ast.spi;
import org.hibernate.sql.results.jdbc.spi.RowProcessingState;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.spi.TypeConfiguration;
/**
@ -15,12 +16,15 @@ import org.hibernate.type.spi.TypeConfiguration;
public interface SqlSelectionProducer {
/**
* Create a SqlSelection for the given JDBC ResultSet position
* @param jdbcPosition The index position used to read values from JDBC
*
* @param jdbcPosition The index position used to read values from JDBC
* @param valuesArrayPosition The position in our {@linkplain RowProcessingState#getJdbcValue(SqlSelection) "current JDBC values array"}
* @param javaType The descriptor for the Java type to read the value as
* @param typeConfiguration The associated TypeConfiguration
*/
SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration);
}

View File

@ -11,6 +11,7 @@ import org.hibernate.sql.ast.spi.SqlSelection;
import org.hibernate.sql.ast.spi.SqlSelectionProducer;
import org.hibernate.sql.ast.tree.SqlAstNode;
import org.hibernate.sql.results.internal.SqlSelectionImpl;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.spi.TypeConfiguration;
/**
@ -32,7 +33,12 @@ public interface Expression extends SqlAstNode, SqlSelectionProducer {
default SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration) {
return new SqlSelectionImpl( jdbcPosition, valuesArrayPosition, this );
return new SqlSelectionImpl(
jdbcPosition,
valuesArrayPosition,
this
);
}
}

View File

@ -18,6 +18,7 @@ import org.hibernate.sql.ast.tree.expression.ColumnReference;
import org.hibernate.sql.ast.tree.expression.Expression;
import org.hibernate.sql.results.graph.DomainResult;
import org.hibernate.sql.results.graph.DomainResultCreationState;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.spi.TypeConfiguration;
/**
@ -46,8 +47,14 @@ public abstract class DelegatingTableGroup implements TableGroup {
public SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration) {
return getTableGroup().createSqlSelection( jdbcPosition, valuesArrayPosition, typeConfiguration );
return getTableGroup().createSqlSelection(
jdbcPosition,
valuesArrayPosition,
javaType,
typeConfiguration
);
}
@Override

View File

@ -25,6 +25,7 @@ import org.hibernate.sql.exec.spi.JdbcParameterBinder;
import org.hibernate.sql.exec.spi.JdbcParameterBinding;
import org.hibernate.sql.exec.spi.JdbcParameterBindings;
import org.hibernate.sql.results.internal.SqlSelectionImpl;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.spi.TypeConfiguration;
/**
@ -58,12 +59,17 @@ public abstract class AbstractJdbcParameter
public SqlSelection createSqlSelection(
int jdbcPosition,
int valuesArrayPosition,
JavaType javaType,
TypeConfiguration typeConfiguration) {
// todo (6.0) : investigate "virtual" or "static" selections
// - anything that is the same for each row always - parameter, literal, etc;
// the idea would be to write the value directly into the JdbcValues array
// and not generating a SQL selection in the query sent to DB
return new SqlSelectionImpl( jdbcPosition, valuesArrayPosition, this );
return new SqlSelectionImpl(
jdbcPosition,
valuesArrayPosition,
this
);
}
@Override