cziegeler    01/11/28 03:45:39

  Modified:    .        changes.xml
               src/org/apache/cocoon/transformation SQLTransformer.java
  Log:
  Applied patch to SQLTransformer from Peter Seiderer [[EMAIL PROTECTED]]
  
  Revision  Changes    Path
  1.52      +5 -1      xml-cocoon2/changes.xml
  
  Index: changes.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/changes.xml,v
  retrieving revision 1.51
  retrieving revision 1.52
  diff -u -r1.51 -r1.52
  --- changes.xml       2001/11/23 09:11:51     1.51
  +++ changes.xml       2001/11/28 11:45:38     1.52
  @@ -4,7 +4,7 @@
   
   <!--
     History of Cocoon changes
  -  $Id: changes.xml,v 1.51 2001/11/23 09:11:51 cziegeler Exp $
  +  $Id: changes.xml,v 1.52 2001/11/28 11:45:38 cziegeler Exp $
   -->
   
   <changes title="History of Changes">
  @@ -27,6 +27,10 @@
    </devs>
   
    <release version="2.1-dev" date="@date@">
  +  <action dev="CZ" type="update">
  +    Applied patch adding advanced error handling to SQLTransformer plus 
escape-string element
  +    from Peter Seiderer [[EMAIL PROTECTED]]
  +  </action>
     <action dev="CZ" type="update">
       Restructured build system. A new ant task (SitemapTool) adds entries
       of optional components to the sitemap. Warnings for not available
  
  
  
  1.23      +82 -22    
xml-cocoon2/src/org/apache/cocoon/transformation/SQLTransformer.java
  
  Index: SQLTransformer.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/org/apache/cocoon/transformation/SQLTransformer.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- SQLTransformer.java       2001/10/25 20:24:45     1.22
  +++ SQLTransformer.java       2001/11/28 11:45:39     1.23
  @@ -35,7 +35,7 @@
    * @author <a href="mailto:[EMAIL PROTECTED]";>Giacomo Pati</a>
    *         (PWR Organisation & Entwicklung)
    * @author <a href="mailto:[EMAIL PROTECTED]";>Sven Beauprez</a>
  - * @version CVS $Revision: 1.22 $ $Date: 2001/10/25 20:24:45 $ $Author: bloritsch $
  + * @version CVS $Revision: 1.23 $ $Date: 2001/11/28 11:45:39 $ $Author: cziegeler $
    */
   
   public class SQLTransformer extends AbstractTransformer implements Composable, 
