You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Tagunov Anthony <at...@nnt.ru> on 2000/12/30 21:51:15 UTC
Re: esql Bug? joint to question
Hello, Matthew Cordes!
There's esql schema available at
http://xml.apache.org/websrc/index.cgi/xml-cocoon/samples/sql/esql.xsd
BTW it clearly showes that <esql:no-results> should still be <esql:results> sibling. I also noticed that I couldn't get it instantinated
with the latest version of esql.xsl (from http://xml.apache.org/websrc/index.cgi/xml-cocoon/src/org/apache/cocoon/processor/xsp/library/sql/esql.xsl)
Maybe it is just a bug? There's an instruction for instantiating <esql:results> but none for <esql:no-results>.
>Hello all,
>
>My patch to esql before may have been too hasty.
>
>I am trying to get the <esql:no-results> block to
>be done when there are no results. My initial confusion
>was that from my experience with the older esql I assumed
><esql:no-results/> was a sibling of <esql:results> e.g.
>
><esql:execute-query>
> <esql:results>
> <yes-results/>
> </esql:results>
>
> <esql:no-results>
> <no-results/>
> </esql:no-results>
></esql:execute-query>
>
>but this does not work, after a little research I discovered
>that having <esql:no-results> as a child of <esql:results>
>seemed to work, e.g.
>
><esql:execute-query>
> <esql:results>
> <esql:row-results>
> <yes-results/>
> </esql:row-results>
>
> <esql:no-results>
> <no-results/>
> </esql:no-results>
>
> </esql:results>
></esql:execute-query>
>
>this is due to line 318 in esql.xsl
>><xsl:template match="esql:execute-query//esql:results">
>> <xsl:apply-templates/>
>></xsl:template>
>
>but the problem here is when <esql:max-rows> is set to 1
>there is a problem at line 342 in esql.xsl
>
>><xsl:template match="esql:results//esql:row-results">
>> <xsp:logic>
>> while (_esql_query.resultset.next()) {
>> <xsl:apply-templates/>
>> if (_esql_query.max_rows != -1 && _esql_query.position - _esql_query.skip_rows == _esql_query.max_rows-1) {
>> break;
>> }
>> _esql_query.position++;
>> }
>> </xsp:logic>
>></xsl:template>
>
>Note the if statement, if _esql_query.max_rows == 1 and
>_esql_query.skip_rows = 0 and _esql_query.position = 0 ( we're
>on the first row returned ) that line reads:
>
>>if ( 1 != -1 && 0 - 0 == 0 )
>
>thus the line:
>> _esql_query.position++;
>
>is not incremented although it should be and inside
>the check for no-results at line 326
>><xsl:template match="esql:execute-query//esql:no-results">
>> <xsp:logic>
>> if (_esql_query.position == _esql_query.skip_rows) {
>> <xsl:apply-templates/>
>> }
>> </xsp:logic>
>></xsl:template>
>
>that if reads
>> if ( 0 == 0 )
>, thus we have applied templates for <esql:row-results> kids
>and now for <esql:no-results> kids.
>
>This is an easy fix by making that block at 324 read:
><xsl:template match="esql:results//esql:row-results">
> <xsp:logic>
> while (_esql_query.resultset.next()) {
> <xsl:apply-templates/>
> _esql_query.position++;
>
> if (_esql_query.max_rows != -1 && _esql_query.position - _esql_query.skip_rows == _esql_query.max_rows) {
> break;
> }
> }
> </xsp:logic>
></xsl:template>
>
>Note the increment and if are inverted above and the last compare
>is with _esql_query.max_rows not _esql_query.max_rows-1.
>
>Also I recall hearing discussion about esql's schema. Is that
>available? It would make deciphering the logicsheet a little easier.
>
>Please excuse me if I have misunderstood the syntax of esql.
>
>-matt
In addition to that, I've got an almost desperate call to esql develpers (Donald Ball and Robin Green):
We should get <esql:no-results> instantiated when a rowset with zero lines has been retrived.. (or maybe also when when max-rows and skip-rows
parameters are set in such a way that no rows are availabel for instantiating <esql:row-results>?)..
PLEASE: CAN WE HAVE <esql:results> INSTANTIATED ONLY OTHERWISE? (FOR NEVER TO
HAVE BOTH <esql:no-results> and <esql:results> both instantiated?)
I see three variants:
1) we instantiate <esql:results> when and only when there are lines in the Resultset
(and <max-rows> and <skip-rows> select positive number of rows)
we instantiate <esql:no-results>(if any) otherwise
2) we instantiate <esql:results> when and only when there are lines in the Resultset
(and <max-rows> and <skip-rows> select positive number of rows)
OR WHEN NO <esql:no-results> has been given
we instantiate <esql:no-results> otherwise
3) we instantiate <esql:results> always.
we instantiate <esql:no-results> when it is present and the number of rows in the resultset
chosen by <esql:max-rows> and <esql:skip-rows> equals to zero
PLEASE, can we have 1) or 2) ? PLEASE, can we not have 3)? Robin and Donald?
I personally thing that it is sensible to put some framing around <esql:row-results> (incapsulate 'em in a paremnt element)
that should be generated ONLY IF THERE ARE ANY <esql:row-results> instantiated). In <esql:no-results> we could want
totally different tags (this will simplify the xsl that gets applied after xsp+esql.xsl).
My best regards, Tagunov Anthony
NNT Telecom Russia