sboag       01/08/20 20:06:46

  Modified:    java/src/org/apache/xalan/transformer KeyRefIterator.java
               java/src/org/apache/xpath/axes ChildIterator.java
                        ChildTestIterator.java DescendantIterator.java
                        MatchPatternIterator.java
                        SelfIteratorNoPredicate.java UnionPathIterator.java
  Log:
  Fix for problem reported by Mike Starr <[EMAIL PROTECTED]>,
  where the transformation hangs for "foo[2] | bang"
  patters, i.e. unions with positional predicates.  The fix
  is to have the iterators#nextNode() set m_lastFetched to DTM.NULL
  when m_foundLast is found to be true on function entry
  (after the cache check).  This allows getCurrentNode() to
  fullfill it's contract of returning null if the last fetch was
  null.  The bug occured after an optimization for positional
  predicates to have them not continue searching once
  the positional node was found, by setting m_foundLast
  to true.
  
  Revision  Changes    Path
  1.11      +3 -0      
xml-xalan/java/src/org/apache/xalan/transformer/KeyRefIterator.java
  
  Index: KeyRefIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/KeyRefIterator.java,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- KeyRefIterator.java       2001/07/17 18:17:39     1.10
  +++ KeyRefIterator.java       2001/08/21 03:06:45     1.11
  @@ -135,7 +135,10 @@
     {
   
      if (m_foundLast)
  +   {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +   }
       
       // If the cache is on, and the node has already been found, then 
       // just return from the list.
  
  
  
  1.9       +3 -0      xml-xalan/java/src/org/apache/xpath/axes/ChildIterator.java
  
  Index: ChildIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/ChildIterator.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- ChildIterator.java        2001/08/07 19:16:43     1.8
  +++ ChildIterator.java        2001/08/21 03:06:45     1.9
  @@ -139,7 +139,10 @@
       }
   
       if (m_foundLast)
  +    {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +    }
   
       int next;
   
  
  
  
  1.13      +3 -0      xml-xalan/java/src/org/apache/xpath/axes/ChildTestIterator.java
  
  Index: ChildTestIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/ChildTestIterator.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- ChildTestIterator.java    2001/08/07 19:16:43     1.12
  +++ ChildTestIterator.java    2001/08/21 03:06:45     1.13
  @@ -202,7 +202,10 @@
       }
   
       if (m_foundLast)
  +    {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +    }
         
       if(DTM.NULL == m_lastFetched)
       {
  
  
  
  1.14      +3 -0      xml-xalan/java/src/org/apache/xpath/axes/DescendantIterator.java
  
  Index: DescendantIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/DescendantIterator.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- DescendantIterator.java   2001/08/07 19:16:43     1.13
  +++ DescendantIterator.java   2001/08/21 03:06:45     1.14
  @@ -229,7 +229,10 @@
       }
   
       if (m_foundLast)
  +    {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +    }
         
       if(DTM.NULL == m_lastFetched)
       {
  
  
  
  1.3       +3 -0      
xml-xalan/java/src/org/apache/xpath/axes/MatchPatternIterator.java
  
  Index: MatchPatternIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/MatchPatternIterator.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MatchPatternIterator.java 2001/06/12 19:16:18     1.2
  +++ MatchPatternIterator.java 2001/08/21 03:06:45     1.3
  @@ -243,7 +243,10 @@
       }
   
       if (m_foundLast)
  +    {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +    }
         
       int next;
       
  
  
  
  1.5       +3 -0      
xml-xalan/java/src/org/apache/xpath/axes/SelfIteratorNoPredicate.java
  
  Index: SelfIteratorNoPredicate.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/SelfIteratorNoPredicate.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- SelfIteratorNoPredicate.java      2001/06/20 20:42:07     1.4
  +++ SelfIteratorNoPredicate.java      2001/08/21 03:06:45     1.5
  @@ -80,7 +80,10 @@
       }
   
       if (m_foundLast)
  +    {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +    }
   
       int next;
       DTM dtm = m_cdtm;
  
  
  
  1.24      +3 -0      xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java
  
  Index: UnionPathIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- UnionPathIterator.java    2001/08/07 19:16:43     1.23
  +++ UnionPathIterator.java    2001/08/21 03:06:45     1.24
  @@ -638,7 +638,10 @@
       }
   
       if (m_foundLast)
  +    {
  +      m_lastFetched = DTM.NULL;
         return DTM.NULL;
  +    }
   
       // Loop through the iterators getting the current fetched 
       // node, and get the earliest occuring in document order
  
  
  

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

Reply via email to