HHH-5244 - Flesh out H2Dialect temp table support
This commit is contained in:
parent
154675d322
commit
7b4998d1ce
|
@ -1862,4 +1862,8 @@ public interface HibernateLogger extends BasicLogger {
|
||||||
@LogMessage( level = WARN )
|
@LogMessage( level = WARN )
|
||||||
@Message( value = "The DerbyDialect dialect has been deprecated; use one of the version-specific dialects instead", id = 430 )
|
@Message( value = "The DerbyDialect dialect has been deprecated; use one of the version-specific dialects instead", id = 430 )
|
||||||
void deprecatedDerbyDialect();
|
void deprecatedDerbyDialect();
|
||||||
|
|
||||||
|
@LogMessage( level = WARN )
|
||||||
|
@Message( value = "Unable to determine H2 database version, certain features may not work", id = 431 )
|
||||||
|
void undeterminedH2Version();
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,29 +46,33 @@ public class H2Dialect extends Dialect {
|
||||||
|
|
||||||
private static final HibernateLogger LOG = Logger.getMessageLogger(HibernateLogger.class, H2Dialect.class.getName());
|
private static final HibernateLogger LOG = Logger.getMessageLogger(HibernateLogger.class, H2Dialect.class.getName());
|
||||||
|
|
||||||
private String querySequenceString;
|
private final String querySequenceString;
|
||||||
|
|
||||||
public H2Dialect() {
|
public H2Dialect() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
querySequenceString = "select sequence_name from information_schema.sequences";
|
String querySequenceString = "select sequence_name from information_schema.sequences";
|
||||||
try {
|
try {
|
||||||
// HHH-2300
|
// HHH-2300
|
||||||
final Class constants = ReflectHelper.classForName( "org.h2.engine.Constants" );
|
final Class h2ConstantsClass = ReflectHelper.classForName( "org.h2.engine.Constants" );
|
||||||
final int majorVersion = ( Integer ) constants.getDeclaredField( "VERSION_MAJOR" ).get( null );
|
final int majorVersion = ( Integer ) h2ConstantsClass.getDeclaredField( "VERSION_MAJOR" ).get( null );
|
||||||
final int minorVersion = ( Integer ) constants.getDeclaredField( "VERSION_MINOR" ).get( null );
|
final int minorVersion = ( Integer ) h2ConstantsClass.getDeclaredField( "VERSION_MINOR" ).get( null );
|
||||||
final int buildId = ( Integer ) constants.getDeclaredField( "BUILD_ID" ).get( null );
|
final int buildId = ( Integer ) h2ConstantsClass.getDeclaredField( "BUILD_ID" ).get( null );
|
||||||
if ( buildId < 32 ) {
|
if ( buildId < 32 ) {
|
||||||
querySequenceString = "select name from information_schema.sequences";
|
querySequenceString = "select name from information_schema.sequences";
|
||||||
}
|
}
|
||||||
if (!(majorVersion > 1 || minorVersion > 2 || buildId >= 139)) LOG.unsupportedMultiTableBulkHqlJpaql(majorVersion,
|
if ( ! ( majorVersion > 1 || minorVersion > 2 || buildId >= 139 ) ) {
|
||||||
minorVersion,
|
LOG.unsupportedMultiTableBulkHqlJpaql( majorVersion, minorVersion, buildId );
|
||||||
buildId);
|
}
|
||||||
}
|
}
|
||||||
catch ( Exception e ) {
|
catch ( Exception e ) {
|
||||||
// ignore (probably H2 not in the classpath)
|
// probably H2 not in the classpath, though in certain app server environments it might just mean we are
|
||||||
|
// not using the correct classloader
|
||||||
|
LOG.undeterminedH2Version();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.querySequenceString = querySequenceString;
|
||||||
|
|
||||||
registerColumnType( Types.BOOLEAN, "boolean" );
|
registerColumnType( Types.BOOLEAN, "boolean" );
|
||||||
registerColumnType( Types.BIGINT, "bigint" );
|
registerColumnType( Types.BIGINT, "bigint" );
|
||||||
registerColumnType( Types.BINARY, "binary" );
|
registerColumnType( Types.BINARY, "binary" );
|
||||||
|
@ -297,8 +301,17 @@ public class H2Dialect extends Dialect {
|
||||||
return "create local temporary table if not exists";
|
return "create local temporary table if not exists";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCreateTemporaryTablePostfix() {
|
||||||
|
// actually 2 different options are specified here:
|
||||||
|
// 1) [on commit drop] - says to drop the table on transaction commit
|
||||||
|
// 2) [transactional] - says to not perform an implicit commit of any current transaction
|
||||||
|
return "on commit drop transactional";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean performTemporaryTableDDLInIsolation() {
|
public Boolean performTemporaryTableDDLInIsolation() {
|
||||||
|
// explicitly create the table using the same connection and transaction
|
||||||
return Boolean.FALSE;
|
return Boolean.FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue