vgritsenko    2004/03/04 05:18:49

  Modified:    .        status.xml
               java/src/org/apache/xindice/core/query QueryUtil.java
                        XPathQueryResolver.java
               java/tests/src/org/apache/xindice/core/query
                        XPathQueryResolverTest.java
  Log:
  Support boolean, string, and number XPath query results.
  Support source attributes for those results.
  
  Revision  Changes    Path
  1.39      +17 -4     xml-xindice/status.xml
  
  Index: status.xml
  ===================================================================
  RCS file: /home/cvs/xml-xindice/status.xml,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- status.xml        24 Feb 2004 16:52:55 -0000      1.38
  +++ status.xml        4 Mar 2004 13:18:49 -0000       1.39
  @@ -46,11 +46,16 @@
                   XQuery implementation.
               </action>
           </actions>
  +        <actions priority="high">
  +            <action context="code" dev="open">
  +                <strong>WebAdmin</strong> Integrate new WebDAV capable 
WebAdmin into
  +                the main codebase.
  +            </action>
  +        </actions>
           <actions priority="medium">
               <action context="code" dev="open">
  -                <strong>Authentication</strong> Xindice server should 
support: server
  -                level authentication configured in the web.xml, and 
collection level
  -                authentication as per XML:DB API getCollection method.
  +                <strong>Authentication</strong> Xindice server should 
support collection
  +                level authentication as per XML:DB Database.getCollection 
method.
               </action>
               <action context="code" dev="open">
                   <strong>Authorization</strong> Xindice should support 
collection level
  @@ -68,7 +73,15 @@
       </todo>
   
       <changes>
  -        <release version="1.1b4-dev" date="February 24 2004">
  +        <release version="1.1b4-dev" date="March 4 2004">
  +            <action dev="VG" type="fix" fixes-bug="22155">
  +                Support boolean, string, and number XPath query results.
  +            </action>
  +            <action dev="VG" type="fix" fixes-bug="22070">
  +                XPath query resulting in text nodes will return text node
  +                wrapped into the &lt;result&gt; element in
  +                http://xml.apache.org/xindice/Query namespace.
  +            </action>
               <action dev="VG" type="fix" fixes-bug="22156">
                   XPath query resulting in attribute nodes will return 
attributes
                   on the &lt;result&gt; element in 
http://xml.apache.org/xindice/Query
  
  
  
  1.7       +2 -14     
xml-xindice/java/src/org/apache/xindice/core/query/QueryUtil.java
  
  Index: QueryUtil.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xindice/java/src/org/apache/xindice/core/query/QueryUtil.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- QueryUtil.java    26 Feb 2004 13:50:15 -0000      1.6
  +++ QueryUtil.java    4 Mar 2004 13:18:49 -0000       1.7
  @@ -115,18 +115,6 @@
                   }
   
                   root.appendChild(doc.importNode(n, true));
  -            } else if (element instanceof Boolean || element instanceof 
Double) {
  -                Element holder = 
doc.createElementNS(XindiceCollection.QUERY_NS, "xq:result");
  -                holder.setAttribute(NodeImpl.XMLNS_PREFIX + ":xq", 
XindiceCollection.QUERY_NS);
  -                holder.appendChild(doc.createTextNode(element.toString()));
  -                // FIXME: Meta Data
  -                root.appendChild(holder);
  -            } else if (element instanceof String) {
  -                Element holder = 
doc.createElementNS(XindiceCollection.QUERY_NS, "xq:result");
  -                holder.setAttribute(NodeImpl.XMLNS_PREFIX + ":xq", 
XindiceCollection.QUERY_NS);
  -                holder.appendChild(doc.createTextNode((String) element));
  -                // FIXME: Meta Data
  -                root.appendChild(holder);
               } else {
                   throw new XindiceRuntimeException("Unknown result type (" + 
element.getClass().getName() + ") in nodeset");
               }
  
  
  
  1.28      +39 -46    
