haul        2002/06/10 02:01:53

  Modified:    src/java/org/apache/cocoon/components/language/markup/xsp
                        EsqlHelper.java
               src/java/org/apache/cocoon/components/language/markup/xsp/java
                        esql.xsl
  Log:
    <action dev="CH" type="add" due-to="Roger I Martin PhD" 
due-to-email="[EMAIL PROTECTED]">
     ESQL: Added support for reading BLOBs from database.
    </action>
  
  Revision  Changes    Path
  1.10      +43 -1     
xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlHelper.java
  
  Index: EsqlHelper.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlHelper.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- EsqlHelper.java   16 May 2002 16:01:17 -0000      1.9
  +++ EsqlHelper.java   10 Jun 2002 09:01:52 -0000      1.10
  @@ -55,6 +55,7 @@
   import java.io.Reader;
   import java.sql.ResultSet;
   import java.io.InputStream;
  +import java.sql.Blob;
   import java.sql.Clob;
   import java.sql.Types;
   
  @@ -64,11 +65,52 @@
    *
    * based on the orginal esql.xsl
    * @author <a href="mailto:[EMAIL PROTECTED]";>Torsten Curdt</a>
  - * @version CVS $Id: EsqlHelper.java,v 1.9 2002/05/16 16:01:17 haul Exp $
  + * @version CVS $Id: EsqlHelper.java,v 1.10 2002/06/10 09:01:52 haul Exp $
    */
   
   public class EsqlHelper {
   
  +
  +    /** returns byte array from BLOB
  +     */
  +    public final static byte[] getBlob(ResultSet set, String column) throws 
RuntimeException {
  +        
  +        byte[] result = null;
  +        try {
  +            result = EsqlHelper.getBlob(set,set.findColumn(column));
  +        } catch (Exception e) {
  +            throw new RuntimeException("Error getting blob data: " + 
e.getMessage());
  +        }
  +        return result;
  +    }
  +
  +    /** returns byte array from BLOB
  +     */
  +    public final static byte[] getBlob(ResultSet set, int column) throws 
java.lang.Exception {
  +        
  +        InputStream reader = null;
  +        byte[] buffer = null;
  +    
  +        try {
  +            if (set.getMetaData().getColumnType(column)==java.sql.Types.BLOB) {
  +                Blob dbBlob = set.getBlob(column);
  +                int length = (int) dbBlob.length();
  +                reader = dbBlob.getBinaryStream();
  +                buffer = new byte[length];
  +                reader.read(buffer);
  +                reader.close();
  +                if (reader != null)
  +                    reader.close();
  +                if (buffer == null)
  +                    return null;
  +                return buffer;
  +            } else {           
  +                return set.getString(column).getBytes();
  +            }
  +        } catch ( Exception e) {
  +            throw new RuntimeException("Error getting blob data: " + 
e.getMessage());
  +        }
  +    }
   
       /** returns Unicode encoded string from CLOB or String column 
        */
  
  
  
  1.28      +13 -7     
xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/java/esql.xsl
  
  Index: esql.xsl
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/java/esql.xsl,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- esql.xsl  4 Jun 2002 09:06:53 -0000       1.27
  +++ esql.xsl  10 Jun 2002 09:01:52 -0000      1.28
  @@ -1,6 +1,6 @@
   <?xml version="1.0"?>
   
  -<!-- $Id: esql.xsl,v 1.27 2002/06/04 09:06:53 haul Exp $-->
  +<!-- $Id: esql.xsl,v 1.28 2002/06/10 09:01:52 haul Exp $-->
   <!--
   
    ============================================================================
  @@ -56,7 +56,7 @@
    * ESQL Logicsheet
    *
    * @author ?
  - * @version CVS $Revision: 1.27 $ $Date: 2002/06/04 09:06:53 $
  + * @version CVS $Revision: 1.28 $ $Date: 2002/06/10 09:01:52 $
   -->
   
   <xsl:stylesheet version="1.0"
  @@ -174,6 +174,7 @@
         <xsp:include>java.sql.Struct</xsp:include>
         <xsp:include>java.sql.SQLException</xsp:include>
         <xsp:include>java.sql.Clob</xsp:include>
  +      <xsp:include>java.sql.Blob</xsp:include>
         <xsp:include>java.text.SimpleDateFormat</xsp:include>
         <xsp:include>java.text.DecimalFormat</xsp:include>
         <xsp:include>java.io.StringWriter</xsp:include>
  @@ -849,8 +850,13 @@
     <xsp:expr><xsl:call-template name="get-resultset"/>.getShort(<xsl:call-template 
name="get-column"/>)</xsp:expr>
   </xsl:template>
   
  +<xspdoc:desc>returns the value of the given column as byte array</xspdoc:desc>
  +<xsl:template 
match="esql:row-results//esql:get-blob|esql:call-results//esql:get-blob" 
name="get-blob">
  +     <xsp:expr>EsqlHelper.getBlob(<xsl:call-template 
name="get-resultset"/>,<xsl:call-template name="get-column"/>)</xsp:expr>
  +</xsl:template>
  +
   <xspdoc:desc>returns the value of the given column as unicode string (column can be 
string or clob</xspdoc:desc>
  -<xsl:template match="esql:row-results//esql:get-clob" name="get-clob">
  +<xsl:template 
match="esql:row-results//esql:get-clob|esql:call-results//esql:get-clob" 
name="get-clob">
        <xsp:expr>EsqlHelper.getStringOrClob(<xsl:call-template 
name="get-resultset"/>,<xsl:call-template name="get-column"/>)</xsp:expr>
   </xsl:template>
   
  @@ -920,17 +926,17 @@
   </xsl:template>
   
   <xspdoc:desc>returns the name of the given column. the column mus tbe specified by 
number, not name.</xspdoc:desc>
  -<xsl:template 
match="esql:row-results//esql:get-column-name|esql:call-results//esql:get-column-name">
  +<xsl:template match="esql:results//esql:get-column-name">
     <xsp:expr><xsl:call-template 
name="get-resultset"/>.getMetaData().getColumnName(<xsl:call-template 
name="get-column"/>)</xsp:expr>
   </xsl:template>
   
   <xspdoc:desc>returns the label of the given column. the column mus tbe specified by 
number, not name.</xspdoc:desc>
  -<xsl:template 
match="esql:row-results//esql:get-column-label|esql:call-results//esql:get-column-label">
  +<xsl:template match="esql:results//esql:get-column-label">
     <xsp:expr><xsl:call-template 
name="get-resultset"/>.getMetaData().getColumnLabel(<xsl:call-template 
name="get-column"/>)</xsp:expr>
   </xsl:template>
   
   <xspdoc:desc>returns the name of the type of the given column. the column must be 
specified by number, not name.</xspdoc:desc>
  -<xsl:template 
match="esql:row-results//esql:get-column-type-name|esql:call-results//esql:get-column-type-name">
  +<xsl:template match="esql:results//esql:get-column-type-name">
     <xsp:expr><xsl:call-template 
name="get-resultset"/>.getMetaData().getColumnTypeName(<xsl:call-template 
name="get-column"/>)</xsp:expr>
   </xsl:template>
   
  @@ -940,7 +946,7 @@
   </xsl:template>
   
   <xspdoc:desc>allows null-column testing. Evaluates to a Java expression, which is 
true when the referred column contains a null-value for the current resultset 
row</xspdoc:desc>
  -<xsl:template match="esql:row-results//esql:is-null">
  +<xsl:template 
match="esql:row-results//esql:is-null|esql:call-results//esql:is-null">
     <xsp:expr>((<xsl:call-template name="get-resultset"/>.getObject("<xsl:value-of 
select="@column"/>") == null) || <xsl:call-template 
name="get-resultset"/>.wasNull())</xsp:expr>
   </xsl:template>
   
  
  
  

----------------------------------------------------------------------
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