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]