<snip/>

> > getMoreResults() should return no resultset at all... but how to iterate
> > to the next update count? again - it belongs to the statement...
>
> I read the JDBC API that way that getMoreResults() closes the current
> ResultSet and switches to the next result. A result consists among
> others of a ResultSet and an UpdateCount. At least I get the
> impression from the docs. So, if a complex statement i.e. a stored
> procedure produces several results, why shouldn't it return several
> update counts as well?

...

> So with the scenario above, it would still work as each call to
> getMoreResults() would switch to the next result. Incidently
> containing no result set but an update count.

makes sense... I also looked into the code I guess we should change it into 
something like this then:

     do {
       if (_esql_query.hasResultSet()) {
          _esql_query.getResultRows();

          if (_esql_query.nextRow()) {
            <xsl:apply-templates select="esql:results"/>
          }
          else {
            <xsl:apply-templates select="esql:no-results"/>
          }
          _esql_query.getResultSet().close();
       }
       else {
          if (_esql_query.getStatement().getUpdateCount() &gt; 0) {
             <xsl:apply-templates select="esql:update-results/*"/>
          }
          else{
             <xsl:apply-templates select="esql:no-results"/>
          }
       }
     } while(_esql_query.getMoreResults());

what do you think?

<snip/>

> Is it? AFAIK we evalute the <esql:results/> block for each result. How
> would I write different code for each result?

sorry, looking at the code revealed I didn't recalle correctly... the 
structure of results has to be same... you were right...

We could work around by wrapping the esql:results in a switch/case statement 
so with multiple resultset it would get expanded into:

     int _esql_resultset_nr = 0;
     do {
       if (_esql_query.hasResultSet()) {
          _esql_query.getResultRows();

          if (_esql_query.nextRow()) {
            switch(_esql_resultset_nr++) {
              case 1: /* resultset position() = 1 goes here */ break;
              case 2: /* resultset position() = 2 goes here */ break;
              ...
            }
          }
          else {
            <xsl:apply-templates select="esql:no-results"/>
          }
          _esql_query.getResultSet().close();
       }
       else {
          if (_esql_query.getStatement().getUpdateCount() &gt; 0) {
             <xsl:apply-templates select="esql:update-results/*"/>
          }
          else{
             <xsl:apply-templates select="esql:no-results"/>
          }
       }
     } while(_esql_query.getMoreResults());

So all you whould need to do is to specify multiple esql:results which get 
applied in the order of appearance.

What do you think?
--
Torsten

PS:maybe we should better move this discussion to cocoon-dev

---------------------------------------------------------------------
Please check that your question has not already been answered in the
FAQ before posting. <http://xml.apache.org/cocoon/faqs.html>

To unsubscribe, e-mail: <[EMAIL PROTECTED]>
For additional commands, e-mail: <[EMAIL PROTECTED]>

Reply via email to