Author: jgbutler
Date: Thu Aug 10 14:52:22 2006
New Revision: 430555

URL: http://svn.apache.org/viewvc?rev=430555&view=rev
Log:
More changes and documentation for IBATIS-328 - add ability to generate a flat 
domain model in Abator.  Also added the updateByPrimaryKeySelective statement.

Added:
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorLegacyImpl.java
      - copied, changed from r428963, 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorDefaultImpl.java
Removed:
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorDefaultImpl.java
Modified:
    ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/afterRunning.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javadao.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javamodel.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/sqlmap.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/reference/extending.html
    ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/DAOMethodNameCalculator.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/SqlMapGenerator.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/LegacyGeneratorSet.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/DefaultDAOMethodNameCalculator.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/ExtendedDAOMethodNameCalculator.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/ColumnDefinition.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseDAOGenerator.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseLegacyDAOGenerator.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava2Impl.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava5Impl.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/rules/AbatorRules.java
    
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorIterateImpl.java

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/afterRunning.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/afterRunning.html?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/afterRunning.html 
(original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/afterRunning.html 
Thu Aug 10 14:52:22 2006
@@ -86,7 +86,7 @@
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE daoConfig
    PUBLIC "-//ibatis.apache.org//DTD DAO Configuration 2.0//EN"
-   "http://www.ibatis.com/dtd/dao-2.dtd">
+   "http://ibatis.apache.org/dtd/dao-2.dtd">
 
   <daoConfig>
     <context>

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javadao.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javadao.html?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javadao.html
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javadao.html
 Thu Aug 10 14:52:22 2006
@@ -41,9 +41,10 @@
   <li>deleteByExample</li>
   <li>insert</li>
   <li>selectByPrimaryKey</li>
-  <li>selectByExample (with an override to specify an order by columns)</li>
-  <li>selectByExampleWithBLOBs (with an override to specify an order by 
columns)</li>
+  <li>selectByExample</li>
+  <li>selectByExampleWithBLOBs</li>
   <li>updateByPrimaryKey (with an override to specify whether or not to update 
BLOB columns)</li>
+  <li>updateByPrimaryKeySelective (will only update non-null fields in the 
parameter class)</li>
 </ul>
 <p>Abator attempts to make it easier to deal with tables that contain BLOBs by 
generating
 different objects and methods so that you can use the BLOB fields, or ignore 
them, depending

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javamodel.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javamodel.html?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javamodel.html
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/javamodel.html
 Thu Aug 10 14:52:22 2006
@@ -13,7 +13,7 @@
 The generated classes are a type of domain object, but should in no way be 
confused
 with a rich domain model (see the <a href="../philosophy.html">Philosophy</a> 
page
 for more on this subject).  Abator generates different types of "domain" 
objects based on
-the characteristics of the table.</p>
+the characteristics of the table and configuration options.</p>
 
 <p>Every field and method generated by Abator includes the non-standard 
JavaDoc tag
 <code>@abatorgenerated</code>.  When run as an Eclipse plugin,
@@ -27,9 +27,16 @@
 <code>@abatorgenerated</code> JavaDoc tag to know what is safe to delete from 
a prior
 version of a file.</p>
 <p>The following sections describe the different types of "domain" classes 
that will be
-generated by Abator.</p>
-
-<p>Any column ignored by an <code>&lt;ignoreColumn&gt;</code> configuration 
element will
+generated by Abator.  Abator will generate different types of domain classes 
depending
+on the value of the <code>defaultModelType</code> attribute of the
+<a href="../configreference/abatorContext.html">&lt;abatorContext&gt;</a>
+configuration element and the <code>modelType</code> attribute of the
+<a href="../configreference/table.html">&lt;table&gt;</a>
+configuration element.</p>
+
+<p>Any column ignored by an
+<a href="../configreference/ignoreColumn.html">&lt;ignoreColumn&gt;</a>
+configuration element will
 by ignored and not added to any generated Java class.</p>
 
 <p>Note: in the following descriptions, the term "BLOB" is used to refer to 
any column
@@ -45,7 +52,10 @@
 <code>&laquo;domainObjectName&raquo;Key</code> if the 
<code>domainObjectName</code>
 attribute is specified on the <code>&lt;table&gt;</code> configuration 
element.</p>
 
-<p>This class will be generated if the table has a primary key.</p>
+<p>This class will be generated in the hierarchical model if the table has a 
primary key.
+This class will be generated in the conditional model if the table has more
+then one column in the primary key.  This class will not be generated in the 
flat
+model.</p>
 
 <h2>Record Class</h2>
 <p>This class will contain properties for each non-BLOB and non-primary key 
column in the table.
@@ -58,7 +68,11 @@
 <code>&laquo;domainObjectName&raquo;</code> if the 
<code>domainObjectName</code>
 attribute is specified on the <code>&lt;table&gt;</code> configuration 
element.</p>
 
-<p>This class will be generated if the table has non-BLOB and non-primary key 
columns.</p>
+<p>This class will be generated in the hierarchical model if the table has 
non-BLOB
+and non-primary key columns.  This class will be generated in the conditional 
model
+if the table has non-BLOB and non-primary key columns, or if there is only
+one primary key column or one BLOB column.  This class is always generated in 
the
+flat model.</p>
 
 <h2>Record With BLOBs Class</h2>
 <p>This class will contain properties for each BLOB column in the table.
@@ -76,7 +90,9 @@
 <code>&laquo;domainObjectName&raquo;WithBLOBs</code> if the 
<code>domainObjectName</code>
 attribute is specified on the <code>&lt;table&gt;</code> configuration 
element.</p>
 
-<p>This class will be generated if the table has any BLOB columns.</p>
+<p>This class will be generated in the hierarchical model if the table has any 
BLOB columns.
+This class will be generated in the conditional model if the table has more 
than one
+BLOB column.  This class will not be generated in the flat model.</p>
 
 <h2>Example Class</h2>
 <p>This class is used to work with Abator's dynamic select capability.

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/sqlmap.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/sqlmap.html?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/sqlmap.html
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/generatedobjects/sqlmap.html
 Thu Aug 10 14:52:22 2006
@@ -115,6 +115,16 @@
 <p>This element will be generated if the table has a primary key, the table 
has BLOB columns,
  and the update by primary key statement is enabled.</p>
 
+<h2>Update By Primary Key Selective</h2>
+<p>This element is an update statement that will update one row - designated 
by the primary
+key.  The update statement will update only the fields in the table whose 
corresponding
+property in the parameter object is non-null.  This statement can be used to 
update
+certain columns in a record without affecting all columns in the record.  
<b>Important:</b>
+if the column has been mapped to a primitive type, then the column will always 
be
+updated.</p>
+<p>This element will be generated if the table has a primary key, and the 
update by primary
+key statement is enabled.</p>
+
 <h2>Delete By Primary Key</h2>
 <p>This element is a delete statement that will delete one row in the table - 
designated by the
 primary key.</p>

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/reference/extending.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/reference/extending.html?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/reference/extending.html
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/reference/extending.html
 Thu Aug 10 14:52:22 2006
@@ -11,8 +11,8 @@
 <h1>Extending Abator</h1>
 <p>Abator is designed for extensibility.  All code generation is performed 
using a
 simple DOM representation of Java and XML elements that is included with 
Abator.</p>
-<p>The Java DOM is included in the package 
<code>org.apache.ibatis.abator.api.dom.java</code>.</p>
-<p>The XML DOM is included in the package 
<code>org.apache.ibatis.abator.api.dom.xml</code>.</p>
+<p>The Java DOM is included in the package 
<code>org.apache.ibatis.abator.api.dom.java</code></p>
+<p>The XML DOM is included in the package 
<code>org.apache.ibatis.abator.api.dom.xml</code></p>
 <p>These classes are not sufficient for every conceivable code generation 
possibility, but they are quite
 useful for generating simple to moderately complex Java and XML code.</p>
 
@@ -39,15 +39,15 @@
   </tr>
   <tr>
     <td>Legacy (the default value)</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorLegacyImpl</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorLegacyImpl</code></td>
   </tr>
   <tr>
     <td>Java2</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorJava2Impl</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorJava2Impl</code></td>
   </tr>
   <tr>
     <td>Java5</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorJava5Impl</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorJava5Impl</code></td>
   </tr>
 </table>
 
@@ -74,11 +74,11 @@
   </tr>
   <tr>
     <td>Legacy (the default value)</td>
-    
<td><code>org.apache.ibatis.abator.internal.sqlmap.SqlMapGeneratorDefaultImpl</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.sqlmap.SqlMapGeneratorLegacyImpl</code></td>
   </tr>
   <tr>
     <td>Java2 or Java5</td>
-    
<td><code>org.apache.ibatis.abator.internal.sqlmap.SqlMapGeneratorIterateImpl</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.sqlmap.SqlMapGeneratorIterateImpl</code></td>
   </tr>
 </table>
 
@@ -107,51 +107,51 @@
   </tr>
   <tr>
     <td nowrap="nowrap">Legacy/IBATIS</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.IbatisLegacyDAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.IbatisLegacyDAOGenerator</code></td>
   </tr>
   <tr>
     <td>Legacy/GENERIC-CI</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericCILegacyDAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericCILegacyDAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Legacy/GENERIC-SI</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericSILegacyDAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericSILegacyDAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Legacy/SPRING</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.SpringLegacyDAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.SpringLegacyDAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java2/IBATIS</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.IbatisJava2DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.IbatisJava2DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java2/GENERIC-CI</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericCIJava2DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericCIJava2DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java2/GENERIC-SI</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericSIJava2DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericSIJava2DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java2/SPRING</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.SpringJava2DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.SpringJava2DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java5/IBATIS</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.IbatisJava5DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.IbatisJava5DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java5/GENERIC-CI</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericCIJava5DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericCIJava5DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java5/GENERIC-SI</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericSIJava5DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.GenericSIJava5DAOGenerator</code></td>
   </tr>
   <tr>
     <td nowrap="nowrap">Java5/SPRING</td>
-    
<td><code>org.apache.ibatis.abator.internal.java.dao.SpringJava5DAOGenerator</code>.</td>
+    
<td><code>org.apache.ibatis.abator.internal.java.dao.SpringJava5DAOGenerator</code></td>
   </tr>
 </table>
 

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html 
(original)
+++ ibatis/trunk/java/mapper/mapper2/tools/abator/core/htmldoc/whatsNew.html 
Thu Aug 10 14:52:22 2006
@@ -86,6 +86,15 @@
 <p><b>Important:</b> the default value is conditional - this is a non-backward 
compatible
 change from previous versions of Abator.</p>
 
+<h2>updateByPrimaryKeySelective (Version 0.7.0)</h2>
+<p>This is a new mapped SQL statement, and new DAO method, that will only
+update columns whose corresponding properties in the parameter class are 
non-null.
+This can be used to update certain
+columns in a record without needing to update the entire record.
+</p>
+<p><b>Important:</b> any column that is mapped to a primitive type
+will always be updated.</p>
+
 <h2>Version 0.7.0 Miscellaneous Changes</h2>
 <ul>
   <li>Added the ability to specify a table alias.  This aids in reuse of 
generated

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/DAOMethodNameCalculator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/DAOMethodNameCalculator.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/DAOMethodNameCalculator.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/DAOMethodNameCalculator.java
 Thu Aug 10 14:52:22 2006
@@ -52,6 +52,15 @@
     String getUpdateByPrimaryKeyWithBLOBsMethodName(IntrospectedTable 
introspectedTable);
     
     /**
+     * Calculates and returns a name for the update by primary key selective
+     * method.
+     * 
+     * @param introspectedTable
+     * @return the calculated name
+     */
+    String getUpdateByPrimaryKeySelectiveMethodName(IntrospectedTable 
introspectedTable);
+    
+    /**
      * Calculates and returns a name for the select by primary key method.
      * 
      * @param introspectedTable

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/SqlMapGenerator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/SqlMapGenerator.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/SqlMapGenerator.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/api/SqlMapGenerator.java
 Thu Aug 10 14:52:22 2006
@@ -72,6 +72,8 @@
 
     String getUpdateByPrimaryKeyWithBLOBsStatementId();
 
+    String getUpdateByPrimaryKeySelectiveStatementId();
+    
     String getUpdateByPrimaryKeyStatementId();
 
     String getDeleteByPrimaryKeyStatementId();

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/LegacyGeneratorSet.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/LegacyGeneratorSet.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/LegacyGeneratorSet.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/config/LegacyGeneratorSet.java
 Thu Aug 10 14:52:22 2006
@@ -21,7 +21,7 @@
 import org.apache.ibatis.abator.internal.java.dao.IbatisLegacyDAOGenerator;
 import org.apache.ibatis.abator.internal.java.dao.SpringLegacyDAOGenerator;
 import 
org.apache.ibatis.abator.internal.java.model.JavaModelGeneratorLegacyImpl;
-import org.apache.ibatis.abator.internal.sqlmap.SqlMapGeneratorDefaultImpl;
+import org.apache.ibatis.abator.internal.sqlmap.SqlMapGeneratorLegacyImpl;
 import org.apache.ibatis.abator.internal.types.JavaTypeResolverDefaultImpl;
 
 /**
@@ -37,7 +37,7 @@
         super();
         super.javaModelGeneratorType = 
JavaModelGeneratorLegacyImpl.class.getName();
         super.javaTypeResolverType = 
JavaTypeResolverDefaultImpl.class.getName();
-        super.sqlMapGeneratorType = SqlMapGeneratorDefaultImpl.class.getName();
+        super.sqlMapGeneratorType = SqlMapGeneratorLegacyImpl.class.getName();
     }
 
     public String translateDAOGeneratorType(String configurationType) {

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/DefaultDAOMethodNameCalculator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/DefaultDAOMethodNameCalculator.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/DefaultDAOMethodNameCalculator.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/DefaultDAOMethodNameCalculator.java
 Thu Aug 10 14:52:22 2006
@@ -118,4 +118,8 @@
     public String getSelectByPrimaryKeyMethodName(IntrospectedTable 
introspectedTable) {
         return "selectByPrimaryKey"; //$NON-NLS-1$
     }
+
+    public String getUpdateByPrimaryKeySelectiveMethodName(IntrospectedTable 
introspectedTable) {
+        return "updateByPrimaryKeySelective"; //$NON-NLS-1$
+    }
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/ExtendedDAOMethodNameCalculator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/ExtendedDAOMethodNameCalculator.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/ExtendedDAOMethodNameCalculator.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/ExtendedDAOMethodNameCalculator.java
 Thu Aug 10 14:52:22 2006
@@ -160,4 +160,14 @@
         
         return sb.toString();
     }
+
+
+    public String getUpdateByPrimaryKeySelectiveMethodName(IntrospectedTable 
introspectedTable) {
+        StringBuffer sb = new StringBuffer();
+        sb.append("update"); //$NON-NLS-1$
+        sb.append(introspectedTable.getTable().getDomainObjectName());
+        sb.append("ByPrimaryKeySelective"); //$NON-NLS-1$
+        
+        return sb.toString();
+    }
 }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/ColumnDefinition.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/ColumnDefinition.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/ColumnDefinition.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/db/ColumnDefinition.java
 Thu Aug 10 14:52:22 2006
@@ -15,6 +15,9 @@
  */
 package org.apache.ibatis.abator.internal.db;
 
+import java.sql.Types;
+
+import org.apache.ibatis.abator.api.dom.java.FullyQualifiedJavaType;
 import org.apache.ibatis.abator.internal.types.ResolvedJavaType;
 import org.apache.ibatis.abator.internal.util.StringUtility;
 
@@ -200,9 +203,16 @@
                 || "LONGVARCHAR".equals(typeName) || "CLOB".equals(typeName); 
//$NON-NLS-1$ //$NON-NLS-2$
     }
 
