You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Roger I Martin PhD <hy...@hypernexinc.com> on 2001/11/09 14:46:49 UTC
getting column names or values by variable
Hi I am new to Cocoon. Is extending esql to allow column names and values by variable of interest to you? Here is my diff -u:
---------------------------------
Index: esql.xsl
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/org/apache/cocoon/components/language/markup/xsp/java/esql.xsl,v
retrieving revision 1.22
diff -u -r1.22 esql.xsl
--- esql.xsl 2001/10/17 14:12:14 1.22
+++ esql.xsl 2001/11/09 13:00:46
@@ -718,6 +718,16 @@
</xsp:expr>
</xsl:template>
+<xspdoc:desc>returns the value of the given column as a string</xspdoc:desc>
+<xsl:template match="esql:row-results//esql:get-string-by-variable" name="get-string-by-variable">
+ <xsp:expr>
+ <xsl:call-template name="get-string-encoded">
+ <xsl:with-param name="column-spec"><xsl:value-of select="@column"/></xsl:with-param>
+ <xsl:with-param name="resultset"><xsl:call-template name="get-resultset"/></xsl:with-param>
+ </xsl:call-template>
+ </xsp:expr>
+</xsl:template>
+
<xspdoc:desc>returns the value of the given column as a date. if a format attribute exists, its value is taken to be a date format string as defined in java.text.SimpleDateFormat, and the result is formatted accordingly.</xspdoc:desc>
<xsl:template match="esql:row-results//esql:get-date">
<xsl:choose>
@@ -897,6 +907,11 @@
<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">
<xsp:expr><xsl:call-template name="get-resultset"/>.getMetaData().getColumnName(<xsl:call-template name="get-column"/>)</xsp:expr>
+</xsl:template>
+
+<xspdoc:desc>returns the name of the given column. the column must be specified by a variable, not name.</xspdoc:desc>
+<xsl:template match="esql:row-results//esql:get-column-name-by-variable">
+ <xsp:expr><xsl:call-template name="get-resultset"/>.getMetaData().getColumnName(<xsl:value-of select="@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>
---------------------------------------------
This allows me to make a single chunk of xsp to display the results from a query. Example:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsp:page
language="java"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsp="http://apache.org/xsp"
xmlns:log="http://apache.org/xsp/log/2.0"
xmlns:esql="http://apache.org/cocoon/SQL/v2"
>
<page>
<title>Geometry</title>
<content>
<para>Set static goniometer parameters.</para>
<esql:connection>
<esql:pool>HWITCD</esql:pool>
<esql:execute-query>
<esql:query>select * from GEOMETRY, TOOL where GEOMETRY.TOOL_PK = TOOL.TOOL_PK and FLAG=Yes</esql:query>
<esql:results>
<table border="1">
<CAPTION>Goniometer Parameters</CAPTION>
<xsp:logic>
int _esql_count=0;
</xsp:logic>
<esql:row-results>
<xsp:logic>
int _esql_max=<esql:get-column-count/>;
if(_esql_count++==0)
{
</xsp:logic>
<tr>
<xsp:logic>
for(int _esql_i=1;_esql_i<=_esql_max;_esql_i++)
{
<th><esql:get-column-name-by-variable column="_esql_i"/></th>
}
</xsp:logic>
</tr>
<xsp:logic>
}
</xsp:logic>
<tr>
<xsp:logic>
for(int _esql_i=1;_esql_i<=_esql_max;_esql_i++)
{
<td><esql:get-string-by-variable column="_esql_i"/></td>
}
</xsp:logic>
</tr>
</esql:row-results>
</table>
</esql:results>
</esql:execute-query>
</esql:connection>
</content>
</page>
</xsp:page>
It works like a charm for all queries returning a result set. Logic can be added to skip any particular column.
What do you think?
Roger