You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cocoon.apache.org by Donald Ball <ba...@webslingerZ.com> on 2000/09/29 06:39:38 UTC
fairly complex change made to esql logicsheet
what this patch gives you is the ability to control the way the code is
generated and executed. if esql:execute-query has a inner-method='no'
attribute, the code is inlined into populateDocument, otherwise the code
is put into a method and that is invoked in populateDocument. those of you
who are relying on variables that have been set by another logicsheet or
your own xsp logic blocks will want to inner-method='yes'. hmm, the name
is a little confusing, i'll probably change it, but regardless, for those
of you who need it, it's in cvs. standard caveats apply, of course.
i will say this on the topic of variable sharing - if you're setting
variables in your logicsheets, make sure you give them a unique prefix. my
standard convention is _shortname_variable (e.g. _esql_session), and i use
it for all variables. cumbersome, sure, but you play well with others and
allow others to play well with you.
- donald
---------- Forwarded message ----------
Date: 29 Sep 2000 04:25:20 -0000
From: balld@locus.apache.org
Reply-To: cocoon-dev@xml.apache.org
To: xml-cocoon-cvs@apache.org
Subject: cvs commit: xml-cocoon/samples/sql esql.xml
balld 00/09/28 21:25:20
Modified: . changes.xml
src/org/apache/cocoon/processor/xsp/library/sql esql.xsl
samples/sql esql.xml
Log:
a doozy of a patch to esql - i made it so that you can execute queries eitherin their own special methods or inlined code - both on the same page even (can't imagine why you'd want to tho).
syntax is documented in sample - all you do is add a inner-method attribute valued 'no'. default is 'yes', but i'm definitely considering switching it.
Revision Changes Path
1.118 +4 -1 xml-cocoon/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/xml-cocoon/changes.xml,v
retrieving revision 1.117
retrieving revision 1.118
diff -u -r1.117 -r1.118
--- changes.xml 2000/09/28 01:52:32 1.117
+++ changes.xml 2000/09/29 04:25:19 1.118
@@ -4,7 +4,7 @@
<!--
History of Cocoon changes
- $Id: changes.xml,v 1.117 2000/09/28 01:52:32 balld Exp $
+ $Id: changes.xml,v 1.118 2000/09/29 04:25:19 balld Exp $
-->
<changes title="History of Changes">
@@ -17,6 +17,9 @@
</devs>
<release version="@version@" date="@date@">
+ <action dev="DB" type="update">
+ a doozy of a patch to esql - i made it so that you can execute queries either in their own special methods or inlined code - both on the same page even (can't imagine why you'd want to tho)
+ </action>
<action dev="DB" type="update">
a couple of bugs fixed in esql, plus i added the first bit of prepared statement support. nothing but strings yet, but it works.
</action>
1.17 +28 -7 xml-cocoon/src/org/apache/cocoon/processor/xsp/library/sql/esql.xsl
Index: esql.xsl
===================================================================
RCS file: /home/cvs/xml-cocoon/src/org/apache/cocoon/processor/xsp/library/sql/esql.xsl,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- esql.xsl 2000/09/28 01:52:35 1.16
+++ esql.xsl 2000/09/29 04:25:19 1.17
@@ -1,5 +1,5 @@
<?xml version="1.0"?>
-<!-- $Id: esql.xsl,v 1.16 2000/09/28 01:52:35 balld Exp $-->
+<!-- $Id: esql.xsl,v 1.17 2000/09/29 04:25:19 balld Exp $-->
<!--
============================================================================
@@ -121,7 +121,11 @@
int skip_rows;
}
</xsp:logic>
- <xsl:apply-templates select=".//esql:execute-query" mode="generate-method"/>
+ <xsl:for-each select=".//esql:execute-query[not(@inner-method='no')]">
+ <xsl:call-template name="generate-code">
+ <xsl:with-param name="inner-method">yes</xsl:with-param>
+ </xsl:call-template>
+ </xsl:for-each>
<xsl:apply-templates/>
</xsp:page>
</xsl:template>
@@ -145,10 +149,20 @@
<xspdoc:desc>indicates that a sql connection is going to be defined and one or more queries may be executed</xspdoc:desc>
<xsl:template match="esql:execute-query">
- <xsp:logic>_esql_execute_query_<xsl:value-of select="generate-id(.)"/>(request,response,document,xspParentNode,xspCurrentNode,xspNodeStack,session,_esql_sessions,_esql_session);</xsp:logic>
+ <xsl:choose>
+ <xsl:when test="@inner-method='no'">
+ <xsl:call-template name="generate-code">
+ <xsl:with-param name="inner-method">no</xsl:with-param>
+ </xsl:call-template>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsp:logic>_esql_execute_query_<xsl:value-of select="generate-id(.)"/>(request,response,document,xspParentNode,xspCurrentNode,xspNodeStack,session,_esql_sessions,_esql_session);</xsp:logic>
+ </xsl:otherwise>
+ </xsl:choose>
</xsl:template>
-<xsl:template match="esql:execute-query" mode="generate-method">
+<xsl:template name="generate-code">
+ <xsl:param name="inner-method"/>
<xsl:variable name="use-connection">
<xsl:call-template name="get-nested-string">
<xsl:with-param name="content" select="esql:use-connection"/>
@@ -195,6 +209,8 @@
</xsl:call-template>
</xsl:variable>
<xsp:logic>
+ <xsl:choose>
+ <xsl:when test="$inner-method='yes'">
void _esql_execute_query_<xsl:value-of select="generate-id(.)"/>(
HttpServletRequest request,
HttpServletResponse response,
@@ -205,6 +221,11 @@
HttpSession session,
Stack _esql_sessions,
EsqlSession _esql_session) throws Exception {
+ </xsl:when>
+ <xsl:when test="$inner-method='no'">
+ {
+ </xsl:when>
+ </xsl:choose>
if (_esql_session != null) {
_esql_sessions.push(_esql_session);
}
@@ -271,9 +292,9 @@
}
}
}
- boolean _esql_results = false;
+ boolean _esql_results_<xsl:value-of select="generate-id(.)"/> = false;
while (_esql_session.resultset.next()) {
- _esql_results = true;
+ _esql_results_<xsl:value-of select="generate-id(.)"/> = true;
<xsl:apply-templates select="esql:results/*"/>
if (_esql_session.max_rows != -1 && _esql_session.count - _esql_session.skip_rows == _esql_session.max_rows-1) {
break;
@@ -286,7 +307,7 @@
} else if (_esql_session.prepared_statement != null) {
_esql_session.prepared_statement.close();
}
- if (!_esql_results) {
+ if (!_esql_results_<xsl:value-of select="generate-id(.)"/>) {
<xsl:apply-templates select="esql:no-results/*"/>
}
} catch (Exception _esql_exception) {
1.4 +2 -2 xml-cocoon/samples/sql/esql.xml
Index: esql.xml
===================================================================
RCS file: /home/cvs/xml-cocoon/samples/sql/esql.xml,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- esql.xml 2000/09/28 01:52:34 1.3
+++ esql.xml 2000/09/29 04:25:20 1.4
@@ -12,7 +12,7 @@
<page>
-<esql:execute-query>
+<esql:execute-query inner-method="no">
<esql:driver>postgresql.Driver</esql:driver>
<esql:dburl>jdbc:postgresql://localhost/test</esql:dburl>
<esql:username>test</esql:username>
@@ -23,7 +23,7 @@
<id><esql:get-string column="id"/></id>
<name><esql:get-string column="name"/></name>
<employees>
- <esql:execute-query>
+ <esql:execute-query inner-method="no">
<esql:query>select * from employee_table where department_id = <esql:get-string column="id" ancestor="1"/></esql:query>
<esql:results>
<employee>
----------------------------------------------------------------------
In case of troubles, e-mail: webmaster@xml.apache.org
To unsubscribe, e-mail: cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org