xml-xindice/java/src/org/apache/xindice/core/query/XPathQueryResolver.java
  
  Index: XPathQueryResolver.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xindice/java/src/org/apache/xindice/core/query/XPathQueryResolver.java,v
  retrieving revision 1.27
  retrieving revision 1.28
  diff -u -r1.27 -r1.28
  --- XPathQueryResolver.java   8 Feb 2004 02:50:37 -0000       1.27
  +++ XPathQueryResolver.java   4 Mar 2004 13:18:49 -0000       1.28
  @@ -56,6 +56,8 @@
   import org.apache.xindice.xml.SymbolTable;
   import org.apache.xindice.xml.dom.DBDocument;
   import org.apache.xindice.xml.dom.DocumentImpl;
  +import org.apache.xindice.xml.dom.TextImpl;
  +import org.apache.xindice.xml.dom.DBNode;
   import org.apache.xml.utils.DefaultErrorHandler;
   import org.apache.xml.utils.PrefixResolver;
   import org.apache.xml.utils.PrefixResolverDefault;
  @@ -1346,8 +1348,7 @@
         * ResultSet
         */
   
  -     private class ResultSet implements NodeSet
  -     {
  +     private class ResultSet implements NodeSet {
                public Collection context;
                public String query;
                public ErrorListener errors;
  @@ -1359,52 +1360,40 @@
                public NodeIterator ni;
                public Object node;
   
  -             public ResultSet(Collection context, PrefixResolver pr, Key[] 
keySet, String query)
  -             {
  +             public ResultSet(Collection context, PrefixResolver pr, Key[] 
keySet, String query) {
                        this.context = context;
                        this.pr = pr;
                        this.keySet = keySet;
                        this.query = query;
   
  -                     errors = new ErrorListener()
  -                     {
  -                             public void fatalError(TransformerException te)
  -                             {
  -                                     if (log.isFatalEnabled())
  -                                     {
  +                     errors = new ErrorListener() {
  +                             public void fatalError(TransformerException te) 
{
  +                                     if (log.isFatalEnabled()) {
                                                log.fatal("No message", te);
                                        }
                                }
   
  -                             public void error(TransformerException te)
  -                             {
  -                                     if (log.isErrorEnabled())
  -                                     {
  +                             public void error(TransformerException te) {
  +                                     if (log.isErrorEnabled()) {
                                                log.error("No message", te);
                                        }
                                }
   
  -                             public void warning(TransformerException te)
  -                             {
  -                                     if (log.isWarnEnabled())
  -                                     {
  +                             public void warning(TransformerException te) {
  +                                     if (log.isWarnEnabled()) {
                                                log.warn("No message", te);
                                        }
                                }
                        };
   
  -                     try
  -                     {
  +                     try {
                                prepareNextNode();
  -                     }
  -                     catch (Exception e)
  -                     {
  +            } catch (Exception e) {
                                throw new 
XindiceRuntimeException(e.getMessage());
                        }
                }
   
  -             private void prepareNextNode() throws XMLDBException, 
TransformerException, DBException
  -             {
  +             private void prepareNextNode() throws XMLDBException, 
TransformerException, DBException {
                        node = null;
   
                        while (keyPos < keySet.length) {
  @@ -1428,9 +1417,8 @@
                                }
   
                                final XObject xobject = xp.execute(xpc, n, pfx);
  -
  -                             switch (xobject.getType())
  -                             {
  +                             switch (xobject.getType()) {
  +                    // case XObject.CLASS_RTREEEFRAG :
                                        default :
                                                throw new XMLDBException(
                                                        
ErrorCodes.NOT_IMPLEMENTED,
  @@ -1443,45 +1431,50 @@
   
                                        case XObject.CLASS_BOOLEAN :
                                                ni = EMPTY_NODE_ITERATOR;
  -                                             node = new 
Boolean(xobject.bool());
  +
  +                        node = new 
DocumentImpl().createTextNode(Boolean.toString(xobject.bool()));
  +                        if (n instanceof DBNode) {
  +                            
((TextImpl)node).setSource(((DBNode)n).getSource());
  +                        }
                                                break;
   
                                        case XObject.CLASS_STRING :
                                                ni = EMPTY_NODE_ITERATOR;
  -                                             node = xobject.str();
  +
  +                        node = new 
DocumentImpl().createTextNode(xobject.str());
  +                        if (n instanceof DBNode) {
  +                            
((TextImpl)node).setSource(((DBNode)n).getSource());
  +                        }
                                                break;
   
                                        case XObject.CLASS_NUMBER :
                                                ni = EMPTY_NODE_ITERATOR;
  -                                             node = new 
Double(xobject.num());
  +
  +                        node = new 
DocumentImpl().createTextNode(Double.toString(xobject.num()));
  +                        if (n instanceof DBNode) {
  +                            
((TextImpl)node).setSource(((DBNode)n).getSource());
  +                        }
                                                break;
                                }
   
  -                             if (node != null)
  -                             {
  +                             if (node != null) {
                                        break;
                                }
                        }
                }
   
  -             public boolean hasMoreNodes()
  -             {
  +             public boolean hasMoreNodes() {
                        return node != null;
                }
   
  -             public Object getNextNode()
  -             {
  +             public Object getNextNode() {
                        Object n = node;
   
                        node = ni.nextNode();
  -                     if (node == null)
  -                     {
  -                             try
  -                             {
  +                     if (node == null) {
  +                             try {
                                        prepareNextNode();
  -                             }
  -                             catch (Exception e)
  -                             {
  +                             } catch (Exception e) {
                                        throw new 
XindiceRuntimeException(e.getMessage());
                                }
                        }
  
  
  
  1.8       +4 -5      
xml-xindice/java/tests/src/org/apache/xindice/core/query/XPathQueryResolverTest.java
  
  Index: XPathQueryResolverTest.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xindice/java/tests/src/org/apache/xindice/core/query/XPathQueryResolverTest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- XPathQueryResolverTest.java       8 Feb 2004 03:56:48 -0000       1.7
  +++ XPathQueryResolverTest.java       4 Mar 2004 13:18:49 -0000       1.8
  @@ -197,11 +197,10 @@
       public void testNumberXPathQuery() throws Exception {
           for (int i = 0; i < NUMBER_QUERY.length; i++) {
               NodeSet nodeSet = resolver.query(col, NUMBER_QUERY[i], null, 
null);
  -            Double element = null;
               assertTrue("Expected one result", nodeSet.hasMoreNodes());
  -            element = (Double)nodeSet.getNextNode();
  +            Text element = (Text)nodeSet.getNextNode();
               assertNotNull("NodeSet.getNextNode must be not null", element);
  -            assertEquals("Result value", new Double(NUMBER_VALUE[i]), 
element);
  +            assertEquals("Result value", new 
Double(NUMBER_VALUE[i]).toString(), element.getNodeValue());
           }
       }
   
  
  
  

Reply via email to