Nicolae Brinza has proposed merging lp:~nbrinza/zorba/bugs into lp:zorba.

Requested reviews:
  Markos Zaharioudakis (markos-za)
  Matthias Brantner (matthias-brantner)
Related bugs:
  Bug #867256 in Zorba: ""instance of document-node(element(x))" in predicate"
  https://bugs.launchpad.net/zorba/+bug/867256

For more details, see:
https://code.launchpad.net/~nbrinza/zorba/bugs/+merge/86150

Fix for lp: bug #867256 - test Steps-leading-lone-slash-8a is failing. 

Markos,

There are some tests in the XQTS with the document-node(schema-element()) node 
test. But they indeed do not cover all the cases. In fact I found a few queries 
involving variable declared "as document-node(schema-element())" and "instance 
of" expressions which did not work correctly in Zorba. I have added a few tests 
to cover them.
-- 
https://code.launchpad.net/~nbrinza/zorba/bugs/+merge/86150
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog	2011-12-13 03:38:23 +0000
+++ ChangeLog	2011-12-18 00:03:26 +0000
@@ -1,5 +1,9 @@
 Zorba - The XQuery Processor
 
+version 2.x
+
+  * Fixed bug #867256 (document-node(element(x)) types and tests were not working correctly)
+   
 version 2.2
 
   * Caching of results for recursive functions with atomic parameter and return types.

=== modified file 'src/types/typeimpl.cpp'
--- src/types/typeimpl.cpp	2011-07-01 05:22:12 +0000
+++ src/types/typeimpl.cpp	2011-12-18 00:03:26 +0000
@@ -361,7 +361,7 @@
 
 
 bool NodeXQType::is_subtype(
-    const TypeManager* tm, 
+    const TypeManager* tm,
     const NodeXQType& supertype,
     const QueryLoc& loc) const
 {
@@ -443,7 +443,7 @@
 
 
 bool NodeXQType::is_supertype(
-    const TypeManager* tm, 
+    const TypeManager* tm,
     const store::Item* subitem,
     const QueryLoc& loc) const
 {
@@ -488,14 +488,29 @@
     }
   }
 
-  if (m_node_kind != store::StoreConsts::elementNode && 
-      m_node_kind != store::StoreConsts::attributeNode)
+  // document-node( E ) matches any document node that contains exactly one element
+  // node, optionally accompanied by one or more comment and processing instruction
+  // nodes, if E is an ElementTest or SchemaElementTest that matches the element node.
+  bool is_element_test = (
+      m_node_kind == store::StoreConsts::documentNode &&
+      m_content_type != NULL &&
+      m_content_type->type_kind() == XQType::NODE_TYPE_KIND);
+
+  if (m_node_kind != store::StoreConsts::elementNode &&
+      m_node_kind != store::StoreConsts::attributeNode &&
+      !is_element_test)
     return true;
 
   if (m_content_type == NULL ||
       m_content_type->type_kind() == XQType::ANY_TYPE_KIND)
     return true;
 
