haul 2002/08/09 01:25:29 Modified: src/java/org/apache/cocoon/acting/modular DatabaseAction.java DatabaseQueryAction.java DatabaseSelectAction.java Log: <action dev="CH" type="fix"> (Modular) DatabaseActions: select produced wrong result if no rows were found, query action returned broken result. </action> Revision Changes Path 1.7 +6 -5 xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseAction.java Index: DatabaseAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseAction.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- DatabaseAction.java 10 Jun 2002 08:34:45 -0000 1.6 +++ DatabaseAction.java 9 Aug 2002 08:25:29 -0000 1.7 @@ -489,11 +489,11 @@ if ( column.isSet ){ if (getLogger().isDebugEnabled()) - getLogger().debug( "Trying to set column " + cname +" using getAttributeValues method"); + getLogger().debug( "Trying to set column " + cname +" from "+column.mode+" using getAttributeValues method"); values = input.getAttributeValues( cname, column.modeConf, objectModel ); } else { if (getLogger().isDebugEnabled()) - getLogger().debug( "Trying to set column " + cname +" using getAttribute method"); + getLogger().debug( "Trying to set column " + cname +" from "+column.mode+" using getAttribute method"); values = new Object[1]; values[0] = input.getAttribute( cname, column.modeConf, objectModel ); } @@ -603,7 +603,7 @@ Configuration table, Configuration column, int rowIndex, Object value, PreparedStatement statement, int position ) throws Exception { - this.setOutput( objectModel, outputMode, results, table, column, rowIndex, value ); + if (results!=null) this.setOutput( objectModel, outputMode, results, table, column, rowIndex, value ); this.setColumn( statement, position, column, value ); } @@ -753,8 +753,9 @@ } catch (Exception e) { if ( conn != null ) { try { - if (getLogger().isDebugEnabled()) + if (getLogger().isDebugEnabled()) { getLogger().debug( "Rolling back transaction. Caused by " + e.getMessage() ); + } conn.rollback(); results = null; 1.2 +24 -11 xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseQueryAction.java Index: DatabaseQueryAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseQueryAction.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- DatabaseQueryAction.java 2 Jul 2002 08:17:46 -0000 1.1 +++ DatabaseQueryAction.java 9 Aug 2002 08:25:29 -0000 1.2 @@ -56,6 +56,7 @@ import java.sql.Clob; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Struct; import java.sql.Types; @@ -134,16 +135,15 @@ Configuration[] keys = table.getChild("keys").getChildren("key"); Configuration[] values = table.getChild("values").getChildren("value"); - queryData = new CacheHelper( keys.length, keys.length + values.length ); - fillModes( keys , true , defaultModeNames, modeTypes, queryData ); - fillModes( values, false, defaultModeNames, modeTypes, queryData ); - boolean found = false; String queryModeName = ""; + String query = ""; + boolean useValues = true; for (int i=0; i<queries.length; i++) { queryModeName = queries[i].getAttribute("mode",null); if ( queryModeName.equals((String)modeTypes.get(MODE_OTHERS)) || "all".equals(queryModeName)) { - queryData.queryString = queries[i].getValue(); + query = queries[i].getValue(); + useValues = queries[i].getAttributeAsBoolean("use-values", useValues); found = true; break; } @@ -155,6 +155,13 @@ " for table " + table.getAttribute("name",null)); } + + + queryData = new CacheHelper( keys.length, keys.length + (useValues ? values.length : 0)); + queryData.queryString = query; + fillModes( keys , true , defaultModeNames, modeTypes, queryData ); + if (useValues) fillModes( values, false, defaultModeNames, modeTypes, queryData ); + this.cachedQueryData.put( lookUpKey, queryData ); } } @@ -202,16 +209,22 @@ } else { // retrieve values ResultSet resultset = statement.getResultSet(); + ResultSetMetaData metadata = resultset.getMetaData(); rowIndex = 0; while ( resultset.next() ){ //if ( ! ( rowIndex == -1 && resultset.isLast() ) ) { rowIndex++; //} - for (int i = 0; i < queryData.columns.length; i++) { - if ( !queryData.columns[i].isKey ) { - Object value = JDBCTypeConversions.getColumn( resultset, queryData.columns[i].columnConf ); - this.setOutput(objectModel, outputMode, results, table, queryData.columns[i].columnConf, rowIndex, value); - } + String tableName = ""; + String columnName = ""; + for (int i = 1; i <= metadata.getColumnCount(); i++) { + Object value = resultset.getObject(i); + tableName = metadata.getTableName(i); + columnName = metadata.getColumnLabel(i) + "["+rowIndex+"]"; + if (tableName != "") columnName = tableName + "." + columnName; + if (this.getLogger().isDebugEnabled()) + this.getLogger().debug("retrieving "+columnName+" as "+value); + results.put(metadata.getTableName(i)+"."+metadata.getColumnLabel(i),value); } } return rowIndex; 1.4 +3 -5 xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseSelectAction.java Index: DatabaseSelectAction.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/acting/modular/DatabaseSelectAction.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- DatabaseSelectAction.java 28 May 2002 13:42:50 -0000 1.3 +++ DatabaseSelectAction.java 9 Aug 2002 08:25:29 -0000 1.4 @@ -194,7 +194,7 @@ for (int i = 0; i < queryData.columns.length; i++) { Column col = queryData.columns[i]; if ( col.isKey ) { - this.setColumn(objectModel, outputMode, results, table, col.columnConf, rowIndex, + this.setColumn(objectModel, outputMode, null, table, col.columnConf, rowIndex, columnValues[ i ][ ( col.isSet ? rowIndex : 0 ) ], statement, currentIndex ); currentIndex++; } @@ -204,15 +204,13 @@ ResultSet resultset = statement.getResultSet(); rowIndex = 0; while ( resultset.next() ){ - //if ( ! ( rowIndex == -1 && resultset.isLast() ) ) { - rowIndex++; - //} for (int i = 0; i < queryData.columns.length; i++) { if ( !queryData.columns[i].isKey ) { Object value = JDBCTypeConversions.getColumn( resultset, queryData.columns[i].columnConf ); this.setOutput(objectModel, outputMode, results, table, queryData.columns[i].columnConf, rowIndex, value); } } + rowIndex++; } return rowIndex; }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]