mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-13 06:34:50 +00:00
Use WrapperOptions for JdbcLiteralFormatter instead of SessionImplementor
This commit is contained in:
parent
817bf95a9a
commit
fa5d2d9e08
@ -0,0 +1,46 @@
|
||||
/*
|
||||
* 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.engine.spi;
|
||||
|
||||
import java.util.TimeZone;
|
||||
|
||||
import org.hibernate.engine.jdbc.LobCreator;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||
|
||||
/**
|
||||
* @author Christian Beikov
|
||||
* @author Andrea Boriero
|
||||
*/
|
||||
public abstract class AbstractDelegatingWrapperOptions implements WrapperOptions {
|
||||
|
||||
/**
|
||||
* Returns the underlying session delegate.
|
||||
*/
|
||||
protected abstract SessionImplementor delegate();
|
||||
|
||||
@Override
|
||||
public boolean useStreamForLobBinding() {
|
||||
return delegate().useStreamForLobBinding();
|
||||
}
|
||||
|
||||
@Override
|
||||
public LobCreator getLobCreator() {
|
||||
return delegate().getLobCreator();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SqlTypeDescriptor remapSqlTypeDescriptor(SqlTypeDescriptor sqlTypeDescriptor) {
|
||||
return delegate().remapSqlTypeDescriptor( sqlTypeDescriptor );
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public TimeZone getJdbcTimeZone() {
|
||||
return delegate().getJdbcTimeZone();
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -19,9 +19,10 @@
|
||||
import org.hibernate.SortOrder;
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||
import org.hibernate.engine.spi.AbstractDelegatingWrapperOptions;
|
||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||
import org.hibernate.engine.spi.SessionImplementor;
|
||||
import org.hibernate.engine.spi.SessionLazyDelegatorBaseImpl;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.internal.FilterJdbcParameter;
|
||||
import org.hibernate.internal.util.StringHelper;
|
||||
import org.hibernate.internal.util.collections.Stack;
|
||||
@ -93,6 +94,7 @@
|
||||
import org.hibernate.sql.exec.internal.JdbcParametersImpl;
|
||||
import org.hibernate.sql.exec.spi.JdbcParameterBinder;
|
||||
import org.hibernate.type.IntegerType;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.sql.JdbcLiteralFormatter;
|
||||
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.sql.SqlTypeDescriptorIndicators;
|
||||
@ -124,7 +126,7 @@ public abstract class AbstractSqlAstWalker
|
||||
|
||||
private final Dialect dialect;
|
||||
private transient AbstractSqmSelfRenderingFunctionDescriptor castFunction;
|
||||
private transient LazySession session;
|
||||
private transient LazySessionWrapperOptions lazySessionWrapperOptions;
|
||||
|
||||
public Dialect getDialect() {
|
||||
return dialect;
|
||||
@ -150,11 +152,11 @@ protected AbstractSqmSelfRenderingFunctionDescriptor castFunction() {
|
||||
return castFunction;
|
||||
}
|
||||
|
||||
protected SessionLazyDelegatorBaseImpl getSession() {
|
||||
if ( session == null ) {
|
||||
session = new LazySession( sessionFactory );
|
||||
protected WrapperOptions getWrapperOptions() {
|
||||
if ( lazySessionWrapperOptions == null ) {
|
||||
lazySessionWrapperOptions = new LazySessionWrapperOptions( sessionFactory );
|
||||
}
|
||||
return session;
|
||||
return lazySessionWrapperOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -162,12 +164,12 @@ protected SessionLazyDelegatorBaseImpl getSession() {
|
||||
* Usually, only the {@link org.hibernate.type.descriptor.WrapperOptions} interface is needed,
|
||||
* but for creating LOBs, it might be to have a full blown session.
|
||||
*/
|
||||
private static class LazySession extends SessionLazyDelegatorBaseImpl {
|
||||
private static class LazySessionWrapperOptions extends AbstractDelegatingWrapperOptions {
|
||||
|
||||
private final SessionFactoryImplementor sessionFactory;
|
||||
private SessionImplementor session;
|
||||
|
||||
public LazySession(SessionFactoryImplementor sessionFactory) {
|
||||
public LazySessionWrapperOptions(SessionFactoryImplementor sessionFactory) {
|
||||
this.sessionFactory = sessionFactory;
|
||||
}
|
||||
|
||||
@ -186,6 +188,11 @@ protected SessionImplementor delegate() {
|
||||
return session;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SharedSessionContractImplementor getSession() {
|
||||
return delegate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useStreamForLobBinding() {
|
||||
return sessionFactory.getFastSessionServices().useStreamForLobBinding();
|
||||
@ -205,9 +212,9 @@ public TimeZone getJdbcTimeZone() {
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
// for tests, for now
|
||||
public String getSql() {
|
||||
if ( session != null ) {
|
||||
session.cleanup();
|
||||
session = null;
|
||||
if ( lazySessionWrapperOptions != null ) {
|
||||
lazySessionWrapperOptions.cleanup();
|
||||
lazySessionWrapperOptions = null;
|
||||
}
|
||||
return sqlBuffer.toString();
|
||||
}
|
||||
@ -1365,7 +1372,7 @@ private void visitLiteral(Literal literal) {
|
||||
literalFormatter.toJdbcLiteral(
|
||||
literal.getLiteralValue(),
|
||||
dialect,
|
||||
getSession()
|
||||
getWrapperOptions()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
@ -13,7 +13,6 @@
|
||||
import java.sql.Types;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.ValueBinder;
|
||||
import org.hibernate.type.descriptor.ValueExtractor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
@ -66,14 +65,14 @@ public <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaTypeDescriptor<T>
|
||||
//we are in the legacy Boolean-to-BIT JDBC type mapping mode
|
||||
return new BasicJdbcLiteralFormatter( javaTypeDescriptor ) {
|
||||
@Override
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, SharedSessionContractImplementor session) {
|
||||
Boolean bool = unwrap( value, Boolean.class, session );
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, WrapperOptions wrapperOptions) {
|
||||
Boolean bool = unwrap( value, Boolean.class, wrapperOptions );
|
||||
return bool ? "1" : "0";
|
||||
}
|
||||
};
|
||||
}
|
||||
else {
|
||||
return (value, dialect, session) -> value.toString();
|
||||
return (value, dialect, wrapperOptions) -> value.toString();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,8 +7,7 @@
|
||||
package org.hibernate.type.descriptor.sql;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
|
||||
/**
|
||||
* A formatter object for creating JDBC literals of a given type.
|
||||
@ -25,5 +24,5 @@
|
||||
public interface JdbcLiteralFormatter<T> {
|
||||
String NULL = "null";
|
||||
|
||||
String toJdbcLiteral(T value, Dialect dialect, SharedSessionContractImplementor session);
|
||||
String toJdbcLiteral(T value, Dialect dialect, WrapperOptions wrapperOptions);
|
||||
}
|
||||
|
@ -70,7 +70,7 @@ default <T> BasicJavaDescriptor<T> getJdbcRecommendedJavaTypeMapping(TypeConfigu
|
||||
* todo (6.0) : move to {@link org.hibernate.metamodel.mapping.JdbcMapping}?
|
||||
*/
|
||||
default <T> JdbcLiteralFormatter<T> getJdbcLiteralFormatter(JavaTypeDescriptor<T> javaTypeDescriptor) {
|
||||
return (value, dialect, session) -> value.toString();
|
||||
return (value, dialect, wrapperOptions) -> value.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -7,7 +7,7 @@
|
||||
package org.hibernate.type.descriptor.sql.internal;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.sql.spi.BasicJdbcLiteralFormatter;
|
||||
|
||||
@ -22,7 +22,7 @@ public JdbcLiteralFormatterBinary(JavaTypeDescriptor javaTypeDescriptor) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, SharedSessionContractImplementor session) {
|
||||
return dialect.formatBinaryliteral( unwrap( value, byte[].class, session ) );
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, WrapperOptions wrapperOptions) {
|
||||
return dialect.formatBinaryliteral( unwrap( value, byte[].class, wrapperOptions ) );
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@
|
||||
package org.hibernate.type.descriptor.sql.internal;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.sql.spi.BasicJdbcLiteralFormatter;
|
||||
|
||||
@ -22,7 +22,7 @@ public JdbcLiteralFormatterBoolean(JavaTypeDescriptor javaTypeDescriptor) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, SharedSessionContractImplementor session) {
|
||||
return dialect.toBooleanValueString( unwrap( value, Boolean.class, session ) );
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, WrapperOptions wrapperOptions) {
|
||||
return dialect.toBooleanValueString( unwrap( value, Boolean.class, wrapperOptions ) );
|
||||
}
|
||||
}
|
||||
|
@ -6,10 +6,8 @@
|
||||
*/
|
||||
package org.hibernate.type.descriptor.sql.internal;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.sql.spi.BasicJdbcLiteralFormatter;
|
||||
|
||||
@ -33,8 +31,8 @@ public JdbcLiteralFormatterCharacterData(JavaTypeDescriptor javaTypeDescriptor,
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, SharedSessionContractImplementor session) {
|
||||
final String literalValue = unwrap( value, String.class, session );
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, WrapperOptions wrapperOptions) {
|
||||
final String literalValue = unwrap( value, String.class, wrapperOptions );
|
||||
|
||||
final String inlineLiteral = dialect.inlineLiteral( literalValue );
|
||||
|
||||
|
@ -7,7 +7,7 @@
|
||||
package org.hibernate.type.descriptor.sql.internal;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.sql.spi.BasicJdbcLiteralFormatter;
|
||||
|
||||
@ -25,7 +25,7 @@ public JdbcLiteralFormatterNumericData(
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, SharedSessionContractImplementor session) {
|
||||
return unwrap( value, unwrapJavaType, session ).toString();
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, WrapperOptions wrapperOptions) {
|
||||
return unwrap( value, unwrapJavaType, wrapperOptions ).toString();
|
||||
}
|
||||
}
|
||||
|
@ -11,7 +11,7 @@
|
||||
import javax.persistence.TemporalType;
|
||||
|
||||
import org.hibernate.dialect.Dialect;
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
import org.hibernate.type.descriptor.sql.spi.BasicJdbcLiteralFormatter;
|
||||
|
||||
@ -27,13 +27,13 @@ public JdbcLiteralFormatterTemporal(JavaTypeDescriptor javaTypeDescriptor, Tempo
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, SharedSessionContractImplementor session) {
|
||||
public String toJdbcLiteral(Object value, Dialect dialect, WrapperOptions wrapperOptions) {
|
||||
final TimeZone jdbcTimeZone;
|
||||
if ( session == null || session.getJdbcTimeZone() == null ) {
|
||||
if ( wrapperOptions == null || wrapperOptions.getJdbcTimeZone() == null ) {
|
||||
jdbcTimeZone = TimeZone.getDefault();
|
||||
}
|
||||
else {
|
||||
jdbcTimeZone = session.getJdbcTimeZone();
|
||||
jdbcTimeZone = wrapperOptions.getJdbcTimeZone();
|
||||
}
|
||||
// for performance reasons, avoid conversions if we can
|
||||
if ( value instanceof java.util.Date ) {
|
||||
@ -61,21 +61,21 @@ else if ( value instanceof TemporalAccessor ) {
|
||||
switch ( precision) {
|
||||
case DATE: {
|
||||
return dialect.formatDateTimeLiteral(
|
||||
unwrap( value, java.sql.Date.class, session ),
|
||||
unwrap( value, java.sql.Date.class, wrapperOptions ),
|
||||
precision,
|
||||
jdbcTimeZone
|
||||
);
|
||||
}
|
||||
case TIME: {
|
||||
return dialect.formatDateTimeLiteral(
|
||||
unwrap( value, java.sql.Time.class, session ),
|
||||
unwrap( value, java.sql.Time.class, wrapperOptions ),
|
||||
precision,
|
||||
jdbcTimeZone
|
||||
);
|
||||
}
|
||||
default: {
|
||||
return dialect.formatDateTimeLiteral(
|
||||
unwrap( value, java.util.Date.class, session ),
|
||||
unwrap( value, java.util.Date.class, wrapperOptions ),
|
||||
precision,
|
||||
jdbcTimeZone
|
||||
);
|
||||
|
@ -7,7 +7,7 @@
|
||||
package org.hibernate.type.descriptor.sql.spi;
|
||||
|
||||
|
||||
import org.hibernate.engine.spi.SharedSessionContractImplementor;
|
||||
import org.hibernate.type.descriptor.WrapperOptions;
|
||||
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
|
||||
|
||||
/**
|
||||
@ -21,7 +21,7 @@ public BasicJdbcLiteralFormatter(JavaTypeDescriptor<?> javaTypeDescriptor) {
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
protected <X> X unwrap(Object value, Class<X> unwrapType, SharedSessionContractImplementor session) {
|
||||
protected <X> X unwrap(Object value, Class<X> unwrapType, WrapperOptions wrapperOptions) {
|
||||
assert value != null;
|
||||
|
||||
// for performance reasons, avoid conversions if we can
|
||||
@ -29,6 +29,6 @@ protected <X> X unwrap(Object value, Class<X> unwrapType, SharedSessionContractI
|
||||
return (X) value;
|
||||
}
|
||||
|
||||
return (X) getJavaTypeDescriptor().unwrap( value, unwrapType, session );
|
||||
return (X) getJavaTypeDescriptor().unwrap( value, unwrapType, wrapperOptions );
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user