Hi!

i have a *strange* problem with esql:group/esql:member:

when i add esql:group/esql:member to my xsp page then the loop fetching
the results from the resultset changes to an endless loop, till i get an
java.lang.OutOfMemoryError.

settings vm:                    -ms128m -mx256m
settings: storejanitor: freememory=10000000 heapsize=268435456

the logic of this page is: (simplified)

page

        // main query
        esql-connection #1
                esql-pool
                esql-query #1
                        esql-results #1
                        
                                // nested query
                                esql-connection #2
                                        esql-pool
                                        esql-query #2
                                                esql-results #2

                                                // one more query for lookup data
                                                esql-connection #3
                                                        esql-pool
                                                        esql-query #3
                                                        esql-results #3
                                                /esql-connection #3

                                                // add results to xml tree
                                                output esql-result #2

                                                // xsp-logic
                                                if display-details then

                                                        // esql-query with group/member
                                                        esql-connection #4
                                                                esql-pool
                                                                esql-query #4
                                                                esql-results #4

                                                                        esql-group
                                                                        
                                                                                
esql-member
                                                                                       
 // add row to xml tree
                                                                                       
 esql-result #4
                                                                                
/esql-member

                                                                                // add 
summary row to xml tree
                                                                                
summary-line

                                                                        /esql-group

                                                        /esql-connection #5

                                                /if

                                /esql-connection #2

        /esql-connection #1

/page

if i use esql:group/esql:member with an simpler query, all works as
expected. and if i remove the esql:group, esql:member and summary line
from the xsp page shown above thers also no problem...

thx for any hint, chris

btw: i have attached the xsp page for reference :o)

-- 
KNAPP Logistics Automation  http://www.knapp.com
Ing. Christian Jölly        Tel/FAX: (++43) 316 / 495 1926 / 495 394
Günter-Knapp-Straße 5-7     A-8075 Hart bei Graz

<?xml version="1.0"?>

<xsp:page language="java"
        xmlns:esql="http://apache.org/cocoon/SQL/v2";
        xmlns:xsp="http://apache.org/xsp";
        xmlns:xsp-request="http://apache.org/xsp/request/2.0";
        >

        <page title="Report">
    
                <xsp:logic>
                        String produkt = ""; if (<xsp-request:get-parameter 
name="produkt"/> != null) { produkt = <xsp-request:get-parameter name="produkt"/>; }
                        String auftrag = ""; if (<xsp-request:get-parameter 
name="auftrag"/> != null) { auftrag = <xsp-request:get-parameter name="auftrag"/>; }
                        String kanr = ""; if (<xsp-request:get-parameter name="kanr"/> 
!= null) { kanr = <xsp-request:get-parameter name="kanr"/>; }
                        String report = ""; if (<xsp-request:get-parameter 
name="report"/> != null) { report = <xsp-request:get-parameter name="report"/>; }
                        String sLi = ""; if (<xsp-request:get-parameter name="li"/> != 
null) { sLi = <xsp-request:get-parameter name="li"/>; }
                        String sLit = ""; if (<xsp-request:get-parameter name="lit"/> 
!= null) { sLit = <xsp-request:get-parameter name="lit"/>; }
                        String sLitPos = ""; if (<xsp-request:get-parameter 
name="litpos"/> != null) { sLitPos = <xsp-request:get-parameter name="litpos"/>; }

                        int nKaNr;
                        String sProdukt;

                        float nMenge = 0;
                        float nSollzeit = 0;
                        float nSollzeitStk = 0;
                        float nIstzeit = 0;
                        float nIstzeitSchnitt = 0;
                        float nSumMenge = 0;
                        float nSumIstzeit = 0;
                        float nSumSollzeit = 0;
                        float nSumIstzeitSchnitt = 0;
                        
                        float nSumIstzeitKstGr = 0;
                        float nSumSollzeitKstGr = 0;
                        float nSumIstzeitSchnittKstGr = 0;
                        float nSumSollzeitStkKstGr = 0;

                        String sQuery = "";
                        String sQueryInner = "";
                </xsp:logic>

                <head/>
 
                <body>
                        <report>
                                <reporttitle>
                                        <reportparam>
                                                <xsp:content>Auftrag: 