+  if (is_element_test)
+  {
+    xqtref_t documentNodeType = tm->create_value_type(subitem, loc);
+    return TypeOps::is_subtype(tm, *documentNodeType, *this);
+  }
+
   xqtref_t subContentType = tm->create_named_type(subitem->getType(),
                                                   TypeConstants::QUANT_ONE,
                                                   loc,

=== added file 'test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-03.xml.res'
--- test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-03.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-03.xml.res	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+true
\ No newline at end of file

=== added file 'test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-05.xml.res'
--- test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-05.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-05.xml.res	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+false
\ No newline at end of file

=== added file 'test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-06.xml.res'
--- test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-06.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-06.xml.res	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+false
\ No newline at end of file

=== added file 'test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-07.xml.res'
--- test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-07.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-07.xml.res	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+true
\ No newline at end of file

=== added file 'test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-08.xml.res'
--- test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-08.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/schemas/doc-node-schema-elem-test-08.xml.res	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+false
\ No newline at end of file

=== modified file 'test/rbkt/Queries/CMakeLists.txt'
--- test/rbkt/Queries/CMakeLists.txt	2011-12-09 19:37:09 +0000
+++ test/rbkt/Queries/CMakeLists.txt	2011-12-18 00:03:26 +0000
@@ -210,7 +210,6 @@
 ####
 IF (FOUND_XQTS AND NOT ZORBA_TEST_W3C_TO_SUBMIT_RESULTS)
 
-  EXPECTED_FAILURE(test/rbkt/w3c_testsuite/XQuery/PathExpr/Steps/Steps-leading-lone-slash-8a 3408285)
   EXPECTED_FAILURE(test/rbkt/w3c_testsuite/XQuery/Functions/QNameFunc/NamespaceURIForPrefixFunc/K2-NamespaceURIForPrefixFunc-2 872732)
 
   IF(NOT ZORBA_WITH_BIG_INTEGER)

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-01.spec'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-01.spec	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-01.spec	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+Error: http://www.w3.org/2005/xqt-errors:XPTY0004

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-01.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-01.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-01.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,10 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+let $document as document-node(schema-element(Strings)) := $source 
+return true()

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-02.spec'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-02.spec	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-02.spec	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+Error: http://www.w3.org/2005/xqt-errors:XPTY0004

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-02.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-02.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-02.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,10 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+let $document as document-node(schema-element(Strings2)) := $source 
+return true()

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-03.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-03.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-03.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,10 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+let $document as document-node(schema-element(Strings)) := validate { $source }
+return true()

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-04.spec'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-04.spec	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-04.spec	2011-12-18 00:03:26 +0000
@@ -0,0 +1,1 @@
+Error: http://www.w3.org/2005/xqt-errors:XPTY0004

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-04.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-04.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-04.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,10 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+let $document as document-node(schema-element(Strings2)) := validate { $source }
+return true()

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-05.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-05.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-05.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,9 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+$source instance of document-node(schema-element(Strings))

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-06.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-06.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-06.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,9 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+$source instance of document-node(schema-element(Strings2))

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-07.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-07.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-07.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,9 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+validate{$source} instance of document-node(schema-element(Strings))

=== added file 'test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-08.xq'
--- test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-08.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/doc-node-schema-elem-test-08.xq	2011-12-18 00:03:26 +0000
@@ -0,0 +1,9 @@
+import schema default element namespace "http://www.w3.org/XQueryTestOrderBy"; at "orderData.xsd"; 
+
+declare variable $source := document { (
+    <!--comment-->, 
+    <Strings><orderData>one string</orderData></Strings>,
+    <?processing instruction?>
+  ) };
+
+validate{$source} instance of document-node(schema-element(Strings2))

=== added file 'test/rbkt/Queries/zorba/schemas/orderData.xsd'
--- test/rbkt/Queries/zorba/schemas/orderData.xsd	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/orderData.xsd	2011-12-18 00:03:26 +0000
@@ -0,0 +1,36 @@
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:order="http://www.w3.org/XQueryTestOrderBy"; targetNamespace="http://www.w3.org/XQueryTestOrderBy"; elementFormDefault="qualified">
+	<xs:complexType name = "numbers">
+		<xs:sequence>
+			<xs:element name="orderData" type="xs:decimal" minOccurs="0" maxOccurs="unbounded"/>
+		</xs:sequence>
+	</xs:complexType>	
+	<xs:element name = "Strings">
+		<xs:complexType>	
+			<xs:sequence>
+				<xs:element name="orderData" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>	
+	</xs:element>
+	<xs:element name = "Strings2">
+		<xs:complexType>	
+			<xs:sequence>
+				<xs:element name="orderData" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
+			</xs:sequence>
+		</xs:complexType>	
+	</xs:element>
+	<xs:element name = "NegativeNumbers" type = "order:numbers"/>
+	<xs:element name = "PositiveNumbers" type = "order:numbers"/>
+	<xs:element name = "SmallNegativeNumbers" type = "order:numbers"/>
+	<xs:element name = "SmallPositiveNumbers" type = "order:numbers"/>  
+	<xs:element name = "DataValues">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="order:Strings"/>
+				<xs:element ref="order:NegativeNumbers"/>
+				<xs:element ref="order:PositiveNumbers"/>
+				<xs:element ref="order:SmallNegativeNumbers"/>
+				<xs:element ref="order:SmallPositiveNumbers"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>
\ No newline at end of file

-- 
Mailing list: https://launchpad.net/~zorba-coders
Post to     : zorba-coders@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zorba-coders
More help   : https://help.launchpad.net/ListHelp

Reply via email to