-    public boolean isCharacterColumn() {
-        return "java.lang.String".equals(resolvedJavaType //$NON-NLS-1$
-                .getFullyQualifiedJavaType().getFullyQualifiedName());
+    public boolean isStringColumn() {
+        return resolvedJavaType.getFullyQualifiedJavaType() == 
+            FullyQualifiedJavaType.getStringInstance();
+    }
+    
+    public boolean isJdbcCharacterColumn() {
+        return jdbcType == Types.CHAR
+            || jdbcType == Types.CLOB
+            || jdbcType == Types.LONGVARCHAR
+            || jdbcType == Types.VARCHAR;
     }
 
     public String getJavaProperty() {

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseDAOGenerator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseDAOGenerator.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseDAOGenerator.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseDAOGenerator.java
 Thu Aug 10 14:52:22 2006
@@ -297,6 +297,17 @@
             }
         }
 
+        if 
(introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
+            methods = getUpdateByPrimaryKeySelectiveMethods(introspectedTable,
+                    false, answer);
+            if (methods != null) {
+                iter = methods.iterator();
+                while (iter.hasNext()) {
+                    answer.addMethod((Method) iter.next());
+                }
+            }
+        }
+
         if 
(introspectedTable.getRules().generateSelectByExampleWithoutBLOBs()) {
             methods = getSelectByExampleWithoutBLOBsMethods(introspectedTable, 
false, answer);
             if (methods != null) {
@@ -422,6 +433,17 @@
             }
         }
 