<xsp:expr>auftrag</xsp:expr></xsp:content>
                                                
<xsp:content><xsp:expr>sLi</xsp:expr><xsp:expr>sLit</xsp:expr><xsp:expr>sLitPos</xsp:expr></xsp:content>
                                                <xsp:content>Produkt: 
<xsp:expr>produkt</xsp:expr></xsp:content>
                                                <xsp:logic>
                                                        if ((kanr != null) &amp;&amp; 
(kanr.length() &gt; 0)) {
                                                                <xsp:content>KANR: 
<xsp:expr>kanr</xsp:expr></xsp:content>
                                                        }
                                                </xsp:logic>
                                        </reportparam>
                                        <reportname>
                                                <xsp:content>Soll/Ist 
Zeiten</xsp:content>
                                                <xsp:logic>
                                                        if 
(report.equals("istzeit-kst")) {
                                                                <xsp:content> nach 
Kostenstellen</xsp:content>
                                                        }
                                                </xsp:logic>
                                        </reportname>
                                </reporttitle>

                                <reportheader>
                                        <headercol order="1" name="li">
                                                <xsp:logic>
                                                                if 
(report.equals("istzeit-kst")) {
                                                                        <xsp:attribute 
name="subscript">(Kst Gr.)</xsp:attribute>
                                                                }
                                                </xsp:logic>
                                                Li
                                        </headercol>
                                        <headercol order="2" name="menge">
                                                <xsp:logic>
                                                        if 
(report.equals("istzeit-kst")) {
                                                                <xsp:attribute 
name="subscript">(Kst)</xsp:attribute>
                                                        }
                                                </xsp:logic>
                                                Menge
                                        </headercol>
                                        <headercol order="3" 
name="sollzeitstk">Sollzeit (Stk. [h])</headercol>
                                        <headercol order="4" name="sollzeit">Sollzeit 
(Gesamt [h])</headercol>
                                        <headercol order="5" name="istzeit">Istzeit 
BDE (Gesamt [h])</headercol>
                                        <headercol order="6" 
name="istzeitschnitt">Istzeit BDE (Schnitt [h])</headercol>
                                </reportheader>

                                <reportdata>
                        
                                        <esql:connection>
                                      
                                                <esql:pool>pps</esql:pool>

                                                <xsp:logic>
                                                        sQuery = "
                                                                SELECT
                                                                        SUM(ap.menge) 
as menge,
                                                                        ap.li,
                                                                        ap.lit,
                                                                        ap.litpos
                                                                FROM
                                                                        aufpos=ap";
                                                                        
                                                        if ((kanr != null) &amp;&amp; 
(kanr.length() &gt; 0)) {
                                                                sQuery += ",
                                                                        stbk_kopf=sk
                                                                ";
                                                        }
                                                                
                                                        sQuery += "
                                                                WHERE
                                                                        ap.auf = \"" + 
auftrag + "\"
                                                                AND
                                                                        
CONCAT(ap.produkt, ap.idx) = \"" + produkt + "\"
                                                                ";
                                                                
                                                        if ((kanr != null) &amp;&amp; 
(kanr.length() &gt; 0)) {
                                                                sQuery += "
                                                                        AND
                                                                                sk.auf 
= ap.auf
                                                                        AND
                                                                                sk.bau 
= ap.bau
                                                                        AND
                                                                                sk.pos 
= ap.pos
                                                                        AND
                                                                                sk.tei 
= ap.tei
                                                                        AND
                                                                                
sk.kanr = \"" + kanr + "\"
                                                                ";
                                                        }

                                                        if ((sLi != null) &amp;&amp; 
(sLi.length() &gt; 0)) {
                                                                sQuery += "
                                                                        AND
                                                                                ap.li 
= \"" + sLi + "\"
                                                                        ";
                                                        }
                                                        if ((sLit != null) &amp;&amp; 
(sLit.length() &gt; 0)) {
                                                                sQuery += "
                                                                        AND
                                                                                ap.lit 
= \"" + sLit + "\"
                                                                        ";
                                                        }
                                                        if ((sLitPos != null) 
&amp;&amp; (sLitPos.length() &gt; 0)) {
                                                                sQuery += "
                                                                        AND
                                                                                
ap.litpos = \"" + sLitPos + "\"
                                                                        ";
                                                        }
                                                        
                                                        sQuery += "
                                                                GROUP BY
                                                                        ap.li, ap.lit, 
