gdamour     2006/01/31 08:31:07

  Modified:    modules/openejb-builder/src/java/org/openejb/deployment
                        SchemataBuilder.java
  Log:

  GERONIMO-1545 CMP update statements will cause incorrect trigger firing
  in a database
  
  The optional flag <static-sql> can be used to control the way a CMP is
  updated. By default, an UPDATE statement is dynamically generated each time
  that a CMP needs to be persisted. This statement only updates the columns
  which have been updated during the transaction,
  
  When <static-sql> is set, a single UPDATE statement is generated whatever
  the CMP fields to be actually updated. This was the previous strategy.
  
  Revision  Changes    Path
  1.6       +15 -4     
openejb/modules/openejb-builder/src/java/org/openejb/deployment/SchemataBuilder.java
  
  Index: SchemataBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/SchemataBuilder.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- SchemataBuilder.java      3 Dec 2005 22:47:29 -0000       1.5
  +++ SchemataBuilder.java      31 Jan 2006 13:31:07 -0000      1.6
  @@ -108,13 +108,16 @@
   import org.tranql.sql.BaseSQLSchema;
   import org.tranql.sql.Column;
   import org.tranql.sql.DBSyntaxFactory;
  +import org.tranql.sql.DynamicCommandBuilder;
   import org.tranql.sql.EJBQLCompilerFactory;
   import org.tranql.sql.EndTable;
   import org.tranql.sql.FKColumn;
   import org.tranql.sql.JoinTable;
   import org.tranql.sql.SQLSchema;
  +import org.tranql.sql.StaticCommandBuilder;
   import org.tranql.sql.Table;
   import org.tranql.sql.TypeConverter;
  +import org.tranql.sql.UpdateCommandBuilder;
   import org.tranql.sql.jdbc.SQLTypeLoader;
   import org.tranql.sql.prefetch.PrefetchGroupDictionary;
   import org.tranql.sql.prefetch.PrefetchGroupDictionary.EndTableDesc;
  @@ -177,7 +180,8 @@
               processEnterpriseBeans(ejbJar, openejbEjbJar, cl);
               processRelationships(ejbJar, openejbEjbJar);
               processGroups(openejbEjbJar);
  -            GlobalSchemaLoader.populateGlobalSchema(globalSchema, ejbSchema, 
sqlSchema);
  +            GlobalSchemaLoader loader = new GlobalSchemaLoader(globalSchema, 
ejbSchema, sqlSchema);
  +            loader.build();
               processEnterpriseBeanCaches(openejbEjbJar);
           } catch (Exception e) {
               throw new DeploymentException("Could not deploy module", e);
  @@ -371,7 +375,14 @@
               ejb = new EJB(ejbName, abstractSchemaName, pkClass, 
proxyFactory, keyGenerator, unknownPK);
   
               Table table = new Table(ejbName, openEjbEntity.getTableName());
  -
  +            UpdateCommandBuilder commandBuilder;
  +            if (openEjbEntity.isSetStaticSql()) {
  +                commandBuilder = new StaticCommandBuilder(ejbName, 
ejbSchema, sqlSchema, globalSchema);
  +            } else {
  +                commandBuilder = new DynamicCommandBuilder(ejbName, 
ejbSchema, sqlSchema, globalSchema);
  +            }
  +            table.setCommandBuilder(commandBuilder);
  +            
               Set pkFieldNames;
               if ( unknownPK && openEjbEntity.isSetPrimkeyField() ) {
                   pkFieldNames = new HashSet(1);
  
  
  

Reply via email to