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

Reply via email to