ap.litpos
                                                                ";
                                                </xsp:logic>

                                                <esql:execute-query>

                                                        
<esql:query><xsp:expr>sQuery</xsp:expr></esql:query>

                                                        <esql:results>
                                                                <esql:row-results>

                                                                        <xsp:logic>
                                                                                nMenge 
= <esql:get-float column="menge"/>;
                                                                                
nSumMenge += nMenge;
                                                                                sLi = 
<esql:get-string column="li"/>;
                                                                                sLit = 
<esql:get-string column="lit"/>;
                                                                                
sLitPos = <esql:get-string column="litpos"/>;
                                                                        </xsp:logic>

                                                                        
<esql:connection>
                                                                                
<esql:pool>pps</esql:pool>
                                                                                
<xsp:logic>
                                                                                       
 sQueryInner = "
                                                                                       
         SELECT
                                                                                       
                 sum(s.irzt+s.iezt) as istzeit
                                                                                       
         FROM
                                                                                       
                 aufpos=a
                                                                                       
                         LEFT OUTER JOIN stbk_kopf=sk
                                                                                       
                         ON
                                                                                       
                         (
                                                                                       
                                 sk.auf = a.auf
                                                                                       
                         AND
                                                                                       
                                 sk.bau = a.bau
                                                                                       
                         AND
                                                                                       
                                 sk.pos = a.pos
                                                                                       
                         AND
                                                                                       
                                 sk.tei = a.tei
                                                                                       
                         )
                                                                                       
                         LEFT OUTER JOIN stbk=s
                                                                                       
                         ON
                                                                                       
                         (
                                                                                       
                                 s.stbk = sk.stbk
                                                                                       
                         AND
                                                                                       
                                 s.stbkindex = sk.stbkindex
                                                                                       
                         )
                                                                                       
         WHERE
                                                                                       
                 a.auf = \"" + auftrag + "\"
                                                                                       
         AND
                                                                                       
                 CONCAT(a.produkt, a.idx) = \"" + produkt + "\"
                                                                                       
         AND
                                                                                       
                 a.li = \"" + sLi + "\"
                                                                                       
         AND
                                                                                       
                 a.lit = \"" + sLit + "\"
                                                                                       
         AND
                                                                                       
                 a.litpos = \"" + sLitPos + "\"
                                                                                       
 ";
                                                                                       
 if ((kanr != null) &amp;&amp; (kanr.length() &gt; 0)) {
                                                                                       
         sQueryInner += "
                                                                                       
                 AND
                                                                                       
                         sk.kanr = \"" + kanr + "\"
                                                                                       
         ";
                                                                                       
 }
                                                                                
</xsp:logic>
                                                                                
<esql:execute-query>
                                                                                       
 <esql:query><xsp:expr>sQueryInner</xsp:expr></esql:query>

                                                                                       
 <esql:results>
                                                                                       
         <esql:row-results>

                                                                                       
                 <!-- Durchschnitt eines Stuecks berechnen -->
                                                                                       
                 <xsp:logic>
                                                                                       
                         nIstzeit = <esql:get-float column="istzeit"/>;
                                                                                       
                         nSumIstzeit += nIstzeit;

                                                                                       
                         if (nMenge > 0) {
                                                                                       
                                 nIstzeitSchnitt = nIstzeit / nMenge;
                                                                                       
                         }
                                                                                       
                         else {
                                                                                       
                                 nIstzeitSchnitt = 0;
                                                                                       
                         }
                                                                                       
                 </xsp:logic>

                                                                                       
                 <!-- Sollzeit ueber alle Kostenstellen ermitteln -->
                                                                                       
                 <esql:connection>
                                                                                       
                         <esql:pool>pps</esql:pool>
                                                                                       
                         <esql:execute-query>
                                                                                       
                                 <esql:query>
                                                                                       
                                         SELECT
                                                                                       
                                                 sum(szeit) AS sollzeitkst
                                                                                       
                                         FROM
                                                                                       
                                                 sollzeiten_kst
                                                                                       
                                         WHERE
                                                                                       
                                                 produkt = <esql:parameter 
