You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2003/07/18 16:46:30 UTC

cvs commit: cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/transformation SQLTransformer.java

gianugo     2003/07/18 07:46:30

  Modified:    .        status.xml
               src/documentation/xdocs/userdocs/transformers
                        sql-transformer.xml
               src/blocks/databases/java/org/apache/cocoon/transformation
                        SQLTransformer.java
  Log:
  Added CLOB support.
  
  Revision  Changes    Path
  1.94      +4 -1      cocoon-2.1/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/status.xml,v
  retrieving revision 1.93
  retrieving revision 1.94
  diff -u -r1.93 -r1.94
  --- status.xml	18 Jul 2003 11:24:29 -0000	1.93
  +++ status.xml	18 Jul 2003 14:46:30 -0000	1.94
  @@ -185,6 +185,9 @@
   
    <release version="@version@" date="@date@">
     <action dev="GR" type="add">
  +    Added CLOB support in SQLTransformer.
  +  </action>
  +  <action dev="GR" type="add">
       Added an (unstable) HTMLTransformer to the html block, to parse and
       tidy an XML containing escaped (and possibly incorrect) HTML
     </action>
  
  
  
  1.2       +5 -0      cocoon-2.1/src/documentation/xdocs/userdocs/transformers/sql-transformer.xml
  
  Index: sql-transformer.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/documentation/xdocs/userdocs/transformers/sql-transformer.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- sql-transformer.xml	9 Mar 2003 00:08:27 -0000	1.1
  +++ sql-transformer.xml	18 Jul 2003 14:46:30 -0000	1.2
  @@ -107,6 +107,7 @@
         <map:transform type="sql">
           <map:parameter name="use-connection" value="personnel"/>
           <map:parameter name="show-nr-of-rows" value="true"/> 
  +        <map:parameter name="clob-encoding" value="UTF-8"/> 
         </map:transform>
        ]]>
       </source>
  @@ -124,6 +125,10 @@
   want to know how many rows it contains, you have to count the  number of rows in 
   another transformer or your stored procedure has to return it also (last 
   solution is the best one)
  +</p>
  +<p>
  +The "clob-encoding" parameter defines what encoding should be used in 
  +getting content from CLOB columns.
   </p>
   <p>
   The output XML will look as follows:
  
  
  
  1.7       +27 -2     cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java
  
  Index: SQLTransformer.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/databases/java/org/apache/cocoon/transformation/SQLTransformer.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SQLTransformer.java	11 Jun 2003 00:28:31 -0000	1.6
  +++ SQLTransformer.java	18 Jul 2003 14:46:30 -0000	1.7
  @@ -72,6 +72,7 @@
   import org.xml.sax.SAXException;
   import org.xml.sax.helpers.AttributesImpl;
   
  +import java.io.InputStream;
   import java.io.IOException;
   import java.io.StringReader;
   import java.lang.reflect.Field;
  @@ -86,6 +87,7 @@
    * @author <a href="mailto:giacomo.pati@pwr.ch">Giacomo Pati</a>
    *         (PWR Organisation & Entwicklung)
    * @author <a href="mailto:sven.beauprez@the-ecorp.com">Sven Beauprez</a>
  + * @author <a href="mailto:a.saglimbeni@pro-netics.com">Alfio Saglimbeni</a>
    * @version CVS $Id$
    */
   public class SQLTransformer
  @@ -127,6 +129,7 @@
       public static final String MAGIC_NAME_ATTRIBUTE = "name";
       public static final String MAGIC_STORED_PROCEDURE_ATTRIBUTE = "isstoredprocedure";
       public static final String MAGIC_UPDATE_ATTRIBUTE = "isupdate";
  +	  public static final String CLOB_ENCODING = "clob-encoding";
   
       /** The states we are allowed to be in **/
       protected static final int STATE_OUTSIDE = 0;
  @@ -184,6 +187,9 @@
       protected XMLDeserializer interpreter;
       protected SAXParser parser;
   
  +    /** Encoding we use for CLOB field */
  +	protected String clobEncoding;
  +	
       /**
        * Constructor
        */
  @@ -263,6 +269,7 @@
           this.current_state = SQLTransformer.STATE_OUTSIDE;
   
           this.showNrOfRows = parameters.getParameterAsBoolean( SQLTransformer.MAGIC_NR_OF_ROWS, false );
  +		    this.clobEncoding = parameters.getParameter(SQLTransformer.CLOB_ENCODING, "");
           if ( getLogger().isDebugEnabled() ) {
               if ( this.parameters.getParameter( SQLTransformer.MAGIC_CONNECTION , null ) != null ) {
                   getLogger().debug( "CONNECTION: " + this.parameters.getParameter( SQLTransformer.MAGIC_CONNECTION , null ) );
  @@ -274,6 +281,7 @@
               getLogger().debug( "ROW-ELEMENT: " + parameters.getParameter( SQLTransformer.MAGIC_ROW_ELEMENT, "row" ) );
               getLogger().debug( "NS-URI: " + parameters.getParameter( SQLTransformer.MAGIC_NS_URI_ELEMENT, NAMESPACE ) );
               getLogger().debug( "NS-PREFIX: " + parameters.getParameter( SQLTransformer.MAGIC_NS_PREFIX_ELEMENT, "" ) );
  +			      getLogger().debug( "CLOB_ENCODING: " + clobEncoding );
           }
      }
   
  @@ -1114,9 +1122,26 @@
           }
   
           protected String getColumnValue( int i ) throws SQLException {
  +			int numberOfChar = 1024;
               String retval =  SQLTransformer.getStringValue( rs.getObject( i ) );
  -            if (rs.getMetaData().getColumnType(i) == 8)
  +			
  +			if (rs.getMetaData().getColumnType(i) == 8) {
               retval = SQLTransformer.getStringValue( rs.getBigDecimal( i ) );
  +			} else if (rs.getMetaData().getColumnType(i) == java.sql.Types.CLOB) {
  +				Clob clob = rs.getClob(i);
  +				InputStream inputStream = clob.getAsciiStream();
  +				byte[] readByte = new byte[numberOfChar];
  +				StringBuffer buffer = new StringBuffer();
  +				try {
  +					while(inputStream.read(readByte) > -1) {
  +						String string = new String(readByte, clobEncoding);
  +						buffer.append(string);
  +					}
  +				} catch(java.io.IOException ioException) {
  +					throw new SQLException("Error reading stream from CLOB");
  +				}
  +				retval = buffer.toString();
  +			}
               return retval;
           }