<html>
  <title>Xalan SQL Extension</title>
  <body>
    <p><em>**Experimental**</em> Provides extension functions for connecting to a JDBC data source, executing a query,
    and working incrementally through "streamable" result set.<p>
   <p><em>The SQL extension use of a single row-set node to incrementally return a query result set is experimental. Keep in mind that you
   can only access row elements one at a time moving forward through the result set. The use of XPath expressions in your stylesheet, for
   example, that attempt to return nodes from the result set in any other manner may produce unpredictable results.</em></p>    
    <p>XConnection provides three extension functions that you can use in your stylesheet.</p>
    <ol>
      <li><p>new() -- Use one of the XConnection constructors to connect to a data source, and return an XConnection
       object.</p></li>
      <li><p>query() -- Use the XConnection object query() method to return a "streamable" result set in the form of a row-set
       node. Work your way through the row-set one row at a time. The same row element is used over and over again, so you can
       begin "transforming" the row-set before the entire result set has been returned.</p></li>
      <li>close() -- Use the XConnection object close() method to terminate the connection.</li>      
    </ol>
    <p>The query() extension function returns a Document node that contains (as needed) an array of column-header elements, 
    a single row element that is used repeatedly, and an array of col elements. Each column-header element (one per column in the
    row-set) contains an attribute (ColumnAttribute) for each of the column descriptors in the ResultSetMetaData object. 
    Each col element contains a text node with a textual representation of the value for that column in the current row.</p>
    <h2>Example</h2>
    <p>This example displays the result set from a table in a sample InstantDB database.</p>
<pre>&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                version="1.0"
                xmlns:sql="org.apache.xalan.lib.sql.XConnection"
                extension-element-prefixes="sql"&gt;
  &lt;xsl:output method="html" indent="yes"/&gt;
  &lt;xsl:param name="query" select="'SELECT * FROM import1'"/&gt;
 
  &lt;xsl:template match="/"&gt;
    &lt;!-- 1. Make the connection --&gt;
    &lt;xsl:variable name="products"
                  select="sql:new('org.enhydra.instantdb.jdbc.idbDriver',
                                'jdbc:idb:D:\instantdb\Examples\sample.prp')"/&gt;
    &lt;HTML&gt;
      &lt;HEAD&gt;
      &lt;/HEAD&gt;
      &lt;BODY&gt;
        &lt;TABLE border="1"&gt;
        &lt;!--2. Execute the query --&gt;
        &lt;xsl:variable name="table" select='sql:query($products, $query)'/&gt;
          &lt;TR&gt;
          &lt;!-- Get column-label attribute from each column-header--&gt;
          &lt;xsl:for-each select="$table/row-set/column-header"&gt;
            &lt;TH&gt;&lt;xsl:value-of select="@column-label"/&gt;&lt;/TH&gt;
          &lt;/xsl:for-each&gt;
          &lt;/TR&gt;
          &lt;xsl:apply-templates select="$table/row-set/row"/&gt;
          &lt;xsl:text&gt;&amp;#10;&lt;/xsl:text&gt;
        &lt;/TABLE&gt;
      &lt;/BODY&gt;
    &lt;/HTML&gt; 
    &lt;!-- 3. Close the connection --&gt;
    &lt;xsl:value-of select="sql:close($products)"/&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="row"&gt;
        &lt;TR&gt;
          &lt;xsl:apply-templates select="col"/&gt;
        &lt;/TR&gt;
  &lt;/xsl:template&gt;

  &lt;xsl:template match="col"&gt;
    &lt;TD&gt;
      &lt;!-- Here is the column data -->
      &lt;xsl:value-of select="text()"/>
    &lt;/TD>
  &lt;/xsl:template>

&lt;/xsl:stylesheet&gt;
</pre>    
 </body>
</html>