type="string"><xsp:expr>produkt.substring(0,8)</xsp:expr></esql:parameter>
                                                                                       
                                 </esql:query>
                                                                                       
                                 <esql:results>
                                                                                       
                                         <esql:row-results>
                                                                                       
                                                 <xsp:logic>
                                                                                       
                                                         nSollzeitStk = 
<esql:get-float column="sollzeitkst"/>;
                                                                                       
                                                         nSumSollzeit += nSollzeitStk 
* nMenge;
                                                                                       
                                                 </xsp:logic>
                                                                                       
                                         </esql:row-results>
                                                                                       
                                         <esql:noresults/>
                                                                                       
                                 </esql:results>
                                                                                       
                         </esql:execute-query>
                                                                                       
                 </esql:connection>

                                                                                       
                 <!-- Die Daten ausgeben -->
                                                                                       
                 <reportrow type="master">
                                                                                       
                         <datacol order="1" name="li"><esql:get-string column="li" 
ancestor="1"/><esql:get-string column="lit" ancestor="1"/><esql:get-string 
column="litpos" ancestor="1"/></datacol>
                                                                                       
                         <datacol order="2" type="number" 
name="menge"><xsp:expr>nMenge</xsp:expr></datacol>
                                                                                       
                         <datacol order="3" type="number" 
name="sollzeitstk"><xsp:expr>nSollzeitStk</xsp:expr></datacol>
                                                                                       
                         <datacol order="4" type="number" 
name="sollzeit"><xsp:expr>nSollzeitStk * nMenge</xsp:expr></datacol>
                                                                                       
                         <datacol order="5" type="number" 
name="istzeit"><xsp:expr>nIstzeit</xsp:expr></datacol>
                                                                                       
                         <datacol order="6" type="number" 
