On 17.May.2002 -- 10:01 AM, Torsten Curdt wrote:
> On Friday 17 May 2002 03:48, neil wrote:
> > Hi,
> > it seems that a few cocoon users like me, are hacking about with esql to
> > get it to do what we need. I'm working on the change shown below and am
> > happy to share it if anyone wants it.
> >
> > JDBC can handle a sequence of values returned from a stored procedure,
> > where the values can be update counts and ResultSets in any order. It looks
> > to me like esql v1.22 will only handle a sequence with all the ResultSets
> > before the first update count and at most one update count. e.g.
> > ResultSet*updateCount? (where * and ? are as in a RE).
> >
> > MS SqlServer stored procs return an update count for every
> > insert/update/delete performed and a ResultSet for every query (whose
> > results aren't consumed in the procedure) in the order that they are
> > performed. So its important to handle update counts and ResultSets in any
> > order.
> 
> Let's assume you expect:
> 
> resultset
> update count
> resultset
> update count
> 
> How do you iterate through the update counts? AFAIK the JDBC API provides only 
> information about the update count in the Statement. This is why current esql 
> is like it is.

I believe that we actually should expect

(resultset, update count)
   |
   | getMoreResults()
   V
(resultset, update count)

So the real question would be IMHO how should ESQL react with respect
to multiple ResultSets? Something like introducing an index attribute?

   <esql:results index="1">
     ...
   </esql:results>
   <esql:update-results index="1">
     ...
   </esql:update-results>
   <esql:results index="2">
     ...
   </esql:results>
   <esql:update-results index="2">
     ...
   </esql:update-results>

Afterall, each ResultSet may have a different structure and semantics.

> > int resultCount = 0;
> > for ( boolean nextResultIsResultSet = cs.execute(); true;
> > nextResultIsResultSet = cs.getMoreResults() ) {
         //if (nextResultIsResultSet) {
> >     java.sql.ResultSet rs = cs.getResultSet();
> >     ++resultCount;
        switch (resultCount) {
          1: //handle ResultSet 1
                    rs.close();
                        int updateCount = cs.getUpdateCount();
                        if ( updateCount == -1 ) {
                            // handle UpdateResults 1
             break;
          2: //handle ResultSet 2
                    rs.close();
                        int updateCount = cs.getUpdateCount();
                        if ( updateCount == -1 ) {
                            // handle UpdateResults 2
             break;
          default: // handle ResultSet without index
        }
> > }
> > if (resultCount == 0) {
> >     // no returned results
> > }
> 
> note that you are always calling getUpdateCount on the same statement. will 
> it's state be changed?!? That would be indeed a ugly behaviour...

BTW can anyone remember what more-results are supposed to mean?

        Chris.

-- 
C h r i s t i a n       H a u l
[EMAIL PROTECTED]
    fingerprint: 99B0 1D9D 7919 644A 4837  7D73 FEF9 6856 335A 9E08

---------------------------------------------------------------------
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