balld 00/08/25 20:54:43
Modified: src/org/apache/cocoon/processor/xsp/library/sql esql.xsl
Log:
added esql:get-columns method to iterate over columns (needs DOM, yuck)
added resultset metadata variable and access methods
Revision Changes Path
1.2 +52 -6
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.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- esql.xsl 2000/08/25 20:22:44 1.1
+++ esql.xsl 2000/08/26 03:54:43 1.2
@@ -118,6 +118,7 @@
boolean close_connection = true;
Statement statement;
ResultSet resultset;
+ ResultSetMetaData resultset_metadata;
int count;
int max_rows;
int skip_rows;
@@ -223,6 +224,7 @@
</xsl:choose>
_esql_session.statement =
_esql_session.connection.createStatement();
_esql_session.resultset =
_esql_session.statement.executeQuery(<xsl:copy-of select="$query"/>);
+ _esql_session.resultset_metadata =
_esql_session.resultset.getMetaData();
_esql_session.count = 0;
if (_esql_session.skip_rows > 0) {
while (_esql_session.resultset.next()) {
@@ -262,22 +264,54 @@
</xsp:logic>
</xsl:template>
-<xsl:template match="esql:get-string" name="get-string">
+<xsl:template match="esql:results/esql:get-columns">
+ <xsp:logic>
+ for (int _esql_i=1; _esql_i <=
_esql_session.resultset_metadata.getColumnCount(); _esql_i++) {
+ Node _esql_node =
document.createElement(_esql_session.resultset_metadata.getColumnName(_esql_i));
+
_esql_node.appendChild(document.createTextNode(_esql_session.resultset.getString(_esql_i)));
+ xspCurrentNode.appendChild(_esql_node);
+ }
+ </xsp:logic>
+</xsl:template>
+
+<xsl:template match="esql:results/esql:get-string" name="get-string">
<xsp:expr><xsl:call-template
name="get-resultset"/>.getString(<xsl:call-template
name="get-column"/>)</xsp:expr>
</xsl:template>
+
+<xsl:template match="esql:results/esql:get-date">
+ <xsl:choose>
+ <xsl:when test="@format">
+ <xsp:expr>new SimpleDateFormat("<xsl:value-of
select="@format"/>").format(<xsl:call-template
name="get-resultset"/>.getDate(<xsl:call-template
name="get-column"/>))</xsp:expr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsp:expr><xsl:call-template
name="get-resultset"/>.getDate(<xsl:call-template
name="get-column"/>)</xsp:expr>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
+
+<xsl:template match="esql:results/esql:get-time">
+ <xsl:choose>
+ <xsl:when test="@format">
+ <xsp:expr>new SimpleDateFormat("<xsl:value-of
select="@format"/>").format(<xsl:call-template
name="get-resultset"/>.getTime(<xsl:call-template
name="get-column"/>))</xsp:expr>
+ </xsl:when>
+ <xsl:otherwise>
+ <xsp:expr><xsl:call-template
name="get-resultset"/>.getTime(<xsl:call-template
name="get-column"/>)</xsp:expr>
+ </xsl:otherwise>
+ </xsl:choose>
+</xsl:template>
-<xsl:template match="esql:get-date">
+<xsl:template match="esql:results/esql:get-timestamp">
<xsl:choose>
<xsl:when test="@format">
- <xsp:expr>new SimpleDateFormat("<xsl:value-of
select="@format"/>").format(_esql_session.resultset.getDate(<xsl:call-template
name="get-column"/>))</xsp:expr>
+ <xsp:expr>new SimpleDateFormat("<xsl:value-of
select="@format"/>").format(<xsl:call-template
name="get-resultset"/>.getTimestamp(<xsl:call-template
name="get-column"/>))</xsp:expr>
</xsl:when>
<xsl:otherwise>
- <xsp:expr>_esql_session.resultset.getDate(<xsl:call-template
name="get-column"/>)</xsp:expr>
+ <xsp:expr><xsl:call-template
name="get-resultset"/>.getTimestamp(<xsl:call-template
name="get-column"/>)</xsp:expr>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
-<xsl:template match="esql:get-xml">
+<xsl:template match="esql:results/esql:get-xml">
<xsl:variable name="content">
<xsl:choose>
<xsl:when test="@root">
@@ -297,8 +331,20 @@
<xsp:expr>this.xspParser.parse(new InputSource(new
StringReader(<xsl:copy-of select="$content"/>))).getDocumentElement()</xsp:expr>
</xsl:template>
-<xsl:template match="esql:get-row-number">
+<xsl:template match="esql:results/esql:get-row-number">
<xsp:expr>_esql_session.count</xsp:expr>
+</xsl:template>
+
+<xsl:template match="esql:results/esql:get-column-name">
+ <xsp:expr>_esql_session.resultset_metadata.getColumnName(<xsl:call-template
name="get-column"/>)</xsp:expr>
+</xsl:template>
+
+<xsl:template match="esql:results/esql:get-column-label">
+
<xsp:expr>_esql_session.resultset_metadata.getColumnLabel(<xsl:call-template
name="get-column"/>)</xsp:expr>
+</xsl:template>
+
+<xsl:template match="esql:results/esql:get-column-type-name">
+
<xsp:expr>_esql_session.resultset_metadata.getColumnTypeName(<xsl:call-template
name="get-column"/>)</xsp:expr>
</xsl:template>
<xsl:template name="get-resultset">