name="istzeitschnitt"><xsp:expr>nIstzeitSchnitt</xsp:expr></datacol>
                                                                                       
                 </reportrow>

                                                                                       
                 <!-- sollen auch die Kostenstellen detailiert ausgewertet werden? -->
                                                                                       
                 <xsp:logic>
                                                                                       
                         if (report.equals("istzeit-kst")) {
                                                                                       
                                 <esql:connection>
                                                                                       
                                         <esql:pool>pps</esql:pool>
                                                                                       
                                         <esql:execute-query>
                                                                                       
                                                 <esql:query>
                                                                                       
                                                         SELECT
                                                                                       
                                                                 s.ikst,
                                                                                       
                                                                 s.kstgr,
                                                                                       
                                                                 sum(s.irzt+s.iezt) as 
istzeit,
                                                                                       
                                                                 skst.szeit as 
sollzeitstk
                                                                                       
                                                         FROM
                                                                                       
                                                                 aufpos=a
                                                                                       
                                                                         LEFT OUTER 
JOIN stbk_kopf=sk
                                                                                       
                                                                         ON
                                                                                       
                                                                         (
                                                                                       
                                                                                 
sk.auf = a.auf
                                                                                       
                                                                         AND
                                                                                       
                                                                                 
sk.bau = a.bau
                                                                                       
                                                                         AND
                                                                                       
                                                                                 
sk.pos = a.pos
                                                                                       
                                                                         AND
                                                                                       
                                                                                 
sk.tei = a.tei
                                                                                       
                                                                         )
                                                                                       
                                                                         LEFT OUTER 
JOIN stbk=s
                                                                                       
                                                                         ON
                                                                                       
                                                                         (
                                                                                       
                                                                                 
s.stbk = sk.stbk
                                                                                       
                                                                         AND
                                                                                       
                                                                                 
s.stbkindex = sk.stbkindex
                                                                                       
                                                                         )
                                                                                       
                                                                         LEFT OUTER 
JOIN sollzeiten_kst=skst
                                                                                       
                                                                         ON
                                                                                       
                                                                         (
                                                                                       
                                                                                 
skst.kst = s.skst
                                                                                       
                                                                         AND
                                                                                       
                                                                                 
skst.produkt = a.produkt
                                                                                       
                                                                         )
                                                                                       
                                                         WHERE
                                                                                       
                                                                 a.auf = 
<esql:parameter type="string"><xsp:expr>auftrag</xsp:expr></esql:parameter>
                                                                                       
                                                         AND
                                                                                       
                                                                 CONCAT(a.produkt, 
a.idx) = <esql:parameter type="string"><xsp:expr>produkt</xsp:expr></esql:parameter>
                                                                                       
                                                         AND
                                                                                       
                                                                 a.li = 
<esql:parameter type="int"><esql:get-int ancestor="2" column="li"/></esql:parameter>
                                                                                       
                                                         AND
                                                                                       
                                                                 a.lit = 
<esql:parameter type="string"><esql:get-string ancestor="2" 
column="lit"/></esql:parameter>
                                                                                       
                                                         AND
                                                                                       
                                                                 a.litpos = 
<esql:parameter type="int"><esql:get-int ancestor="2" 
column="litpos"/></esql:parameter>
                                                                                       
                                                         AND
                                                                                       
                                                                 length(s.ikst) > 0
                                                                                       
                                                         GROUP BY
                                                                                       
                                                                 s.ikst
                                                                                       
                                                 </esql:query>
                                                                                       
                                                 <esql:results>
                                                                                       
                                                         <esql:row-results>
                                                                                       
                                                                 <esql:group 
group-on="kstgr">
                                                                                       
                                                                 
                                                                                       
                                                                         <xsp:logic>
                                                                                       
                                                                                 
nSumSollzeitStkKstGr = 0;
                                                                                       
                                                                                 
nSumSollzeitKstGr = 0;
                                                                                       
                                                                                 
nSumIstzeitKstGr = 0;
                                                                                       
                                                                                 
nSumIstzeitSchnittKstGr = 0;
                                                                                       
                                                                         </xsp:logic>

                                                                                       
                                                                         <esql:member>
                                                                                       
                                                                                 
<xsp:logic>
                                                                                       
                                                                                       
  nSollzeitStk = <esql:get-float column="sollzeitstk"/>;

                                                                                       
                                                                                       
  nSumSollzeitStkKstGr += nSollzeitStk;
                                                                                       
                                                                                       
  nSumSollzeitKstGr += nSollzeitStk * nMenge;
                                                                                       
                                                                                       
  
                                                                                       
                                                                                       
  nIstzeit = <esql:get-float column="istzeit"/>;

                                                                                       
                                                                                       
  if (nMenge > 0) {
                                                                                       
                                                                                       
          nIstzeitSchnitt = nIstzeit / nMenge;
                                                                                       
                                                                                       
  }
                                                                                       
                                                                                       
  else {
                                                                                       
                                                                                       
          nIstzeitSchnitt = 0;
                                                                                       
                                                                                       
  }

                                                                                       
                                                                                       
  nSumIstzeitKstGr += nIstzeit;
                                                                                       
                                                                                       
  nSumIstzeitSchnittKstGr += nIstzeitSchnitt;
                                                                                       
                                                                                 
</xsp:logic>
                                                                                       
                                                                                 
<reportrow type="detail">
                                                                                       
                                                                                       
  <datacol order="1" type="string" name="kstgr"><esql:get-string 
column="kstgr"/></datacol>
                                                                                       
                                                                                       
  <datacol order="2" type="string" name="kst"><esql:get-string 
column="ikst"/></datacol>
                                                                                       
                                                                                       
  <datacol order="3" type="number" 
name="sollzeitstk"><xsp:expr>nSollzeitStk</xsp:expr></datacol>
                                                                                       
                                                                                       
  <datacol order="4" type="number" name="sollzeit"><xsp:expr>nSollzeitStk * 
nMenge</xsp:expr></datacol>
                                                                                       
                                                                                       
  <datacol order="5" type="number" 
name="istzeit"><xsp:expr>nIstzeit</xsp:expr></datacol>
                                                                                       
                                                                                       
  <datacol order="6" type="number" 
name="istzeitschnitt"><xsp:expr>nIstzeitSchnitt</xsp:expr></datacol>
                                                                                       
                                                                                 
</reportrow>
                                                                                       
                                                                         </esql:member>
                                                                                       
                                                                         
                                                                                       
                                                                         <reportrow 
type="master">
                                                                                       
                                                                                 
<datacol order="1" type="string" name="kstgr">Summe <esql:get-string 
column="kstgr"/></datacol>
                                                                                       
                                                                                 
<datacol order="2" type="string" name="kst"/>
                                                                                       
                                                                                 
<datacol order="3" type="number" 
name="sollzeitstk"><xsp:expr>nSumSollzeitStkKstGr</xsp:expr></datacol>
                                                                                       
                                                                                 
<datacol order="4" type="number" 
name="sollzeit"><xsp:expr>nSumSollzeitKstGr</xsp:expr></datacol>
                                                                                       
                                                                                 
<datacol order="5" type="number" 
name="istzeit"><xsp:expr>nSumIstzeitKstGr</xsp:expr></datacol>
                                                                                       
                                                                                 
<datacol order="6" type="number" 
name="istzeitschnitt"><xsp:expr>nSumIstzeitSchnittKstGr</xsp:expr></datacol>
                                                                                       
                                                                         </reportrow>

                                                                                       
                                                                 </esql:group>
                                                                                       
                                                                 
                                                                                       
                                                         </esql:row-results>
                                                                                       
                                                 </esql:results>
                                                                                       
                                                 <esql:no-results/>
                                                                                       
                                         </esql:execute-query>
                                                                                       
                                 </esql:connection>
                                                                                       
                         }
                                                                                       
                 </xsp:logic>
                                                                                       
         </esql:row-results>
                                                                                       
 </esql:results>
                                                                                       
 <esql:no-results/>
                                                                                
