John --

Here is the diff that will fix your XPath problems:

cvs diff SQLDocument.java (in directory
C:\Xalan-dev\xml-xalan\java\src\org\apache\xalan\lib\sql\)
Index: SQLDocument.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/lib/sql/SQLDocument.java,v
retrieving revision 1.7
diff -r1.7 SQLDocument.java
806c806
<     if (nodeIdx != DTM.NULL) return m_attribute.elementAt(nodeIdx);
---
>     if (nodeIdx != DTM.NULL) return m_attribute.elementAt(nodeIdx) | m_dtmIdent;
868c868
<     if (nodeIdx != DTM.NULL) return m_nextsib.elementAt(nodeIdx);
---
>     if (nodeIdx != DTM.NULL) return m_nextsib.elementAt(nodeIdx) | m_dtmIdent;

What was happening was that in getFirstAttribute and getNextAttribute
you were returning the raw node number (ie 0x00000004) instead of the
full node number which included the DTM id (ie 0x00300004).

You may have this problem in some other methods as well but these were
the ones I found off the bat and they fixed the original problem.  Since
you're much more familiar with the code, perhaps you could check other
similar methods and make sure they return the full node number.

Also, I haven't committed anything since I didn't want to step on any of
your changes.  I saw that Joe gave you some suggestions regarding
tracking down the hanging thread.  If you need assistance on that,
please come back to me and I'll have a look.

Gary

John Gentilin wrote:
> ...
> If you have the time to look at this, I am also having another
> problem that is really hanging me up. If I execute an XPath
> statement and the select specifies the extent on a tree, it
> will result in an exception. So if I have the code
> 
> <xsl:copy-of select="$table/row-set/row/column" />
> 
> An exception will occur where as if I execute the following.
> 
> <xsl:copy-of select="$table/row-set/row" />
> Not only will the exception NOT occur, the data is transferred
> to the result tree just fine.
> 
> The same occurs for the following code pair
> <xsl:copy-of select="$table/row-set/column-header" />
> and
> <xsl:copy-of select="$table/row-set" />
> 
> The only difference I can see is that the XPath statement
> specifies all the elements in the selected branch.
> 
> Regards
> John G
> 
> Gary L Peskin wrote:
> 
> > John --
> >
> > I can't think of anything in the extension mechanism that would make
> > this happen.  If null is returned from an extension element, nothing
> > happens.  If returned from an extension function, it just turns into an
> > XNull.  If you can't figure it out, please post what I would need to
> > recreate the situation.
> >
> > Thanks,
> > Gary
> >
> > John Gentilin wrote:
> > >
> > > If my extension returns null, the transformation seems to
> > > complete as expected but Process never seems to terminate,
> > > like some background thread is just keeping the program
> > > hung up.
> 
>   ------------------------------------------------------------------------
> <?xml version="1.0"?>
> <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">
> 
> <xsl:output method="html" indent="yes"/>
> 
> <xsl:param name="driver" select="'org.enhydra.instantdb.jdbc.idbDriver'"/>
> <xsl:param name="datasource" select="'jdbc:idb:./instantdb/sample.prp'"/>
> <xsl:param name="query" select="'SELECT * FROM import1'"/>
> 
> <xsl:template match="/">
>     <xsl:variable name="db" select="sql:new($driver, $datasource)"/>
>     <!-- xsl:if test="sql:connect($db, $driver, $datasource)" -->
>       <xsl:text> Connection make OK</xsl:text>
>     <!-- /xsl:if -->
>     <xsl:variable name="table" select='sql:query($db, $query)'/>
>     <!--
>       <xsl:for-each select="$table/row-set/column-header">
>         <xsl:value-of select="@column-label"/></TH>
>       </xsl:for-each>
>     -->
>     <xsl:variable name="table" select='sql:query($db, $query)'/>
>     <xsl:copy-of select="$table/row-set/" />
>     <xsl:value-of select="sql:close($db)"/>
> 
> </xsl:template>
> 
> </xsl:stylesheet>

Reply via email to