+        if 
(introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
+            methods = getUpdateByPrimaryKeySelectiveMethods(introspectedTable,
+                    true, answer);
+            if (methods != null) {
+                iter = methods.iterator();
+                while (iter.hasNext()) {
+                    answer.addMethod((Method) iter.next());
+                }
+            }
+        }
+
         if 
(introspectedTable.getRules().generateSelectByExampleWithoutBLOBs()) {
             methods = getSelectByExampleWithoutBLOBsMethods(introspectedTable, 
true, answer);
             if (methods != null) {
@@ -662,6 +684,54 @@
             sb.append(daoTemplate.getUpdateMethod(sqlMapGenerator
                     .getSqlMapNamespace(table), sqlMapGenerator
                     .getUpdateByPrimaryKeyWithBLOBsStatementId(), "record")); 
//$NON-NLS-1$
+            method.addBodyLine(sb.toString());
+
+            method.addBodyLine("return rows;"); //$NON-NLS-1$
+        }
+
+        ArrayList answer = new ArrayList();
+        answer.add(method);
+
+        return answer;
+    }
+
+    protected List getUpdateByPrimaryKeySelectiveMethods(
+            IntrospectedTable introspectedTable, boolean interfaceMethod,
+            CompilationUnit compilationUnit) {
+
+        FullyQualifiedTable table = introspectedTable.getTable();
+        FullyQualifiedJavaType parameterType;
+        
+        if (introspectedTable.getRules().generateRecordWithBLOBsClass()) {
+            parameterType = javaModelGenerator.getRecordWithBLOBsType(table);
+        } else {
+            parameterType = javaModelGenerator.getBaseRecordType(table);
+        }
+        
+        compilationUnit.addImportedType(parameterType);
+
+        Method method = new Method();
+        method.addComment(table);
+        method.setVisibility(JavaVisibility.PUBLIC);
+        method.setReturnType(FullyQualifiedJavaType.getIntInstance());
+        
method.setName(methodNameCalculator.getUpdateByPrimaryKeySelectiveMethodName(introspectedTable));
+        method.addParameter(new Parameter(parameterType, "record")); 
//$NON-NLS-1$
+
+        Iterator iter = daoTemplate.getCheckedExceptions().iterator();
+        while (iter.hasNext()) {
+            FullyQualifiedJavaType fqjt = (FullyQualifiedJavaType) iter.next();
+            method.addException(fqjt);
+            compilationUnit.addImportedType(fqjt);
+        }
+
+        if (!interfaceMethod) {
+            // generate the implementation method
+            StringBuffer sb = new StringBuffer();
+
+            sb.append("int rows = "); //$NON-NLS-1$
+            sb.append(daoTemplate.getUpdateMethod(sqlMapGenerator
+                    .getSqlMapNamespace(table), sqlMapGenerator
+                    .getUpdateByPrimaryKeySelectiveStatementId(), "record")); 
//$NON-NLS-1$
             method.addBodyLine(sb.toString());
 
             method.addBodyLine("return rows;"); //$NON-NLS-1$

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseLegacyDAOGenerator.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseLegacyDAOGenerator.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseLegacyDAOGenerator.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/dao/BaseLegacyDAOGenerator.java
 Thu Aug 10 14:52:22 2006
@@ -355,7 +355,7 @@
         while (clauseIterator.hasNext()) {
             ExampleClause clause = (ExampleClause) clauseIterator.next();
 
-            if (clause.isCharacterOnly() && !cd.isCharacterColumn()) {
+            if (clause.isCharacterOnly() && !cd.isJdbcCharacterColumn()) {
                 continue;
             }
 

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava2Impl.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava2Impl.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava2Impl.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava2Impl.java
 Thu Aug 10 14:52:22 2006
@@ -189,7 +189,7 @@
             method.setName(JavaBeansUtil.getSetterMethodName(property));
             method.addParameter(new Parameter(fqjt, property));
 
-            if (trimStrings && cd.isCharacterColumn()) {
+            if (trimStrings && cd.isStringColumn()) {
                 sb.setLength(0);
                 sb.append("if ("); //$NON-NLS-1$
                 sb.append(property);
@@ -1071,7 +1071,7 @@
             answer.addMethod(getSetLessThanMethod(cd));
             answer.addMethod(getSetLessThanOrEqualMethod(cd));
 
-            if (cd.isCharacterColumn()) {
+            if (cd.isJdbcCharacterColumn()) {
                 answer.addMethod(getSetLikeMethod(cd));
                 answer.addMethod(getSetNotLikeMethod(cd));
             }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava5Impl.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava5Impl.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava5Impl.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/java/model/JavaModelGeneratorJava5Impl.java
 Thu Aug 10 14:52:22 2006
@@ -455,7 +455,7 @@
             answer.addMethod(getSetLessThanMethod(cd));
             answer.addMethod(getSetLessThanOrEqualMethod(cd));
 
-            if (cd.isCharacterColumn()) {
+            if (cd.isJdbcCharacterColumn()) {
                 answer.addMethod(getSetLikeMethod(cd));
                 answer.addMethod(getSetNotLikeMethod(cd));
             }

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/rules/AbatorRules.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/rules/AbatorRules.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/rules/AbatorRules.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/rules/AbatorRules.java
 Thu Aug 10 14:52:22 2006
@@ -115,6 +115,23 @@
     }
 
     /**
+     * Implements the rule for generating the update by primary key selective
+     * SQL Map element and DAO method. If the table has a primary key as well 
as
+     * other fields, and the updateByPrimaryKey statement is allowed, then
+     * generate the element and method.
+     * 
+     * @return true if the element and method should be generated
+     */
+    public boolean generateUpdateByPrimaryKeySelective() {
+        boolean rc = tableConfiguration.isUpdateByPrimaryKeyStatementEnabled()
+            && columnDefinitions.hasPrimaryKeyColumns()
+            && (columnDefinitions.hasBLOBColumns()
+                    || columnDefinitions.hasBaseColumns());
+    
+        return rc;
+    }
+
+    /**
      * Implements the rule for generating the delete by primary key SQL Map
      * element and DAO method. If the table has a primary key, and the
      * deleteByPrimaryKey statement is allowed, then generate the element and

Modified: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorIterateImpl.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorIterateImpl.java?rev=430555&r1=430554&r2=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorIterateImpl.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorIterateImpl.java
 Thu Aug 10 14:52:22 2006
@@ -247,6 +247,13 @@
             }
         }
 
+        if 
(introspectedTable.getRules().generateUpdateByPrimaryKeySelective()) {
+            element = getUpdateByPrimaryKeySelective(introspectedTable);
+            if (element != null) {
+                answer.addElement(element);
+            }
+        }
+
         return answer;
     }
 
@@ -946,6 +953,10 @@
         return "abatorgenerated_updateByPrimaryKey"; //$NON-NLS-1$
     }
 
+    public String getUpdateByPrimaryKeySelectiveStatementId() {
+        return "abatorgenerated_updateByPrimaryKeySelective"; //$NON-NLS-1$
+    }
+    
     /**
      * Calculates the package for the current table.
      * 
@@ -1343,5 +1354,84 @@
      */
     public void setWarnings(List warnings) {
         this.warnings = warnings;
+    }
+
+    /**
+     * This method should return an XmlElement for the update by primary key
+     * statement that updates all fields in the table - but only if the field 
is
+     * not null in the parameter object.
+     * 
+     * @param introspectedTable
+     * @return the update element
+     */
+    protected XmlElement getUpdateByPrimaryKeySelective(IntrospectedTable 
introspectedTable) {
+
+        XmlElement answer = new XmlElement("update"); //$NON-NLS-1$
+        FullyQualifiedTable table = introspectedTable.getTable();
+
+        answer.addAttribute(new Attribute(
+                "id", getUpdateByPrimaryKeySelectiveStatementId())); 
//$NON-NLS-1$
+
+        FullyQualifiedJavaType parameterType;
+        
+        if (introspectedTable.getRules().generateRecordWithBLOBsClass()) {
+            parameterType = javaModelGenerator.getRecordWithBLOBsType(table);
+        } else {
+            parameterType = javaModelGenerator.getBaseRecordType(table);
+        }
+        
+        answer.addAttribute(new Attribute("parameterClass", //$NON-NLS-1$
+                parameterType.getFullyQualifiedName()));
+
+        answer.addComment();
+
+        StringBuffer sb = new StringBuffer();
+
+        sb.append("update "); //$NON-NLS-1$
+        sb.append(table.getFullyQualifiedTableName());
+        answer.addElement(new TextElement(sb.toString()));
+
+        XmlElement dynamicElement = new XmlElement("dynamic"); //$NON-NLS-1$
+        dynamicElement.addAttribute(new Attribute("prepend", "set")); 
//$NON-NLS-1$ //$NON-NLS-2$
+        answer.addElement(dynamicElement);
+
+        Iterator iter = introspectedTable.getNonPrimaryKeyColumns();
+        while (iter.hasNext()) {
+            ColumnDefinition cd = (ColumnDefinition) iter.next();
+            
+            XmlElement isNotNullElement = new XmlElement("isNotNull"); 
//$NON-NLS-1$
+            isNotNullElement.addAttribute(new Attribute("prepend", ",")); 
//$NON-NLS-1$ //$NON-NLS-2$
+            isNotNullElement.addAttribute(new Attribute("property", 
cd.getJavaProperty())); //$NON-NLS-1$
+            dynamicElement.addElement(isNotNullElement);
+
+            sb.setLength(0);
+            sb.append(cd.getColumnName());
+            sb.append(" = "); //$NON-NLS-1$
+            sb.append(cd.getIbatisFormattedParameterClause());
+            
+            isNotNullElement.addElement(new TextElement(sb.toString()));
+        }
+
+        boolean and = false;
+        iter = introspectedTable.getPrimaryKeyColumns();
+        while (iter.hasNext()) {
+            ColumnDefinition cd = (ColumnDefinition) iter.next();
+
+            sb.setLength(0);
+            if (and) {
+                sb.append("  and "); //$NON-NLS-1$
+            } else {
+                sb.append("where "); //$NON-NLS-1$
+                and = true;
+            }
+
+            sb.append(cd.getColumnName());
+            sb.append(" = #"); //$NON-NLS-1$
+            sb.append(cd.getJavaProperty());
+            sb.append('#');
+            answer.addElement(new TextElement(sb.toString()));
+        }
+
+        return answer;
     }
 }

Copied: 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorLegacyImpl.java
 (from r428963, 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorDefaultImpl.java)
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorLegacyImpl.java?p2=ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorLegacyImpl.java&p1=ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorDefaultImpl.java&r1=428963&r2=430555&rev=430555&view=diff
==============================================================================
--- 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorDefaultImpl.java
 (original)
+++ 
ibatis/trunk/java/mapper/mapper2/tools/abator/core/src/org/apache/ibatis/abator/internal/sqlmap/SqlMapGeneratorLegacyImpl.java
 Thu Aug 10 14:52:22 2006
@@ -34,12 +34,12 @@
  *
  * @author Jeff Butler
  */
-public class SqlMapGeneratorDefaultImpl extends SqlMapGeneratorIterateImpl 
implements SqlMapGenerator {
+public class SqlMapGeneratorLegacyImpl extends SqlMapGeneratorIterateImpl 
implements SqlMapGenerator {
 
     /**
      * Constructs an instance of SqlMapGeneratorDefaultImpl
      */
-    public SqlMapGeneratorDefaultImpl() {
+    public SqlMapGeneratorLegacyImpl() {
         super();
     }
 
@@ -104,7 +104,7 @@
             while (clauseIterator.hasNext()) {
                 ExampleClause ec = (ExampleClause) clauseIterator.next();
 
-                if (ec.isCharacterOnly() && !cd.isCharacterColumn()) {
+                if (ec.isCharacterOnly() && !cd.isJdbcCharacterColumn()) {
                     continue;
                 }
 


Reply via email to