HHH-15013 H2 2.0.202 no longer supports nextval, replacing with ANSI SQL

This commit is contained in:
Filipe Roque 2022-01-04 22:57:55 +00:00 committed by Christian Beikov
parent 30f627ce39
commit bcb1577b43
3 changed files with 33 additions and 4 deletions

View File

@ -19,7 +19,8 @@ import org.hibernate.dialect.identity.IdentityColumnSupport;
import org.hibernate.dialect.pagination.LimitHandler; import org.hibernate.dialect.pagination.LimitHandler;
import org.hibernate.dialect.pagination.LimitOffsetLimitHandler; import org.hibernate.dialect.pagination.LimitOffsetLimitHandler;
import org.hibernate.dialect.pagination.OffsetFetchLimitHandler; import org.hibernate.dialect.pagination.OffsetFetchLimitHandler;
import org.hibernate.dialect.sequence.H2SequenceSupport; import org.hibernate.dialect.sequence.H2V1SequenceSupport;
import org.hibernate.dialect.sequence.H2V2SequenceSupport;
import org.hibernate.dialect.sequence.SequenceSupport; import org.hibernate.dialect.sequence.SequenceSupport;
import org.hibernate.dialect.temptable.TemporaryTable; import org.hibernate.dialect.temptable.TemporaryTable;
import org.hibernate.dialect.temptable.TemporaryTableKind; import org.hibernate.dialect.temptable.TemporaryTableKind;
@ -76,6 +77,7 @@ public class H2Dialect extends Dialect {
private final LimitHandler limitHandler; private final LimitHandler limitHandler;
private final boolean ansiSequence;
private final boolean cascadeConstraints; private final boolean cascadeConstraints;
private final boolean useLocalTime; private final boolean useLocalTime;
@ -105,6 +107,11 @@ public class H2Dialect extends Dialect {
} }
supportsTuplesInSubqueries = version.isSameOrAfter( 1, 4, 198 ); supportsTuplesInSubqueries = version.isSameOrAfter( 1, 4, 198 );
// 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'
ansiSequence = version.isSameOrAfter( 1, 4, 200 );
// 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 = version.isSameOrAfter( 1, 4, 200 );
// 1.4.200 introduced changes in current_time and current_timestamp // 1.4.200 introduced changes in current_time and current_timestamp
@ -379,7 +386,7 @@ public class H2Dialect extends Dialect {
@Override @Override
public SequenceSupport getSequenceSupport() { public SequenceSupport getSequenceSupport() {
return H2SequenceSupport.INSTANCE; return ansiSequence ? H2V2SequenceSupport.INSTANCE: H2V1SequenceSupport.INSTANCE;
} }
@Override @Override

View File

@ -13,9 +13,9 @@ import org.hibernate.MappingException;
* *
* @author Gavin King * @author Gavin King
*/ */
public final class H2SequenceSupport implements SequenceSupport { public final class H2V1SequenceSupport implements SequenceSupport {
public static final SequenceSupport INSTANCE = new H2SequenceSupport(); public static final SequenceSupport INSTANCE = new H2V1SequenceSupport();
@Override @Override
public String getDropSequenceString(String sequenceName) { public String getDropSequenceString(String sequenceName) {

View File

@ -0,0 +1,22 @@
/*
* 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.dialect.sequence;
/**
* Sequence support for {@link org.hibernate.dialect.H2Dialect}.
*
* @author Gavin King
*/
public final class H2V2SequenceSupport extends ANSISequenceSupport {
public static final SequenceSupport INSTANCE = new H2V2SequenceSupport();
@Override
public String getDropSequenceString(String sequenceName) {
return "drop sequence if exists " + sequenceName;
}
}