Fix LobSchemaUpdateTest failure for sybase and mssql legacy dialects

This commit is contained in:
Andrea Boriero 2024-04-12 17:27:35 +02:00 committed by Andrea Boriero
parent dbaccbe6e0
commit 7cc7bac5d4
2 changed files with 57 additions and 0 deletions

View File

@ -36,6 +36,7 @@ import org.hibernate.dialect.sequence.SequenceSupport;
import org.hibernate.dialect.unique.AlterTableUniqueIndexDelegate;
import org.hibernate.dialect.unique.SkipNullableUniqueDelegate;
import org.hibernate.dialect.unique.UniqueDelegate;
import org.hibernate.engine.jdbc.Size;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
import org.hibernate.engine.jdbc.env.spi.IdentifierCaseStrategy;
import org.hibernate.engine.jdbc.env.spi.IdentifierHelper;
@ -67,6 +68,7 @@ import org.hibernate.tool.schema.spi.Exporter;
import org.hibernate.type.BasicType;
import org.hibernate.type.BasicTypeRegistry;
import org.hibernate.type.StandardBasicTypes;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
import org.hibernate.type.descriptor.jdbc.TimestampUtcAsJdbcTimestampJdbcType;
@ -113,6 +115,26 @@ public class SQLServerLegacyDialect extends AbstractTransactSQLDialect {
private final StandardSequenceExporter exporter;
private final UniqueDelegate uniqueDelegate;
private final SizeStrategy sizeStrategy = new SizeStrategyImpl() {
@Override
public Size resolveSize(
JdbcType jdbcType,
JavaType<?> javaType,
Integer precision,
Integer scale,
Long length) {
switch ( jdbcType.getDdlTypeCode() ) {
case BLOB:
case CLOB:
case NCLOB:
return Size.length( getDefaultLobLength() );
default:
return super.resolveSize( jdbcType, javaType, precision, scale, length );
}
}
};
public SQLServerLegacyDialect() {
this( DatabaseVersion.make( 8, 0 ) );
}
@ -422,6 +444,11 @@ public class SQLServerLegacyDialect extends AbstractTransactSQLDialect {
};
}
@Override
public SizeStrategy getSizeStrategy() {
return sizeStrategy;
}
@Override
public String castPattern(CastType from, CastType to) {
if ( to == CastType.STRING ) {

View File

@ -27,6 +27,7 @@ import org.hibernate.dialect.function.IntegralTimestampaddFunction;
import org.hibernate.dialect.function.SybaseTruncFunction;
import org.hibernate.dialect.unique.SkipNullableUniqueDelegate;
import org.hibernate.dialect.unique.UniqueDelegate;
import org.hibernate.engine.jdbc.Size;
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
import org.hibernate.engine.jdbc.env.spi.IdentifierCaseStrategy;
import org.hibernate.engine.jdbc.env.spi.IdentifierHelper;
@ -60,6 +61,7 @@ import org.hibernate.sql.ast.tree.select.SelectStatement;
import org.hibernate.sql.exec.spi.JdbcOperation;
import org.hibernate.type.JavaObjectType;
import org.hibernate.type.NullType;
import org.hibernate.type.descriptor.java.JavaType;
import org.hibernate.type.descriptor.jdbc.BlobJdbcType;
import org.hibernate.type.descriptor.jdbc.ClobJdbcType;
import org.hibernate.type.descriptor.jdbc.JdbcType;
@ -90,6 +92,29 @@ public class SybaseLegacyDialect extends AbstractTransactSQLDialect {
@Deprecated(forRemoval = true)
protected final boolean jtdsDriver;
private final SizeStrategy sizeStrategy = new SizeStrategyImpl() {
@Override
public Size resolveSize(
JdbcType jdbcType,
JavaType<?> javaType,
Integer precision,
Integer scale,
Long length) {
switch ( jdbcType.getDdlTypeCode() ) {
case Types.NCLOB:
case Types.CLOB:
case Types.BLOB:
return Size.length( getDefaultLobLength() );
case Types.FLOAT:
// Sybase ASE allows FLOAT with a precision up to 48
if ( precision != null ) {
return Size.precision( Math.min( Math.max( precision, 1 ), 48 ) );
}
}
return super.resolveSize( jdbcType, javaType, precision, scale, length );
}
};
public SybaseLegacyDialect() {
this( DatabaseVersion.make( 11, 0 ) );
}
@ -169,6 +194,11 @@ public class SybaseLegacyDialect extends AbstractTransactSQLDialect {
};
}
@Override
public SizeStrategy getSizeStrategy() {
return sizeStrategy;
}
@Override
public boolean supportsNullPrecedence() {
return false;