Make LONGX types synonyms for X types again and remove unnecessary case labels

This commit is contained in:
Christian Beikov 2022-03-08 20:50:50 +01:00
parent 2c80250b0e
commit fa750a9c26
18 changed files with 93 additions and 149 deletions

View File

@ -67,9 +67,6 @@ import static org.hibernate.type.SqlTypes.FLOAT;
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
import static org.hibernate.type.SqlTypes.LONGNVARCHAR;
import static org.hibernate.type.SqlTypes.LONGVARBINARY;
import static org.hibernate.type.SqlTypes.LONGVARCHAR;
import static org.hibernate.type.SqlTypes.NVARCHAR;
import static org.hibernate.type.SqlTypes.TIME;
import static org.hibernate.type.SqlTypes.TIMESTAMP;
@ -130,11 +127,8 @@ public class InformixDialect extends Dialect {
//these types have no defined length
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
return "byte";
case LONGVARCHAR:
case LONGNVARCHAR:
case LONG32VARCHAR:
case LONG32NVARCHAR:
return "text";
@ -160,13 +154,13 @@ public class InformixDialect extends Dialect {
);
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( VARCHAR, columnType( LONGVARCHAR ), this )
CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), this )
.withTypeCapacity( 255, "varchar($l)" )
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
.build()
);
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( NVARCHAR, columnType( LONGNVARCHAR ), this )
CapacityDependentDdlType.builder( NVARCHAR, columnType( LONG32NVARCHAR ), this )
.withTypeCapacity( 255, "varchar($l)" )
.withTypeCapacity( getMaxVarcharLength(), columnType( NVARCHAR ) )
.build()

View File

@ -73,9 +73,6 @@ import static org.hibernate.type.SqlTypes.DECIMAL;
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
import static org.hibernate.type.SqlTypes.LONGNVARCHAR;
import static org.hibernate.type.SqlTypes.LONGVARBINARY;
import static org.hibernate.type.SqlTypes.LONGVARCHAR;
import static org.hibernate.type.SqlTypes.NCLOB;
import static org.hibernate.type.SqlTypes.NUMERIC;
import static org.hibernate.type.SqlTypes.VARBINARY;
@ -157,18 +154,12 @@ public class IngresDialect extends Dialect {
case VARBINARY:
return "varbyte($l)";
//note: 'long byte' is a synonym for 'blob'
case LONGVARBINARY:
case LONG32VARBINARY:
case BLOB:
return "long byte($l)";
//note: 'long varchar' is a synonym for 'clob'
case LONGVARCHAR:
case LONG32VARCHAR:
case CLOB:
return "long varchar($l)";
//note: 'long varchar' is a synonym for 'nclob'
case LONGNVARCHAR:
case LONG32NVARCHAR:
case NCLOB:
return "long nvarchar($l)";
}

View File

@ -39,12 +39,11 @@ import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry;
import jakarta.persistence.TemporalType;
import static org.hibernate.dialect.SimpleDatabaseVersion.ZERO_VERSION;
import static org.hibernate.type.SqlTypes.BLOB;
import static org.hibernate.type.SqlTypes.CHAR;
import static org.hibernate.type.SqlTypes.CLOB;
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
import static org.hibernate.type.SqlTypes.LONGNVARCHAR;
import static org.hibernate.type.SqlTypes.LONGVARCHAR;
import static org.hibernate.type.SqlTypes.NCHAR;
import static org.hibernate.type.SqlTypes.NCLOB;
import static org.hibernate.type.SqlTypes.NVARCHAR;
@ -91,12 +90,14 @@ public class MimerSQLDialect extends Dialect {
return columnType( NCHAR );
case VARCHAR:
return columnType( NVARCHAR );
case LONGVARCHAR:
return columnType( LONGNVARCHAR );
case LONG32VARCHAR:
return columnType( LONG32NVARCHAR );
//default length is 1M, which is quite low
case BLOB:
return "blob($l)";
case CLOB:
return columnType( NCLOB );
case NCLOB:
return "nclob($l)";
}
return super.columnType( sqlTypeCode );
}
@ -112,12 +113,7 @@ public class MimerSQLDialect extends Dialect {
//Mimer CHARs are ASCII!!
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( VARCHAR, columnType( LONGVARCHAR ), "nvarchar(" + getMaxNVarcharLength() + ")", this )
.withTypeCapacity( getMaxNVarcharLength(), columnType( VARCHAR ) )
.build()
);
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( LONGVARCHAR, columnType( LONGVARCHAR ), "nvarchar(" + getMaxNVarcharLength() + ")", this )
CapacityDependentDdlType.builder( VARCHAR, columnType( LONG32VARCHAR ), "nvarchar(" + getMaxNVarcharLength() + ")", this )
.withTypeCapacity( getMaxNVarcharLength(), columnType( VARCHAR ) )
.build()
);