Recyclable, Disposable, Configurable {
  @@ -62,6 +62,8 @@
       public static final String MAGIC_OUT_PARAMETER_NAME_ATTRIBUTE = "name";
       public static final String MAGIC_OUT_PARAMETER_NR_ATTRIBUTE = "nr";
       public static final String MAGIC_OUT_PARAMETER_TYPE_ATTRIBUTE = "type";
  +    public static final String MAGIC_ESCAPE_STRING = "escape-string";
  +    public static final String MAGIC_ERROR = "error";
   
       public static final String MAGIC_NS_URI_ELEMENT = "namespace-uri";
       public static final String MAGIC_NS_PREFIX_ELEMENT = "namespace-prefix";
  @@ -84,6 +86,7 @@
       public static final int STATE_INSIDE_SUBSTITUTE_VALUE_ELEMENT = 5;
       public static final int STATE_INSIDE_IN_PARAMETER_ELEMENT = 6;
       public static final int STATE_INSIDE_OUT_PARAMETER_ELEMENT = 7;
  +    public static final int STATE_INSIDE_ESCAPE_STRING = 8;
   
       /** Default parameters that might apply to all queries **/
       protected Properties default_properties;
  @@ -262,29 +265,46 @@
           getLogger().debug( "SQLTransformer executing query nr " + index );
           AttributesImpl attr = new AttributesImpl();
           Query query = (Query) queries.elementAt( index );
  +        boolean query_failure = false;
           try {
  -            query.execute();
  -
  -            if ( showNrOfRows != null && showNrOfRows.equalsIgnoreCase( "true" ) ) {
  -                this.attribute( attr, query.nr_of_rows, String.valueOf( 
query.getNrOfRows() ) );
  -            }
  -            String name = query.getName();
  -            if ( name != null ) {
  -                this.attribute( attr, query.name_attribute, name );
  +            try {
  +                query.execute();
  +            } catch ( SQLException e ) {
  +                getLogger().debug( "SQLTransformer:.executeQuery() query.execute 
failed ", e );
  +                AttributesImpl my_attr = new AttributesImpl();
  +                this.start( query.rowset_name, my_attr );
  +                this.start( MAGIC_ERROR, my_attr);
  +                this.data( e.getMessage());
  +                this.end( MAGIC_ERROR );
  +                this.end( query.rowset_name );
  +                query_failure = true;
               }
  -            this.start( query.rowset_name, attr );
  -            attr = new AttributesImpl();
  -            if ( !query.isStoredProcedure() ) {
  -                while ( query.next() ) {
  -                    this.start( query.row_name, attr );
  -                    query.serializeRow();
  -                    if ( index + 1 < queries.size() ) {
  -                        executeQuery( index + 1 );
  +            if ( !query_failure ) {
  +
  +                if ( showNrOfRows != null && showNrOfRows.equalsIgnoreCase( "true" 
) ) {
  +                    attr.addAttribute( my_uri, query.nr_of_rows, query.nr_of_rows, 
"CDATA",
  +                       String.valueOf( query.getNrOfRows() ) );
  +                }
  +                String name = query.getName();
  +                if ( name != null ) {
  +                    attr.addAttribute( my_uri, query.name_attribute, 
query.name_attribute, "CDATA",
  +                       name );
  +                }
  +                this.start( query.rowset_name, attr );
  +                attr = new AttributesImpl();
  +                if ( !query.isStoredProcedure() ) {
  +                    while ( query.next() ) {
  +                        this.start( query.row_name, attr );
  +                        query.serializeRow();
  +                        if ( index + 1 < queries.size() ) {
  +                            executeQuery( index + 1 );
  +                        }
  +                        this.end( query.row_name );
                       }
  -                    this.end( query.row_name );
  +                } else {
  +                    query.serializeStoredProcedure();
                   }
  -            } else {
  -                query.serializeStoredProcedure();
  +                this.end( query.rowset_name );
               }
           } catch ( SQLException e ) {
               getLogger().debug( "SQLTransformer.executeQuery()", e );
  @@ -296,7 +316,6 @@
                   getLogger().warn( "SQLTransformer: Could not close JDBC 
connection", e );
               }
           }
  -        this.end( query.rowset_name );
           if ( !"".equals( outPrefix ) && !"".equals( outUri ) ) {
               this.contentHandler.endPrefixMapping( outPrefix );
           }
  @@ -481,6 +500,42 @@
           current_state = SQLTransformer.STATE_INSIDE_QUERY_ELEMENT;
       }
   
  +    protected void startEscapeStringElement( Attributes attributes ) {
  +        switch ( current_state ) {
  +            case SQLTransformer.STATE_INSIDE_QUERY_ELEMENT:
  +                if ( current_value.length() > 0 ) {
  +                    getCurrentQuery().addQueryPart( current_value.toString() );
  +                    getLogger().debug( "QUERY IS \"" +
  +                                       current_value.toString() + "\"" );
  +                    current_value.setLength( 0 );
  +                }
  +
  +                current_state = SQLTransformer.STATE_INSIDE_ESCAPE_STRING;
  +                break;
  +            default:
  +                throwIllegalStateException( "Not expecting a start escape-string 
element" );
  +        }
  +    }
  +
  +    protected void endEscapeStringElement() {
  +        switch ( current_state) {
  +        case SQLTransformer.STATE_INSIDE_ESCAPE_STRING:
  +            if ( current_value.length() > 0 ) {
  +                String escape = current_value.toString();
  +                escape = replaceCharWithString( escape, '\'', "''" );
  +                escape = replaceCharWithString( escape, '\\', "\\\\" );
  +                getCurrentQuery().addQueryPart( escape );
  +                getLogger().debug( "QUERY IS \"" +
  +                   current_value.toString() + "\"" );
  +                current_value.setLength( 0 );
  +            }
  +            current_state = SQLTransformer.STATE_INSIDE_QUERY_ELEMENT;
  +            break;
  +        default:
  +                throwIllegalStateException( "Not expecting a end escape-string 
element" );
  +        }
  +    }
  +
       protected void startInParameterElement( Attributes attributes ) {
           switch ( current_state ) {
               case SQLTransformer.STATE_INSIDE_EXECUTE_QUERY_ELEMENT:
  @@ -615,6 +670,8 @@
               startInParameterElement( attributes );
           } else if ( name.equals( SQLTransformer.MAGIC_OUT_PARAMETER ) ) {
               startOutParameterElement( attributes );
  +        } else if ( name.equals( SQLTransformer.MAGIC_ESCAPE_STRING ) ) {
  +            startEscapeStringElement( attributes );
           } else {
               startValueElement( name );
           }
  @@ -642,6 +699,8 @@
               endOutParameterElement();
           } else if ( name.equals( SQLTransformer.MAGIC_VALUE ) || current_state == 
SQLTransformer.STATE_INSIDE_VALUE_ELEMENT ) {
               endValueElement();
  +        } else  if ( name.equals( SQLTransformer.MAGIC_ESCAPE_STRING ) ) {
  +            endEscapeStringElement();
           } else {
               super.endElement( uri, name, raw );
           }
  @@ -650,7 +709,8 @@
       public void characters( char ary[], int start,
                               int length ) throws SAXException {
           if ( current_state != SQLTransformer.STATE_INSIDE_VALUE_ELEMENT &&
  -                current_state != SQLTransformer.STATE_INSIDE_QUERY_ELEMENT ) {
  +             current_state != SQLTransformer.STATE_INSIDE_QUERY_ELEMENT &&
  +             current_state != SQLTransformer.STATE_INSIDE_ESCAPE_STRING ) {
               super.characters( ary, start, length );
           }
           getLogger().debug( "RECEIVED CHARACTERS: " +
  
  
  

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