[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