View File

@ -58,9 +58,6 @@ import static org.hibernate.type.SqlTypes.CLOB;
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
import static org.hibernate.type.SqlTypes.LONGNVARCHAR;
import static org.hibernate.type.SqlTypes.LONGVARBINARY;
import static org.hibernate.type.SqlTypes.LONGVARCHAR;
import static org.hibernate.type.SqlTypes.NCHAR;
import static org.hibernate.type.SqlTypes.NCLOB;
import static org.hibernate.type.SqlTypes.NVARCHAR;
@ -142,9 +139,7 @@ public class RDMSOS2200Dialect extends Dialect {
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONG32VARCHAR:
case LONGNVARCHAR:
case LONG32NVARCHAR:
return "unicode($l)";
case CLOB:
@ -153,7 +148,6 @@ public class RDMSOS2200Dialect extends Dialect {
//no 'binary' nor 'varbinary' so use 'blob'
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
case BLOB:
return "blob($l)";

View File

@ -52,16 +52,23 @@ public class SybaseAnywhereDialect extends SybaseDialect {
@Override
protected String columnType(int sqlTypeCode) {
switch ( sqlTypeCode ) {
case DATE:
return "date";
case TIME:
return "time";
case TIMESTAMP:
return "timestamp";
case TIMESTAMP_WITH_TIMEZONE:
return "timestamp with time zone";
//these types hold up to 2 GB
case LONG32VARCHAR:
return "long varchar";
case LONG32NVARCHAR:
return "long nvarchar";
case LONG32VARBINARY:
return "long binary";
case NCLOB:
return "ntext";
}

View File

@ -92,8 +92,6 @@ import static org.hibernate.type.SqlTypes.DOUBLE;
import static org.hibernate.type.SqlTypes.GEOMETRY;
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
import static org.hibernate.type.SqlTypes.LONGNVARCHAR;
import static org.hibernate.type.SqlTypes.LONGVARCHAR;
import static org.hibernate.type.SqlTypes.NCHAR;
import static org.hibernate.type.SqlTypes.NCLOB;
import static org.hibernate.type.SqlTypes.NUMERIC;
@ -220,8 +218,6 @@ public abstract class AbstractHANADialect extends Dialect {
return columnType( NVARCHAR );
case LONG32VARCHAR:
return isUseUnicodeStringTypes() ? columnType( LONG32NVARCHAR ) : super.columnType( LONG32VARCHAR );
case LONGVARCHAR:
return isUseUnicodeStringTypes() ? columnType( LONGNVARCHAR ) : super.columnType( LONGVARCHAR );
case CLOB:
return isUseUnicodeStringTypes() ? columnType( NCLOB ) : super.columnType( CLOB );
// map tinyint to smallint since tinyint is unsigned on HANA

View File

@ -65,6 +65,7 @@ public abstract class AbstractTransactSQLDialect extends Dialect {
switch ( sqlTypeCode ) {
case BOOLEAN:
return "bit";
case TINYINT:
//'tinyint' is an unsigned type in Sybase and
//SQL Server, holding values in the range 0-255
@ -73,17 +74,20 @@ public abstract class AbstractTransactSQLDialect extends Dialect {
case INTEGER:
//it's called 'int' not 'integer'
return "int";
case DATE:
case TIME:
case TIME_WITH_TIMEZONE:
case TIMESTAMP:
case TIME_WITH_TIMEZONE:
case TIMESTAMP_WITH_TIMEZONE:
return "datetime";
case BLOB:
return "image";
case CLOB:
case NCLOB:
return "text";
case NCLOB:
return "ntext";
}
return super.columnType( sqlTypeCode );
}

View File

@ -96,24 +96,21 @@ public class CockroachDialect extends Dialect {
switch ( sqlTypeCode ) {
case TINYINT:
return "smallint"; //no tinyint
case CHAR:
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
return "string($l)";
case CLOB:
case NCLOB:
case LONG32VARCHAR:
case LONG32NVARCHAR:
case CLOB:
return "string";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
return "bytes($l)";
case BLOB:
case LONG32VARBINARY:
return "bytes";
}
return super.columnType( sqlTypeCode );
@ -126,14 +123,11 @@ public class CockroachDialect extends Dialect {
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
case LONG32VARCHAR:
case LONG32NVARCHAR:
return "string";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
return "bytes";
}

View File

@ -120,22 +120,20 @@ public class DerbyDialect extends Dialect {
case TINYINT:
//no tinyint
return "smallint";
case NUMERIC:
// HHH-12827: map them both to the same type to avoid problems with schema update
// Note that 31 is the maximum precision Derby supports
return columnType( DECIMAL );
case VARBINARY:
return "varchar($l) for bit data";
case LONGVARBINARY:
case LONG32VARBINARY:
return "long varchar for bit data";
case NCHAR:
return columnType( CHAR );
case NVARCHAR:
return columnType( VARCHAR );
case LONGNVARCHAR:
return columnType( LONGVARCHAR );
case LONGVARCHAR:
case LONG32VARCHAR:
return "long varchar";
case BLOB:
@ -161,19 +159,19 @@ public class DerbyDialect extends Dialect {
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( VARBINARY, columnType( BLOB ), columnType( VARBINARY ), this )
.withTypeCapacity( getMaxVarbinaryLength(), columnType( VARBINARY ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONGVARBINARY ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONG32VARBINARY ) )
.build()
);
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( VARCHAR, columnType( CLOB ), columnType( VARCHAR ), this )
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONGVARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONG32VARCHAR ) )
.build()
);
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( NVARCHAR, columnType( CLOB ), columnType( NVARCHAR ), this )
.withTypeCapacity( getMaxVarcharLength(), columnType( NVARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONGVARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONG32VARCHAR ) )
.build()
);
@ -181,7 +179,7 @@ public class DerbyDialect extends Dialect {
CapacityDependentDdlType.builder( BINARY, columnType( BLOB ), columnType( VARBINARY ), this )
.withTypeCapacity( 254, "char($l) for bit data" )
.withTypeCapacity( getMaxVarbinaryLength(), columnType( VARBINARY ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONGVARBINARY ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONG32VARBINARY ) )
.build()
);
@ -190,14 +188,14 @@ public class DerbyDialect extends Dialect {
CapacityDependentDdlType.builder( CHAR, columnType( CLOB ), columnType( CHAR ), this )
.withTypeCapacity( 254, columnType( CHAR ) )
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONGVARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONG32VARCHAR ) )
.build()
);
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( NCHAR, columnType( CLOB ), columnType( NCHAR ), this )
.withTypeCapacity( 254, columnType( NCHAR ) )
.withTypeCapacity( getMaxVarcharLength(), columnType( NVARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONGNVARCHAR ) )
.withTypeCapacity( maxLongVarcharLength, columnType( LONG32NVARCHAR ) )
.build()
);
}

