User: patriot1burke
Date: 01/12/04 21:07:01
Modified: src/main/org/jboss/ejb/plugins/cmp/jdbc
JDBCReadAheadCommand.java
JDBCLoadRelationCommand.java
JDBCLoadFieldCommand.java
JDBCLoadEntityCommand.java
JDBCFindByForeignKeyCommand.java
Log:
changed select-for-update to row-locking. Also, row-locking now uses
row-locking-template defined in type-mappings. This way we can have
different row-locking syntaxes between different DBs.
Revision Changes Path
1.7 +29 -16
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCReadAheadCommand.java
Index: JDBCReadAheadCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCReadAheadCommand.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JDBCReadAheadCommand.java 2001/12/01 21:55:05 1.6
+++ JDBCReadAheadCommand.java 2001/12/05 05:07:00 1.7
@@ -18,13 +18,15 @@
import org.jboss.util.FinderResults;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
import org.jboss.logging.Logger;
/**
* JDBCReadAheadCommand
*
* @author <a href="mailto:[EMAIL PROTECTED]">Oleg Nitz</a>
- * @version $Revision: 1.6 $
+ * @version $Revision: 1.7 $
*/
public class JDBCReadAheadCommand {
@@ -143,26 +145,37 @@
// WHERE pk1=? AND pk2=? OR pk1=? AND pk2=? ...
StringBuffer sql = new StringBuffer(1024);
-
- sql.append("SELECT ");
- sql.append(SQLUtil.getColumnNamesClause(
- entity.getJDBCPrimaryKeyFields()));
- sql.append(",");
- sql.append(SQLUtil.getColumnNamesClause(loadFields));
-
- sql.append(" FROM ").append(entity.getTableName());
-
- sql.append(" WHERE ");
+ StringBuffer columnNamesClause = new
StringBuffer(SQLUtil.getColumnNamesClause(entity.getJDBCPrimaryKeyFields()));
+ columnNamesClause.append(",");
+ columnNamesClause.append(SQLUtil.getColumnNamesClause(loadFields));
+ String tableName = entity.getTableName();
+ StringBuffer whereClause = new StringBuffer();
for(int i=0; i < keysCount; i++) {
if(i > 0) {
- sql.append(" OR ");
+ whereClause.append(" OR ");
}
- sql.append(SQLUtil.getWhereClause(
+ whereClause.append(SQLUtil.getWhereClause(
entity.getJDBCPrimaryKeyFields()));
}
-
- if(entity.getMetaData().hasSelectForUpdate()) {
- sql.append(" FOR UPDATE");
+
+ if (entity.getMetaData().hasRowLocking())
+ {
+ JDBCFunctionMappingMetaData rowLocking =
manager.getMetaData().getTypeMapping().getRowLockingTemplate();
+ if (rowLocking == null)
+ {
+ throw new IllegalStateException("row-locking is not allowed for this
type of datastore");
+ }
+ else
+ {
+ String[] args = new String[] {columnNamesClause.toString(),
tableName, whereClause.toString()};
+ sql.append(rowLocking.getFunctionSql(args));
+ }
+ }
+ else
+ {
+ sql.append("SELECT ").append(columnNamesClause);
+ sql.append(" FROM ").append(tableName);
+ sql.append(" WHERE ").append(whereClause);
}
lastKeysCount = keysCount;
1.9 +25 -10
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCLoadRelationCommand.java
Index: JDBCLoadRelationCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCLoadRelationCommand.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- JDBCLoadRelationCommand.java 2001/12/01 21:55:05 1.8
+++ JDBCLoadRelationCommand.java 2001/12/05 05:07:00 1.9
@@ -16,13 +16,15 @@
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMRFieldBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
import org.jboss.logging.Logger;
/**
* Loads relations for a particular entity from a relation table.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
- * @version $Revision: 1.8 $
+ * @version $Revision: 1.9 $
*/
public class JDBCLoadRelationCommand {
private JDBCStoreManager manager;
@@ -46,15 +48,28 @@
// generate SQL
StringBuffer sql = new StringBuffer();
- sql.append("SELECT ").append(SQLUtil.getColumnNamesClause(
- cmrField.getRelatedCMRField().getTableKeyFields()));
- sql.append(" FROM ");
- sql.append(cmrField.getRelationMetaData().getTableName());
- sql.append(" WHERE ").append(SQLUtil.getWhereClause(
- cmrField.getTableKeyFields()));
-
- if(cmrField.getRelationMetaData().hasSelectForUpdate()) {
- sql.append(" FOR UPDATE");
+ String columnNamesClause =
SQLUtil.getColumnNamesClause(cmrField.getRelatedCMRField().getTableKeyFields());
+ String tableName = cmrField.getRelationMetaData().getTableName();
+ String whereClause = SQLUtil.getWhereClause(cmrField.getTableKeyFields());
+
+ if (cmrField.getRelationMetaData().hasRowLocking())
+ {
+ JDBCFunctionMappingMetaData rowLocking =
manager.getMetaData().getTypeMapping().getRowLockingTemplate();
+ if (rowLocking == null)
+ {
+ throw new IllegalStateException("row-locking is not allowed for this
type of datastore");
+ }
+ else
+ {
+ String[] args = new String[] {columnNamesClause, tableName,
whereClause};
+ sql.append(rowLocking.getFunctionSql(args));
+ }
+ }
+ else
+ {
+ sql.append("SELECT ").append(columnNamesClause);
+ sql.append(" FROM ").append(tableName);
+ sql.append(" WHERE ").append(whereClause);
}
Connection con = null;
1.10 +25 -8
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCLoadFieldCommand.java
Index: JDBCLoadFieldCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCLoadFieldCommand.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- JDBCLoadFieldCommand.java 2001/12/01 21:55:04 1.9
+++ JDBCLoadFieldCommand.java 2001/12/05 05:07:00 1.10
@@ -18,6 +18,8 @@
import org.jboss.ejb.EntityEnterpriseContext;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
import org.jboss.logging.Logger;
/**
@@ -30,7 +32,7 @@
* fields.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.10 $
*/
public class JDBCLoadFieldCommand {
private JDBCStoreManager manager;
@@ -75,13 +77,28 @@
EntityEnterpriseContext ctx) {
StringBuffer sql = new StringBuffer();
- sql.append("SELECT ").append(SQLUtil.getColumnNamesClause(fields));
- sql.append(" FROM ").append(entity.getTableName());
- sql.append(" WHERE ").append(
- SQLUtil.getWhereClause(entity.getJDBCPrimaryKeyFields()));
-
- if(entity.getMetaData().hasSelectForUpdate()) {
- sql.append(" FOR UPDATE");
+ String columnNamesClause = SQLUtil.getColumnNamesClause(fields);
+ String tableName = entity.getTableName();
+ String whereClause = SQLUtil.getWhereClause(entity.getJDBCPrimaryKeyFields());
+
+ if (entity.getMetaData().hasRowLocking())
+ {
+ JDBCFunctionMappingMetaData rowLocking =
manager.getMetaData().getTypeMapping().getRowLockingTemplate();
+ if (rowLocking == null)
+ {
+ throw new IllegalStateException("row-locking is not allowed for this
type of datastore");
+ }
+ else
+ {
+ String[] args = new String[] {columnNamesClause, tableName,
whereClause};
+ sql.append(rowLocking.getFunctionSql(args));
+ }
+ }
+ else
+ {
+ sql.append("SELECT ").append(columnNamesClause);
+ sql.append(" FROM ").append(tableName);
+ sql.append(" WHERE ").append(whereClause);
}
Connection con = null;
1.12 +25 -8
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCLoadEntityCommand.java
Index: JDBCLoadEntityCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCLoadEntityCommand.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- JDBCLoadEntityCommand.java 2001/12/02 01:41:46 1.11
+++ JDBCLoadEntityCommand.java 2001/12/05 05:07:01 1.12
@@ -17,6 +17,8 @@
import org.jboss.ejb.EntityEnterpriseContext;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
import org.jboss.logging.Logger;
/**
@@ -32,7 +34,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Justin Forder</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Dirk Zimmermann</a>
* @author <a href="mailto:[EMAIL PROTECTED]">danch (Dan Christopherson)</a>
- * @version $Revision: 1.11 $
+ * @version $Revision: 1.12 $
*/
public class JDBCLoadEntityCommand {
private JDBCStoreManager manager;
@@ -64,13 +66,28 @@
// generate the sql
StringBuffer sql = new StringBuffer();
- sql.append("SELECT ").append(SQLUtil.getColumnNamesClause(loadFields));
- sql.append(" FROM ").append(entity.getTableName());
- sql.append(" WHERE ").append(
- SQLUtil.getWhereClause(entity.getJDBCPrimaryKeyFields()));
-
- if(entity.getMetaData().hasSelectForUpdate()) {
- sql.append(" FOR UPDATE");
+ String columnNamesClause = SQLUtil.getColumnNamesClause(loadFields);
+ String tableName = entity.getTableName();
+ String whereClause = SQLUtil.getWhereClause(entity.getJDBCPrimaryKeyFields());
+
+ if (entity.getMetaData().hasRowLocking())
+ {
+ JDBCFunctionMappingMetaData rowLocking =
manager.getMetaData().getTypeMapping().getRowLockingTemplate();
+ if (rowLocking == null)
+ {
+ throw new IllegalStateException("row-locking is not allowed for this
type of datastore");
+ }
+ else
+ {
+ String[] args = new String[] {columnNamesClause, tableName,
whereClause};
+ sql.append(rowLocking.getFunctionSql(args));
+ }
+ }
+ else
+ {
+ sql.append("SELECT ").append(columnNamesClause);
+ sql.append(" FROM ").append(tableName);
+ sql.append(" WHERE ").append(whereClause);
}
Connection con = null;
1.10 +24 -8
jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCFindByForeignKeyCommand.java
Index: JDBCFindByForeignKeyCommand.java
===================================================================
RCS file:
/cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/jdbc/JDBCFindByForeignKeyCommand.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- JDBCFindByForeignKeyCommand.java 2001/12/01 21:55:04 1.9
+++ JDBCFindByForeignKeyCommand.java 2001/12/05 05:07:01 1.10
@@ -14,6 +14,8 @@
import java.util.Set;
import javax.ejb.EJBException;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCFunctionMappingMetaData;
+import org.jboss.ejb.plugins.cmp.jdbc.metadata.JDBCTypeMappingMetaData;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCCMPFieldBridge;
import org.jboss.ejb.plugins.cmp.jdbc.bridge.JDBCEntityBridge;
import org.jboss.logging.Logger;
@@ -23,9 +25,10 @@
* entity's table.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dain Sundstrom</a>
- * @version $Revision: 1.9 $
+ * @version $Revision: 1.10 $
*/
public class JDBCFindByForeignKeyCommand {
+
private JDBCStoreManager manager;
private JDBCEntityBridge entity;
private Logger log;
@@ -39,6 +42,7 @@
this.getClass().getName() +
"." +
manager.getMetaData().getName());
+
}
public Set execute(Object foreignKey,
@@ -46,15 +50,27 @@
// generate SQL
StringBuffer sql = new StringBuffer();
- sql.append("SELECT ").append(SQLUtil.getColumnNamesClause(
- entity.getJDBCPrimaryKeyFields()));
- sql.append(" FROM ").append(entity.getTableName());
- sql.append(" WHERE ").append(SQLUtil.getWhereClause(foreignKeyFields));
+ String columnNamesClause =
SQLUtil.getColumnNamesClause(entity.getJDBCPrimaryKeyFields());
+ String tableName = entity.getTableName();
+ String whereClause = SQLUtil.getWhereClause(foreignKeyFields);
- if(entity.getMetaData().hasSelectForUpdate()) {
- sql.append(" FOR UPDATE");
+ if (entity.getMetaData().hasRowLocking())
+ {
+ JDBCFunctionMappingMetaData rowLocking =
manager.getMetaData().getTypeMapping().getRowLockingTemplate();
+ if (rowLocking == null)
+ {
+ throw new IllegalStateException("row-locking is not allowed for this
type of datastore");
+ }
+ String[] args = new String[] {columnNamesClause, tableName, whereClause};
+ sql.append(rowLocking.getFunctionSql(args));
}
-
+ else
+ {
+ sql.append("SELECT ").append(columnNamesClause);
+ sql.append(" FROM ").append(tableName);
+ sql.append(" WHERE ").append(whereClause);
+ }
+
Connection con = null;
PreparedStatement ps = null;
try {
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development