haul        2003/07/01 04:23:19

  Modified:    src/blocks/databases/java/org/apache/cocoon/acting/modular
                        DatabaseUpdateAction.java DatabaseAddAction.java
                        DatabaseAction.java
  Log:
    <action dev="CH" type="update">
      Added feature to allow a database action (i.e. delete) not to fail if no
      row was affected. Formating.
    </action>
  
  Revision  Changes    Path
  1.2       +15 -12    
cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/acting/modular/DatabaseUpdateAction.java
  
  Index: DatabaseUpdateAction.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/acting/modular/DatabaseUpdateAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DatabaseUpdateAction.java 9 Mar 2003 00:03:04 -0000       1.1
  +++ DatabaseUpdateAction.java 1 Jul 2003 11:23:19 -0000       1.2
  @@ -126,21 +126,24 @@
                   fillModes( values, false, defaultModeNames, modeTypes, queryData );
   
                   StringBuffer queryBuffer = new StringBuffer("UPDATE ");
  -                queryBuffer.append(table.getAttribute("name")).append(" SET ");
  +                queryBuffer.append(table.getAttribute("name"));
   
  -
  -                int cols = 0;
  -                for (int i = 0; i < queryData.columns.length; i++) {
  -                    if ( !queryData.columns[i].isKey ) {
  -                        if ( cols > 0 ) {
  -                            queryBuffer.append(", ");
  +                if (values.length > 0){
  +                    queryBuffer.append(" SET ");
  +                    int cols = 0;
  +                    for (int i = 0; i < queryData.columns.length; i++) {
  +                        if ( !queryData.columns[i].isKey ) {
  +                            if ( cols > 0 ) {
  +                                queryBuffer.append(", ");
  +                            }   
  +                            cols++;
  +                            queryBuffer
  +                                .append( 
queryData.columns[i].columnConf.getAttribute( "name" ) )
  +                                .append( "= ?" );
                           }
  -                        cols++;
  -                        queryBuffer
  -                            .append( queryData.columns[i].columnConf.getAttribute( 
"name" ) )
  -                            .append( "= ?" );
                       }
                   }
  +                
                   queryBuffer.append(" WHERE ");
                   for (int i = 0; i < queryData.columns.length; i++) {
                       if ( queryData.columns[i].isKey ) {
  
  
  
  1.2       +4 -2      
cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/acting/modular/DatabaseAddAction.java
  
  Index: DatabaseAddAction.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/acting/modular/DatabaseAddAction.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- DatabaseAddAction.java    9 Mar 2003 00:03:04 -0000       1.1
  +++ DatabaseAddAction.java    1 Jul 2003 11:23:19 -0000       1.2
  @@ -270,7 +270,9 @@
                           AutoIncrementModule autoincr = null;
                           try {
                               autoincrSelector=(ComponentSelector) 
this.manager.lookup(DATABASE_MODULE_SELECTOR); 
  -                            if (queryData.columns[i].mode != null && 
autoincrSelector != null && autoincrSelector.hasComponent(queryData.columns[i].mode)){
  +                            if (queryData.columns[i].mode != null && 
  +                                autoincrSelector != null && 
  +                                
autoincrSelector.hasComponent(queryData.columns[i].mode)){
                                   autoincr = (AutoIncrementModule) 
autoincrSelector.select(queryData.columns[i].mode);
                                   
                                   if ( autoincr.includeInQuery() ) {
  
  
  
  1.3       +10 -4     
cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/acting/modular/DatabaseAction.java
  
  Index: DatabaseAction.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/acting/modular/DatabaseAction.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- DatabaseAction.java       21 May 2003 08:45:37 -0000      1.2
  +++ DatabaseAction.java       1 Jul 2003 11:23:19 -0000       1.3
  @@ -115,6 +115,7 @@
    * <tr><td>reloadable       </td><td>dynamically reload descriptor file if change 
is detected</td></tr>
    * <tr><td>use-transactions </td><td>defaults to yes</td></tr>
    * <tr><td>connection       </td><td>configured datasource connection to use 
(overrides value from descriptor file)</td></tr>
  + * <tr><td>fail-on-empty    </td><td>(boolean) fail is statement affected zero rows 
(true)</td></tr>
    * </table>
    *
    * @author <a href="mailto:[EMAIL PROTECTED]">Christian Haul</a>
  @@ -155,6 +156,7 @@
       protected final HashMap cachedQueryData = new HashMap();
       protected String pathSeparator = ".";
       protected int firstRow = 0;
  +    protected boolean failOnEmpty = true;
   
       // ========================================================================
       // inner helper classes
  @@ -245,6 +247,8 @@
                           getLogger().warn("problem parsing first row option "+tmp+" 
using default instead.");
                   };
               }
  +            tmp = (String) 
this.settings.get("fail-on-empty",String.valueOf(this.failOnEmpty));
  +            this.failOnEmpty = tmp.equalsIgnoreCase("true") || 
tmp.equalsIgnoreCase("yes");
           }
       }
   
  @@ -628,6 +632,7 @@
           Connection conn = null;
           Map results = new HashMap();
           int rows = 0;
  +        boolean failed = false;
   
           // read global parameter settings
           boolean reloadable = Constants.DESCRIPTOR_RELOADABLE_DEFAULT;
  @@ -752,6 +757,7 @@
               }
   
           } catch (Exception e) {
  +            failed = true;
               if ( conn != null ) {
                   try {
                       if (getLogger().isDebugEnabled()) {
  @@ -812,9 +818,9 @@
                   this.dbselector.release(datasource);
           }
           if (results != null) {
  -            if (rows>0) {
  -                results.put("row-count",new Integer(rows));
  -            } else {
  +            if (rows>0 || (!failed && !this.failOnEmpty)) {
  +                    results.put("row-count",new Integer(rows)); 
  +            } else {    
                   results = null;
               }
           } else {
  
  
  

Reply via email to