View File

@ -309,12 +309,7 @@ public abstract class Dialect implements ConversionContext {
ddlTypeRegistry.addDescriptor( simpleSqlType( CHAR ) );
ddlTypeRegistry.addDescriptor(
sqlTypeBuilder( VARCHAR, LONGVARCHAR, VARCHAR )
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
.build()
);
ddlTypeRegistry.addDescriptor(
sqlTypeBuilder( LONGVARCHAR, LONGVARCHAR, VARCHAR )
sqlTypeBuilder( VARCHAR, LONG32VARCHAR, VARCHAR )
.withTypeCapacity( getMaxVarcharLength(), columnType( VARCHAR ) )
.build()
);
@ -322,12 +317,7 @@ public abstract class Dialect implements ConversionContext {
ddlTypeRegistry.addDescriptor( simpleSqlType( NCHAR ) );
ddlTypeRegistry.addDescriptor(
sqlTypeBuilder( NVARCHAR, LONGNVARCHAR, NVARCHAR )
.withTypeCapacity( getMaxNVarcharLength(), columnType( NVARCHAR ) )
.build()
);
ddlTypeRegistry.addDescriptor(
sqlTypeBuilder( LONGNVARCHAR, LONGNVARCHAR, NVARCHAR )
sqlTypeBuilder( NVARCHAR, LONG32NVARCHAR, NVARCHAR )
.withTypeCapacity( getMaxNVarcharLength(), columnType( NVARCHAR ) )
.build()
);
@ -335,12 +325,7 @@ public abstract class Dialect implements ConversionContext {
ddlTypeRegistry.addDescriptor( simpleSqlType( BINARY ) );
ddlTypeRegistry.addDescriptor(
sqlTypeBuilder( VARBINARY, LONGVARBINARY, VARBINARY )
.withTypeCapacity( getMaxVarbinaryLength(), columnType( VARBINARY ) )
.build()
);
ddlTypeRegistry.addDescriptor(
sqlTypeBuilder( LONGVARBINARY, LONGVARBINARY, VARBINARY )
sqlTypeBuilder( VARBINARY, LONG32VARBINARY, VARBINARY )
.withTypeCapacity( getMaxVarbinaryLength(), columnType( VARBINARY ) )
.build()
);
@ -448,13 +433,10 @@ public abstract class Dialect implements ConversionContext {
return "blob";
// by default use the LOB mappings for the "long" types
case LONGVARCHAR:
case LONG32VARCHAR:
return columnType( CLOB );
case LONGNVARCHAR:
case LONG32NVARCHAR:
return columnType( NCLOB );
case LONGVARBINARY:
case LONG32VARBINARY:
return columnType( BLOB );

View File

@ -78,9 +78,6 @@ import static org.hibernate.type.SqlTypes.INTERVAL_SECOND;
import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
import static org.hibernate.type.SqlTypes.LONGNVARCHAR;
import static org.hibernate.type.SqlTypes.LONGVARBINARY;
import static org.hibernate.type.SqlTypes.LONGVARCHAR;
import static org.hibernate.type.SqlTypes.NCHAR;
import static org.hibernate.type.SqlTypes.NUMERIC;
import static org.hibernate.type.SqlTypes.NVARCHAR;
@ -179,12 +176,9 @@ public class H2Dialect extends Dialect {
case NCHAR:
return columnType( CHAR );
case NVARCHAR:
case LONGNVARCHAR:
case LONG32NVARCHAR:
case LONGVARCHAR:
case LONG32VARCHAR:
return columnType( VARCHAR );
case LONGVARBINARY:
case LONG32VARBINARY:
return columnType( VARBINARY );
}
@ -199,14 +193,11 @@ public class H2Dialect extends Dialect {
return "char";
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
case LONG32VARCHAR:
case LONG32NVARCHAR:
return "varchar";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
return "varbinary";
}

View File

@ -132,13 +132,16 @@ public class HSQLDialect extends Dialect {
// Older versions of HSQL did not accept
// precision for the 'numeric' type
return "numeric";
// Older versions of HSQL had no lob support
case BLOB:
return "longvarbinary";
case CLOB:
return "longvarchar";
}
}
return super.columnType( sqlTypeCode );
}

View File

@ -158,10 +158,13 @@ public class MySQLDialect extends Dialect {
case BOOLEAN:
// HHH-6935: Don't use "boolean" i.e. tinyint(1) due to JDBC ResultSetMetaData
return "bit";
case TIMESTAMP:
return getMySQLVersion().isBefore( 5, 7 ) ? "datetime" : "datetime($p)";
return getMySQLVersion().isBefore( 5, 7 )
? "datetime" : "datetime($p)";
case TIMESTAMP_WITH_TIMEZONE:
return getMySQLVersion().isBefore( 5, 7 ) ? "timestamp" : "timestamp($p)";
return getMySQLVersion().isBefore( 5, 7 )
? "timestamp" : "timestamp($p)";
case NUMERIC:
// it's just a synonym
return columnType( DECIMAL );
@ -199,15 +202,12 @@ public class MySQLDialect extends Dialect {
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
case LONG32VARCHAR:
case LONG32NVARCHAR:
//MySQL doesn't let you cast to TEXT/LONGTEXT
return "char";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
//MySQL doesn't let you cast to BLOB/TINYBLOB/LONGBLOB
return "binary";
@ -275,34 +275,8 @@ public class MySQLDialect extends Dialect {
}
ddlTypeRegistry.addDescriptor( varbinaryBuilder.build() );
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( LONGVARBINARY, columnType( BLOB ), "binary", this )
.withTypeCapacity( maxTinyLobLen, "tinyblob" )
.withTypeCapacity( maxMediumLobLen, "mediumblob" )
.withTypeCapacity( maxLobLen, "blob" )
.build()
);
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( LONG32VARBINARY, columnType( BLOB ), "binary", this ) );
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( LONGVARCHAR, columnType( CLOB ), "char", this )
.withTypeCapacity( maxTinyLobLen, "tinytext" )
.withTypeCapacity( maxMediumLobLen, "mediumtext" )
.withTypeCapacity( maxLobLen, "text" )
.build()
);
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( LONG32VARCHAR, columnType( CLOB ), "char", this ) );
ddlTypeRegistry.addDescriptor(
CapacityDependentDdlType.builder( LONGNVARCHAR, columnType( NCLOB ), "char", this )
.withTypeCapacity( maxTinyLobLen, "tinytext" )
.withTypeCapacity( maxMediumLobLen, "mediumtext" )
.withTypeCapacity( maxLobLen, "text" )
.build()
);
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( LONG32NVARCHAR, columnType( CLOB ), "char", this ) );
ddlTypeRegistry.addDescriptor(

View File

@ -554,6 +554,7 @@ public class OracleDialect extends Dialect {
case BOOLEAN:
// still, after all these years...
return "number(1,0)";
case TINYINT:
return "number(3,0)";
case SMALLINT:
@ -565,10 +566,12 @@ public class OracleDialect extends Dialect {
case REAL:
// Oracle's 'real' type is actually double precision
return "float(24)";
case NUMERIC:
case DECIMAL:
// Note that 38 is the maximum precision Oracle supports
return "number($p,$s)";
case DATE:
case TIME:
return "date";
@ -577,6 +580,8 @@ public class OracleDialect extends Dialect {
// on Oracle is that date has no fractional seconds
case TIMESTAMP_WITH_TIMEZONE:
return getVersion().isBefore( 9 ) ? "date" : super.columnType( sqlTypeCode );
case TIME_WITH_TIMEZONE:
return getVersion().isBefore( 9 ) ? "date" : "timestamp($p) with time zone";
case VARCHAR:
return getVersion().isBefore( 9 ) ? "varchar2($l)" : "varchar2($l char)";
case NVARCHAR:

View File

@ -131,22 +131,27 @@ public class PostgreSQLDialect extends Dialect {
case TINYINT:
// no tinyint, not even in Postgres 11
return "smallint";
// there are no nchar/nvarchar types in Postgres
case NCHAR:
return columnType( CHAR );
case NVARCHAR:
return columnType( VARCHAR );
case LONGVARCHAR:
// since there's no real difference between TEXT and VARCHAR,
// except for the length limit, we can just use 'text' for the
// "long" string types
case LONG32VARCHAR:
case LONGNVARCHAR:
case LONG32NVARCHAR:
return "text";
case BLOB:
case CLOB:
case NCLOB:
// use oid as the blob type on Postgres because
// the JDBC driver is rubbish
return "oid";
// use bytea as the "long" binary type (that there is no
// real VARBINARY type in Postgres, so we always use this)
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
return "bytea";
}
@ -160,14 +165,11 @@ public class PostgreSQLDialect extends Dialect {
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONG32VARCHAR:
case LONGNVARCHAR:
case LONG32NVARCHAR:
return "text";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
return "bytea";
}

View File

@ -125,16 +125,10 @@ public class SQLServerDialect extends AbstractTransactSQLDialect {
// be either between 1 and 8000 or exactly MAX, and
// the length of an NVARCHAR column must be either
// between 1 and 4000 or exactly MAX. (HHH-3965)
case LONGVARCHAR:
case LONG32VARCHAR:
case CLOB:
return "varchar(max)";
case LONGNVARCHAR:
case LONG32NVARCHAR:
case NCLOB:
return "nvarchar(max)";
case LONGVARBINARY:
case LONG32VARBINARY:
case BLOB:
return "varbinary(max)";
case DATE:
@ -155,17 +149,14 @@ public class SQLServerDialect extends AbstractTransactSQLDialect {
if ( getVersion().isSameOrAfter( 9 ) ) {
switch ( sqlTypeCode ) {
case VARCHAR:
case LONGVARCHAR:
case LONG32VARCHAR:
case CLOB:
return "varchar(max)";
case NVARCHAR:
case LONGNVARCHAR:
case LONG32NVARCHAR:
case NCLOB:
return "nvarchar(max)";
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
case BLOB:
return "varbinary(max)";

View File

@ -84,41 +84,41 @@ public class SpannerDialect extends Dialect {
switch ( sqlTypeCode ) {
case BOOLEAN:
return "bool";
case TINYINT:
case SMALLINT:
case INTEGER:
case BIGINT:
return "int64";
case REAL:
case FLOAT:
case DOUBLE:
case DECIMAL:
case NUMERIC:
return "float64";
//there is no time type of any kind
case TIME:
//timestamp does not accept precision
case TIMESTAMP:
case TIMESTAMP_WITH_TIMEZONE:
return "timestamp";
case CHAR:
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
return "string($l)";
case CLOB:
case NCLOB:
case LONG32VARCHAR:
case LONG32NVARCHAR:
return "string(max)";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
return "bytes($l)";
case CLOB:
case NCLOB:
return "string(max)";
case BLOB:
case LONG32VARBINARY:
return "bytes(max)";
}
return super.columnType( sqlTypeCode );
@ -131,14 +131,11 @@ public class SpannerDialect extends Dialect {
case NCHAR:
case VARCHAR:
case NVARCHAR:
case LONGVARCHAR:
case LONGNVARCHAR:
case LONG32VARCHAR:
case LONG32NVARCHAR:
return "string";
case BINARY:
case VARBINARY:
case LONGVARBINARY:
case LONG32VARBINARY:
return "bytes";
}

View File

@ -60,8 +60,33 @@ public class DdlTypeRegistry implements Serializable {
ddlTypes.putIfAbsent( sqlTypeCode, jdbcType );
}
/**
* Returns the registered {@link DdlType} for the given SQL type code.
* <p>
* Not that the "long" types {@link Types#LONGVARCHAR}, {@link Types#LONGNVARCHAR}
* and {@link Types#LONGVARBINARY} are considered synonyms for their
* non-{@code LONG} counterparts, with the only difference being that
* a different default length is used: {@link org.hibernate.Length#LONG}
* instead of {@link org.hibernate.Length#DEFAULT}.
*
*/
public DdlType getDescriptor(int sqlTypeCode) {
return ddlTypes.get( sqlTypeCode );
final DdlType ddlType = ddlTypes.get( sqlTypeCode );
if ( ddlType == null ) {
switch ( sqlTypeCode ) {
// these are no longer considered separate column types as such
// they're just used to indicate that JavaType.getLongSqlLength()
// should be used by default (and that's already handled by the
// time we get to here)
case Types.LONGVARCHAR:
return ddlTypes.get( Types.VARCHAR );
case Types.LONGNVARCHAR:
return ddlTypes.get( Types.NVARCHAR );
case Types.LONGVARBINARY:
return ddlTypes.get( Types.VARBINARY );
}
}
return ddlType;
}
public String getTypeName(int typeCode, Dialect dialect) {