haul 2002/06/28 01:04:33 Modified: src/java/org/apache/cocoon/components/language/markup/xsp EsqlQuery.java EsqlConnection.java src/java/org/apache/cocoon/components/language/markup/xsp/java 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 1.19 +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.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- EsqlQuery.java 6 Jun 2002 08:41:27 -0000 1.18 +++ EsqlQuery.java 28 Jun 2002 08:04:33 -0000 1.19 @@ -366,6 +366,7 @@ } resultSetValid = false; } + this.adjustCounts(); return(hasResultSet); } 1.10 +21 -1 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.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- EsqlConnection.java 12 Jun 2002 13:59:22 -0000 1.9 +++ EsqlConnection.java 28 Jun 2002 08:04:33 -0000 1.10 @@ -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); 1.29 +18 -5 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.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- esql.xsl 10 Jun 2002 09:01:52 -0000 1.28 +++ esql.xsl 28 Jun 2002 08:04:33 -0000 1.29 @@ -276,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); @@ -287,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(.)"/>); @@ -311,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()); @@ -396,7 +403,7 @@ </xsl:template> <xsl:template name="do-results"> - do { + do { if (_esql_query.hasResultSet()) { _esql_query.getResultRows(); if (_esql_query.nextRow()) { @@ -418,7 +425,7 @@ } _esql_query.getResultSet().close(); } else { - if (_esql_query.getUpdateCount() >= 0) { + if (_esql_query.getUpdateCount() > 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> @@ -436,7 +443,7 @@ } } } - } while(_esql_query.getMoreResults()); + } while(_esql_connection.multipleResults() && _esql_query.getMoreResults()); </xsl:template> @@ -562,6 +569,12 @@ </xsl:template> <xsl:template match="esql:execute-query//esql:no-results"> + <xsp:content> + <xsl:apply-templates/> + </xsp:content> +</xsl:template> + +<xsl:template match="esql:execute-query//esql:update-results"> <xsp:content> <xsl:apply-templates/> </xsp:content>
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]