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 {