HHH-12753 - Fix Nationalized CLOB test failures on DB2.

Force column read/write to use non-nationalized driver methods since the driver does
not implement the nationalized equivalents.

(cherry picked from commit 005d5b7c74)
This commit is contained in:
Chris Cranford 2018-07-19 09:54:02 -04:00
parent 722ba32f9f
commit 86abe7fd4f
1 changed files with 39 additions and 3 deletions

View File

@ -6,14 +6,17 @@
*/ */
package org.hibernate.dialect; package org.hibernate.dialect;
import java.sql.Types;
import org.hibernate.dialect.function.DB2SubstringFunction; import org.hibernate.dialect.function.DB2SubstringFunction;
import org.hibernate.dialect.function.StandardSQLFunction;
import org.hibernate.hql.spi.id.IdTableSupportStandardImpl; import org.hibernate.hql.spi.id.IdTableSupportStandardImpl;
import org.hibernate.hql.spi.id.MultiTableBulkIdStrategy; import org.hibernate.hql.spi.id.MultiTableBulkIdStrategy;
import org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy; import org.hibernate.hql.spi.id.global.GlobalTemporaryTableBulkIdStrategy;
import org.hibernate.hql.spi.id.local.AfterUseAction; import org.hibernate.hql.spi.id.local.AfterUseAction;
import org.hibernate.hql.spi.id.local.LocalTemporaryTableBulkIdStrategy; import org.hibernate.type.descriptor.sql.CharTypeDescriptor;
import org.hibernate.type.StandardBasicTypes; import org.hibernate.type.descriptor.sql.ClobTypeDescriptor;
import org.hibernate.type.descriptor.sql.SqlTypeDescriptor;
import org.hibernate.type.descriptor.sql.VarcharTypeDescriptor;
/** /**
* An SQL dialect for DB2 9.7. * An SQL dialect for DB2 9.7.
@ -57,4 +60,37 @@ public class DB297Dialect extends DB2Dialect {
AfterUseAction.CLEAN AfterUseAction.CLEAN
); );
} }
@Override
protected SqlTypeDescriptor getSqlTypeDescriptorOverride(int sqlCode) {
// See HHH-12753
// It seems that DB2's JDBC 4.0 support as of 9.5 does not support the N-variant methods like
// NClob or NString. Therefore here we overwrite the sql type descriptors to use the non-N variants
// which are supported.
switch ( sqlCode ) {
case Types.NCHAR:
return CharTypeDescriptor.INSTANCE;
case Types.NCLOB:
if ( useInputStreamToInsertBlob() ) {
return ClobTypeDescriptor.STREAM_BINDING;
}
else {
return ClobTypeDescriptor.CLOB_BINDING;
}
case Types.NVARCHAR:
return VarcharTypeDescriptor.INSTANCE;
default:
return super.getSqlTypeDescriptorOverride( sqlCode );
}
}
@Override
public boolean canCreateSchema() {
// this seems to only be a problem in QE where schema management is disabled.
// should we keep this?
return false;
}
} }