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]

Reply via email to