[hibernate-commits] Hibernate SVN: r18782 - in core/trunk/core/src/main/java/org/hibernate: sql and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Thu Feb 11 10:51:25 EST 2010


Author: smarlow at redhat.com
Date: 2010-02-11 10:51:25 -0500 (Thu, 11 Feb 2010)
New Revision: 18782

Modified:
   core/trunk/core/src/main/java/org/hibernate/dialect/AbstractTransactSQLDialect.java
   core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java
   core/trunk/core/src/main/java/org/hibernate/dialect/MySQLDialect.java
   core/trunk/core/src/main/java/org/hibernate/sql/ForUpdateFragment.java
Log:
HHH-4765 Enhance Dialect support for JPA-2 locking.  MySQL pessimistic locking and Dialect.getForUpdateString(String aliases, LockOptions lockOptions)

Modified: core/trunk/core/src/main/java/org/hibernate/dialect/AbstractTransactSQLDialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/AbstractTransactSQLDialect.java	2010-02-11 15:16:38 UTC (rev 18781)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/AbstractTransactSQLDialect.java	2010-02-11 15:51:25 UTC (rev 18782)
@@ -170,6 +170,7 @@
 	}
 
 	public String applyLocksToSql(String sql, LockOptions aliasedLockOptions, Map keyColumnNames) {
+		// TODO:  merge additional lockoptions support in Dialect.applyLocksToSql 
 		Iterator itr = aliasedLockOptions.getAliasLockIterator();
 		StringBuffer buffer = new StringBuffer( sql );
 		int correction = 0;

Modified: core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java	2010-02-11 15:16:38 UTC (rev 18781)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/Dialect.java	2010-02-11 15:51:25 UTC (rev 18782)
@@ -1095,6 +1095,20 @@
 	}
 
 	/**
+	 * Get the <tt>FOR UPDATE OF column_list</tt> fragment appropriate for this
+	 * dialect given the aliases of the columns to be write locked.
+	 *
+	 * @param aliases The columns to be write locked.
+	 * @param lockOptions 
+	 * @return The appropriate <tt>FOR UPDATE OF column_list</tt> clause string.
+	 */
+	public String getForUpdateString(String aliases, LockOptions lockOptions) {
+		// by default we simply return the getForUpdateString() result since
+		// the default is to say no support for "FOR UPDATE OF ..."
+		return getForUpdateString(lockOptions);
+	}
+
+	/**
 	 * Retrieves the <tt>FOR UPDATE NOWAIT</tt> syntax specific to this dialect.
 	 *
 	 * @return The appropriate <tt>FOR UPDATE NOWAIT</tt> clause string.

Modified: core/trunk/core/src/main/java/org/hibernate/dialect/MySQLDialect.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/dialect/MySQLDialect.java	2010-02-11 15:16:38 UTC (rev 18781)
+++ core/trunk/core/src/main/java/org/hibernate/dialect/MySQLDialect.java	2010-02-11 15:51:25 UTC (rev 18782)
@@ -30,6 +30,7 @@
 import java.sql.Types;
 
 import org.hibernate.Hibernate;
+import org.hibernate.LockOptions;
 import org.hibernate.cfg.Environment;
 import org.hibernate.dialect.function.NoArgSQLFunction;
 import org.hibernate.dialect.function.StandardSQLFunction;
@@ -334,6 +335,21 @@
 	}
 
 
+	// locking support
+
+	public String getForUpdateString() {
+		return " for update";
+	}
+
+	public String getWriteLockString(int timeout) {
+		return " for update";
+	}
+
+	public String getReadLockString(int timeout) {
+		return " lock in share mode";
+	}
+
+
 	// Overridden informational metadata ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 	public boolean supportsEmptyInList() {

Modified: core/trunk/core/src/main/java/org/hibernate/sql/ForUpdateFragment.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/sql/ForUpdateFragment.java	2010-02-11 15:16:38 UTC (rev 18781)
+++ core/trunk/core/src/main/java/org/hibernate/sql/ForUpdateFragment.java	2010-02-11 15:51:25 UTC (rev 18782)
@@ -101,14 +101,13 @@
 	}
 
 	public String toFragmentString() {
-
-		if ( aliases.length() == 0) {
-			if ( lockOptions != null ) {
-				return dialect.getForUpdateString(lockOptions);
+		if ( lockOptions!= null ) {
+			return dialect.getForUpdateString( aliases.toString(), lockOptions );
+		}
+		else if ( aliases.length() == 0) {
+			if ( lockMode != null ) {
+				return dialect.getForUpdateString( lockMode );
 			}
-			else if ( lockMode != null ) {
-				return dialect.getForUpdateString(lockMode);
-			}
 			return "";
 		}
 		// TODO:  pass lockmode



More information about the hibernate-commits mailing list