[hibernate-commits] Hibernate SVN: r11304 - in branches/Branch_3_2/Hibernate3: src/org/hibernate/id and 6 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Mar 19 18:06:45 EDT 2007
Author: steve.ebersole at jboss.com
Date: 2007-03-19 18:06:45 -0400 (Mon, 19 Mar 2007)
New Revision: 11304
Added:
branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/TeradataDialect.java
Modified:
branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/Dialect.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SQLServerDialect.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SybaseDialect.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/id/MultipleHiLoPerTableGenerator.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/id/TableGenerator.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/id/enhanced/SegmentedTableGenerator.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/jdbc/ConnectionManager.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Column.java
branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Table.java
branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/JPALockTest.java
branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
branches/Branch_3_2/Hibernate3/test/org/hibernate/test/optlock/OptimisticLockTest.java
branches/Branch_3_2/Hibernate3/test/org/hibernate/test/tm/CMTTest.java
Log:
HHH-2500 : terradata certification
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/Dialect.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/Dialect.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/Dialect.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -970,6 +970,32 @@
}
+ // table support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ /**
+ * Command used to create a table.
+ *
+ * @return The command used to create a table.
+ */
+ public String getCreateTableString() {
+ return "create table";
+ }
+
+ /**
+ * Slight variation on {@link #getCreateTableString}. Here, we have the
+ * command used to create a table when there is no primary key and
+ * duplicate rows are expected.
+ * <p/>
+ * Most databases do not care about the distinction; originally added for
+ * Teradata support which does care.
+ *
+ * @return The command used to create a multiset table.
+ */
+ public String getCreateMultisetTableString() {
+ return getCreateTableString();
+ }
+
+
// temporary table support ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/**
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SQLServerDialect.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SQLServerDialect.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SQLServerDialect.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -127,4 +127,12 @@
// note: at least my local SQL Server 2005 Express shows this not working...
return false;
}
+
+ public boolean doesReadCommittedCauseWritersToBlockReaders() {
+ return false; // here assume SQLServer2005 using snapshot isolation, which does not have this problem
+ }
+
+ public boolean doesRepeatableReadCauseReadersToBlockWriters() {
+ return false; // here assume SQLServer2005 using snapshot isolation, which does not have this problem
+ }
}
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SybaseDialect.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SybaseDialect.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/SybaseDialect.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -227,4 +227,12 @@
public boolean supportsExistsInSelect() {
return false;
}
+
+ public boolean doesReadCommittedCauseWritersToBlockReaders() {
+ return true;
+ }
+
+ public boolean doesRepeatableReadCauseReadersToBlockWriters() {
+ return true;
+ }
}
Added: branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/TeradataDialect.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/TeradataDialect.java (rev 0)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/dialect/TeradataDialect.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -0,0 +1,237 @@
+package org.hibernate.dialect;
+
+import java.sql.Types;
+
+import org.hibernate.Hibernate;
+import org.hibernate.HibernateException;
+import org.hibernate.cfg.Environment;
+import org.hibernate.dialect.function.SQLFunctionTemplate;
+import org.hibernate.dialect.function.VarArgsSQLFunction;
+
+/**
+ * A dialect for the Teradata database created by MCR as part of the
+ * dialect certification process.
+ *
+ * @author Jay Nance
+ */
+public class TeradataDialect extends Dialect {
+
+ /**
+ * Constructor
+ */
+ public TeradataDialect() {
+ super();
+ //registerColumnType data types
+ registerColumnType( Types.NUMERIC, "NUMERIC($p,$s)" );
+ registerColumnType( Types.DOUBLE, "DOUBLE PRECISION" );
+ registerColumnType( Types.BIGINT, "NUMERIC(18,0)" );
+ registerColumnType( Types.BIT, "BYTEINT" );
+ registerColumnType( Types.TINYINT, "BYTEINT" );
+ registerColumnType( Types.VARBINARY, "VARBYTE($l)" );
+ registerColumnType( Types.BINARY, "BYTEINT" );
+ registerColumnType( Types.LONGVARCHAR, "LONG VARCHAR" );
+ registerColumnType( Types.CHAR, "CHAR(1)" );
+ registerColumnType( Types.DECIMAL, "DECIMAL" );
+ registerColumnType( Types.INTEGER, "INTEGER" );
+ registerColumnType( Types.SMALLINT, "SMALLINT" );
+ registerColumnType( Types.FLOAT, "FLOAT" );
+ registerColumnType( Types.VARCHAR, "VARCHAR($l)" );
+ registerColumnType( Types.DATE, "DATE" );
+ registerColumnType( Types.TIME, "TIME" );
+ registerColumnType( Types.TIMESTAMP, "TIMESTAMP" );
+ registerColumnType( Types.BOOLEAN, "BYTEINT" ); // hibernate seems to ignore this type...
+ registerColumnType( Types.BLOB, "BLOB" );
+ registerColumnType( Types.CLOB, "CLOB" );
+
+ registerFunction( "year", new SQLFunctionTemplate( Hibernate.INTEGER, "extract(year from ?1)" ) );
+ registerFunction( "length", new SQLFunctionTemplate( Hibernate.INTEGER, "character_length(?1)" ) );
+ registerFunction( "concat", new VarArgsSQLFunction( Hibernate.STRING, "(", "||", ")" ) );
+ registerFunction( "substring", new SQLFunctionTemplate( Hibernate.STRING, "substring(?1 from ?2 for ?3)" ) );
+ registerFunction( "locate", new SQLFunctionTemplate( Hibernate.STRING, "position(?1 in ?2)" ) );
+ registerFunction( "mod", new SQLFunctionTemplate( Hibernate.STRING, "?1 mod ?2" ) );
+ registerFunction( "str", new SQLFunctionTemplate( Hibernate.STRING, "cast(?1 as varchar(255))" ) );
+
+ // bit_length feels a bit broken to me. We have to cast to char in order to
+ // pass when a numeric value is supplied. But of course the answers given will
+ // be wildly different for these two datatypes. 1234.5678 will be 9 bytes as
+ // a char string but will be 8 or 16 bytes as a true numeric.
+ // Jay Nance 2006-09-22
+ registerFunction(
+ "bit_length", new SQLFunctionTemplate( Hibernate.INTEGER, "octet_length(cast(?1 as char))*4" )
+ );
+
+ // The preference here would be
+ // SQLFunctionTemplate( Hibernate.TIMESTAMP, "current_timestamp(?1)", false)
+ // but this appears not to work.
+ // Jay Nance 2006-09-22
+ registerFunction( "current_timestamp", new SQLFunctionTemplate( Hibernate.TIMESTAMP, "current_timestamp" ) );
+ registerFunction( "current_time", new SQLFunctionTemplate( Hibernate.TIMESTAMP, "current_time" ) );
+ registerFunction( "current_date", new SQLFunctionTemplate( Hibernate.TIMESTAMP, "current_date" ) );
+ // IBID for current_time and current_date
+
+ registerKeyword( "password" );
+ registerKeyword( "type" );
+ registerKeyword( "title" );
+ registerKeyword( "year" );
+ registerKeyword( "month" );
+ registerKeyword( "summary" );
+ registerKeyword( "alias" );
+ registerKeyword( "value" );
+ registerKeyword( "first" );
+ registerKeyword( "role" );
+ registerKeyword( "account" );
+ registerKeyword( "class" );
+
+ // Tell hibernate to use getBytes instead of getBinaryStream
+ getDefaultProperties().setProperty( Environment.USE_STREAMS_FOR_BINARY, "false" );
+ // No batch statements
+ getDefaultProperties().setProperty( Environment.STATEMENT_BATCH_SIZE, NO_BATCH );
+ }
+
+ /**
+ * Does this dialect support the <tt>FOR UPDATE</tt> syntax?
+ *
+ * @return empty string ... Teradata does not support <tt>FOR UPDATE<tt> syntax
+ */
+ public String getForUpdateString() {
+ return "";
+ }
+
+ public boolean supportsIdentityColumns() {
+ return false;
+ }
+
+ public boolean supportsSequences() {
+ return false;
+ }
+
+ public String getAddColumnString() {
+ return "Add Column";
+ }
+
+ public boolean supportsTemporaryTables() {
+ return true;
+ }
+
+ public String getCreateTemporaryTableString() {
+ return "create global temporary table";
+ }
+
+ public String getCreateTemporaryTablePostfix() {
+ return " on commit preserve rows";
+ }
+
+ public Boolean performTemporaryTableDDLInIsolation() {
+ return Boolean.TRUE;
+ }
+
+ public boolean dropTemporaryTableAfterUse() {
+ return false;
+ }
+
+ /**
+ * Get the name of the database type associated with the given
+ * <tt>java.sql.Types</tt> typecode.
+ *
+ * @param code <tt>java.sql.Types</tt> typecode
+ * @param length the length or precision of the column
+ * @param precision the precision of the column
+ * @param scale the scale of the column
+ *
+ * @return the database type name
+ *
+ * @throws HibernateException
+ */
+ public String getTypeName(int code, int length, int precision, int scale) throws HibernateException {
+ /*
+ * We might want a special case for 19,2. This is very common for money types
+ * and here it is converted to 18,1
+ */
+ float f = precision > 0 ? ( float ) scale / ( float ) precision : 0;
+ int p = ( precision > 18 ? 18 : precision );
+ int s = ( precision > 18 ? ( int ) ( 18.0 * f ) : ( scale > 18 ? 18 : scale ) );
+
+ return super.getTypeName( code, length, p, s );
+ }
+
+ public boolean supportsCascadeDelete() {
+ return false;
+ }
+
+ public boolean supportsCircularCascadeDeleteConstraints() {
+ return false;
+ }
+
+ public boolean areStringComparisonsCaseInsensitive() {
+ return true;
+ }
+
+ public boolean supportsEmptyInList() {
+ return false;
+ }
+
+ public String getSelectClauseNullString(int sqlType) {
+ String v = "null";
+
+ switch ( sqlType ) {
+ case Types.BIT:
+ case Types.TINYINT:
+ case Types.SMALLINT:
+ case Types.INTEGER:
+ case Types.BIGINT:
+ case Types.FLOAT:
+ case Types.REAL:
+ case Types.DOUBLE:
+ case Types.NUMERIC:
+ case Types.DECIMAL:
+ v = "cast(null as decimal)";
+ break;
+ case Types.CHAR:
+ case Types.VARCHAR:
+ case Types.LONGVARCHAR:
+ v = "cast(null as varchar(255))";
+ break;
+ case Types.DATE:
+ case Types.TIME:
+ case Types.TIMESTAMP:
+ v = "cast(null as timestamp)";
+ break;
+ case Types.BINARY:
+ case Types.VARBINARY:
+ case Types.LONGVARBINARY:
+ case Types.NULL:
+ case Types.OTHER:
+ case Types.JAVA_OBJECT:
+ case Types.DISTINCT:
+ case Types.STRUCT:
+ case Types.ARRAY:
+ case Types.BLOB:
+ case Types.CLOB:
+ case Types.REF:
+ case Types.DATALINK:
+ case Types.BOOLEAN:
+ break;
+ }
+ return v;
+ }
+
+ public String getCreateMultisetTableString() {
+ return "create multiset table ";
+ }
+
+ public boolean supportsLobValueChangePropogation() {
+ return false;
+ }
+
+ public boolean doesReadCommittedCauseWritersToBlockReaders() {
+ return true;
+ }
+
+ public boolean doesRepeatableReadCauseReadersToBlockWriters() {
+ return true;
+ }
+
+ public boolean supportsBindAsCallableArgument() {
+ return false;
+ }
+}
\ No newline at end of file
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/id/MultipleHiLoPerTableGenerator.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/id/MultipleHiLoPerTableGenerator.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/id/MultipleHiLoPerTableGenerator.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -89,28 +89,30 @@
public String[] sqlCreateStrings(Dialect dialect) throws HibernateException {
return new String[] {
new StringBuffer()
- .append("create table ")
- .append(tableName)
- .append(" ( ")
- .append(pkColumnName)
- .append(" ")
- .append( dialect.getTypeName(Types.VARCHAR, keySize, 0, 0) )
- .append(", ")
- .append(valueColumnName)
- .append(" ")
- .append( dialect.getTypeName(Types.INTEGER) )
- .append(" ) ")
+ .append( dialect.getCreateTableString() )
+ .append( tableName )
+ .append( " ( " )
+ .append( pkColumnName )
+ .append( ' ' )
+ .append( dialect.getTypeName( Types.VARCHAR, keySize, 0, 0 ) )
+ .append( ", " )
+ .append( valueColumnName )
+ .append( ' ' )
+ .append( dialect.getTypeName( Types.INTEGER ) )
+ .append( " ) " )
.toString()
};
}
public String[] sqlDropStrings(Dialect dialect) throws HibernateException {
- StringBuffer sqlDropString = new StringBuffer()
- .append("drop table ");
- if ( dialect.supportsIfExistsBeforeTableName() ) sqlDropString.append("if exists ");
- sqlDropString.append(tableName)
- .append( dialect.getCascadeConstraintsString() );
- if ( dialect.supportsIfExistsAfterTableName() ) sqlDropString.append(" if exists");
+ StringBuffer sqlDropString = new StringBuffer( "drop table " );
+ if ( dialect.supportsIfExistsBeforeTableName() ) {
+ sqlDropString.append( "if exists " );
+ }
+ sqlDropString.append( tableName ).append( dialect.getCascadeConstraintsString() );
+ if ( dialect.supportsIfExistsAfterTableName() ) {
+ sqlDropString.append( " if exists" );
+ }
return new String[] { sqlDropString.toString() };
}
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/id/TableGenerator.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/id/TableGenerator.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/id/TableGenerator.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -96,21 +96,22 @@
}
- public String[] sqlCreateStrings(Dialect dialect) throws HibernateException {
+ public String[] sqlCreateStrings(Dialect dialect) {
return new String[] {
- "create table " + tableName + " ( " + columnName + " " + dialect.getTypeName(Types.INTEGER) + " )",
+ dialect.getCreateTableString() + " " + tableName + " ( " + columnName + " " + dialect.getTypeName(Types.INTEGER) + " )",
"insert into " + tableName + " values ( 0 )"
};
}
public String[] sqlDropStrings(Dialect dialect) {
- //return "drop table " + tableName + dialect.getCascadeConstraintsString();
- StringBuffer sqlDropString = new StringBuffer()
- .append("drop table ");
- if ( dialect.supportsIfExistsBeforeTableName() ) sqlDropString.append("if exists ");
- sqlDropString.append(tableName)
- .append( dialect.getCascadeConstraintsString() );
- if ( dialect.supportsIfExistsAfterTableName() ) sqlDropString.append(" if exists");
+ StringBuffer sqlDropString = new StringBuffer( "drop table " );
+ if ( dialect.supportsIfExistsBeforeTableName() ) {
+ sqlDropString.append( "if exists " );
+ }
+ sqlDropString.append( tableName ).append( dialect.getCascadeConstraintsString() );
+ if ( dialect.supportsIfExistsAfterTableName() ) {
+ sqlDropString.append( " if exists" );
+ }
return new String[] { sqlDropString.toString() };
}
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/id/enhanced/SegmentedTableGenerator.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/id/enhanced/SegmentedTableGenerator.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/id/enhanced/SegmentedTableGenerator.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -271,15 +271,15 @@
public String[] sqlCreateStrings(Dialect dialect) throws HibernateException {
return new String[] {
new StringBuffer()
- .append( "create table " )
+ .append( dialect.getCreateTableString() )
.append( tableName )
.append( " ( " )
.append( segmentColumnName )
- .append( " " )
+ .append( ' ' )
.append( dialect.getTypeName( Types.VARCHAR, segmentValueLength, 0, 0 ) )
.append( ", " )
.append( valueColumnName )
- .append( " " )
+ .append( ' ' )
.append( dialect.getTypeName( Types.BIGINT ) )
.append( " ) " )
.toString()
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/jdbc/ConnectionManager.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/jdbc/ConnectionManager.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/jdbc/ConnectionManager.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -186,7 +186,9 @@
* @throws SQLException Can be thrown by the Connection.isAutoCommit() check.
*/
public boolean isAutoCommit() throws SQLException {
- return connection == null || connection.getAutoCommit();
+ return connection == null
+ || connection.isClosed()
+ || connection.getAutoCommit();
}
/**
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Column.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Column.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Column.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -65,6 +65,10 @@
quoted=true;
this.name=name.substring( 1, name.length()-1 );
}
+ else if(Dialect.getDialect().getKeywords().contains(name)) {
+ quoted=true;
+ this.name = name;
+ }
else {
this.name = name;
}
Modified: branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Table.java
===================================================================
--- branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Table.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/src/org/hibernate/mapping/Table.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -360,9 +360,8 @@
return buffer.toString();
}
- public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema)
- throws HibernateException {
- StringBuffer buf = new StringBuffer( "create table " )
+ public String sqlCreateString(Dialect dialect, Mapping p, String defaultCatalog, String defaultSchema) {
+ StringBuffer buf = new StringBuffer( hasPrimaryKey() ? dialect.getCreateTableString() : dialect.getCreateMultisetTableString() )
.append( getQualifiedName( dialect, defaultCatalog, defaultSchema ) )
.append( " (" );
Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/JPALockTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/JPALockTest.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/JPALockTest.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -56,6 +56,10 @@
if ( ! readCommittedIsolationMaintained( "ejb3 lock tests" ) ) {
return;
}
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders() ) {
+ reportSkip( "write locks block readers", "jpa read locking" );
+ return;
+ }
final String initialName = "lock test";
// set up some test data
@@ -123,6 +127,11 @@
if ( ! readCommittedIsolationMaintained( "ejb3 lock tests" ) ) {
return;
}
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders() ) {
+ reportSkip( "write locks block readers", "jpa read locking" );
+ return;
+ }
+
final String initialName = "lock test";
// set up some test data
Session s1 = getSessions().openSession();
Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/jpa/lock/RepeatableReadTest.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -35,6 +35,10 @@
// versioned entity tests ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public void testStaleVersionedInstanceFoundInQueryResult() {
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders()) {
+ reportSkip( "write locks block readers", "stale versioned instance" );
+ return;
+ }
String check = "EJB3 Specification";
Session s1 = getSessions().openSession();
Transaction t1 = s1.beginTransaction();
@@ -83,6 +87,10 @@
if ( ! readCommittedIsolationMaintained( "repeatable read tests" ) ) {
return;
}
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders()) {
+ reportSkip( "lock blocking", "stale versioned instance" );
+ return;
+ }
String check = "EJB3 Specification";
Session s1 = getSessions().openSession();
Transaction t1 = s1.beginTransaction();
@@ -153,6 +161,10 @@
// non-versioned entity tests ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
public void testStaleNonVersionedInstanceFoundInQueryResult() {
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders()) {
+ reportSkip( "lock blocking", "stale versioned instance" );
+ return;
+ }
String check = "Lock Modes";
Session s1 = getSessions().openSession();
Transaction t1 = s1.beginTransaction();
@@ -200,6 +212,10 @@
if ( ! readCommittedIsolationMaintained( "repeatable read tests" ) ) {
return;
}
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders()) {
+ reportSkip( "lock blocking", "stale versioned instance" );
+ return;
+ }
String check = "Lock Modes";
Session s1 = getSessions().openSession();
Transaction t1 = s1.beginTransaction();
Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/optlock/OptimisticLockTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/optlock/OptimisticLockTest.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/optlock/OptimisticLockTest.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -48,6 +48,10 @@
}
private void testUpdateOptimisticLockFailure(String entityName) {
+ if ( getDialect().doesRepeatableReadCauseReadersToBlockWriters() ) {
+ reportSkip( "read locks block writers", "update optimistic locking" );
+ return;
+ }
Session mainSession = openSession();
mainSession.beginTransaction();
Document doc = new Document();
@@ -107,6 +111,10 @@
}
private void testDeleteOptimisticLockFailure(String entityName) {
+ if ( getDialect().doesRepeatableReadCauseReadersToBlockWriters() ) {
+ reportSkip( "read locks block writers", "update optimistic locking" );
+ return;
+ }
Session mainSession = openSession();
mainSession.beginTransaction();
Document doc = new Document();
Modified: branches/Branch_3_2/Hibernate3/test/org/hibernate/test/tm/CMTTest.java
===================================================================
--- branches/Branch_3_2/Hibernate3/test/org/hibernate/test/tm/CMTTest.java 2007-03-19 22:06:14 UTC (rev 11303)
+++ branches/Branch_3_2/Hibernate3/test/org/hibernate/test/tm/CMTTest.java 2007-03-19 22:06:45 UTC (rev 11304)
@@ -210,9 +210,8 @@
}
public void testConcurrentCachedDirtyQueries() throws Exception {
- if ( getDialect() instanceof SybaseDialect ) {
- // sybase and sqlserver have serious locking issues here...
- reportSkip( "dead-lock bug", "concurrent queries" );
+ if ( getDialect().doesReadCommittedCauseWritersToBlockReaders() ) {
+ reportSkip( "write locks block readers", "concurrent queries" );
return;
}
More information about the hibernate-commits
mailing list