haul        2002/06/28 01:16:42

  Modified:    src/java/org/apache/cocoon/components/language/markup/xsp
                        Tag: cocoon_2_0_3_branch EsqlQuery.java
                        EsqlConnection.java
               src/java/org/apache/cocoon/components/language/markup/xsp/java
                        Tag: cocoon_2_0_3_branch esql.xsl
  Log:
    <action dev="CH" type="update">
     Multiple results seem not to be supported by some DBMSs (i.e. Oracle and
     Informix). Therefore this is made optional in ESQL. A new parameter
     (esql:allow-multiple-results) to esql:connection re-enables it. See
     EsqlConnection for details.
    </action>
  
  Revision  Changes    Path
  No                   revision
  
  
  No                   revision
  
  
  1.11.2.6  +2 -1      
xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlQuery.java
  
  Index: EsqlQuery.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlQuery.java,v
  retrieving revision 1.11.2.5
  retrieving revision 1.11.2.6
  diff -u -r1.11.2.5 -r1.11.2.6
  --- EsqlQuery.java    6 Jun 2002 08:43:34 -0000       1.11.2.5
  +++ EsqlQuery.java    28 Jun 2002 08:16:42 -0000      1.11.2.6
  @@ -366,6 +366,7 @@
             }
             resultSetValid = false;
         }
  +      this.adjustCounts();
         return(hasResultSet);
     }
   
  
  
  
  1.6.2.3   +22 -2     
xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlConnection.java
  
  Index: EsqlConnection.java
  ===================================================================
  RCS file: 
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/language/markup/xsp/EsqlConnection.java,v
  retrieving revision 1.6.2.2
  retrieving revision 1.6.2.3
  diff -u -r1.6.2.2 -r1.6.2.3
  --- EsqlConnection.java       12 Jun 2002 06:29:00 -0000      1.6.2.2
  +++ EsqlConnection.java       28 Jun 2002 08:16:42 -0000      1.6.2.3
  @@ -74,6 +74,26 @@
     private String url = null;
     private Properties info = new Properties();
     private int limitMethod = LIMIT_METHOD_NOLIMIT;
  +  private boolean multipleResults = false;
  +
  +
  +    public boolean multipleResults() {
  +        return this.multipleResults;
  +    }
  +
  +    /** It appears that some commercial DBMSs like Oracle and Informix
  +    * are broken in that they don't follow the JDBC standard and 
  +    * calls to getUpdateCount after getMoreResults result either in
  +    * an exception (Informix) or return the same value (i.e. not -1) (Oracle).
  +    * In addition, this feature is only useful with stored procedures.
  +    * Hence we disable it per default.
  +    **/
  +    public void setMultipleResults(String value) {
  +        if (value != null)
  +            this.multipleResults = ("true".equalsIgnoreCase(value) || 
"yes".equalsIgnoreCase(value));
  +    }
  +
  +
   
     public Properties getInfo() {
       return(info);
  @@ -199,7 +219,7 @@
     }
   
     public boolean isClosed() throws SQLException {
  -    return(isClosed());
  +    return(connection.isClosed());
     }
   
     public java.sql.DatabaseMetaData getMetaData() throws SQLException {
  
  
  
  No                   revision
  
  
  No                   revision
  
  
  1.13.2.6  +29 -10    
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.13.2.5
  retrieving revision 1.13.2.6
  diff -u -r1.13.2.5 -r1.13.2.6
  --- esql.xsl  4 Jun 2002 09:37:17 -0000       1.13.2.5
  +++ esql.xsl  28 Jun 2002 08:16:42 -0000      1.13.2.6
  @@ -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>
  @@ -275,6 +276,7 @@
     <xsl:variable name="pool"><xsl:call-template 
name="get-nested-string"><xsl:with-param name="content" 
select="esql:pool"/></xsl:call-template></xsl:variable>
     <xsl:variable name="autocommit"><xsl:call-template 
name="get-nested-string"><xsl:with-param name="content" 
select="esql:autocommit"/></xsl:call-template></xsl:variable>
     <xsl:variable name="use-limit-clause"><xsl:call-template 
name="get-nested-string"><xsl:with-param name="content" 
select="esql:use-limit-clause"/></xsl:call-template></xsl:variable>
  +  <xsl:variable name="allow-multiple-results"><xsl:call-template 
name="get-nested-string"><xsl:with-param name="content" 
select="esql:allow-multiple-results"/></xsl:call-template></xsl:variable>
     <xsp:logic>
       if (_esql_connection != null) {
         _esql_connections.push(_esql_connection);
  @@ -286,6 +288,9 @@
             try {
               _esql_connection.datasource = (DataSourceComponent) 
_esql_selector.select(String.valueOf(<xsl:copy-of select="$pool"/>));
               _esql_connection.connection = 
_esql_connection.datasource.getConnection();
  +            <xsl:if test="esql:allow-multiple-results">
  +             _esql_connection.setMultipleResults(String.valueOf(<xsl:copy-of 
select="$allow-multiple-results"/>));
  +            </xsl:if>
             } catch (Exception _esql_exception_<xsl:value-of 
select="generate-id(.)"/>) {
               getLogger().error("Could not get the 
datasource",_esql_exception_<xsl:value-of select="generate-id(.)"/>);
               throw new RuntimeException("Could not get the datasource 
"+_esql_exception_<xsl:value-of select="generate-id(.)"/>);
  @@ -310,6 +315,9 @@
               <xsl:for-each select="esql:property">
                 _esql_connection.setProperty("<xsl:value-of 
select="@name"/>",<xsl:call-template name="get-nested-string"><xsl:with-param 
name="content" select="."/></xsl:call-template>);
               </xsl:for-each>
  +            <xsl:if test="esql:allow-multiple-results">
  +              _esql_connection.setMultipleResults(String.valueOf(<xsl:copy-of 
select="$password"/>));
  +            </xsl:if>
               _esql_connection.connection = 
DriverManager.getConnection(_esql_connection.getUrl(), _esql_connection.getInfo());
             } catch (Exception _esql_exception_<xsl:value-of 
select="generate-id(.)"/>) {
               throw new RuntimeException("Error opening connection to dburl: 
"+String.valueOf(<xsl:copy-of select="$dburl"/>)+": "+_esql_exception_<xsl:value-of 
select="generate-id(.)"/>.getMessage());
  @@ -395,7 +403,7 @@
   </xsl:template>
   
   <xsl:template name="do-results">
  -   do {
  +  do {
        if (_esql_query.hasResultSet()) {
           _esql_query.getResultRows();
           if (_esql_query.nextRow()) {
  @@ -417,7 +425,7 @@
           }
           _esql_query.getResultSet().close();
        } else {
  -        if (_esql_query.getUpdateCount() &gt;= 0) {
  +        if (_esql_query.getUpdateCount() &gt; 0) {
              switch (_esql_query.getUpdateCountCount()) {
              <xsl:for-each select="esql:update-results">
                case <xsl:value-of select="position()"/>: <xsl:if 
test="position()=last()"><xsl:text>
  @@ -435,7 +443,7 @@
              }
           }
        }
  -   } while(_esql_query.getMoreResults());
  +   } while(_esql_connection.multipleResults() &amp;&amp; 
_esql_query.getMoreResults());
   </xsl:template>
   
   
  @@ -566,6 +574,12 @@
     </xsp:content>
   </xsl:template>
   
  +<xsl:template match="esql:execute-query//esql:update-results">
  +  <xsp:content>
  +    <xsl:apply-templates/>
  +  </xsp:content>
  +</xsl:template>
  +
   <xsl:template match="esql:update-results//esql:get-update-count">
     <xsp:expr>_esql_query.getUpdateCount()</xsp:expr>
   </xsl:template>
  @@ -849,8 +863,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 +939,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 +959,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