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 {