HHH-17023 Implements AltibaseDialect
This commit is contained in:
parent
e6d5c72ec6
commit
46b064633b
|
@ -67,6 +67,8 @@ elif [ "$RDBMS" == "hana_cloud" ]; then
|
||||||
goal="-Pdb=hana_cloud"
|
goal="-Pdb=hana_cloud"
|
||||||
elif [ "$RDBMS" == "cockroachdb" ]; then
|
elif [ "$RDBMS" == "cockroachdb" ]; then
|
||||||
goal="-Pdb=cockroachdb"
|
goal="-Pdb=cockroachdb"
|
||||||
|
elif [ "$RDBMS" == "altibase" ]; then
|
||||||
|
goal="-Pdb=altibase"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Only run checkstyle in the H2 build,
|
# Only run checkstyle in the H2 build,
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
* 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>.
|
||||||
|
*/
|
||||||
|
jdbcDependency 'com.altibase:altibase-jdbc:7.3.0.0.2'
|
|
@ -0,0 +1,25 @@
|
||||||
|
#
|
||||||
|
# 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>.
|
||||||
|
#
|
||||||
|
|
||||||
|
hibernate.dialect org.hibernate.community.dialect.AltibaseDialect
|
||||||
|
hibernate.connection.driver_class Altibase.jdbc.driver.AltibaseDriver
|
||||||
|
hibernate.connection.url jdbc:Altibase://localhost:20300/mydb
|
||||||
|
hibernate.connection.username sys
|
||||||
|
hibernate.connection.password manager
|
||||||
|
|
||||||
|
hibernate.connection.pool_size 5
|
||||||
|
|
||||||
|
hibernate.show_sql false
|
||||||
|
hibernate.format_sql true
|
||||||
|
hibernate.max_fetch_depth 5
|
||||||
|
|
||||||
|
hibernate.cache.region_prefix hibernate.test
|
||||||
|
hibernate.cache.region.factory_class org.hibernate.testing.cache.CachingRegionFactory
|
||||||
|
|
||||||
|
javax.persistence.validation.mode=NONE
|
||||||
|
hibernate.service.allow_crawling=false
|
||||||
|
hibernate.session.events.log=true
|
|
@ -292,6 +292,14 @@ ext {
|
||||||
'jdbc.url' : 'jdbc:firebirdsql://' + dbHost +'/hibernate_orm_test?charSet=utf-8;TRANSACTION_READ_COMMITTED=read_committed,rec_version,wait,lock_timeout=5',
|
'jdbc.url' : 'jdbc:firebirdsql://' + dbHost +'/hibernate_orm_test?charSet=utf-8;TRANSACTION_READ_COMMITTED=read_committed,rec_version,wait,lock_timeout=5',
|
||||||
'connection.init_sql' : ''
|
'connection.init_sql' : ''
|
||||||
],
|
],
|
||||||
|
altibase : [
|
||||||
|
'db.dialect' : 'org.hibernate.community.dialect.AltibaseDialect',
|
||||||
|
'jdbc.driver': 'Altibase.jdbc.driver.AltibaseDriver',
|
||||||
|
'jdbc.user' : 'sys',
|
||||||
|
'jdbc.pass' : 'manager',
|
||||||
|
'connection.init_sql' : '',
|
||||||
|
'jdbc.url' : 'jdbc:Altibase://' + dbHost + ':20300/mydb?force_clob_bind=true'
|
||||||
|
],
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,9 @@ dependencies {
|
||||||
testRuntimeOnly dbLibs.oracleXml
|
testRuntimeOnly dbLibs.oracleXml
|
||||||
testRuntimeOnly dbLibs.oracleXmlParser
|
testRuntimeOnly dbLibs.oracleXmlParser
|
||||||
}
|
}
|
||||||
|
else if ( db.startsWith( 'altibase' ) ) {
|
||||||
|
testRuntimeOnly dbLibs.altibase
|
||||||
|
}
|
||||||
|
|
||||||
annotationProcessor libs.loggingProcessor
|
annotationProcessor libs.loggingProcessor
|
||||||
annotationProcessor libs.logging
|
annotationProcessor libs.logging
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.test.agroal;
|
package org.hibernate.test.agroal;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.TiDBDialect;
|
import org.hibernate.dialect.TiDBDialect;
|
||||||
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.agroal.internal.AgroalConnectionProvider;
|
import org.hibernate.agroal.internal.AgroalConnectionProvider;
|
||||||
|
@ -17,6 +18,7 @@ import org.hibernate.testing.common.connections.BaseTransactionIsolationConfigTe
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
@SkipForDialect(value = TiDBDialect.class, comment = "Doesn't support SERIALIZABLE isolation")
|
@SkipForDialect(value = TiDBDialect.class, comment = "Doesn't support SERIALIZABLE isolation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase cannot change isolation level in autocommit mode")
|
||||||
public class AgroalTransactionIsolationConfigTest extends BaseTransactionIsolationConfigTest {
|
public class AgroalTransactionIsolationConfigTest extends BaseTransactionIsolationConfigTest {
|
||||||
@Override
|
@Override
|
||||||
protected ConnectionProvider getConnectionProviderUnderTest() {
|
protected ConnectionProvider getConnectionProviderUnderTest() {
|
||||||
|
|
|
@ -9,6 +9,7 @@ package org.hibernate.test.c3p0;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
import org.hibernate.c3p0.internal.C3P0ConnectionProvider;
|
import org.hibernate.c3p0.internal.C3P0ConnectionProvider;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.TiDBDialect;
|
import org.hibernate.dialect.TiDBDialect;
|
||||||
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||||
|
@ -21,6 +22,7 @@ import org.junit.Before;
|
||||||
* @author Steve Ebersole
|
* @author Steve Ebersole
|
||||||
*/
|
*/
|
||||||
@SkipForDialect(value = TiDBDialect.class, comment = "Doesn't support SERIALIZABLE isolation")
|
@SkipForDialect(value = TiDBDialect.class, comment = "Doesn't support SERIALIZABLE isolation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase cannot change isolation level in autocommit mode")
|
||||||
public class C3p0TransactionIsolationConfigTest extends BaseTransactionIsolationConfigTest {
|
public class C3p0TransactionIsolationConfigTest extends BaseTransactionIsolationConfigTest {
|
||||||
private StandardServiceRegistry ssr;
|
private StandardServiceRegistry ssr;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,653 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
import java.time.temporal.TemporalAccessor;
|
||||||
|
import java.util.Date;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
import jakarta.persistence.TemporalType;
|
||||||
|
import org.hibernate.boot.model.FunctionContributions;
|
||||||
|
import org.hibernate.boot.model.TypeContributions;
|
||||||
|
import org.hibernate.community.dialect.sequence.*;
|
||||||
|
import org.hibernate.dialect.*;
|
||||||
|
import org.hibernate.dialect.function.CommonFunctionFactory;
|
||||||
|
import org.hibernate.community.dialect.pagination.AltibaseLimitHandler;
|
||||||
|
import org.hibernate.dialect.function.OracleTruncFunction;
|
||||||
|
import org.hibernate.dialect.pagination.LimitHandler;
|
||||||
|
import org.hibernate.dialect.sequence.SequenceSupport;
|
||||||
|
import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo;
|
||||||
|
import org.hibernate.engine.jdbc.env.spi.IdentifierHelper;
|
||||||
|
import org.hibernate.engine.jdbc.env.spi.IdentifierHelperBuilder;
|
||||||
|
import org.hibernate.engine.jdbc.env.spi.NameQualifierSupport;
|
||||||
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.exception.ConstraintViolationException;
|
||||||
|
import org.hibernate.exception.LockTimeoutException;
|
||||||
|
import org.hibernate.exception.spi.SQLExceptionConversionDelegate;
|
||||||
|
import org.hibernate.internal.util.JdbcExceptionHelper;
|
||||||
|
import org.hibernate.query.sqm.*;
|
||||||
|
import org.hibernate.query.sqm.produce.function.FunctionParameterType;
|
||||||
|
import org.hibernate.service.ServiceRegistry;
|
||||||
|
import org.hibernate.sql.ast.SqlAstTranslator;
|
||||||
|
import org.hibernate.sql.ast.SqlAstTranslatorFactory;
|
||||||
|
import org.hibernate.sql.ast.spi.SqlAppender;
|
||||||
|
import org.hibernate.sql.ast.spi.StandardSqlAstTranslatorFactory;
|
||||||
|
import org.hibernate.sql.ast.tree.Statement;
|
||||||
|
import org.hibernate.sql.exec.spi.JdbcOperation;
|
||||||
|
import org.hibernate.tool.schema.extract.spi.SequenceInformationExtractor;
|
||||||
|
import org.hibernate.type.StandardBasicTypes;
|
||||||
|
import org.hibernate.type.descriptor.java.PrimitiveByteArrayJavaType;
|
||||||
|
import org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType;
|
||||||
|
import org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry;
|
||||||
|
import org.hibernate.type.spi.TypeConfiguration;
|
||||||
|
|
||||||
|
import static org.hibernate.type.SqlTypes.*;
|
||||||
|
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_END;
|
||||||
|
import static org.hibernate.type.descriptor.DateTimeUtils.JDBC_ESCAPE_START_TIMESTAMP;
|
||||||
|
import static org.hibernate.type.descriptor.DateTimeUtils.appendAsTimestampWithMicros;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An SQL dialect for Altibase 7.3 and above.
|
||||||
|
*
|
||||||
|
* @author Geoffrey Park
|
||||||
|
*/
|
||||||
|
public class AltibaseDialect extends Dialect {
|
||||||
|
|
||||||
|
private static final DatabaseVersion MINIMUM_VERSION = DatabaseVersion.make( 7, 3 );
|
||||||
|
|
||||||
|
@SuppressWarnings("unused")
|
||||||
|
public AltibaseDialect() {
|
||||||
|
this( MINIMUM_VERSION );
|
||||||
|
}
|
||||||
|
|
||||||
|
public AltibaseDialect(DialectResolutionInfo info) {
|
||||||
|
this( info.makeCopy() );
|
||||||
|
registerKeywords( info );
|
||||||
|
}
|
||||||
|
|
||||||
|
public AltibaseDialect(DatabaseVersion version) {
|
||||||
|
super( version );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String columnType(int sqlTypeCode) {
|
||||||
|
switch ( sqlTypeCode ) {
|
||||||
|
case BOOLEAN:
|
||||||
|
return "char(1)";
|
||||||
|
case FLOAT:
|
||||||
|
case DOUBLE:
|
||||||
|
return "double";
|
||||||
|
case TINYINT:
|
||||||
|
return "smallint";
|
||||||
|
case TIME:
|
||||||
|
case TIMESTAMP:
|
||||||
|
case TIME_WITH_TIMEZONE:
|
||||||
|
case TIMESTAMP_WITH_TIMEZONE:
|
||||||
|
return "date";
|
||||||
|
case BINARY:
|
||||||
|
return "byte($l)";
|
||||||
|
case VARBINARY:
|
||||||
|
return "varbyte($l)";
|
||||||
|
case LONGVARBINARY:
|
||||||
|
return "blob";
|
||||||
|
case BIT:
|
||||||
|
return "varbit($l)";
|
||||||
|
case LONGVARCHAR:
|
||||||
|
case NCLOB:
|
||||||
|
return "clob";
|
||||||
|
default:
|
||||||
|
return super.columnType( sqlTypeCode );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void registerColumnTypes(TypeContributions typeContributions, ServiceRegistry serviceRegistry) {
|
||||||
|
super.registerColumnTypes( typeContributions, serviceRegistry );
|
||||||
|
final DdlTypeRegistry ddlTypeRegistry = typeContributions.getTypeConfiguration().getDdlTypeRegistry();
|
||||||
|
|
||||||
|
ddlTypeRegistry.addDescriptor(
|
||||||
|
CapacityDependentDdlType.builder( BINARY, columnType( LONGVARBINARY ), this )
|
||||||
|
.withTypeCapacity( getMaxVarbinaryLength(), columnType( BINARY ) )
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
ddlTypeRegistry.addDescriptor(
|
||||||
|
CapacityDependentDdlType.builder( BIT, columnType( LONGVARBINARY ), this )
|
||||||
|
.withTypeCapacity( 64000, columnType( BIT ) )
|
||||||
|
.build()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxVarcharLength() {
|
||||||
|
return 32_000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxVarbinaryLength() {
|
||||||
|
return 32_000;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getDefaultStatementBatchSize() {
|
||||||
|
return 15;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String trimPattern(TrimSpec specification, char character) {
|
||||||
|
switch ( specification ) {
|
||||||
|
case BOTH:
|
||||||
|
return character == ' '
|
||||||
|
? "trim(?1)"
|
||||||
|
: "trim(?1, '" + character + "')";
|
||||||
|
case LEADING:
|
||||||
|
return character == ' '
|
||||||
|
? "ltrim(?1)"
|
||||||
|
: "ltrim(?1,'" + character + "')";
|
||||||
|
case TRAILING:
|
||||||
|
return character == ' '
|
||||||
|
? "rtrim(?1)"
|
||||||
|
: "rtrim(?1,'" + character + "')";
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.trimPattern( specification, character );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getPreferredSqlTypeCodeForBoolean() {
|
||||||
|
return Types.BIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void initializeFunctionRegistry(FunctionContributions functionContributions) {
|
||||||
|
super.initializeFunctionRegistry(functionContributions);
|
||||||
|
final TypeConfiguration typeConfiguration = functionContributions.getTypeConfiguration();
|
||||||
|
|
||||||
|
functionContributions.getFunctionRegistry().registerBinaryTernaryPattern(
|
||||||
|
"locate",
|
||||||
|
typeConfiguration.getBasicTypeRegistry().resolve( StandardBasicTypes.INTEGER ),
|
||||||
|
"instr(?2,?1)",
|
||||||
|
"instr(?2,?1,?3)",
|
||||||
|
FunctionParameterType.STRING, FunctionParameterType.STRING, FunctionParameterType.INTEGER,
|
||||||
|
typeConfiguration
|
||||||
|
).setArgumentListSignature("(pattern, string[, start])");
|
||||||
|
|
||||||
|
CommonFunctionFactory functionFactory = new CommonFunctionFactory(functionContributions);
|
||||||
|
functionFactory.ceiling_ceil();
|
||||||
|
functionFactory.trim2();
|
||||||
|
functionFactory.stddev();
|
||||||
|
functionFactory.variance();
|
||||||
|
functionFactory.char_chr();
|
||||||
|
functionFactory.concat_pipeOperator();
|
||||||
|
functionFactory.coalesce();
|
||||||
|
functionFactory.initcap();
|
||||||
|
functionFactory.repeat_rpad();
|
||||||
|
|
||||||
|
functionFactory.radians_acos();
|
||||||
|
functionFactory.degrees_acos();
|
||||||
|
|
||||||
|
functionFactory.ascii();
|
||||||
|
functionFactory.toCharNumberDateTimestamp();
|
||||||
|
functionFactory.lastDay();
|
||||||
|
functionFactory.sysdate();
|
||||||
|
functionFactory.rownum();
|
||||||
|
functionFactory.instr();
|
||||||
|
functionFactory.substr();
|
||||||
|
functionFactory.cosh();
|
||||||
|
functionFactory.sinh();
|
||||||
|
functionFactory.tanh();
|
||||||
|
functionFactory.log();
|
||||||
|
functionFactory.log10_log();
|
||||||
|
functionFactory.substring_substr();
|
||||||
|
functionFactory.leftRight_substr();
|
||||||
|
functionFactory.translate();
|
||||||
|
functionFactory.addMonths();
|
||||||
|
functionFactory.listagg( null );
|
||||||
|
functionFactory.monthsBetween();
|
||||||
|
functionFactory.windowFunctions();
|
||||||
|
functionFactory.hypotheticalOrderedSetAggregates();
|
||||||
|
functionFactory.bitLength_pattern( "bit_length(?1)", "lengthb(?1)*8" );
|
||||||
|
functionFactory.octetLength_pattern( "octet_length(?1)", "lengthb(?1)" );
|
||||||
|
functionContributions.getFunctionRegistry().register(
|
||||||
|
"trunc",
|
||||||
|
new OracleTruncFunction( functionContributions.getTypeConfiguration() )
|
||||||
|
);
|
||||||
|
functionContributions.getFunctionRegistry().registerAlternateKey( "truncate", "trunc" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String currentDate() {
|
||||||
|
return currentTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String currentTime() {
|
||||||
|
return currentTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String currentTimestamp() {
|
||||||
|
return "sysdate";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String currentLocalTime() {
|
||||||
|
return currentTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String currentLocalTimestamp() {
|
||||||
|
return currentTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String currentTimestampWithTimeZone() {
|
||||||
|
return currentTimestamp();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SqlAstTranslatorFactory getSqlAstTranslatorFactory() {
|
||||||
|
return new StandardSqlAstTranslatorFactory() {
|
||||||
|
@Override
|
||||||
|
protected <T extends JdbcOperation> SqlAstTranslator<T> buildTranslator(
|
||||||
|
SessionFactoryImplementor sessionFactory, Statement statement) {
|
||||||
|
return new AltibaseSqlAstTranslator<>( sessionFactory, statement );
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getFractionalSecondPrecisionInNanos() {
|
||||||
|
return 1_000; //microseconds
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Altibase supports a limited list of temporal fields in the
|
||||||
|
* extract() function, but we can emulate some of them by
|
||||||
|
* using to_char() with a format string instead of extract().
|
||||||
|
* Thus, the additional supported fields are
|
||||||
|
* {@link TemporalUnit#DAY_OF_YEAR},
|
||||||
|
* {@link TemporalUnit#DAY_OF_MONTH},
|
||||||
|
* {@link TemporalUnit#DAY_OF_YEAR},
|
||||||
|
* and {@link TemporalUnit#WEEK}.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String extractPattern(TemporalUnit unit) {
|
||||||
|
switch (unit) {
|
||||||
|
case DAY_OF_WEEK:
|
||||||
|
return "extract(?2, 'DAYOFWEEK')";
|
||||||
|
case DAY_OF_MONTH:
|
||||||
|
return "extract(?2, 'DAY')";
|
||||||
|
case DAY_OF_YEAR:
|
||||||
|
return "extract(?2,'DAYOFYEAR')";
|
||||||
|
case WEEK:
|
||||||
|
return "to_number(to_char(?2,'IW'))"; //the ISO week number
|
||||||
|
case WEEK_OF_YEAR:
|
||||||
|
return "extract(?2, 'WEEK')";
|
||||||
|
case EPOCH:
|
||||||
|
return timestampdiffPattern( TemporalUnit.SECOND, TemporalType.TIMESTAMP, TemporalType.TIMESTAMP )
|
||||||
|
.replace( "?2", "TO_DATE('1970-01-01 00:00:00','YYYY-MM-DD HH24:MI:SS')" )
|
||||||
|
.replace( "?3", "?2" );
|
||||||
|
case QUARTER:
|
||||||
|
return "extract(?2, 'QUARTER')";
|
||||||
|
default:
|
||||||
|
return super.extractPattern( unit );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String timestampaddPattern(TemporalUnit unit, TemporalType temporalType, IntervalType intervalType) {
|
||||||
|
switch (unit) {
|
||||||
|
case NANOSECOND:
|
||||||
|
return "timestampadd(MICROSECOND,(?2)/1e3,?3)";
|
||||||
|
case NATIVE:
|
||||||
|
return "timestampadd(MICROSECOND, ?2, ?3)";
|
||||||
|
default:
|
||||||
|
return "timestampadd(?1, ?2, ?3)";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String timestampdiffPattern(TemporalUnit unit, TemporalType fromTemporalType, TemporalType toTemporalType) {
|
||||||
|
switch (unit) {
|
||||||
|
case SECOND:
|
||||||
|
return "datediff(?2, ?3, 'SECOND')";
|
||||||
|
case NANOSECOND:
|
||||||
|
return "datediff(?2, ?3, 'MICROSECOND')*1e3";
|
||||||
|
case NATIVE:
|
||||||
|
return "datediff(?2, ?3, 'MICROSECOND')";
|
||||||
|
default:
|
||||||
|
return "datediff(?2, ?3, '?1')";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendBinaryLiteral(SqlAppender appender, byte[] bytes) {
|
||||||
|
|
||||||
|
appender.appendSql( "VARBYTE'" );
|
||||||
|
PrimitiveByteArrayJavaType.INSTANCE.appendString( appender, bytes );
|
||||||
|
appender.appendSql( '\'' );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendDatetimeFormat(SqlAppender appender, String format) {
|
||||||
|
appender.appendSql( OracleDialect.datetimeFormat( format, false, false ).result() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String castPattern(CastType from, CastType to) {
|
||||||
|
String result;
|
||||||
|
switch ( to ) {
|
||||||
|
case INTEGER:
|
||||||
|
case LONG:
|
||||||
|
result = BooleanDecoder.toInteger( from );
|
||||||
|
if ( result != null ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case INTEGER_BOOLEAN:
|
||||||
|
result = BooleanDecoder.toIntegerBoolean( from );
|
||||||
|
if ( result != null ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case YN_BOOLEAN:
|
||||||
|
result = BooleanDecoder.toYesNoBoolean( from );
|
||||||
|
if ( result != null ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case BOOLEAN:
|
||||||
|
case TF_BOOLEAN:
|
||||||
|
result = BooleanDecoder.toTrueFalseBoolean( from );
|
||||||
|
if ( result != null ) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case STRING:
|
||||||
|
switch ( from ) {
|
||||||
|
case INTEGER_BOOLEAN:
|
||||||
|
case TF_BOOLEAN:
|
||||||
|
case YN_BOOLEAN:
|
||||||
|
return BooleanDecoder.toString( from );
|
||||||
|
case DATE:
|
||||||
|
return "to_char(?1,'YYYY-MM-DD')";
|
||||||
|
case TIME:
|
||||||
|
return "to_char(?1,'HH24:MI:SS')";
|
||||||
|
case TIMESTAMP:
|
||||||
|
case OFFSET_TIMESTAMP:
|
||||||
|
case ZONE_TIMESTAMP:
|
||||||
|
return "to_char(?1,'YYYY-MM-DD HH24:MI:SS.FF6')";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case CLOB:
|
||||||
|
// Altibase doesn't support cast to clob
|
||||||
|
return "cast(?1 as varchar(32000))";
|
||||||
|
case DATE:
|
||||||
|
if ( from == CastType.STRING ) {
|
||||||
|
return "to_date(?1,'YYYY-MM-DD')";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TIME:
|
||||||
|
if ( from == CastType.STRING ) {
|
||||||
|
return "to_date(?1,'HH24:MI:SS')";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case TIMESTAMP:
|
||||||
|
case OFFSET_TIMESTAMP:
|
||||||
|
case ZONE_TIMESTAMP:
|
||||||
|
if ( from == CastType.STRING ) {
|
||||||
|
return "to_date(?1,'YYYY-MM-DD HH24:MI:SS.FF6')";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return super.castPattern(from, to);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendDateTimeLiteral(
|
||||||
|
SqlAppender appender,
|
||||||
|
TemporalAccessor temporalAccessor,
|
||||||
|
TemporalType precision,
|
||||||
|
TimeZone jdbcTimeZone) {
|
||||||
|
if (precision == TemporalType.TIMESTAMP) {
|
||||||
|
appender.appendSql(JDBC_ESCAPE_START_TIMESTAMP);
|
||||||
|
appendAsTimestampWithMicros(appender, temporalAccessor, supportsTemporalLiteralOffset(), jdbcTimeZone);
|
||||||
|
appender.appendSql(JDBC_ESCAPE_END);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.appendDateTimeLiteral(appender, temporalAccessor, precision, jdbcTimeZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void appendDateTimeLiteral(SqlAppender appender, Date date, TemporalType precision, TimeZone jdbcTimeZone) {
|
||||||
|
if (precision == TemporalType.TIMESTAMP) {
|
||||||
|
appender.appendSql(JDBC_ESCAPE_START_TIMESTAMP);
|
||||||
|
appendAsTimestampWithMicros( appender, date, jdbcTimeZone );
|
||||||
|
appender.appendSql(JDBC_ESCAPE_END);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
super.appendDateTimeLiteral(appender, date, precision, jdbcTimeZone);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String translateDurationField(TemporalUnit unit) {
|
||||||
|
//use microsecond as the "native" precision
|
||||||
|
if ( unit == TemporalUnit.NATIVE ) {
|
||||||
|
return "microsecond";
|
||||||
|
}
|
||||||
|
return super.translateDurationField( unit );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NullOrdering getNullOrdering() {
|
||||||
|
return NullOrdering.LAST;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAddColumnString() {
|
||||||
|
return "add column (";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAddColumnSuffixString() {
|
||||||
|
return ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaxIdentifierLength() {
|
||||||
|
return 40;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public IdentifierHelper buildIdentifierHelper(
|
||||||
|
IdentifierHelperBuilder builder,
|
||||||
|
DatabaseMetaData dbMetaData) throws SQLException {
|
||||||
|
// Any use of keywords as identifiers will result in syntax error, so enable auto quote always
|
||||||
|
builder.setAutoQuoteKeywords( true );
|
||||||
|
builder.setAutoQuoteInitialUnderscore( false );
|
||||||
|
builder.applyReservedWords( dbMetaData );
|
||||||
|
|
||||||
|
return super.buildIdentifierHelper( builder, dbMetaData );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean canCreateSchema() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NameQualifierSupport getNameQualifierSupport() {
|
||||||
|
return NameQualifierSupport.SCHEMA;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getCreateSchemaCommand(String schemaName) {
|
||||||
|
throw new UnsupportedOperationException( "No create schema syntax supported by " + getClass().getName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getDropSchemaCommand(String schemaName) {
|
||||||
|
throw new UnsupportedOperationException( "No drop schema syntax supported by " + getClass().getName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean qualifyIndexName() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsInsertReturningGeneratedKeys() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsTruncateWithCast(){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsCommentOn() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsUnboundedLobLocatorMaterialization() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsTupleDistinctCounts() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsExistsInSelect() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsPartitionBy() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SequenceSupport getSequenceSupport() {
|
||||||
|
return AltibaseSequenceSupport.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getQuerySequencesString() {
|
||||||
|
return "SELECT a.user_name USER_NAME, b.table_name SEQUENCE_NAME, c.current_seq CURRENT_VALUE, "
|
||||||
|
+ "c.start_seq START_VALUE, c.min_seq MIN_VALUE, c.max_seq MAX_VALUE, c.increment_seq INCREMENT_BY, "
|
||||||
|
+ "c.flag CYCLE_, c.sync_interval CACHE_SIZE "
|
||||||
|
+ "FROM system_.sys_users_ a, system_.sys_tables_ b, x$seq c "
|
||||||
|
+ "WHERE a.user_id = b.user_id AND b.table_oid = c.seq_oid AND a.user_name <> 'SYSTEM_' AND b.table_type = 'S' "
|
||||||
|
+ "ORDER BY 1,2";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SequenceInformationExtractor getSequenceInformationExtractor() {
|
||||||
|
return SequenceInformationExtractorAltibaseDatabaseImpl.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LimitHandler getLimitHandler() {
|
||||||
|
return AltibaseLimitHandler.INSTANCE;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsCurrentTimestampSelection() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCurrentTimestampSelectString() {
|
||||||
|
return "select sysdate from dual";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCurrentTimestampSelectStringCallable() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getCascadeConstraintsString() {
|
||||||
|
return " cascade constraints";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsValuesListForInsert() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsOrderByInSubquery() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsWindowFunctions() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NationalizationSupport getNationalizationSupport() {
|
||||||
|
return NationalizationSupport.IMPLICIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsTemporaryTables() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsTemporaryTablePrimaryKey() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean supportsPredicateAsExpression() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String translateExtractField(TemporalUnit unit) {
|
||||||
|
switch ( unit ) {
|
||||||
|
case DAY_OF_MONTH: return "day";
|
||||||
|
case DAY_OF_YEAR: return "dayofyear";
|
||||||
|
case DAY_OF_WEEK: return "dayofweek";
|
||||||
|
default: return super.translateExtractField( unit );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SQLExceptionConversionDelegate buildSQLExceptionConversionDelegate() {
|
||||||
|
return (sqlException, message, sql) -> {
|
||||||
|
|
||||||
|
final int errorCode = JdbcExceptionHelper.extractErrorCode(sqlException );
|
||||||
|
|
||||||
|
if ( errorCode == 334393 || errorCode == 4164) {
|
||||||
|
// 334393 - response timeout , 4164 - query timeout.
|
||||||
|
return new LockTimeoutException(message, sqlException, sql );
|
||||||
|
}
|
||||||
|
|
||||||
|
// 200820 - Cannot insert NULL or update to NULL
|
||||||
|
// 69720 - Unique constraint violated
|
||||||
|
// 200823 - foreign key constraint violation
|
||||||
|
// 200822 - failed on update or delete by foreign key constraint violation
|
||||||
|
if ( errorCode == 200820 || errorCode == 69720 || errorCode == 200823 || errorCode == 200822 ) {
|
||||||
|
final String constraintName = getViolatedConstraintNameExtractor().extractConstraintName( sqlException );
|
||||||
|
|
||||||
|
return new ConstraintViolationException(message, sqlException, sql, constraintName );
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,178 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
|
import org.hibernate.query.sqm.ComparisonOperator;
|
||||||
|
import org.hibernate.query.sqm.FrameExclusion;
|
||||||
|
import org.hibernate.query.sqm.FrameKind;
|
||||||
|
import org.hibernate.sql.ast.SqlAstJoinType;
|
||||||
|
import org.hibernate.sql.ast.spi.AbstractSqlAstTranslator;
|
||||||
|
import org.hibernate.sql.ast.tree.Statement;
|
||||||
|
import org.hibernate.sql.ast.tree.expression.Expression;
|
||||||
|
import org.hibernate.sql.ast.tree.expression.FunctionExpression;
|
||||||
|
import org.hibernate.sql.ast.tree.expression.Literal;
|
||||||
|
import org.hibernate.sql.ast.tree.expression.Over;
|
||||||
|
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
|
||||||
|
import org.hibernate.sql.ast.tree.expression.Summarization;
|
||||||
|
import org.hibernate.sql.ast.tree.from.QueryPartTableReference;
|
||||||
|
import org.hibernate.sql.ast.tree.from.TableGroupJoin;
|
||||||
|
import org.hibernate.sql.ast.tree.from.ValuesTableReference;
|
||||||
|
import org.hibernate.sql.ast.tree.predicate.BooleanExpressionPredicate;
|
||||||
|
import org.hibernate.sql.ast.tree.predicate.Predicate;
|
||||||
|
import org.hibernate.sql.ast.tree.select.QueryPart;
|
||||||
|
import org.hibernate.sql.ast.tree.select.QuerySpec;
|
||||||
|
import org.hibernate.sql.exec.spi.JdbcOperation;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A SQL AST translator for Altibase.
|
||||||
|
*
|
||||||
|
* @author Geoffrey Park
|
||||||
|
*/
|
||||||
|
public class AltibaseSqlAstTranslator<T extends JdbcOperation> extends AbstractSqlAstTranslator<T> {
|
||||||
|
|
||||||
|
public AltibaseSqlAstTranslator(SessionFactoryImplementor sessionFactory, Statement statement) {
|
||||||
|
super( sessionFactory, statement );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitOffsetFetchClause(QueryPart queryPart) {
|
||||||
|
if ( !isRowNumberingCurrentQueryPart() ) {
|
||||||
|
// Use limit because Altibase does not support fetch first rows only.
|
||||||
|
renderCombinedLimitClause( queryPart );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderComparison(Expression lhs, ComparisonOperator operator, Expression rhs) {
|
||||||
|
// Altibase does not support is distinct from clause. So override renderComparion() and use not exists
|
||||||
|
renderComparisonEmulateIntersect( lhs, operator, rhs );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitOver(Over<?> over) {
|
||||||
|
final Expression expression = over.getExpression();
|
||||||
|
if ( expression instanceof FunctionExpression && "row_number".equals( ( (FunctionExpression) expression ).getFunctionName() ) ) {
|
||||||
|
if ( over.getPartitions().isEmpty() && over.getOrderList().isEmpty()
|
||||||
|
&& over.getStartKind() == FrameKind.UNBOUNDED_PRECEDING
|
||||||
|
&& over.getEndKind() == FrameKind.CURRENT_ROW
|
||||||
|
&& over.getExclusion() == FrameExclusion.NO_OTHERS ) {
|
||||||
|
// Altibase doesn't allow an empty over clause for the row_number() function,
|
||||||
|
append( "row_number() over(order by 1)" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.visitOver( over );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitQuerySpec(QuerySpec querySpec) {
|
||||||
|
if ( shouldEmulateFetchClause( querySpec ) ) {
|
||||||
|
// Altibase does not support row_with_ties
|
||||||
|
emulateFetchOffsetWithWindowFunctions( querySpec, true );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
super.visitQuerySpec( querySpec );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected boolean shouldEmulateFetchClause(QueryPart queryPart) {
|
||||||
|
// Check if current query part is already row numbering to avoid infinite recursion
|
||||||
|
return useOffsetFetchClause( queryPart ) && getQueryPartForRowNumbering() != queryPart
|
||||||
|
&& getDialect().supportsWindowFunctions() && !isRowsOnlyFetchClauseType( queryPart );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void renderTableGroupJoin(TableGroupJoin tableGroupJoin, List<TableGroupJoin> tableGroupJoinCollector) {
|
||||||
|
// Use join instead because Altibase does not support cross apply
|
||||||
|
appendSql( WHITESPACE );
|
||||||
|
if ( tableGroupJoin.getJoinType() != SqlAstJoinType.CROSS ) {
|
||||||
|
// No support for cross joins, so we emulate it with an inner join and always true on condition
|
||||||
|
appendSql( tableGroupJoin.getJoinType().getText() );
|
||||||
|
}
|
||||||
|
appendSql( "join " );
|
||||||
|
|
||||||
|
final Predicate predicate;
|
||||||
|
if ( tableGroupJoin.getPredicate() == null ) {
|
||||||
|
predicate = new BooleanExpressionPredicate( new QueryLiteral<>( true, getBooleanType() ) );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
predicate = tableGroupJoin.getPredicate();
|
||||||
|
}
|
||||||
|
if ( predicate != null && !predicate.isEmpty() ) {
|
||||||
|
renderTableGroup( tableGroupJoin.getJoinedGroup(), predicate, tableGroupJoinCollector );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
renderTableGroup( tableGroupJoin.getJoinedGroup(), null, tableGroupJoinCollector );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderPartitionItem(Expression expression) {
|
||||||
|
if ( expression instanceof Literal ) {
|
||||||
|
appendSql( "'0' || '0'" );
|
||||||
|
}
|
||||||
|
else if ( expression instanceof Summarization ) {
|
||||||
|
// This could theoretically be emulated by rendering all grouping variations of the query and
|
||||||
|
// connect them via union all but that's probably pretty inefficient and would have to happen
|
||||||
|
// on the query spec level
|
||||||
|
throw new UnsupportedOperationException( "Summarization is not supported by DBMS!" );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
expression.accept( this );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void renderOffsetExpression(Expression offsetExpression) {
|
||||||
|
// Altibase offset starts from 1
|
||||||
|
appendSql( "1+" );
|
||||||
|
offsetExpression.accept( this );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitValuesTableReference(ValuesTableReference tableReference) {
|
||||||
|
emulateValuesTableReferenceColumnAliasing( tableReference );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void visitQueryPartTableReference(QueryPartTableReference tableReference) {
|
||||||
|
emulateQueryPartTableReferenceColumnAliasing( tableReference );
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getFromDual() {
|
||||||
|
return " from dual";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getFromDualForSelectOnly() {
|
||||||
|
return getFromDual();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean needsRecursiveKeywordInWithClause() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean supportsRowValueConstructorSyntaxInQuantifiedPredicates() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean supportsWithClauseInSubquery() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected boolean supportsSimpleQueryGrouping() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -113,6 +113,21 @@ public enum CommunityDatabase {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
ALTIBASE {
|
||||||
|
@Override
|
||||||
|
public Dialect createDialect(DialectResolutionInfo info) {
|
||||||
|
return new AltibaseDialect( info );
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public boolean productNameMatches(String databaseName) {
|
||||||
|
return "Altibase".equalsIgnoreCase( databaseName );
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public String getDriverClassName(String jdbcUrl) {
|
||||||
|
return "Altibase.jdbc.driver.AltibaseDriver";
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
MIMER {
|
MIMER {
|
||||||
@Override
|
@Override
|
||||||
public Dialect createDialect(DialectResolutionInfo info) {
|
public Dialect createDialect(DialectResolutionInfo info) {
|
||||||
|
|
|
@ -32,6 +32,8 @@ public class CommunityDialectSelector implements DialectSelector {
|
||||||
return Cache71Dialect.class;
|
return Cache71Dialect.class;
|
||||||
case "CUBRID":
|
case "CUBRID":
|
||||||
return CUBRIDDialect.class;
|
return CUBRIDDialect.class;
|
||||||
|
case "Altibase":
|
||||||
|
return AltibaseDialect.class;
|
||||||
case "DerbyTenFive":
|
case "DerbyTenFive":
|
||||||
return DerbyTenFiveDialect.class;
|
return DerbyTenFiveDialect.class;
|
||||||
case "DerbyTenSix":
|
case "DerbyTenSix":
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
* 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>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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.community.dialect.pagination;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.pagination.LimitLimitHandler;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Limit handler for {@link org.hibernate.community.dialect.AltibaseDialect}.
|
||||||
|
*
|
||||||
|
* @author Geoffrey park
|
||||||
|
*/
|
||||||
|
public class AltibaseLimitHandler extends LimitLimitHandler {
|
||||||
|
public static final AltibaseLimitHandler INSTANCE = new AltibaseLimitHandler();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String limitClause(boolean hasFirstRow) {
|
||||||
|
return hasFirstRow ? " limit 1+?,?" : " limit ?";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String offsetOnlyClause() {
|
||||||
|
return " limit 1+?," + Integer.MAX_VALUE;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect.sequence;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.sequence.NextvalSequenceSupport;
|
||||||
|
import org.hibernate.dialect.sequence.SequenceSupport;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sequence support for {@link org.hibernate.community.dialect.AltibaseDialect}.
|
||||||
|
*
|
||||||
|
* @author Geoffrey park
|
||||||
|
*/
|
||||||
|
public class AltibaseSequenceSupport extends NextvalSequenceSupport {
|
||||||
|
|
||||||
|
public static final SequenceSupport INSTANCE = new AltibaseSequenceSupport();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getFromDual() {
|
||||||
|
return " from dual";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean sometimesNeedsStartingValue() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect.sequence;
|
||||||
|
|
||||||
|
import org.hibernate.tool.schema.extract.internal.SequenceInformationExtractorLegacyImpl;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An SequenceInfomation for Altibase
|
||||||
|
*
|
||||||
|
* @author Geoffrey Park
|
||||||
|
*/
|
||||||
|
public class SequenceInformationExtractorAltibaseDatabaseImpl extends SequenceInformationExtractorLegacyImpl {
|
||||||
|
/**
|
||||||
|
* Singleton access
|
||||||
|
*/
|
||||||
|
public static final SequenceInformationExtractorAltibaseDatabaseImpl INSTANCE = new SequenceInformationExtractorAltibaseDatabaseImpl();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceNameColumn() {
|
||||||
|
return "sequence_name";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceCatalogColumn() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceSchemaColumn() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceStartValueColumn() {
|
||||||
|
return "start_value";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceMinValueColumn() {
|
||||||
|
return "min_value";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceMaxValueColumn() {
|
||||||
|
return "max_value";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String sequenceIncrementColumn() {
|
||||||
|
return "increment_by";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect;
|
||||||
|
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import org.hibernate.dialect.DatabaseVersion;
|
||||||
|
import org.hibernate.dialect.Dialect;
|
||||||
|
import org.hibernate.query.spi.Limit;
|
||||||
|
|
||||||
|
import org.hibernate.testing.junit4.BaseUnitTestCase;
|
||||||
|
import org.junit.After;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit test of the behavior of the AltibaseDialect utility methods
|
||||||
|
*
|
||||||
|
* @author Geoffrey Park
|
||||||
|
*/
|
||||||
|
public class AltibaseDialectTestCase extends BaseUnitTestCase {
|
||||||
|
private Dialect dialect;
|
||||||
|
|
||||||
|
@Before
|
||||||
|
public void setUp() {
|
||||||
|
dialect = new AltibaseDialect( DatabaseVersion.make( 7, 3 ));
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
public void tearDown() {
|
||||||
|
dialect = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSupportLimits() {
|
||||||
|
assertTrue(dialect.getLimitHandler().supportsLimit());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSelectWithLimitOnly() {
|
||||||
|
assertEquals( "select c1, c2 from t1 order by c1, c2 desc limit ?",
|
||||||
|
dialect.getLimitHandler().processSql("select c1, c2 from t1 order by c1, c2 desc",
|
||||||
|
toRowSelection( 0, 15 ) ).toLowerCase( Locale.ROOT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSelectWithOffsetLimit() {
|
||||||
|
assertEquals( "select c1, c2 from t1 order by c1, c2 desc limit 1+?,?",
|
||||||
|
dialect.getLimitHandler().processSql("select c1, c2 from t1 order by c1, c2 desc",
|
||||||
|
toRowSelection( 5, 15 ) ).toLowerCase(Locale.ROOT));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSelectWithNoLimit() {
|
||||||
|
assertEquals( "select c1, c2 from t1 order by c1, c2 desc",
|
||||||
|
dialect.getLimitHandler().processSql("select c1, c2 from t1 order by c1, c2 desc",
|
||||||
|
null ).toLowerCase(Locale.ROOT));
|
||||||
|
}
|
||||||
|
|
||||||
|
private Limit toRowSelection(int firstRow, int maxRows) {
|
||||||
|
Limit selection = new Limit();
|
||||||
|
selection.setFirstRow( firstRow );
|
||||||
|
selection.setMaxRows( maxRows );
|
||||||
|
return selection;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,142 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect;
|
||||||
|
|
||||||
|
import jakarta.persistence.Tuple;
|
||||||
|
import org.hibernate.query.Query;
|
||||||
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.junit.jupiter.api.*;
|
||||||
|
|
||||||
|
import java.sql.Date;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.time.Month;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.is;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
|
|
||||||
|
@DomainModel(
|
||||||
|
annotatedClasses = { Person.class },
|
||||||
|
xmlMappings = "org/hibernate/community/dialect/Person.hbm.xml"
|
||||||
|
)
|
||||||
|
@RequiresDialect(AltibaseDialect.class)
|
||||||
|
@SessionFactory
|
||||||
|
public class AltibaseFunctionsTest {
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
public void createTestData(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final Person person = new Person();
|
||||||
|
person.setId( 1 );
|
||||||
|
person.setName( "test.1" );
|
||||||
|
ZonedDateTime zonedDateTime = ZonedDateTime.of(
|
||||||
|
1990, Month.APRIL.getValue(), 15,
|
||||||
|
0, 0, 0, 0,
|
||||||
|
ZoneId.of( "UTC" )
|
||||||
|
);
|
||||||
|
person.setBirthDate( new java.sql.Date( zonedDateTime.toInstant().toEpochMilli() ) ) ;
|
||||||
|
person.setWeightInKilograms( 66.0 );
|
||||||
|
person.setHeightInMeters( 167.1 );
|
||||||
|
person.setIsMarried( false );
|
||||||
|
byte[] arry = new byte[ 15 ];
|
||||||
|
for (int i = 0; i < arry.length; i++)
|
||||||
|
{
|
||||||
|
arry[i] = (byte)i;
|
||||||
|
}
|
||||||
|
person.setBinaryData( session.getLobHelper().createBlob(arry) );
|
||||||
|
person.setComments( session.getLobHelper().createClob("blahblah") );
|
||||||
|
session.save( person );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterAll
|
||||||
|
public static void dropTestData(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
session.createQuery( "delete Person" ).executeUpdate();
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSimpleFunction(SessionFactoryScope scope) throws Throwable {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final Person result = session
|
||||||
|
.createQuery( "from Person", Person.class )
|
||||||
|
.uniqueResult();
|
||||||
|
|
||||||
|
assertNotNull( result );
|
||||||
|
assertThat( result.getId(), is( 1 ) );
|
||||||
|
assertThat( result.getName(), is( "test.1" ) );
|
||||||
|
Date birthDate = result.getBirthDate();
|
||||||
|
assertThat( birthDate.toString(), is( "1990-04-15" ) );
|
||||||
|
assertThat( result.getWeightInKilograms(), is( 66.0 ) );
|
||||||
|
assertThat( result.getHeightInMeters(), is( 167.1 ) );
|
||||||
|
assertThat( result.getIsMarried(), is( false ) );
|
||||||
|
try {
|
||||||
|
assertThat( result.getBinaryData().length(), is( 15L ));
|
||||||
|
assertThat( result.getComments().length(), is( 8L ));
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLocateFunction(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final Person result = session
|
||||||
|
.createQuery( "select p from Person p where locate('.', p.name) > 0", Person.class )
|
||||||
|
.uniqueResult();
|
||||||
|
assertNotNull( result );
|
||||||
|
assertThat( result.getName(), is( "test.1" ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSubstringFunction(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final Person result = session
|
||||||
|
.createQuery( "select p from Person p where substring(p.name, 1, 4) = 'test'", Person.class )
|
||||||
|
.uniqueResult();
|
||||||
|
assertNotNull( result );
|
||||||
|
assertThat( result.getName(), is( "test.1" ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBitLengthFunction(SessionFactoryScope scope) {
|
||||||
|
scope.inTransaction(
|
||||||
|
session -> {
|
||||||
|
final Query<Tuple> query = session.createQuery(
|
||||||
|
"select bit_length(p.comments) from Person p",
|
||||||
|
Tuple.class
|
||||||
|
);
|
||||||
|
final List<Tuple> results = query.getResultList();
|
||||||
|
assertThat( results.size(), is( 1 ) );
|
||||||
|
final Tuple testEntity = results.get( 0 );
|
||||||
|
assertThat( testEntity.get( 0, Integer.class ), is( 64 ) );
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -23,6 +23,7 @@ public class CommunityDialectSelectorTest {
|
||||||
|
|
||||||
testDialectNamingResolution( Cache71Dialect.class );
|
testDialectNamingResolution( Cache71Dialect.class );
|
||||||
testDialectNamingResolution( CUBRIDDialect.class );
|
testDialectNamingResolution( CUBRIDDialect.class );
|
||||||
|
testDialectNamingResolution( AltibaseDialect.class );
|
||||||
|
|
||||||
testDialectNamingResolution( DerbyTenFiveDialect.class );
|
testDialectNamingResolution( DerbyTenFiveDialect.class );
|
||||||
testDialectNamingResolution( DerbyTenSixDialect.class );
|
testDialectNamingResolution( DerbyTenSixDialect.class );
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!--
|
||||||
|
~ 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
|
||||||
|
-->
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
|
||||||
|
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping package="org.hibernate.community.dialect">
|
||||||
|
<class name="Person" table="person">
|
||||||
|
<id name="id" column="id" type="int">
|
||||||
|
<generator class="sequence">
|
||||||
|
<param name="sequence">PERSON_SEQ</param>
|
||||||
|
</generator>
|
||||||
|
</id>
|
||||||
|
<property name="name" column="name" type="string"/>
|
||||||
|
<property name="birthDate" column="birth_date" type="date"/>
|
||||||
|
<property name="weightInKilograms" column="weight_kg" type="double"/>
|
||||||
|
<property name="heightInMeters" column="height_m" type="double"/>
|
||||||
|
<property name="isMarried" column="is_married" type="boolean"/>
|
||||||
|
<property name="binaryData" column="binary_data" type="blob"/>
|
||||||
|
<property name="comments" column="comments" type="clob"/>
|
||||||
|
</class>
|
||||||
|
</hibernate-mapping>
|
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* 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.community.dialect;
|
||||||
|
|
||||||
|
import java.sql.*;
|
||||||
|
|
||||||
|
public class Person {
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
private Date birthDate;
|
||||||
|
private double weightInKilograms;
|
||||||
|
private double heightInMeters;
|
||||||
|
private boolean isMarried;
|
||||||
|
private Blob binaryData;
|
||||||
|
private Clob comments;
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBirthDate(Date birthDate) {
|
||||||
|
this.birthDate = birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getBirthDate() {
|
||||||
|
return birthDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWeightInKilograms(double weightInKilograms) {
|
||||||
|
this.weightInKilograms = weightInKilograms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIsMarried(boolean isMarried) {
|
||||||
|
this.isMarried = isMarried;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getWeightInKilograms() {
|
||||||
|
return weightInKilograms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeightInMeters(double heightInMeters) {
|
||||||
|
this.heightInMeters = heightInMeters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getHeightInMeters() {
|
||||||
|
return heightInMeters;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getIsMarried() {
|
||||||
|
return isMarried;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blob getBinaryData() {
|
||||||
|
return binaryData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBinaryData(Blob binaryData) {
|
||||||
|
this.binaryData = binaryData;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Clob getComments() {
|
||||||
|
return comments;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComments(Clob comments) {
|
||||||
|
this.comments = comments;
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,6 +15,7 @@ import java.util.Date;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
import org.hibernate.dialect.PostgresPlusDialect;
|
import org.hibernate.dialect.PostgresPlusDialect;
|
||||||
|
@ -45,6 +46,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "HHH-6834")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "HHH-6834")
|
||||||
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "HHH-6834")
|
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "HHH-6834")
|
||||||
@SkipForDialect(dialectClass = SybaseASEDialect.class, reason = "jConnect reports the type code 11 for bigdatetime columns, which is an unknown type code..")
|
@SkipForDialect(dialectClass = SybaseASEDialect.class, reason = "jConnect reports the type code 11 for bigdatetime columns, which is an unknown type code..")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase reports the type code 93 for date columns")
|
||||||
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExpectedLobUsagePattern.class, jiraKey = "HHH-6834")
|
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsExpectedLobUsagePattern.class, jiraKey = "HHH-6834")
|
||||||
@DomainModel(
|
@DomainModel(
|
||||||
annotatedClasses = { SomeEntity.class, SomeOtherEntity.class }
|
annotatedClasses = { SomeEntity.class, SomeOtherEntity.class }
|
||||||
|
|
|
@ -7,11 +7,13 @@
|
||||||
package org.hibernate.orm.test.annotations.idclass.xml;
|
package org.hibernate.orm.test.annotations.idclass.xml;
|
||||||
|
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.query.Query;
|
import org.hibernate.query.Query;
|
||||||
|
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
@ -26,6 +28,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
annotatedClasses = HabitatSpeciesLink.class,
|
annotatedClasses = HabitatSpeciesLink.class,
|
||||||
xmlMappings = "org/hibernate/orm/test/annotations/idclass/xml/HabitatSpeciesLink.xml"
|
xmlMappings = "org/hibernate/orm/test/annotations/idclass/xml/HabitatSpeciesLink.xml"
|
||||||
)
|
)
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "'link' is not escaped even though autoQuoteKeywords is enabled" )
|
||||||
@SessionFactory
|
@SessionFactory
|
||||||
public class IdClassXmlTest {
|
public class IdClassXmlTest {
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.orm.test.annotations.manytoonewithformula;
|
package org.hibernate.orm.test.annotations.manytoonewithformula;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.HSQLDialect;
|
import org.hibernate.dialect.HSQLDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
import org.hibernate.dialect.SQLServerDialect;
|
import org.hibernate.dialect.SQLServerDialect;
|
||||||
|
@ -149,6 +150,7 @@ public class ManyToOneWithFormulaTest {
|
||||||
@Test
|
@Test
|
||||||
@SkipForDialect( dialectClass =HSQLDialect.class, reason = "The used join conditions does not work in HSQLDB. See HHH-4497." )
|
@SkipForDialect( dialectClass =HSQLDialect.class, reason = "The used join conditions does not work in HSQLDB. See HHH-4497." )
|
||||||
@SkipForDialect( dialectClass = OracleDialect.class, reason = "Oracle do not support 'substring' function" )
|
@SkipForDialect( dialectClass = OracleDialect.class, reason = "Oracle do not support 'substring' function" )
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = " Altibase char type returns with trailing spaces")
|
||||||
public void testManyToOneFromNonPkToNonPk(SessionFactoryScope scope) {
|
public void testManyToOneFromNonPkToNonPk(SessionFactoryScope scope) {
|
||||||
// also tests usage of the stand-alone @JoinFormula annotation
|
// also tests usage of the stand-alone @JoinFormula annotation
|
||||||
// (i.e. not wrapped within @JoinColumnsOrFormulas)
|
// (i.e. not wrapped within @JoinColumnsOrFormulas)
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
import org.hibernate.testing.orm.junit.BootstrapServiceRegistry;
|
import org.hibernate.testing.orm.junit.BootstrapServiceRegistry;
|
||||||
import org.hibernate.testing.orm.junit.BootstrapServiceRegistry.JavaService;
|
import org.hibernate.testing.orm.junit.BootstrapServiceRegistry.JavaService;
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
|
import org.hibernate.testing.orm.junit.RequiresDialect;
|
||||||
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
@ -40,6 +41,7 @@ import static org.hamcrest.Matchers.instanceOf;
|
||||||
)
|
)
|
||||||
@DomainModel
|
@DomainModel
|
||||||
@SessionFactory
|
@SessionFactory
|
||||||
|
@RequiresDialect(H2Dialect.class)
|
||||||
public class DiscoveredDialectResolverTests {
|
public class DiscoveredDialectResolverTests {
|
||||||
@Test
|
@Test
|
||||||
public void testRegistration(SessionFactoryScope scope) {
|
public void testRegistration(SessionFactoryScope scope) {
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.hibernate.annotations.Filter;
|
||||||
import org.hibernate.annotations.FilterDef;
|
import org.hibernate.annotations.FilterDef;
|
||||||
import org.hibernate.annotations.JdbcTypeCode;
|
import org.hibernate.annotations.JdbcTypeCode;
|
||||||
import org.hibernate.annotations.ParamDef;
|
import org.hibernate.annotations.ParamDef;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.community.dialect.FirebirdDialect;
|
import org.hibernate.community.dialect.FirebirdDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
|
@ -87,6 +88,7 @@ public class FilterParameterTests {
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, matchSubTypes = true, reason = "Cockroach silently converts a boolean to string types")
|
@SkipForDialect(dialectClass = CockroachDialect.class, matchSubTypes = true, reason = "Cockroach silently converts a boolean to string types")
|
||||||
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "PostgresPlus silently converts a boolean to string types")
|
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "PostgresPlus silently converts a boolean to string types")
|
||||||
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Firebird silently converts a boolean to string")
|
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Firebird silently converts a boolean to string")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase silently converts a boolean to string")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 23, reason = "Oracle 23 interprets Y and T as true and N and F as false, so this works")
|
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 23, reason = "Oracle 23 interprets Y and T as true and N and F as false, so this works")
|
||||||
public void testYesNoMismatch(SessionFactoryScope scope) {
|
public void testYesNoMismatch(SessionFactoryScope scope) {
|
||||||
scope.inTransaction( (session) -> {
|
scope.inTransaction( (session) -> {
|
||||||
|
@ -136,6 +138,7 @@ public class FilterParameterTests {
|
||||||
@SkipForDialect(dialectClass = MariaDBDialect.class, reason = "MariaDB silently converts a boolean to integral types")
|
@SkipForDialect(dialectClass = MariaDBDialect.class, reason = "MariaDB silently converts a boolean to integral types")
|
||||||
@SkipForDialect(dialectClass = TiDBDialect.class, reason = "TiDB silently converts a boolean to integral types")
|
@SkipForDialect(dialectClass = TiDBDialect.class, reason = "TiDB silently converts a boolean to integral types")
|
||||||
@SkipForDialect(dialectClass = SQLServerDialect.class, reason = "SQL Server silently converts a boolean to integral types")
|
@SkipForDialect(dialectClass = SQLServerDialect.class, reason = "SQL Server silently converts a boolean to integral types")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase silently converts a boolean to integral types")
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase silently converts a boolean to integral types")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase silently converts a boolean to integral types")
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA silently converts a boolean to integral types")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA silently converts a boolean to integral types")
|
||||||
@SkipForDialect(dialectClass = FirebirdDialect.class, matchSubTypes = true, reason = "Firebird silently converts a boolean to integral types")
|
@SkipForDialect(dialectClass = FirebirdDialect.class, matchSubTypes = true, reason = "Firebird silently converts a boolean to integral types")
|
||||||
|
|
|
@ -22,8 +22,10 @@ import org.hibernate.annotations.FetchMode;
|
||||||
import org.hibernate.annotations.SQLRestriction;
|
import org.hibernate.annotations.SQLRestriction;
|
||||||
import org.hibernate.annotations.SortNatural;
|
import org.hibernate.annotations.SortNatural;
|
||||||
import org.hibernate.annotations.Where;
|
import org.hibernate.annotations.Where;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
|
|
||||||
import org.hibernate.testing.TestForIssue;
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -31,6 +33,7 @@ import org.junit.jupiter.api.Test;
|
||||||
* @author Nathan Xu
|
* @author Nathan Xu
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-14227")
|
@TestForIssue(jiraKey = "HHH-14227")
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public class InsertOrderingSelfReferenceTest extends BaseInsertOrderingTest {
|
public class InsertOrderingSelfReferenceTest extends BaseInsertOrderingTest {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -17,11 +17,13 @@ import jakarta.persistence.criteria.Root;
|
||||||
|
|
||||||
import org.hibernate.Hibernate;
|
import org.hibernate.Hibernate;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.jdbc.AbstractWork;
|
import org.hibernate.jdbc.AbstractWork;
|
||||||
|
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
@ -39,6 +41,7 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
public class JoinTest {
|
public class JoinTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "In line view in left join is not possible in Altibase")
|
||||||
public void testSequentialSelects(SessionFactoryScope scope) {
|
public void testSequentialSelects(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
s -> {
|
s -> {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import jakarta.persistence.Inheritance;
|
||||||
import jakarta.persistence.InheritanceType;
|
import jakarta.persistence.InheritanceType;
|
||||||
import jakarta.persistence.Table;
|
import jakarta.persistence.Table;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
|
import org.hibernate.persister.entity.JoinedSubclassEntityPersister;
|
||||||
|
|
||||||
|
@ -22,6 +23,7 @@ import org.hibernate.testing.TestForIssue;
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
@ -44,6 +46,7 @@ import static org.junit.jupiter.api.Assertions.fail;
|
||||||
public class JoinedSubclassWithExplicitDiscriminatorTest {
|
public class JoinedSubclassWithExplicitDiscriminatorTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is a keyword in Altibase and escaped here")
|
||||||
public void metadataAssertions(SessionFactoryScope scope) {
|
public void metadataAssertions(SessionFactoryScope scope) {
|
||||||
EntityPersister p = scope.getSessionFactory().getMappingMetamodel().getEntityDescriptor(Dog.class.getName());
|
EntityPersister p = scope.getSessionFactory().getMappingMetamodel().getEntityDescriptor(Dog.class.getName());
|
||||||
assertNotNull( p );
|
assertNotNull( p );
|
||||||
|
|
|
@ -15,6 +15,7 @@ import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
import org.hibernate.dialect.PostgresPlusDialect;
|
import org.hibernate.dialect.PostgresPlusDialect;
|
||||||
|
@ -308,6 +309,7 @@ public class ExpressionsTest extends AbstractMetamodelSpecificTest {
|
||||||
|
|
||||||
@Test @SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "numeric overflows")
|
@Test @SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "numeric overflows")
|
||||||
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "does not support extract(epoch)")
|
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "does not support extract(epoch)")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "datediff overflow limits")
|
||||||
public void testDateTimeOperations() {
|
public void testDateTimeOperations() {
|
||||||
HibernateCriteriaBuilder builder = (HibernateCriteriaBuilder) this.builder;
|
HibernateCriteriaBuilder builder = (HibernateCriteriaBuilder) this.builder;
|
||||||
doInJPA(
|
doInJPA(
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.hibernate.LockOptions;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.TransactionException;
|
import org.hibernate.TransactionException;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.community.dialect.FirebirdDialect;
|
import org.hibernate.community.dialect.FirebirdDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
|
@ -101,6 +102,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
comment = "Test verifies proper exception throwing when a lock timeout is specified.",
|
comment = "Test verifies proper exception throwing when a lock timeout is specified.",
|
||||||
jiraKey = "HHH-7252" )
|
jiraKey = "HHH-7252" )
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase close socket after lock timeout occurred")
|
||||||
public void testFindWithPessimisticWriteLockTimeoutException() {
|
public void testFindWithPessimisticWriteLockTimeoutException() {
|
||||||
Lock lock = new Lock();
|
Lock lock = new Lock();
|
||||||
lock.setName( "name" );
|
lock.setName( "name" );
|
||||||
|
@ -150,6 +152,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
comment = "Test verifies proper exception throwing when a lock timeout is specified for Query#getSingleResult.",
|
comment = "Test verifies proper exception throwing when a lock timeout is specified for Query#getSingleResult.",
|
||||||
jiraKey = "HHH-13364" )
|
jiraKey = "HHH-13364" )
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase close socket after lock timeout occurred")
|
||||||
public void testQuerySingleResultPessimisticWriteLockTimeoutException() {
|
public void testQuerySingleResultPessimisticWriteLockTimeoutException() {
|
||||||
Lock lock = new Lock();
|
Lock lock = new Lock();
|
||||||
lock.setName( "name" );
|
lock.setName( "name" );
|
||||||
|
@ -196,6 +199,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
comment = "Test verifies proper exception throwing when a lock timeout is specified for Query#getResultList.",
|
comment = "Test verifies proper exception throwing when a lock timeout is specified for Query#getResultList.",
|
||||||
jiraKey = "HHH-13364" )
|
jiraKey = "HHH-13364" )
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase close socket after lock timeout occurred")
|
||||||
public void testQueryResultListPessimisticWriteLockTimeoutException() {
|
public void testQueryResultListPessimisticWriteLockTimeoutException() {
|
||||||
Lock lock = new Lock();
|
Lock lock = new Lock();
|
||||||
lock.setName( "name" );
|
lock.setName( "name" );
|
||||||
|
@ -245,6 +249,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
comment = "Test verifies proper exception throwing when a lock timeout is specified for NamedQuery#getResultList.",
|
comment = "Test verifies proper exception throwing when a lock timeout is specified for NamedQuery#getResultList.",
|
||||||
jiraKey = "HHH-13364" )
|
jiraKey = "HHH-13364" )
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase close socket after lock timeout occurred")
|
||||||
public void testNamedQueryResultListPessimisticWriteLockTimeoutException() {
|
public void testNamedQueryResultListPessimisticWriteLockTimeoutException() {
|
||||||
Lock lock = new Lock();
|
Lock lock = new Lock();
|
||||||
lock.setName( "name" );
|
lock.setName( "name" );
|
||||||
|
@ -1183,6 +1188,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
@SkipForDialect(value = AbstractHANADialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
@SkipForDialect(value = AbstractHANADialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "Cockroach supports the 'for no key update' syntax but it doesn't work")
|
@SkipForDialect(value = CockroachDialect.class, comment = "Cockroach supports the 'for no key update' syntax but it doesn't work")
|
||||||
@SkipForDialect(value = FirebirdDialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
@SkipForDialect(value = FirebirdDialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
||||||
public void testLockInsertFkTarget() {
|
public void testLockInsertFkTarget() {
|
||||||
Lock lock = new Lock();
|
Lock lock = new Lock();
|
||||||
lock.setName( "name" );
|
lock.setName( "name" );
|
||||||
|
@ -1221,6 +1227,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
@SkipForDialect(value = AbstractHANADialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
@SkipForDialect(value = AbstractHANADialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "Cockroach supports the 'for no key update' syntax but it doesn't work")
|
@SkipForDialect(value = CockroachDialect.class, comment = "Cockroach supports the 'for no key update' syntax but it doesn't work")
|
||||||
@SkipForDialect(value = FirebirdDialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
@SkipForDialect(value = FirebirdDialect.class, comment = "Seems like FK constraint checks are not compatible with exclusive locks")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "FK constraint checks are not compatible with exclusive locks")
|
||||||
public void testLockUpdateFkTarget() {
|
public void testLockUpdateFkTarget() {
|
||||||
Lock lock1 = new Lock();
|
Lock lock1 = new Lock();
|
||||||
lock1.setName( "l1" );
|
lock1.setName( "l1" );
|
||||||
|
|
|
@ -12,6 +12,7 @@ import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import jakarta.persistence.LockModeType;
|
import jakarta.persistence.LockModeType;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
import org.hibernate.orm.test.jpa.BaseEntityManagerFunctionalTestCase;
|
import org.hibernate.orm.test.jpa.BaseEntityManagerFunctionalTestCase;
|
||||||
import org.hibernate.testing.orm.jdbc.PreparedStatementSpyConnectionProvider;
|
import org.hibernate.testing.orm.jdbc.PreparedStatementSpyConnectionProvider;
|
||||||
|
@ -34,6 +35,7 @@ import static org.junit.Assert.fail;
|
||||||
*/
|
*/
|
||||||
@RequiresDialectFeature({DialectChecks.SupportsLockTimeouts.class})
|
@RequiresDialectFeature({DialectChecks.SupportsLockTimeouts.class})
|
||||||
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(value = CockroachDialect.class, comment = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not close Statement after lock timeout")
|
||||||
public class StatementIsClosedAfterALockExceptionTest extends BaseEntityManagerFunctionalTestCase {
|
public class StatementIsClosedAfterALockExceptionTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
|
|
||||||
private static final PreparedStatementSpyConnectionProvider CONNECTION_PROVIDER = new PreparedStatementSpyConnectionProvider();
|
private static final PreparedStatementSpyConnectionProvider CONNECTION_PROVIDER = new PreparedStatementSpyConnectionProvider();
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.orm.test.jpa.naturalid;
|
package org.hibernate.orm.test.jpa.naturalid;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
|
|
||||||
|
@ -25,6 +26,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
reason = "Oracle do not support identity key generation")
|
reason = "Oracle do not support identity key generation")
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true,
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true,
|
||||||
reason = "Hana do not support identity key generation")
|
reason = "Hana do not support identity key generation")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class,
|
||||||
|
reason = "Altibase do not support identity key generation")
|
||||||
public class MutableNaturalIdTest extends AbstractJPATest {
|
public class MutableNaturalIdTest extends AbstractJPATest {
|
||||||
@Override
|
@Override
|
||||||
protected Class<?>[] getAnnotatedClasses() {
|
protected Class<?>[] getAnnotatedClasses() {
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.hibernate.Session;
|
||||||
import org.hibernate.annotations.JdbcTypeCode;
|
import org.hibernate.annotations.JdbcTypeCode;
|
||||||
import org.hibernate.annotations.Nationalized;
|
import org.hibernate.annotations.Nationalized;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.community.dialect.FirebirdDialect;
|
import org.hibernate.community.dialect.FirebirdDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.AbstractTransactSQLDialect;
|
import org.hibernate.dialect.AbstractTransactSQLDialect;
|
||||||
|
@ -128,6 +129,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "No support for the bit datatype so we use tinyint")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "No support for the bit datatype so we use tinyint")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "No support for the bit datatype so we use number(1,0)")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "No support for the bit datatype so we use number(1,0)")
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, reason = "No support for the bit datatype so we use smallint")
|
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, reason = "No support for the bit datatype so we use smallint")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "No support for the bit datatype so we use char(1)")
|
||||||
public void booleanType() {
|
public void booleanType() {
|
||||||
createEntityManagerFactory( BooleanEntity.class );
|
createEntityManagerFactory( BooleanEntity.class );
|
||||||
doTest( BooleanEntity.class, true );
|
doTest( BooleanEntity.class, true );
|
||||||
|
@ -137,6 +139,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "No support for the bit datatype so we use tinyint")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "No support for the bit datatype so we use tinyint")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "No support for the bit datatype so we use number(1,0)")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "No support for the bit datatype so we use number(1,0)")
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, reason = "No support for the bit datatype so we use smallint")
|
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, reason = "No support for the bit datatype so we use smallint")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "No support for the bit datatype so we use char(1)")
|
||||||
public void bitType() {
|
public void bitType() {
|
||||||
createEntityManagerFactory( BitEntity.class );
|
createEntityManagerFactory( BitEntity.class );
|
||||||
doTest( BitEntity.class, false );
|
doTest( BitEntity.class, false );
|
||||||
|
@ -152,6 +155,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "No support for the tinyint datatype so we use smallint")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "No support for the tinyint datatype so we use smallint")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle maps tinyint to number")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle maps tinyint to number")
|
||||||
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "No support for the tinyint datatype so we use smallint")
|
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "No support for the tinyint datatype so we use smallint")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase maps tinyint to smallint")
|
||||||
public void tinyintType() {
|
public void tinyintType() {
|
||||||
createEntityManagerFactory( TinyintEntity.class );
|
createEntityManagerFactory( TinyintEntity.class );
|
||||||
doTest( TinyintEntity.class, (byte)127 );
|
doTest( TinyintEntity.class, (byte)127 );
|
||||||
|
@ -160,6 +164,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@Test
|
@Test
|
||||||
@SkipForDialect(dialectClass = H2Dialect.class, reason = "Turns floats into doubles in result sets and advertises the type as double in the metadata")
|
@SkipForDialect(dialectClass = H2Dialect.class, reason = "Turns floats into doubles in result sets and advertises the type as double in the metadata")
|
||||||
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "Turns floats into doubles in result sets and advertises the type as double in the metadata")
|
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "Turns floats into doubles in result sets and advertises the type as double in the metadata")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Turns floats into doubles in result sets and advertises the type as double in the metadata")
|
||||||
public void floatType() {
|
public void floatType() {
|
||||||
createEntityManagerFactory( FloatEntity.class );
|
createEntityManagerFactory( FloatEntity.class );
|
||||||
doTest( FloatEntity.class, 15516.125f );
|
doTest( FloatEntity.class, 15516.125f );
|
||||||
|
@ -182,6 +187,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = AbstractTransactSQLDialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of SQL Server and Sybase")
|
@SkipForDialect(dialectClass = AbstractTransactSQLDialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of SQL Server and Sybase")
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of HANA")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of HANA")
|
||||||
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Value is too big for the maximum allowed precision of Firebird")
|
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Value is too big for the maximum allowed precision of Firebird")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Value is too big for the maximum allowed precision of Altibase")
|
||||||
public void numericType() {
|
public void numericType() {
|
||||||
createEntityManagerFactory(
|
createEntityManagerFactory(
|
||||||
NumericEntity.class
|
NumericEntity.class
|
||||||
|
@ -196,6 +202,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = AbstractTransactSQLDialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of SQL Server and Sybase")
|
@SkipForDialect(dialectClass = AbstractTransactSQLDialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of SQL Server and Sybase")
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of HANA")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "Value is too big for the maximum allowed precision of HANA")
|
||||||
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Value is too big for the maximum allowed precision of Firebird")
|
@SkipForDialect(dialectClass = FirebirdDialect.class, reason = "Value is too big for the maximum allowed precision of Firebird")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Value is too big for the maximum allowed precision of Altibase")
|
||||||
public void decimalType() {
|
public void decimalType() {
|
||||||
createEntityManagerFactory( DecimalEntity.class );
|
createEntityManagerFactory( DecimalEntity.class );
|
||||||
doTest( DecimalEntity.class, new BigDecimal( "5464384284258458485484848458.48465843584584684" ) );
|
doTest( DecimalEntity.class, new BigDecimal( "5464384284258458485484848458.48465843584584684" ) );
|
||||||
|
@ -217,6 +224,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, reason = "DB2 maps LONGVARCHAR to CLOB")
|
@SkipForDialect(dialectClass = DB2Dialect.class, reason = "DB2 maps LONGVARCHAR to CLOB")
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase maps LONGVARCHAR to CLOB")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase maps LONGVARCHAR to CLOB")
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA maps LONGVARCHAR to CLOB")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA maps LONGVARCHAR to CLOB")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase maps LONGVARCHAR to CLOB")
|
||||||
public void longCharType() {
|
public void longCharType() {
|
||||||
createEntityManagerFactory(
|
createEntityManagerFactory(
|
||||||
LongvarcharEntity.class
|
LongvarcharEntity.class
|
||||||
|
@ -254,6 +262,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle maps LONGVARBINARY to BLOB")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle maps LONGVARBINARY to BLOB")
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, reason = "DB2 maps LONGVARBINARY to BLOB")
|
@SkipForDialect(dialectClass = DB2Dialect.class, reason = "DB2 maps LONGVARBINARY to BLOB")
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase maps LONGVARBINARY to BLOB")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase maps LONGVARBINARY to BLOB")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase maps LONGVARBINARY to BLOB")
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA maps LONGVARCHAR to BLOB")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA maps LONGVARCHAR to BLOB")
|
||||||
public void longBinaryType() {
|
public void longBinaryType() {
|
||||||
createEntityManagerFactory(
|
createEntityManagerFactory(
|
||||||
|
@ -288,6 +297,7 @@ public class NativeQueryResultTypeAutoDiscoveryTest {
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle maps DATE and TIME to TIMESTAMP")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle maps DATE and TIME to TIMESTAMP")
|
||||||
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "EDB maps DATE and TIME to TIMESTAMP")
|
@SkipForDialect(dialectClass = PostgresPlusDialect.class, reason = "EDB maps DATE and TIME to TIMESTAMP")
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, reason = "Sybase maps DATE and TIME to TIMESTAMP", matchSubTypes = true)
|
@SkipForDialect(dialectClass = SybaseDialect.class, reason = "Sybase maps DATE and TIME to TIMESTAMP", matchSubTypes = true)
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase maps DATE and TIME to TIMESTAMP")
|
||||||
public void dateTimeTypes() {
|
public void dateTimeTypes() {
|
||||||
createEntityManagerFactory(
|
createEntityManagerFactory(
|
||||||
DateEntity.class,
|
DateEntity.class,
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.hibernate.LockOptions;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
import org.hibernate.dialect.SQLServerDialect;
|
import org.hibernate.dialect.SQLServerDialect;
|
||||||
import org.hibernate.dialect.SybaseASEDialect;
|
import org.hibernate.dialect.SybaseASEDialect;
|
||||||
|
@ -82,6 +83,7 @@ public class LockModeTest extends BaseSessionFactoryFunctionalTest {
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Can't commit transaction because Altibase closes socket after lock timeout")
|
||||||
@SuppressWarnings( {"deprecation"})
|
@SuppressWarnings( {"deprecation"})
|
||||||
public void testLoading() {
|
public void testLoading() {
|
||||||
// open a session, begin a transaction and lock row
|
// open a session, begin a transaction and lock row
|
||||||
|
@ -99,6 +101,7 @@ public class LockModeTest extends BaseSessionFactoryFunctionalTest {
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Can't commit transaction because Altibase closes socket after lock timeout")
|
||||||
public void testCriteria() {
|
public void testCriteria() {
|
||||||
// open a session, begin a transaction and lock row
|
// open a session, begin a transaction and lock row
|
||||||
doInHibernate( this::sessionFactory, session -> {
|
doInHibernate( this::sessionFactory, session -> {
|
||||||
|
@ -122,6 +125,7 @@ public class LockModeTest extends BaseSessionFactoryFunctionalTest {
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Can't commit transaction because Altibase closes socket after lock timeout")
|
||||||
public void testCriteriaAliasSpecific() {
|
public void testCriteriaAliasSpecific() {
|
||||||
// open a session, begin a transaction and lock row
|
// open a session, begin a transaction and lock row
|
||||||
doInHibernate( this::sessionFactory, session -> {
|
doInHibernate( this::sessionFactory, session -> {
|
||||||
|
@ -147,6 +151,7 @@ public class LockModeTest extends BaseSessionFactoryFunctionalTest {
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
@RequiresDialectFeature( feature = DialectFeatureChecks.SupportsLockTimeouts.class )
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "for update clause does not imply locking. See https://github.com/cockroachdb/cockroach/issues/88995")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Can't commit transaction because Altibase closes socket after lock timeout")
|
||||||
public void testQuery() {
|
public void testQuery() {
|
||||||
// open a session, begin a transaction and lock row
|
// open a session, begin a transaction and lock row
|
||||||
doInHibernate( this::sessionFactory, session -> {
|
doInHibernate( this::sessionFactory, session -> {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
import org.hibernate.dialect.HSQLDialect;
|
import org.hibernate.dialect.HSQLDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
|
@ -41,6 +42,7 @@ import static org.hibernate.jpa.SpecHints.HINT_SPEC_QUERY_TIMEOUT;
|
||||||
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "Seems HSQLDB doesn't cancel the query if it waits for a lock?!")
|
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "Seems HSQLDB doesn't cancel the query if it waits for a lock?!")
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "Cockroach allows the concurrent access but cancels one or both transactions at the end")
|
@SkipForDialect(dialectClass = CockroachDialect.class, reason = "Cockroach allows the concurrent access but cancels one or both transactions at the end")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 11, reason = "Timeouts don't work on Oracle 11 when using a driver other than ojdbc6, but we can't test with that driver")
|
@SkipForDialect(dialectClass = OracleDialect.class, majorVersion = 11, reason = "Timeouts don't work on Oracle 11 when using a driver other than ojdbc6, but we can't test with that driver")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase does not support timeout in statement level")
|
||||||
public class FollowOnLockingTest {
|
public class FollowOnLockingTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -10,6 +10,7 @@ import java.sql.Types;
|
||||||
|
|
||||||
import org.hibernate.boot.model.FunctionContributions;
|
import org.hibernate.boot.model.FunctionContributions;
|
||||||
import org.hibernate.boot.model.FunctionContributor;
|
import org.hibernate.boot.model.FunctionContributor;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
|
@ -358,6 +359,7 @@ public class BooleanMappingTests {
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true)
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true)
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10)
|
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10)
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class)
|
||||||
public void testBooleanFunctionInPredicate(SessionFactoryScope scope) {
|
public void testBooleanFunctionInPredicate(SessionFactoryScope scope) {
|
||||||
// Not strictly relevant to boolean mappings, but test that boolean
|
// Not strictly relevant to boolean mappings, but test that boolean
|
||||||
// functions work *in a* predicate after HHH-16182
|
// functions work *in a* predicate after HHH-16182
|
||||||
|
|
|
@ -14,6 +14,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.annotations.JdbcTypeCode;
|
import org.hibernate.annotations.JdbcTypeCode;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
|
@ -165,6 +166,7 @@ public abstract class JsonMappingTests {
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA doesn't support comparing LOBs with the = operator")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA doesn't support comparing LOBs with the = operator")
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase doesn't support comparing LOBs with the = operator")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase doesn't support comparing LOBs with the = operator")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, matchSubTypes = true, reason = "Oracle doesn't support comparing JSON with the = operator")
|
@SkipForDialect(dialectClass = OracleDialect.class, matchSubTypes = true, reason = "Oracle doesn't support comparing JSON with the = operator")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase doesn't support comparing CLOBs with the = operator")
|
||||||
public void verifyComparisonWorks(SessionFactoryScope scope) {
|
public void verifyComparisonWorks(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
(session) -> {
|
(session) -> {
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.hibernate.annotations.TimeZoneColumn;
|
||||||
import org.hibernate.annotations.TimeZoneStorage;
|
import org.hibernate.annotations.TimeZoneStorage;
|
||||||
import org.hibernate.annotations.TimeZoneStorageType;
|
import org.hibernate.annotations.TimeZoneStorageType;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.H2Dialect;
|
import org.hibernate.dialect.H2Dialect;
|
||||||
|
|
||||||
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
|
import org.hibernate.testing.orm.junit.DialectFeatureChecks;
|
||||||
|
@ -29,6 +30,7 @@ import org.hibernate.testing.orm.junit.ServiceRegistry;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
import org.hibernate.testing.orm.junit.Setting;
|
import org.hibernate.testing.orm.junit.Setting;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.AfterEach;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
@ -107,12 +109,14 @@ public class TimeZoneStorageMappingTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsFormat.class)
|
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsFormat.class)
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase doesn't allow function in date format string")
|
||||||
public void testOffsetRetainedFormatAuto(SessionFactoryScope scope) {
|
public void testOffsetRetainedFormatAuto(SessionFactoryScope scope) {
|
||||||
testOffsetRetainedFormat( scope, "Auto" );
|
testOffsetRetainedFormat( scope, "Auto" );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsFormat.class)
|
@RequiresDialectFeature(feature = DialectFeatureChecks.SupportsFormat.class)
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase doesn't allow function in date format string")
|
||||||
public void testOffsetRetainedFormatColumn(SessionFactoryScope scope) {
|
public void testOffsetRetainedFormatColumn(SessionFactoryScope scope) {
|
||||||
testOffsetRetainedFormat( scope, "Column" );
|
testOffsetRetainedFormat( scope, "Column" );
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.annotations.JdbcTypeCode;
|
import org.hibernate.annotations.JdbcTypeCode;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
|
@ -140,6 +141,7 @@ public abstract class XmlMappingTests {
|
||||||
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA doesn't support comparing LOBs with the = operator")
|
@SkipForDialect(dialectClass = AbstractHANADialect.class, matchSubTypes = true, reason = "HANA doesn't support comparing LOBs with the = operator")
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase doesn't support comparing LOBs with the = operator")
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true, reason = "Sybase doesn't support comparing LOBs with the = operator")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, matchSubTypes = true, reason = "Oracle doesn't support comparing JSON with the = operator")
|
@SkipForDialect(dialectClass = OracleDialect.class, matchSubTypes = true, reason = "Oracle doesn't support comparing JSON with the = operator")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase doesn't support comparing CLOBs with the = operator")
|
||||||
public void verifyComparisonWorks(SessionFactoryScope scope) {
|
public void verifyComparisonWorks(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
(session) -> {
|
(session) -> {
|
||||||
|
|
|
@ -4,6 +4,7 @@ import jakarta.persistence.Column;
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
import jakarta.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
import org.hibernate.annotations.GeneratedColumn;
|
import org.hibernate.annotations.GeneratedColumn;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
import org.hibernate.dialect.H2Dialect;
|
import org.hibernate.dialect.H2Dialect;
|
||||||
import org.hibernate.dialect.HSQLDialect;
|
import org.hibernate.dialect.HSQLDialect;
|
||||||
|
@ -31,6 +32,7 @@ import static org.junit.Assert.assertEquals;
|
||||||
@SkipForDialect(dialectClass = SybaseASEDialect.class)
|
@SkipForDialect(dialectClass = SybaseASEDialect.class)
|
||||||
@SkipForDialect(dialectClass = PostgreSQLDialect.class, majorVersion = 10, matchSubTypes = true)
|
@SkipForDialect(dialectClass = PostgreSQLDialect.class, majorVersion = 10, matchSubTypes = true)
|
||||||
@SkipForDialect(dialectClass = PostgreSQLDialect.class, majorVersion = 11, matchSubTypes = true) // 'generated always' was added in 12
|
@SkipForDialect(dialectClass = PostgreSQLDialect.class, majorVersion = 11, matchSubTypes = true) // 'generated always' was added in 12
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "generated always is not supported in Altibase")
|
||||||
public class GeneratedAlwaysTest {
|
public class GeneratedAlwaysTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -9,11 +9,13 @@ package org.hibernate.orm.test.mapping.where;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.hibernate.annotations.SQLRestriction;
|
import org.hibernate.annotations.SQLRestriction;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
|
|
||||||
import org.hibernate.testing.orm.junit.DomainModel;
|
import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.JiraKey;
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import jakarta.persistence.DiscriminatorColumn;
|
import jakarta.persistence.DiscriminatorColumn;
|
||||||
|
@ -33,6 +35,7 @@ import jakarta.persistence.Table;
|
||||||
})
|
})
|
||||||
@SessionFactory
|
@SessionFactory
|
||||||
@JiraKey( "https://hibernate.atlassian.net/browse/HHH-14977" )
|
@JiraKey( "https://hibernate.atlassian.net/browse/HHH-14977" )
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public class DiscriminatorWhereTest {
|
public class DiscriminatorWhereTest {
|
||||||
@Test
|
@Test
|
||||||
public void testAddDiscriminatedEntityToCollectionWithWhere(SessionFactoryScope scope) {
|
public void testAddDiscriminatedEntityToCollectionWithWhere(SessionFactoryScope scope) {
|
||||||
|
|
|
@ -13,9 +13,11 @@ import org.hibernate.annotations.NotFoundAction;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
import org.hibernate.testing.jdbc.SQLStatementInspector;
|
||||||
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase;
|
||||||
import org.hibernate.testing.orm.junit.Jira;
|
import org.hibernate.testing.orm.junit.Jira;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -253,6 +255,7 @@ public class IsNullAndNotFoundTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Jira( "https://hibernate.atlassian.net/browse/HHH-17384" )
|
@Jira( "https://hibernate.atlassian.net/browse/HHH-17384" )
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "left join cannot be used inside exists clause")
|
||||||
public void testDeleteAdditionalPredicate() {
|
public void testDeleteAdditionalPredicate() {
|
||||||
inspector.clear();
|
inspector.clear();
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.dialect.SQLServerDialect;
|
import org.hibernate.dialect.SQLServerDialect;
|
||||||
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
|
import org.hibernate.query.criteria.HibernateCriteriaBuilder;
|
||||||
|
@ -214,6 +215,7 @@ public class CriteriaWindowFunctionTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, reason = "No support for percent_rank and cume_dist functions")
|
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, reason = "No support for percent_rank and cume_dist functions")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "No support for percent_rank and cume_dist functions with over clause")
|
||||||
public void testReusableWindow(SessionFactoryScope scope) {
|
public void testReusableWindow(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
package org.hibernate.orm.test.query.hql;
|
package org.hibernate.orm.test.query.hql;
|
||||||
|
|
||||||
import org.hibernate.QueryException;
|
import org.hibernate.QueryException;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
|
@ -980,6 +981,7 @@ public class FunctionTests {
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, matchSubTypes = true)
|
@SkipForDialect(dialectClass = DB2Dialect.class, matchSubTypes = true)
|
||||||
@SkipForDialect(dialectClass = DerbyDialect.class)
|
@SkipForDialect(dialectClass = DerbyDialect.class)
|
||||||
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
|
@SkipForDialect(dialectClass = SybaseDialect.class, matchSubTypes = true)
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase does not support offset of datetime")
|
||||||
public void testCastToOffsetDatetime(SessionFactoryScope scope) {
|
public void testCastToOffsetDatetime(SessionFactoryScope scope) {
|
||||||
scope.inTransaction( session -> {
|
scope.inTransaction( session -> {
|
||||||
session.createQuery("select cast(datetime 1911-10-09 12:13:14-02:00 as String)", String.class).getSingleResult();
|
session.createQuery("select cast(datetime 1911-10-09 12:13:14-02:00 as String)", String.class).getSingleResult();
|
||||||
|
@ -1007,6 +1009,7 @@ public class FunctionTests {
|
||||||
@SkipForDialect(dialectClass = DerbyDialect.class, reason = "Derby doesn't support casting to the binary types")
|
@SkipForDialect(dialectClass = DerbyDialect.class, reason = "Derby doesn't support casting to the binary types")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle treats the cast value as a hexadecimal literal")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle treats the cast value as a hexadecimal literal")
|
||||||
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "HSQL treats the cast value as a hexadecimal literal")
|
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "HSQL treats the cast value as a hexadecimal literal")
|
||||||
|
@SkipForDialect(dialectClass = AltibaseDialect.class, reason = "Altibase doesn't support casting varchar to binary")
|
||||||
public void testCastFunctionBinary(SessionFactoryScope scope) {
|
public void testCastFunctionBinary(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
@ -1030,6 +1033,7 @@ public class FunctionTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase cast to char does not do truncatation")
|
||||||
public void testCastFunctionWithLength(SessionFactoryScope scope) {
|
public void testCastFunctionWithLength(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
@ -1051,6 +1055,7 @@ public class FunctionTests {
|
||||||
@SkipForDialect(dialectClass = CockroachDialect.class, matchSubTypes = true, reason = "CockroachDB bytes doesn't have a length")
|
@SkipForDialect(dialectClass = CockroachDialect.class, matchSubTypes = true, reason = "CockroachDB bytes doesn't have a length")
|
||||||
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle cast to raw does not do truncatation")
|
@SkipForDialect(dialectClass = OracleDialect.class, reason = "Oracle cast to raw does not do truncatation")
|
||||||
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, minorVersion = 5, reason = "On this version the length of the cast to the parameter appears to be > 2")
|
@SkipForDialect(dialectClass = DB2Dialect.class, majorVersion = 10, minorVersion = 5, reason = "On this version the length of the cast to the parameter appears to be > 2")
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase cast to raw does not do truncatation")
|
||||||
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "HSQL interprets string as hex literal and produces error")
|
@SkipForDialect(dialectClass = HSQLDialect.class, reason = "HSQL interprets string as hex literal and produces error")
|
||||||
public void testCastBinaryWithLength(SessionFactoryScope scope) {
|
public void testCastBinaryWithLength(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
|
@ -1546,6 +1551,7 @@ public class FunctionTests {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@SkipForDialect( dialectClass = TiDBDialect.class, reason = "Bug in the TiDB timestampadd function (https://github.com/pingcap/tidb/issues/41052)")
|
@SkipForDialect( dialectClass = TiDBDialect.class, reason = "Bug in the TiDB timestampadd function (https://github.com/pingcap/tidb/issues/41052)")
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase returns 2025-03-31 as a result of select {2024-02-29} + 13 month")
|
||||||
public void testDurationArithmetic(SessionFactoryScope scope) {
|
public void testDurationArithmetic(SessionFactoryScope scope) {
|
||||||
scope.inTransaction(
|
scope.inTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
package org.hibernate.orm.test.query.hql;
|
package org.hibernate.orm.test.query.hql;
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.SybaseASEDialect;
|
import org.hibernate.dialect.SybaseASEDialect;
|
||||||
import org.hibernate.jpa.spi.MutableJpaCompliance;
|
import org.hibernate.jpa.spi.MutableJpaCompliance;
|
||||||
|
|
||||||
|
@ -48,6 +49,7 @@ public class JpaCrossJoinTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase dialect emulate cross join with inner join")
|
||||||
public void test2Roots(SessionFactoryScope scope) {
|
public void test2Roots(SessionFactoryScope scope) {
|
||||||
final SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
final SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
||||||
statementInspector.clear();
|
statementInspector.clear();
|
||||||
|
@ -60,6 +62,7 @@ public class JpaCrossJoinTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase dialect emulate cross join with inner join")
|
||||||
public void test2Roots2(SessionFactoryScope scope) {
|
public void test2Roots2(SessionFactoryScope scope) {
|
||||||
final SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
final SQLStatementInspector statementInspector = scope.getCollectingStatementInspector();
|
||||||
statementInspector.clear();
|
statementInspector.clear();
|
||||||
|
|
|
@ -15,6 +15,7 @@ import jakarta.persistence.Entity;
|
||||||
import jakarta.persistence.Id;
|
import jakarta.persistence.Id;
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.community.dialect.FirebirdDialect;
|
import org.hibernate.community.dialect.FirebirdDialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
|
@ -29,6 +30,7 @@ import org.junit.Test;
|
||||||
@SkipForDialect(value = DB2Dialect.class, comment = "DB2 is far more resistant to the reserved keyword usage. See HHH-12832.")
|
@SkipForDialect(value = DB2Dialect.class, comment = "DB2 is far more resistant to the reserved keyword usage. See HHH-12832.")
|
||||||
@SkipForDialect(value = DerbyDialect.class, comment = "Derby is far more resistant to the reserved keyword usage.")
|
@SkipForDialect(value = DerbyDialect.class, comment = "Derby is far more resistant to the reserved keyword usage.")
|
||||||
@SkipForDialect(value = FirebirdDialect.class, comment = "FirebirdDialect has autoQuoteKeywords enabled, so it is far more resistant to the reserved keyword usage.")
|
@SkipForDialect(value = FirebirdDialect.class, comment = "FirebirdDialect has autoQuoteKeywords enabled, so it is far more resistant to the reserved keyword usage.")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "AltibaseDialect has autoQuoteKeywords enabled, so it is far more resistant to the reserved keyword usage.")
|
||||||
public class SchemaMigratorHaltOnErrorTest extends BaseEntityManagerFunctionalTestCase {
|
public class SchemaMigratorHaltOnErrorTest extends BaseEntityManagerFunctionalTestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.hibernate.boot.MetadataSources;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistry;
|
import org.hibernate.boot.registry.StandardServiceRegistry;
|
||||||
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
|
||||||
import org.hibernate.boot.spi.MetadataImplementor;
|
import org.hibernate.boot.spi.MetadataImplementor;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.community.dialect.FirebirdDialect;
|
import org.hibernate.community.dialect.FirebirdDialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.testing.SkipForDialect;
|
import org.hibernate.testing.SkipForDialect;
|
||||||
|
@ -42,6 +43,7 @@ import org.junit.runner.RunWith;
|
||||||
@SkipForDialect(value = DB2Dialect.class, comment = "DB2 is far more resistant to the reserved keyword usage. See HHH-12832.")
|
@SkipForDialect(value = DB2Dialect.class, comment = "DB2 is far more resistant to the reserved keyword usage. See HHH-12832.")
|
||||||
@SkipForDialect(value = DerbyDialect.class, comment = "Derby is far more resistant to the reserved keyword usage.")
|
@SkipForDialect(value = DerbyDialect.class, comment = "Derby is far more resistant to the reserved keyword usage.")
|
||||||
@SkipForDialect(value = FirebirdDialect.class, comment = "FirebirdDialect has autoQuoteKeywords enabled, so it is far more resistant to the reserved keyword usage.")
|
@SkipForDialect(value = FirebirdDialect.class, comment = "FirebirdDialect has autoQuoteKeywords enabled, so it is far more resistant to the reserved keyword usage.")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "AltibaseDialect has autoQuoteKeywords enabled, so it is far more resistant to the reserved keyword usage.")
|
||||||
@RunWith(CustomRunner.class)
|
@RunWith(CustomRunner.class)
|
||||||
public class SchemaUpdateHaltOnErrorTest {
|
public class SchemaUpdateHaltOnErrorTest {
|
||||||
|
|
||||||
|
|
|
@ -17,11 +17,13 @@ import java.util.List;
|
||||||
import org.hibernate.Session;
|
import org.hibernate.Session;
|
||||||
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
|
import org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl;
|
||||||
import org.hibernate.cfg.Configuration;
|
import org.hibernate.cfg.Configuration;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.engine.spi.SessionImplementor;
|
import org.hibernate.engine.spi.SessionImplementor;
|
||||||
import org.hibernate.jdbc.Work;
|
import org.hibernate.jdbc.Work;
|
||||||
|
|
||||||
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
import org.hibernate.testing.junit4.BaseCoreFunctionalTestCase;
|
||||||
import org.hibernate.testing.orm.junit.JiraKey;
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -142,6 +144,7 @@ public class AutoDiscoveryTest extends BaseCoreFunctionalTestCase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@JiraKey( "HHH-16697" )
|
@JiraKey( "HHH-16697" )
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "Altibase sum(39.74) returns Float" )
|
||||||
public void testAggregateQueryAutoDiscovery() {
|
public void testAggregateQueryAutoDiscovery() {
|
||||||
Session session = openSession();
|
Session session = openSession();
|
||||||
session.beginTransaction();
|
session.beginTransaction();
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
package org.hibernate.orm.test.type;
|
package org.hibernate.orm.test.type;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.AbstractHANADialect;
|
import org.hibernate.dialect.AbstractHANADialect;
|
||||||
import org.hibernate.dialect.DB2Dialect;
|
import org.hibernate.dialect.DB2Dialect;
|
||||||
import org.hibernate.dialect.DerbyDialect;
|
import org.hibernate.dialect.DerbyDialect;
|
||||||
|
@ -77,6 +77,7 @@ public class EnumArrayTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "When length 0 byte array is inserted, Altibase returns with null")
|
||||||
public void testById() {
|
public void testById() {
|
||||||
inSession( em -> {
|
inSession( em -> {
|
||||||
TableWithEnumArrays tableRecord;
|
TableWithEnumArrays tableRecord;
|
||||||
|
@ -103,6 +104,7 @@ public class EnumArrayTest extends BaseNonConfigCoreFunctionalTestCase {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@SkipForDialect( value = AbstractHANADialect.class, comment = "For some reason, HANA can't intersect VARBINARY values, but funnily can do a union...")
|
@SkipForDialect( value = AbstractHANADialect.class, comment = "For some reason, HANA can't intersect VARBINARY values, but funnily can do a union...")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "When length 0 byte array is inserted, Altibase returns with null")
|
||||||
public void testQuery() {
|
public void testQuery() {
|
||||||
inSession( em -> {
|
inSession( em -> {
|
||||||
TypedQuery<TableWithEnumArrays> tq = em.createNamedQuery( "TableWithEnumArrays.JPQL.getByData", TableWithEnumArrays.class );
|
TypedQuery<TableWithEnumArrays> tq = em.createNamedQuery( "TableWithEnumArrays.JPQL.getByData", TableWithEnumArrays.class );
|
||||||
|
|
|
@ -4,6 +4,7 @@ import java.util.Comparator;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
import org.hibernate.annotations.JavaType;
|
import org.hibernate.annotations.JavaType;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
|
import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
import org.hibernate.type.descriptor.WrapperOptions;
|
import org.hibernate.type.descriptor.WrapperOptions;
|
||||||
|
@ -16,6 +17,7 @@ import org.hibernate.testing.orm.junit.DomainModel;
|
||||||
import org.hibernate.testing.orm.junit.JiraKey;
|
import org.hibernate.testing.orm.junit.JiraKey;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactory;
|
import org.hibernate.testing.orm.junit.SessionFactory;
|
||||||
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
import org.hibernate.testing.orm.junit.SessionFactoryScope;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import jakarta.persistence.Entity;
|
import jakarta.persistence.Entity;
|
||||||
|
@ -62,6 +64,7 @@ public class OverrideStandardJavaTypeTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'LANGUAGE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public void validateNative(SessionFactoryScope scope) {
|
public void validateNative(SessionFactoryScope scope) {
|
||||||
final var id = scope.fromTransaction(
|
final var id = scope.fromTransaction(
|
||||||
session -> {
|
session -> {
|
||||||
|
|
|
@ -15,6 +15,7 @@ import jakarta.persistence.Query;
|
||||||
import jakarta.transaction.Status;
|
import jakarta.transaction.Status;
|
||||||
import jakarta.transaction.TransactionManager;
|
import jakarta.transaction.TransactionManager;
|
||||||
import org.hibernate.cfg.AvailableSettings;
|
import org.hibernate.cfg.AvailableSettings;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.CockroachDialect;
|
import org.hibernate.dialect.CockroachDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
import org.hibernate.envers.RevisionType;
|
import org.hibernate.envers.RevisionType;
|
||||||
|
@ -41,7 +42,9 @@ import static org.junit.Assert.assertNotNull;
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-6349")
|
@TestForIssue(jiraKey = "HHH-6349")
|
||||||
@SkipForDialect(value = OracleDialect.class,
|
@SkipForDialect(value = OracleDialect.class,
|
||||||
comment = "Oracle does not support identity key generation")
|
comment = "Oracle does not support identity key generation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class,
|
||||||
|
comment = "Altibase does not support identity key generation")
|
||||||
public class DetachedMultipleCollectionChangeTest extends BaseEnversJPAFunctionalTestCase {
|
public class DetachedMultipleCollectionChangeTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
private TransactionManager tm = null;
|
private TransactionManager tm = null;
|
||||||
|
|
||||||
|
|
|
@ -11,11 +11,13 @@ import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||||
import org.hibernate.orm.test.envers.Priority;
|
import org.hibernate.orm.test.envers.Priority;
|
||||||
import org.hibernate.mapping.Formula;
|
import org.hibernate.mapping.Formula;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
|
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -107,6 +109,7 @@ public class DiscriminatorFormulaTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public void testRevisionsCounts() {
|
public void testRevisionsCounts() {
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
Arrays.asList( 1, 3 ), getAuditReader().getRevisions(
|
Arrays.asList( 1, 3 ), getAuditReader().getRevisions(
|
||||||
|
@ -123,18 +126,21 @@ public class DiscriminatorFormulaTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public void testHistoryOfParent() {
|
public void testHistoryOfParent() {
|
||||||
Assert.assertEquals( parentVer1, getAuditReader().find( ParentEntity.class, parentVer1.getId(), 2 ) );
|
Assert.assertEquals( parentVer1, getAuditReader().find( ParentEntity.class, parentVer1.getId(), 2 ) );
|
||||||
Assert.assertEquals( parentVer2, getAuditReader().find( ParentEntity.class, parentVer2.getId(), 4 ) );
|
Assert.assertEquals( parentVer2, getAuditReader().find( ParentEntity.class, parentVer2.getId(), 4 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public void testHistoryOfChild() {
|
public void testHistoryOfChild() {
|
||||||
Assert.assertEquals( childVer1, getAuditReader().find( ChildEntity.class, childVer1.getId(), 1 ) );
|
Assert.assertEquals( childVer1, getAuditReader().find( ChildEntity.class, childVer1.getId(), 1 ) );
|
||||||
Assert.assertEquals( childVer2, getAuditReader().find( ChildEntity.class, childVer2.getId(), 3 ) );
|
Assert.assertEquals( childVer2, getAuditReader().find( ChildEntity.class, childVer2.getId(), 3 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public void testPolymorphicQuery() {
|
public void testPolymorphicQuery() {
|
||||||
Assert.assertEquals(
|
Assert.assertEquals(
|
||||||
childVer1, getAuditReader().createQuery()
|
childVer1, getAuditReader().createQuery()
|
||||||
|
|
|
@ -9,6 +9,7 @@ package org.hibernate.orm.test.envers.integration.lazy;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
import org.hibernate.envers.query.AuditEntity;
|
import org.hibernate.envers.query.AuditEntity;
|
||||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||||
|
@ -34,6 +35,7 @@ import org.hibernate.testing.bytecode.enhancement.EnhancementOptions;
|
||||||
@RunWith(BytecodeEnhancerRunner.class)
|
@RunWith(BytecodeEnhancerRunner.class)
|
||||||
@EnhancementOptions(lazyLoading = true)
|
@EnhancementOptions(lazyLoading = true)
|
||||||
@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation")
|
@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not support identity key generation")
|
||||||
public class IsCollectionInitializedBytecodeEnhancementTest extends BaseEnversJPAFunctionalTestCase {
|
public class IsCollectionInitializedBytecodeEnhancementTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
|
|
||||||
private Long mce1Id = null;
|
private Long mce1Id = null;
|
||||||
|
|
|
@ -9,6 +9,7 @@ package org.hibernate.orm.test.envers.integration.lazy;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
import org.hibernate.envers.query.AuditEntity;
|
import org.hibernate.envers.query.AuditEntity;
|
||||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||||
|
@ -29,6 +30,7 @@ import org.hibernate.envers.AuditReaderFactory;
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-15522")
|
@TestForIssue(jiraKey = "HHH-15522")
|
||||||
@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation")
|
@SkipForDialect(value = OracleDialect.class, comment = "Oracle does not support identity key generation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase does not support identity key generation")
|
||||||
public class IsCollectionInitializedTest extends BaseEnversJPAFunctionalTestCase {
|
public class IsCollectionInitializedTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
|
|
||||||
private Long mce1Id = null;
|
private Long mce1Id = null;
|
||||||
|
|
|
@ -21,12 +21,14 @@ import jakarta.persistence.Table;
|
||||||
|
|
||||||
import org.hibernate.annotations.SQLRestriction;
|
import org.hibernate.annotations.SQLRestriction;
|
||||||
import org.hibernate.annotations.Where;
|
import org.hibernate.annotations.Where;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.envers.AuditJoinTable;
|
import org.hibernate.envers.AuditJoinTable;
|
||||||
import org.hibernate.envers.Audited;
|
import org.hibernate.envers.Audited;
|
||||||
import org.hibernate.envers.RelationTargetAuditMode;
|
import org.hibernate.envers.RelationTargetAuditMode;
|
||||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||||
import org.hibernate.orm.test.envers.Priority;
|
import org.hibernate.orm.test.envers.Priority;
|
||||||
import org.hibernate.testing.TestForIssue;
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.hibernate.testing.transaction.TransactionUtil;
|
import org.hibernate.testing.transaction.TransactionUtil;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -43,6 +45,7 @@ import static org.junit.Assert.assertEquals;
|
||||||
* @author Chris Cranford
|
* @author Chris Cranford
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-9432")
|
@TestForIssue(jiraKey = "HHH-9432")
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase {
|
public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
private Integer aId;
|
private Integer aId;
|
||||||
private Integer xId;
|
private Integer xId;
|
||||||
|
|
|
@ -10,6 +10,7 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.OracleDialect;
|
import org.hibernate.dialect.OracleDialect;
|
||||||
import org.hibernate.orm.test.envers.Priority;
|
import org.hibernate.orm.test.envers.Priority;
|
||||||
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity;
|
import org.hibernate.orm.test.envers.entities.collection.MultipleCollectionEntity;
|
||||||
|
@ -29,7 +30,9 @@ import static org.junit.Assert.assertEquals;
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-7437")
|
@TestForIssue(jiraKey = "HHH-7437")
|
||||||
@SkipForDialect(value = OracleDialect.class,
|
@SkipForDialect(value = OracleDialect.class,
|
||||||
comment = "Oracle does not support identity key generation")
|
comment = "Oracle does not support identity key generation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class,
|
||||||
|
comment = "Altibase does not support identity key generation")
|
||||||
public class HasChangedDetachedMultipleCollection extends AbstractModifiedFlagsEntityTest {
|
public class HasChangedDetachedMultipleCollection extends AbstractModifiedFlagsEntityTest {
|
||||||
private Long mce1Id = null;
|
private Long mce1Id = null;
|
||||||
private Long mce2Id = null;
|
private Long mce2Id = null;
|
||||||
|
|
|
@ -21,12 +21,14 @@ import jakarta.persistence.Table;
|
||||||
|
|
||||||
import org.hibernate.annotations.SQLRestriction;
|
import org.hibernate.annotations.SQLRestriction;
|
||||||
import org.hibernate.annotations.Where;
|
import org.hibernate.annotations.Where;
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.envers.AuditJoinTable;
|
import org.hibernate.envers.AuditJoinTable;
|
||||||
import org.hibernate.envers.Audited;
|
import org.hibernate.envers.Audited;
|
||||||
import org.hibernate.envers.RelationTargetAuditMode;
|
import org.hibernate.envers.RelationTargetAuditMode;
|
||||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||||
import org.hibernate.orm.test.envers.Priority;
|
import org.hibernate.orm.test.envers.Priority;
|
||||||
import org.hibernate.testing.TestForIssue;
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.hibernate.testing.transaction.TransactionUtil;
|
import org.hibernate.testing.transaction.TransactionUtil;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
@ -45,6 +47,7 @@ import static org.junit.Assert.assertEquals;
|
||||||
* @author Chris Cranford
|
* @author Chris Cranford
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-9432")
|
@TestForIssue(jiraKey = "HHH-9432")
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'TYPE' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase {
|
public class BasicWhereTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
private Integer aId;
|
private Integer aId;
|
||||||
private Integer xId;
|
private Integer xId;
|
||||||
|
|
|
@ -9,6 +9,7 @@ package org.hibernate.orm.test.envers.integration.onetomany.embeddedid;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import jakarta.persistence.EntityManager;
|
import jakarta.persistence.EntityManager;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
import org.hibernate.orm.test.envers.BaseEnversJPAFunctionalTestCase;
|
||||||
import org.hibernate.orm.test.envers.Priority;
|
import org.hibernate.orm.test.envers.Priority;
|
||||||
import org.hibernate.orm.test.envers.integration.onetomany.embeddedid.Constant;
|
import org.hibernate.orm.test.envers.integration.onetomany.embeddedid.Constant;
|
||||||
|
@ -16,6 +17,7 @@ import org.hibernate.orm.test.envers.integration.onetomany.embeddedid.Person;
|
||||||
import org.hibernate.orm.test.envers.integration.onetomany.embeddedid.PersonTuple;
|
import org.hibernate.orm.test.envers.integration.onetomany.embeddedid.PersonTuple;
|
||||||
|
|
||||||
import org.hibernate.testing.TestForIssue;
|
import org.hibernate.testing.TestForIssue;
|
||||||
|
import org.hibernate.testing.orm.junit.SkipForDialect;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -23,6 +25,7 @@ import org.junit.Test;
|
||||||
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
* @author Lukasz Antoniak (lukasz dot antoniak at gmail dot com)
|
||||||
*/
|
*/
|
||||||
@TestForIssue(jiraKey = "HHH-7157")
|
@TestForIssue(jiraKey = "HHH-7157")
|
||||||
|
@SkipForDialect( dialectClass = AltibaseDialect.class, reason = "'CONSTANT' is not escaped even though autoQuoteKeywords is enabled")
|
||||||
public class MapsIdTest extends BaseEnversJPAFunctionalTestCase {
|
public class MapsIdTest extends BaseEnversJPAFunctionalTestCase {
|
||||||
private PersonTuple tuple1Ver1 = null;
|
private PersonTuple tuple1Ver1 = null;
|
||||||
private PersonTuple tuple2Ver1 = null;
|
private PersonTuple tuple2Ver1 = null;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.test.hikaricp;
|
package org.hibernate.test.hikaricp;
|
||||||
|
|
||||||
|
import org.hibernate.community.dialect.AltibaseDialect;
|
||||||
import org.hibernate.dialect.SybaseDialect;
|
import org.hibernate.dialect.SybaseDialect;
|
||||||
import org.hibernate.dialect.TiDBDialect;
|
import org.hibernate.dialect.TiDBDialect;
|
||||||
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
import org.hibernate.engine.jdbc.connections.spi.ConnectionProvider;
|
||||||
|
@ -19,6 +20,7 @@ import org.hibernate.testing.common.connections.BaseTransactionIsolationConfigTe
|
||||||
*/
|
*/
|
||||||
@SkipForDialect(value = SybaseDialect.class, comment = "The jTDS driver doesn't implement Connection#getNetworkTimeout() so this fails")
|
@SkipForDialect(value = SybaseDialect.class, comment = "The jTDS driver doesn't implement Connection#getNetworkTimeout() so this fails")
|
||||||
@SkipForDialect(value = TiDBDialect.class, comment = "Doesn't support SERIALIZABLE isolation")
|
@SkipForDialect(value = TiDBDialect.class, comment = "Doesn't support SERIALIZABLE isolation")
|
||||||
|
@SkipForDialect(value = AltibaseDialect.class, comment = "Altibase cannot change isolation level in autocommit mode")
|
||||||
public class HikariTransactionIsolationConfigTest extends BaseTransactionIsolationConfigTest {
|
public class HikariTransactionIsolationConfigTest extends BaseTransactionIsolationConfigTest {
|
||||||
@Override
|
@Override
|
||||||
protected ConnectionProvider getConnectionProviderUnderTest() {
|
protected ConnectionProvider getConnectionProviderUnderTest() {
|
||||||
|
|
|
@ -230,6 +230,7 @@ dependencyResolutionManagement {
|
||||||
def pgsqlVersion = version "pgsql", "42.6.0"
|
def pgsqlVersion = version "pgsql", "42.6.0"
|
||||||
def sybaseVersion = version "sybase", "1.3.1"
|
def sybaseVersion = version "sybase", "1.3.1"
|
||||||
def tidbVersion = version "tidb", mysqlVersion
|
def tidbVersion = version "tidb", mysqlVersion
|
||||||
|
def altibaseVersion = version "altibase", "7.3.0.0.2"
|
||||||
|
|
||||||
library( "h2", "com.h2database", "h2" ).versionRef( h2Version )
|
library( "h2", "com.h2database", "h2" ).versionRef( h2Version )
|
||||||
library( "h2gis", "org.orbisgis", "h2gis" ).versionRef( h2gisVersion )
|
library( "h2gis", "org.orbisgis", "h2gis" ).versionRef( h2gisVersion )
|
||||||
|
@ -249,6 +250,7 @@ dependencyResolutionManagement {
|
||||||
library( "sybase", "net.sourceforge.jtds", "jtds" ).versionRef( sybaseVersion )
|
library( "sybase", "net.sourceforge.jtds", "jtds" ).versionRef( sybaseVersion )
|
||||||
library( "informix", "com.ibm.informix", "jdbc" ).versionRef( informixVersion )
|
library( "informix", "com.ibm.informix", "jdbc" ).versionRef( informixVersion )
|
||||||
library( "firebird", "org.firebirdsql.jdbc", "jaybird" ).versionRef( firebirdVersion )
|
library( "firebird", "org.firebirdsql.jdbc", "jaybird" ).versionRef( firebirdVersion )
|
||||||
|
library( "altibase", "com.altibase", "altibase-jdbc" ).versionRef( altibaseVersion )
|
||||||
}
|
}
|
||||||
mavenLibs {
|
mavenLibs {
|
||||||
def mavenCoreVersion = version "mavenCore", "3.8.1"
|
def mavenCoreVersion = version "mavenCore", "3.8.1"
|
||||||
|
|
Loading…
Reference in New Issue