</esql:execute-query>
                                                                        
</esql:connection>
                                                                
                                                                </esql:row-results>
                                                        </esql:results>
                                                          
                                                        <esql:no-results/>
                                                          
                                                </esql:execute-query>

                                        </esql:connection>
                                        
                                </reportdata>

                                <xsp:logic>
                                        if (nSumMenge > 0) {
                                                nSumIstzeitSchnitt = nSumIstzeit / 
nSumMenge;
                                        }
                                        else {
                                                nSumIstzeitSchnitt = 0;
                                        }
                                </xsp:logic>

                                <reportfooter>
                                        <footercol order="1" 
name="li">Summe</footercol>
                                        <footercol order="2" type="number" 
name="menge"><xsp:expr>nSumMenge</xsp:expr></footercol>
                                        <footercol order="3" type="number" 
name="sollzeitstk"><xsp:expr>0</xsp:expr></footercol>
                                        <footercol order="4" type="number" 
name="sollzeit"><xsp:expr>nSumSollzeit</xsp:expr></footercol>
                                        <footercol order="5" type="number" 
name="istzeit"><xsp:expr>nSumIstzeit</xsp:expr></footercol>
                                        <footercol order="6" type="number" 
name="istzeitschnitt"><xsp:expr>nSumIstzeitSchnitt</xsp:expr></footercol>
                                </reportfooter>
                        </report>
                </body>

        </page>
</xsp:page>

Attachment: msg09014/pgp00000.pgp
Description: PGP signature

Reply via email to