HHH-15535 - Remove support for H2 versions older than 2.1
Signed-off-by: Jan Schatteman <jschatte@redhat.com>
This commit is contained in:
parent
b241502b59
commit
2220cf7fe5
|
@ -126,10 +126,6 @@ stage('Build') {
|
||||||
try {
|
try {
|
||||||
stage('Start database') {
|
stage('Start database') {
|
||||||
switch (buildEnv.dbName) {
|
switch (buildEnv.dbName) {
|
||||||
case "h2_1_4":
|
|
||||||
state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] +
|
|
||||||
" -Pgradle.libs.versions.h2=1.4.197 -Pgradle.libs.versions.h2gis=1.5.0"
|
|
||||||
break;
|
|
||||||
case "hsqldb_2_6":
|
case "hsqldb_2_6":
|
||||||
state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] +
|
state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] +
|
||||||
" -Pgradle.libs.versions.hsqldb=2.6.1"
|
" -Pgradle.libs.versions.hsqldb=2.6.1"
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#! /bin/bash
|
#! /bin/bash
|
||||||
|
|
||||||
goal=
|
goal=
|
||||||
if [ "$RDBMS" == "h2" ] || [ "$RDBMS" == "h2_1_4" ]; then
|
if [ "$RDBMS" == "h2" ]; then
|
||||||
# This is the default.
|
# This is the default.
|
||||||
goal=""
|
goal=""
|
||||||
elif [ "$RDBMS" == "hsqldb" ] || [ "$RDBMS" == "hsqldb_2_6" ]; then
|
elif [ "$RDBMS" == "hsqldb" ] || [ "$RDBMS" == "hsqldb_2_6" ]; then
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.hibernate.boot.model.TypeContributions;
|
||||||
import org.hibernate.dialect.function.CommonFunctionFactory;
|
import org.hibernate.dialect.function.CommonFunctionFactory;
|
||||||
import org.hibernate.dialect.hint.IndexQueryHintHandler;
|
import org.hibernate.dialect.hint.IndexQueryHintHandler;
|
||||||
import org.hibernate.dialect.identity.H2FinalTableIdentityColumnSupport;
|
import org.hibernate.dialect.identity.H2FinalTableIdentityColumnSupport;
|
||||||
import org.hibernate.dialect.identity.H2IdentityColumnSupport;
|
|
||||||
import org.hibernate.dialect.identity.IdentityColumnSupport;
|
import org.hibernate.dialect.identity.IdentityColumnSupport;
|
||||||
import org.hibernate.dialect.pagination.LimitHandler;
|
import org.hibernate.dialect.pagination.LimitHandler;
|
||||||
import org.hibernate.dialect.pagination.OffsetFetchLimitHandler;
|
import org.hibernate.dialect.pagination.OffsetFetchLimitHandler;
|
||||||
|
@ -65,13 +64,10 @@ import org.hibernate.sql.exec.spi.JdbcOperation;
|
||||||
import org.hibernate.sql.model.MutationOperation;
|
import org.hibernate.sql.model.MutationOperation;
|
||||||
import org.hibernate.sql.model.internal.OptionalTableUpdate;
|
import org.hibernate.sql.model.internal.OptionalTableUpdate;
|
||||||
import org.hibernate.sql.model.jdbc.OptionalTableUpdateOperation;
|
import org.hibernate.sql.model.jdbc.OptionalTableUpdateOperation;
|
||||||
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorH2DatabaseImpl;
|
|
||||||
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl;
|
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl;
|
||||||
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
|
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
|
||||||
import org.hibernate.type.descriptor.jdbc.H2FormatJsonJdbcType;
|
import org.hibernate.type.descriptor.jdbc.H2FormatJsonJdbcType;
|
||||||
import org.hibernate.type.descriptor.jdbc.JdbcType;
|
import org.hibernate.type.descriptor.jdbc.JdbcType;
|
||||||
import org.hibernate.type.descriptor.jdbc.TimeAsTimestampWithTimeZoneJdbcType;
|
|
||||||
import org.hibernate.type.descriptor.jdbc.TimeUtcAsJdbcTimeJdbcType;
|
|
||||||
import org.hibernate.type.descriptor.jdbc.TimeUtcAsOffsetTimeJdbcType;
|
import org.hibernate.type.descriptor.jdbc.TimeUtcAsOffsetTimeJdbcType;
|
||||||
import org.hibernate.type.descriptor.jdbc.TimestampUtcAsInstantJdbcType;
|
import org.hibernate.type.descriptor.jdbc.TimestampUtcAsInstantJdbcType;
|
||||||
import org.hibernate.type.descriptor.jdbc.UUIDJdbcType;
|
import org.hibernate.type.descriptor.jdbc.UUIDJdbcType;
|
||||||
|
@ -83,11 +79,9 @@ import org.hibernate.type.spi.TypeConfiguration;
|
||||||
import jakarta.persistence.TemporalType;
|
import jakarta.persistence.TemporalType;
|
||||||
|
|
||||||
import static org.hibernate.query.sqm.TemporalUnit.SECOND;
|
import static org.hibernate.query.sqm.TemporalUnit.SECOND;
|
||||||
import static org.hibernate.type.SqlTypes.ARRAY;
|
|
||||||
import static org.hibernate.type.SqlTypes.BIGINT;
|
import static org.hibernate.type.SqlTypes.BIGINT;
|
||||||
import static org.hibernate.type.SqlTypes.BINARY;
|
import static org.hibernate.type.SqlTypes.BINARY;
|
||||||
import static org.hibernate.type.SqlTypes.CHAR;
|
import static org.hibernate.type.SqlTypes.CHAR;
|
||||||
import static org.hibernate.type.SqlTypes.DECIMAL;
|
|
||||||
import static org.hibernate.type.SqlTypes.DOUBLE;
|
import static org.hibernate.type.SqlTypes.DOUBLE;
|
||||||
import static org.hibernate.type.SqlTypes.FLOAT;
|
import static org.hibernate.type.SqlTypes.FLOAT;
|
||||||
import static org.hibernate.type.SqlTypes.GEOMETRY;
|
import static org.hibernate.type.SqlTypes.GEOMETRY;
|
||||||
|
@ -97,11 +91,9 @@ import static org.hibernate.type.SqlTypes.LONG32NVARCHAR;
|
||||||
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
|
import static org.hibernate.type.SqlTypes.LONG32VARBINARY;
|
||||||
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
|
import static org.hibernate.type.SqlTypes.LONG32VARCHAR;
|
||||||
import static org.hibernate.type.SqlTypes.NCHAR;
|
import static org.hibernate.type.SqlTypes.NCHAR;
|
||||||
import static org.hibernate.type.SqlTypes.NUMERIC;
|
|
||||||
import static org.hibernate.type.SqlTypes.NVARCHAR;
|
import static org.hibernate.type.SqlTypes.NVARCHAR;
|
||||||
import static org.hibernate.type.SqlTypes.OTHER;
|
import static org.hibernate.type.SqlTypes.OTHER;
|
||||||
import static org.hibernate.type.SqlTypes.TIMESTAMP_WITH_TIMEZONE;
|
import static org.hibernate.type.SqlTypes.TIMESTAMP_UTC;
|
||||||
import static org.hibernate.type.SqlTypes.TIME_WITH_TIMEZONE;
|
|
||||||
import static org.hibernate.type.SqlTypes.UUID;
|
import static org.hibernate.type.SqlTypes.UUID;
|
||||||
import static org.hibernate.type.SqlTypes.VARBINARY;
|
import static org.hibernate.type.SqlTypes.VARBINARY;
|
||||||
import static org.hibernate.type.SqlTypes.VARCHAR;
|
import static org.hibernate.type.SqlTypes.VARCHAR;
|
||||||
|
@ -117,7 +109,7 @@ import static org.hibernate.type.descriptor.DateTimeUtils.appendAsTimestampWithN
|
||||||
* @author Thomas Mueller
|
* @author Thomas Mueller
|
||||||
*/
|
*/
|
||||||
public class H2Dialect extends Dialect {
|
public class H2Dialect extends Dialect {
|
||||||
private static final DatabaseVersion MINIMUM_VERSION = DatabaseVersion.make( 1, 4, 197 );
|
private static final DatabaseVersion MINIMUM_VERSION = DatabaseVersion.make( 2, 1, 214 );
|
||||||
|
|
||||||
private final boolean ansiSequence;
|
private final boolean ansiSequence;
|
||||||
private final boolean cascadeConstraints;
|
private final boolean cascadeConstraints;
|
||||||
|
@ -141,25 +133,18 @@ public class H2Dialect extends Dialect {
|
||||||
public H2Dialect(DatabaseVersion version) {
|
public H2Dialect(DatabaseVersion version) {
|
||||||
super(version);
|
super(version);
|
||||||
|
|
||||||
// supportsTuplesInSubqueries = version.isSameOrAfter( 1, 4, 198 );
|
|
||||||
|
|
||||||
// Prior to 1.4.200 there was no support for 'current value for sequence_name'
|
// Prior to 1.4.200 there was no support for 'current value for sequence_name'
|
||||||
// After 2.0.202 there is no support for 'sequence_name.nextval' and 'sequence_name.currval'
|
// After 2.0.202 there is no support for 'sequence_name.nextval' and 'sequence_name.currval'
|
||||||
ansiSequence = version.isSameOrAfter( 1, 4, 200 );
|
ansiSequence = true;
|
||||||
|
|
||||||
// Prior to 1.4.200 the 'cascade' in 'drop table' was implicit
|
// Prior to 1.4.200 the 'cascade' in 'drop table' was implicit
|
||||||
cascadeConstraints = version.isSameOrAfter( 1, 4, 200 );
|
cascadeConstraints = true;
|
||||||
// 1.4.200 introduced changes in current_time and current_timestamp
|
// 1.4.200 introduced changes in current_time and current_timestamp
|
||||||
useLocalTime = version.isSameOrAfter( 1, 4, 200 );
|
useLocalTime = true;
|
||||||
|
|
||||||
this.sequenceInformationExtractor = version.isSameOrAfter( 1, 4, 201 )
|
this.sequenceInformationExtractor = SequenceInformationExtractorLegacyImpl.INSTANCE;
|
||||||
? SequenceInformationExtractorLegacyImpl.INSTANCE
|
|
||||||
: SequenceInformationExtractorH2DatabaseImpl.INSTANCE;
|
|
||||||
this.querySequenceString = "select * from INFORMATION_SCHEMA.SEQUENCES";
|
this.querySequenceString = "select * from INFORMATION_SCHEMA.SEQUENCES";
|
||||||
|
this.optionalTableUpdateStrategy = H2Dialect::usingMerge;
|
||||||
this.optionalTableUpdateStrategy = version.isSameOrAfter( 1, 4, 200 )
|
|
||||||
? H2Dialect::usingMerge
|
|
||||||
: H2Dialect::withoutMerge;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DatabaseVersion parseVersion(DialectResolutionInfo info) {
|
private static DatabaseVersion parseVersion(DialectResolutionInfo info) {
|
||||||
|
@ -189,7 +174,7 @@ public class H2Dialect extends Dialect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsStandardArrays() {
|
public boolean supportsStandardArrays() {
|
||||||
return getVersion().isSameOrAfter( 2 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -201,13 +186,6 @@ public class H2Dialect extends Dialect {
|
||||||
@Override
|
@Override
|
||||||
protected String columnType(int sqlTypeCode) {
|
protected String columnType(int sqlTypeCode) {
|
||||||
switch ( sqlTypeCode ) {
|
switch ( sqlTypeCode ) {
|
||||||
// prior to version 2.0, H2 reported NUMERIC columns as DECIMAL,
|
|
||||||
// which caused problems for schema update tool
|
|
||||||
case NUMERIC:
|
|
||||||
return getVersion().isBefore( 2 ) ? columnType( DECIMAL ) : super.columnType( sqlTypeCode );
|
|
||||||
// Support was only added in 2.0
|
|
||||||
case TIME_WITH_TIMEZONE:
|
|
||||||
return getVersion().isBefore( 2 ) ? columnType( TIMESTAMP_WITH_TIMEZONE ) : super.columnType( sqlTypeCode );
|
|
||||||
case NCHAR:
|
case NCHAR:
|
||||||
return columnType( CHAR );
|
return columnType( CHAR );
|
||||||
case NVARCHAR:
|
case NVARCHAR:
|
||||||
|
@ -241,17 +219,10 @@ public class H2Dialect extends Dialect {
|
||||||
super.registerColumnTypes( typeContributions, serviceRegistry );
|
super.registerColumnTypes( typeContributions, serviceRegistry );
|
||||||
final DdlTypeRegistry ddlTypeRegistry = typeContributions.getTypeConfiguration().getDdlTypeRegistry();
|
final DdlTypeRegistry ddlTypeRegistry = typeContributions.getTypeConfiguration().getDdlTypeRegistry();
|
||||||
|
|
||||||
if ( getVersion().isBefore( 2 ) ) {
|
|
||||||
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( ARRAY, "array", this ) );
|
|
||||||
}
|
|
||||||
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( UUID, "uuid", this ) );
|
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( UUID, "uuid", this ) );
|
||||||
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( GEOMETRY, "geometry", this ) );
|
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( GEOMETRY, "geometry", this ) );
|
||||||
if ( getVersion().isSameOrAfter( 1, 4, 198 ) ) {
|
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( INTERVAL_SECOND, "interval second($p,$s)", this ) );
|
||||||
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( INTERVAL_SECOND, "interval second($p,$s)", this ) );
|
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( JSON, "json", this ) );
|
||||||
}
|
|
||||||
if ( getVersion().isSameOrAfter( 1, 4, 200 ) ) {
|
|
||||||
ddlTypeRegistry.addDescriptor( new DdlTypeImpl( JSON, "json", this ) );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -261,22 +232,11 @@ public class H2Dialect extends Dialect {
|
||||||
final JdbcTypeRegistry jdbcTypeRegistry = typeContributions.getTypeConfiguration()
|
final JdbcTypeRegistry jdbcTypeRegistry = typeContributions.getTypeConfiguration()
|
||||||
.getJdbcTypeRegistry();
|
.getJdbcTypeRegistry();
|
||||||
|
|
||||||
if ( getVersion().isBefore( 2 ) ) {
|
jdbcTypeRegistry.addDescriptor( TimeUtcAsOffsetTimeJdbcType.INSTANCE );
|
||||||
// Support for TIME_WITH_TIMEZONE was only added in 2.0
|
|
||||||
jdbcTypeRegistry.addDescriptor( TimeAsTimestampWithTimeZoneJdbcType.INSTANCE );
|
|
||||||
jdbcTypeRegistry.addDescriptor( TimeUtcAsJdbcTimeJdbcType.INSTANCE );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
jdbcTypeRegistry.addDescriptor( TimeUtcAsOffsetTimeJdbcType.INSTANCE );
|
|
||||||
}
|
|
||||||
jdbcTypeRegistry.addDescriptor( TimestampUtcAsInstantJdbcType.INSTANCE );
|
jdbcTypeRegistry.addDescriptor( TimestampUtcAsInstantJdbcType.INSTANCE );
|
||||||
jdbcTypeRegistry.addDescriptorIfAbsent( UUIDJdbcType.INSTANCE );
|
jdbcTypeRegistry.addDescriptorIfAbsent( UUIDJdbcType.INSTANCE );
|
||||||
if ( getVersion().isSameOrAfter( 1, 4, 198 ) ) {
|
jdbcTypeRegistry.addDescriptorIfAbsent( H2DurationIntervalSecondJdbcType.INSTANCE );
|
||||||
jdbcTypeRegistry.addDescriptorIfAbsent( H2DurationIntervalSecondJdbcType.INSTANCE );
|
jdbcTypeRegistry.addDescriptorIfAbsent( H2FormatJsonJdbcType.INSTANCE );
|
||||||
}
|
|
||||||
if ( getVersion().isSameOrAfter( 1, 4, 200 ) ) {
|
|
||||||
jdbcTypeRegistry.addDescriptorIfAbsent( H2FormatJsonJdbcType.INSTANCE );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -286,7 +246,7 @@ public class H2Dialect extends Dialect {
|
||||||
|
|
||||||
public boolean hasOddDstBehavior() {
|
public boolean hasOddDstBehavior() {
|
||||||
// H2 1.4.200 has a bug: https://github.com/h2database/h2database/issues/3184
|
// H2 1.4.200 has a bug: https://github.com/h2database/h2database/issues/3184
|
||||||
return getVersion().isSameOrAfter( 1, 4, 200 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -344,36 +304,17 @@ public class H2Dialect extends Dialect {
|
||||||
functionFactory.median();
|
functionFactory.median();
|
||||||
functionFactory.stddevPopSamp();
|
functionFactory.stddevPopSamp();
|
||||||
functionFactory.varPopSamp();
|
functionFactory.varPopSamp();
|
||||||
if ( getVersion().isSame( 1, 4, 200 ) ) {
|
functionFactory.format_formatdatetime();
|
||||||
// See https://github.com/h2database/h2database/issues/2518
|
|
||||||
functionFactory.format_toChar();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
functionFactory.format_formatdatetime();
|
|
||||||
}
|
|
||||||
functionFactory.rownum();
|
functionFactory.rownum();
|
||||||
if ( getVersion().isSameOrAfter( 1, 4, 200 ) ) {
|
functionFactory.windowFunctions();
|
||||||
functionFactory.windowFunctions();
|
functionFactory.listagg( null );
|
||||||
functionFactory.inverseDistributionOrderedSetAggregates();
|
functionFactory.inverseDistributionOrderedSetAggregates();
|
||||||
functionFactory.hypotheticalOrderedSetAggregates();
|
functionFactory.hypotheticalOrderedSetAggregates();
|
||||||
if ( getVersion().isSameOrAfter( 2 ) ) {
|
|
||||||
functionFactory.listagg( null );
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Use group_concat until 2.x as listagg was buggy
|
|
||||||
functionFactory.listagg_groupConcat();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
functionFactory.listagg_groupConcat();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void augmentPhysicalTableTypes(List<String> tableTypesList) {
|
public void augmentPhysicalTableTypes(List<String> tableTypesList) {
|
||||||
if ( getVersion().isSameOrAfter( 2 ) ) {
|
tableTypesList.add( "BASE TABLE" );
|
||||||
tableTypesList.add( "BASE TABLE" );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -584,7 +525,7 @@ public class H2Dialect extends Dialect {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean supportsTimeLiteralOffset() {
|
public boolean supportsTimeLiteralOffset() {
|
||||||
return getVersion().isSameOrAfter( 1, 4, 200 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -823,17 +764,17 @@ public class H2Dialect extends Dialect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsWindowFunctions() {
|
public boolean supportsWindowFunctions() {
|
||||||
return getVersion().isSameOrAfter( 1, 4, 200 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsRecursiveCTE() {
|
public boolean supportsRecursiveCTE() {
|
||||||
return getVersion().isSameOrAfter( 1, 4, 196 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsFetchClause(FetchClauseType type) {
|
public boolean supportsFetchClause(FetchClauseType type) {
|
||||||
return getVersion().isSameOrAfter( 1, 4, 198 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -843,9 +784,7 @@ public class H2Dialect extends Dialect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IdentityColumnSupport getIdentityColumnSupport() {
|
public IdentityColumnSupport getIdentityColumnSupport() {
|
||||||
return getVersion().isSameOrAfter( 2 )
|
return H2FinalTableIdentityColumnSupport.INSTANCE;
|
||||||
? H2FinalTableIdentityColumnSupport.INSTANCE
|
|
||||||
: H2IdentityColumnSupport.INSTANCE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -853,7 +792,7 @@ public class H2Dialect extends Dialect {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsInsertReturning() {
|
public boolean supportsInsertReturning() {
|
||||||
return getVersion().isSameOrAfter( 2 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -868,20 +807,14 @@ public class H2Dialect extends Dialect {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void appendDatetimeFormat(SqlAppender appender, String format) {
|
public void appendDatetimeFormat(SqlAppender appender, String format) {
|
||||||
if ( getVersion().isSame( 1, 4, 200 ) ) {
|
appender.appendSql(
|
||||||
// See https://github.com/h2database/h2database/issues/2518
|
new Replacer( format, "'", "''" )
|
||||||
appender.appendSql( OracleDialect.datetimeFormat( format, true, true ).result() );
|
.replace("e", "u")
|
||||||
}
|
.replace( "xxx", "XXX" )
|
||||||
else {
|
.replace( "xx", "XX" )
|
||||||
appender.appendSql(
|
.replace( "x", "X" )
|
||||||
new Replacer( format, "'", "''" )
|
.result()
|
||||||
.replace("e", "u")
|
);
|
||||||
.replace( "xxx", "XXX" )
|
|
||||||
.replace( "xx", "XX" )
|
|
||||||
.replace( "x", "X" )
|
|
||||||
.result()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String translateExtractField(TemporalUnit unit) {
|
public String translateExtractField(TemporalUnit unit) {
|
||||||
|
|
|
@ -12,7 +12,6 @@ import org.hibernate.LockMode;
|
||||||
import org.hibernate.dialect.identity.H2IdentityColumnSupport;
|
import org.hibernate.dialect.identity.H2IdentityColumnSupport;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
import org.hibernate.query.sqm.ComparisonOperator;
|
import org.hibernate.query.sqm.ComparisonOperator;
|
||||||
import org.hibernate.sql.ast.Clause;
|
|
||||||
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
|
import org.hibernate.sql.ast.SqlAstNodeRenderingMode;
|
||||||
import org.hibernate.sql.ast.spi.SqlSelection;
|
import org.hibernate.sql.ast.spi.SqlSelection;
|
||||||
import org.hibernate.sql.ast.tree.Statement;
|
import org.hibernate.sql.ast.tree.Statement;
|
||||||
|
@ -23,13 +22,11 @@ import org.hibernate.sql.ast.tree.expression.ColumnReference;
|
||||||
import org.hibernate.sql.ast.tree.expression.Expression;
|
import org.hibernate.sql.ast.tree.expression.Expression;
|
||||||
import org.hibernate.sql.ast.tree.expression.Literal;
|
import org.hibernate.sql.ast.tree.expression.Literal;
|
||||||
import org.hibernate.sql.ast.tree.expression.SqlTuple;
|
import org.hibernate.sql.ast.tree.expression.SqlTuple;
|
||||||
import org.hibernate.sql.ast.tree.expression.SqlTupleContainer;
|
|
||||||
import org.hibernate.sql.ast.tree.expression.Summarization;
|
import org.hibernate.sql.ast.tree.expression.Summarization;
|
||||||
import org.hibernate.sql.ast.tree.from.QueryPartTableReference;
|
import org.hibernate.sql.ast.tree.from.QueryPartTableReference;
|
||||||
import org.hibernate.sql.ast.tree.from.TableGroup;
|
import org.hibernate.sql.ast.tree.from.TableGroup;
|
||||||
import org.hibernate.sql.ast.tree.from.TableReference;
|
import org.hibernate.sql.ast.tree.from.TableReference;
|
||||||
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
|
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
|
||||||
import org.hibernate.sql.ast.tree.predicate.InSubQueryPredicate;
|
|
||||||
import org.hibernate.sql.ast.tree.predicate.LikePredicate;
|
import org.hibernate.sql.ast.tree.predicate.LikePredicate;
|
||||||
import org.hibernate.sql.ast.tree.select.QueryPart;
|
import org.hibernate.sql.ast.tree.select.QueryPart;
|
||||||
import org.hibernate.sql.ast.tree.select.SelectClause;
|
import org.hibernate.sql.ast.tree.select.SelectClause;
|
||||||
|
@ -116,12 +113,12 @@ public class H2SqlAstTranslator<T extends JdbcOperation> extends SqlAstTranslato
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean supportsRowConstructor() {
|
protected boolean supportsRowConstructor() {
|
||||||
return getDialect().getVersion().isSameOrAfter( 2 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean supportsArrayConstructor() {
|
protected boolean supportsArrayConstructor() {
|
||||||
return getDialect().getVersion().isSameOrAfter( 2 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -175,28 +172,6 @@ public class H2SqlAstTranslator<T extends JdbcOperation> extends SqlAstTranslato
|
||||||
emulateSelectTupleComparison( lhsExpressions, tuple.getExpressions(), operator, true );
|
emulateSelectTupleComparison( lhsExpressions, tuple.getExpressions(), operator, true );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void visitInSubQueryPredicate(InSubQueryPredicate inSubQueryPredicate) {
|
|
||||||
final SqlTuple lhsTuple;
|
|
||||||
// As of 1.4.200 this is supported
|
|
||||||
if ( getDialect().getVersion().isBefore( 1, 4, 200 )
|
|
||||||
&& ( lhsTuple = SqlTupleContainer.getSqlTuple( inSubQueryPredicate.getTestExpression() ) ) != null
|
|
||||||
&& lhsTuple.getExpressions().size() != 1 ) {
|
|
||||||
inSubQueryPredicate.getTestExpression().accept( this );
|
|
||||||
if ( inSubQueryPredicate.isNegated() ) {
|
|
||||||
appendSql( " not" );
|
|
||||||
}
|
|
||||||
appendSql( " in" );
|
|
||||||
final boolean renderAsArray = this.renderAsArray;
|
|
||||||
this.renderAsArray = true;
|
|
||||||
inSubQueryPredicate.getSubQuery().accept( this );
|
|
||||||
this.renderAsArray = renderAsArray;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
super.visitInSubQueryPredicate( inSubQueryPredicate );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void visitSqlSelections(SelectClause selectClause) {
|
protected void visitSqlSelections(SelectClause selectClause) {
|
||||||
final boolean renderAsArray = this.renderAsArray;
|
final boolean renderAsArray = this.renderAsArray;
|
||||||
|
@ -282,14 +257,13 @@ public class H2SqlAstTranslator<T extends JdbcOperation> extends SqlAstTranslato
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean supportsRowValueConstructorDistinctFromSyntax() {
|
protected boolean supportsRowValueConstructorDistinctFromSyntax() {
|
||||||
// Seems that before, this was buggy
|
return true;
|
||||||
return getDialect().getVersion().isSameOrAfter( 1, 4, 200 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean supportsNullPrecedence() {
|
protected boolean supportsNullPrecedence() {
|
||||||
// Support for nulls clause in listagg was added in 2.0
|
// Support for nulls clause in listagg was added in 2.0
|
||||||
return getClauseStack().getCurrent() != Clause.WITHIN_GROUP || getDialect().getVersion().isSameOrAfter( 2 );
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -305,6 +279,6 @@ public class H2SqlAstTranslator<T extends JdbcOperation> extends SqlAstTranslato
|
||||||
private boolean supportsOffsetFetchClausePercentWithTies() {
|
private boolean supportsOffsetFetchClausePercentWithTies() {
|
||||||
// Introduction of TIES clause https://github.com/h2database/h2database/commit/876e9fbe7baf11d01675bfe871aac2cf1b6104ce
|
// Introduction of TIES clause https://github.com/h2database/h2database/commit/876e9fbe7baf11d01675bfe871aac2cf1b6104ce
|
||||||
// Introduction of PERCENT support https://github.com/h2database/h2database/commit/f45913302e5f6ad149155a73763c0c59d8205849
|
// Introduction of PERCENT support https://github.com/h2database/h2database/commit/f45913302e5f6ad149155a73763c0c59d8205849
|
||||||
return getDialect().getVersion().isSameOrAfter( 1, 4, 198 );
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,7 +50,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
settingProviders = @SettingProvider( provider = MultiLoadSubSelectCollectionDialectWithLimitTest.TestSettingProvider.class, settingName = AvailableSettings.DIALECT)
|
settingProviders = @SettingProvider( provider = MultiLoadSubSelectCollectionDialectWithLimitTest.TestSettingProvider.class, settingName = AvailableSettings.DIALECT)
|
||||||
)
|
)
|
||||||
@SessionFactory(generateStatistics = true, useCollectingStatementInspector = true)
|
@SessionFactory(generateStatistics = true, useCollectingStatementInspector = true)
|
||||||
@RequiresDialect( value = H2Dialect.class, majorVersion = 2 )
|
@RequiresDialect( value = H2Dialect.class )
|
||||||
public class MultiLoadSubSelectCollectionDialectWithLimitTest {
|
public class MultiLoadSubSelectCollectionDialectWithLimitTest {
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -171,8 +171,8 @@ public class BasicContributorTests {
|
||||||
assertThat(
|
assertThat(
|
||||||
targetDescriptor.getCommands(),
|
targetDescriptor.getCommands(),
|
||||||
CollectionElementMatcher.hasAllOf(
|
CollectionElementMatcher.hasAllOf(
|
||||||
CaseInsensitiveStartsWithMatcher.startsWith( "drop table main_table" ),
|
CaseInsensitiveStartsWithMatcher.startsWith( "drop table if exists main_table" ),
|
||||||
CaseInsensitiveStartsWithMatcher.startsWith( "drop table DynamicEntity" )
|
CaseInsensitiveStartsWithMatcher.startsWith( "drop table if exists DynamicEntity" )
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
|
||||||
@Setting(name = AvailableSettings.FORMAT_SQL, value = "false")
|
@Setting(name = AvailableSettings.FORMAT_SQL, value = "false")
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@RequiresDialect(value = H2Dialect.class, majorVersion = 2, comment = "H2 didn't support SQL arrays before version 2")
|
@RequiresDialect(value = H2Dialect.class)
|
||||||
@JiraKey("HHH-16469")
|
@JiraKey("HHH-16469")
|
||||||
public class DepthOneBatchTest {
|
public class DepthOneBatchTest {
|
||||||
|
|
||||||
|
|
|
@ -49,7 +49,7 @@ import static org.junit.jupiter.api.Assertions.fail;
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
@SessionFactory()
|
@SessionFactory()
|
||||||
@RequiresDialect( value = H2Dialect.class, majorVersion = 2 )
|
@RequiresDialect( value = H2Dialect.class )
|
||||||
@JiraKey(value = "HHH-16868")
|
@JiraKey(value = "HHH-16868")
|
||||||
public class FetchSizeTest {
|
public class FetchSizeTest {
|
||||||
private PreparedStatementSpyConnectionProvider connectionProvider;
|
private PreparedStatementSpyConnectionProvider connectionProvider;
|
||||||
|
|
|
@ -39,7 +39,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
settings = { @Setting(name=AvailableSettings.STATEMENT_BATCH_SIZE, value = "60") }
|
settings = { @Setting(name=AvailableSettings.STATEMENT_BATCH_SIZE, value = "60") }
|
||||||
)
|
)
|
||||||
@SessionFactory()
|
@SessionFactory()
|
||||||
@RequiresDialect( value = H2Dialect.class, majorVersion = 2 )
|
@RequiresDialect( value = H2Dialect.class )
|
||||||
@JiraKey(value = "HHH-16868")
|
@JiraKey(value = "HHH-16868")
|
||||||
public class InExpressionCountLimitExceededTest {
|
public class InExpressionCountLimitExceededTest {
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ public class StandardForeignKeyExporterTest {
|
||||||
sqlStringGenerationContext
|
sqlStringGenerationContext
|
||||||
);
|
);
|
||||||
assertEquals( sqlCreateStrings.length, 1 );
|
assertEquals( sqlCreateStrings.length, 1 );
|
||||||
assertEquals( sqlCreateStrings[0], "alter table PERSON add constraint fk_firstLastName foreign key (pkFirstName, pkLastName) references PERSON" );
|
assertEquals( sqlCreateStrings[0], "alter table if exists PERSON add constraint fk_firstLastName foreign key (pkFirstName, pkLastName) references PERSON" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
@SessionFactory
|
@SessionFactory
|
||||||
@DomainModel( annotatedClasses = { H2JsonListTest.Path.class, H2JsonListTest.PathClob.class } )
|
@DomainModel( annotatedClasses = { H2JsonListTest.Path.class, H2JsonListTest.PathClob.class } )
|
||||||
@RequiresDialect( value = H2Dialect.class, majorVersion = 2 )
|
@RequiresDialect( value = H2Dialect.class )
|
||||||
@Jira( "https://hibernate.atlassian.net/browse/HHH-16320" )
|
@Jira( "https://hibernate.atlassian.net/browse/HHH-16320" )
|
||||||
public class H2JsonListTest {
|
public class H2JsonListTest {
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
|
|
|
@ -420,7 +420,7 @@ abstract public class DialectFeatureChecks {
|
||||||
public static class SupportsInverseDistributionFunctions implements DialectFeatureCheck {
|
public static class SupportsInverseDistributionFunctions implements DialectFeatureCheck {
|
||||||
public boolean apply(Dialect dialect) {
|
public boolean apply(Dialect dialect) {
|
||||||
dialect = DialectDelegateWrapper.extractRealDialect( dialect );
|
dialect = DialectDelegateWrapper.extractRealDialect( dialect );
|
||||||
return dialect instanceof H2Dialect && dialect.getVersion().isSameOrAfter( 1, 4, 200 )
|
return dialect instanceof H2Dialect
|
||||||
|| dialect instanceof PostgreSQLDialect
|
|| dialect instanceof PostgreSQLDialect
|
||||||
|| dialect instanceof AbstractHANADialect
|
|| dialect instanceof AbstractHANADialect
|
||||||
|| dialect instanceof CockroachDialect
|
|| dialect instanceof CockroachDialect
|
||||||
|
@ -434,7 +434,7 @@ abstract public class DialectFeatureChecks {
|
||||||
public static class SupportsHypotheticalSetFunctions implements DialectFeatureCheck {
|
public static class SupportsHypotheticalSetFunctions implements DialectFeatureCheck {
|
||||||
public boolean apply(Dialect dialect) {
|
public boolean apply(Dialect dialect) {
|
||||||
dialect = DialectDelegateWrapper.extractRealDialect( dialect );
|
dialect = DialectDelegateWrapper.extractRealDialect( dialect );
|
||||||
return dialect instanceof H2Dialect && dialect.getVersion().isSameOrAfter( 1, 4, 200 )
|
return dialect instanceof H2Dialect
|
||||||
|| dialect instanceof PostgreSQLDialect
|
|| dialect instanceof PostgreSQLDialect
|
||||||
|| dialect instanceof AbstractHANADialect
|
|| dialect instanceof AbstractHANADialect
|
||||||
|| dialect instanceof CockroachDialect
|
|| dialect instanceof CockroachDialect
|
||||||
|
|
|
@ -27,7 +27,6 @@ helper.runWithNotification {
|
||||||
stage('Configure') {
|
stage('Configure') {
|
||||||
this.environments = [
|
this.environments = [
|
||||||
// Minimum supported versions
|
// Minimum supported versions
|
||||||
new BuildEnvironment( dbName: 'h2_1_4' ),
|
|
||||||
new BuildEnvironment( dbName: 'hsqldb_2_6' ),
|
new BuildEnvironment( dbName: 'hsqldb_2_6' ),
|
||||||
new BuildEnvironment( dbName: 'derby_10_14' ),
|
new BuildEnvironment( dbName: 'derby_10_14' ),
|
||||||
new BuildEnvironment( dbName: 'mysql_5_7' ),
|
new BuildEnvironment( dbName: 'mysql_5_7' ),
|
||||||
|
@ -110,10 +109,6 @@ stage('Build') {
|
||||||
try {
|
try {
|
||||||
stage('Start database') {
|
stage('Start database') {
|
||||||
switch (buildEnv.dbName) {
|
switch (buildEnv.dbName) {
|
||||||
case "h2_1_4":
|
|
||||||
state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] +
|
|
||||||
" -Pgradle.libs.versions.h2=1.4.197 -Pgradle.libs.versions.h2gis=1.5.0"
|
|
||||||
break;
|
|
||||||
case "hsqldb_2_6":
|
case "hsqldb_2_6":
|
||||||
state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] +
|
state[buildEnv.tag]['additionalOptions'] = state[buildEnv.tag]['additionalOptions'] +
|
||||||
" -Pgradle.libs.versions.hsqldb=2.6.1"
|
" -Pgradle.libs.versions.hsqldb=2.6.1"
|
||||||
|
|
Loading…
Reference in New Issue