Repository: vxquery
Updated Branches:
  refs/heads/master 7d4e8b11f -> b6f0f7d74


Changes to value comparison semantics


Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/7c6e7563
Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/7c6e7563
Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/7c6e7563

Branch: refs/heads/master
Commit: 7c6e7563daab119b58aac71cedda132f2ba0dc2f
Parents: dae8391
Author: riyafa <[email protected]>
Authored: Tue Jul 26 19:35:44 2016 +0530
Committer: riyafa <[email protected]>
Committed: Wed Jul 27 09:06:51 2016 +0530

----------------------------------------------------------------------
 .../AbstractDisjunctiveComparisonOperation.java |  7 +++
 .../AbstractNegatingComparisonOperation.java    |  7 +++
 .../AbstractValueComparisonOperation.java       |  4 ++
 .../comparison/ValueEqComparisonOperation.java  |  8 ++++
 .../comparison/ValueLtComparisonOperation.java  | 14 ++++++
 .../runtime/functions/util/FunctionHelper.java  |  5 ++
 .../Json/Functions/general_comparison.txt       | 31 +++++++++++++
 .../Json/Functions/value_comparison.txt         | 18 +++++++
 .../XQuery/Json/Functions/general_comparison.xq | 49 ++++++++++++++++++++
 .../XQuery/Json/Functions/value_comparison.xq   | 36 ++++++++++++++
 .../test/resources/cat/FunctionsInJSONiq.xml    | 10 ++++
 11 files changed, 189 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractDisjunctiveComparisonOperation.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractDisjunctiveComparisonOperation.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractDisjunctiveComparisonOperation.java
index 05bf961..2e91ecd 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractDisjunctiveComparisonOperation.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractDisjunctiveComparisonOperation.java
@@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.comparison;
 import java.io.IOException;
 
 import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -326,4 +327,10 @@ public abstract class 
AbstractDisjunctiveComparisonOperation extends AbstractVal
             IOException {
         return (aOp1.operateYMDurationYMDuration(intp1, intp2) || 
aOp2.operateYMDurationYMDuration(intp1, intp2));
     }
+
+    @Override
+    public boolean operateNull(TaggedValuePointable tvp1, TaggedValuePointable 
tvp2)
+            throws SystemException, IOException {
+        return (aOp1.operateNull(tvp1, tvp2) || aOp2.operateNull(tvp1, tvp2));
+    }
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractNegatingComparisonOperation.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractNegatingComparisonOperation.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractNegatingComparisonOperation.java
index 1c0b7ef..f4507a9 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractNegatingComparisonOperation.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractNegatingComparisonOperation.java
@@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.comparison;
 import java.io.IOException;
 
 import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -316,4 +317,10 @@ public abstract class AbstractNegatingComparisonOperation 
extends AbstractValueC
         return !aOp.operateYMDurationYMDuration(intp1, intp2);
     }
 
+    @Override
+    public boolean operateNull(TaggedValuePointable tvp1, TaggedValuePointable 
tvp2)
+            throws SystemException, IOException {
+        return !aOp.operateNull(tvp1, tvp2);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonOperation.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonOperation.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonOperation.java
index 61383ff..7b543c6 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonOperation.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/AbstractValueComparisonOperation.java
@@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.functions.comparison;
 import java.io.IOException;
 
 import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -155,4 +156,7 @@ public abstract class AbstractValueComparisonOperation {
 
     public abstract boolean operateYMDurationYMDuration(IntegerPointable 
intp1, IntegerPointable intp2)
             throws SystemException, IOException;
+
+    public abstract boolean operateNull(TaggedValuePointable tvp1, 
TaggedValuePointable tvp2)
+            throws SystemException, IOException;
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
index fd7bc31..17b2b2d 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueEqComparisonOperation.java
@@ -20,6 +20,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -28,6 +29,7 @@ import 
org.apache.vxquery.datamodel.accessors.atomic.XSDurationPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable;
 import org.apache.vxquery.datamodel.util.DateTime;
+import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.util.FunctionHelper;
 import org.apache.hyracks.data.std.primitive.BooleanPointable;
@@ -410,4 +412,10 @@ public class ValueEqComparisonOperation extends 
AbstractValueComparisonOperation
         return (intp1.compareTo(intp2) == 0);
     }
 
+    @Override
+    public boolean operateNull(TaggedValuePointable tvp1, TaggedValuePointable 
tvp2)
+            throws SystemException, IOException {
+        return tvp1.getTag() == ValueTag.JS_NULL_TAG && tvp2.getTag() == 
ValueTag.JS_NULL_TAG;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueLtComparisonOperation.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueLtComparisonOperation.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueLtComparisonOperation.java
index baa41a1..1c4af31 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueLtComparisonOperation.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/comparison/ValueLtComparisonOperation.java
@@ -20,6 +20,7 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -28,6 +29,7 @@ import 
org.apache.vxquery.datamodel.accessors.atomic.XSDurationPointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable;
 import org.apache.vxquery.datamodel.util.DateTime;
+import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.exceptions.ErrorCode;
 import org.apache.vxquery.exceptions.SystemException;
 
@@ -388,4 +390,16 @@ public class ValueLtComparisonOperation extends 
AbstractValueComparisonOperation
         return (intp1.compareTo(intp2) == -1);
     }
 
+    @Override
+    public boolean operateNull(TaggedValuePointable tvp1, TaggedValuePointable 
tvp2)
+            throws SystemException, IOException {
+        if (tvp1.getTag() == ValueTag.JS_NULL_TAG) {
+            if (tvp2.getTag() == ValueTag.JS_NULL_TAG) {
+                return false;
+            }
+            return true;
+        }
+        return false;
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
index 60c80ea..0b3ea28 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
@@ -493,6 +493,9 @@ public class FunctionHelper {
         int tid2 = getBaseTypeForComparisons(tvp2.getTag());
 
         try {
+            if (tid1 == ValueTag.JS_NULL_TAG || tid2 == ValueTag.JS_NULL_TAG) {
+                return aOp.operateNull(tvp1, tvp2);
+            }
             switch (tid1) {
                 case ValueTag.XS_DECIMAL_TAG:
                     tvp1.getValue(tp1.decp);
@@ -886,6 +889,7 @@ public class FunctionHelper {
                 case ValueTag.XS_TIME_TAG:
                 case ValueTag.XS_UNTYPED_ATOMIC_TAG:
                 case ValueTag.XS_YEAR_MONTH_DURATION_TAG:
+                case ValueTag.JS_NULL_TAG:
                     return tid;
 
                 case ValueTag.XS_LONG_TAG:
@@ -935,6 +939,7 @@ public class FunctionHelper {
                 case ValueTag.XS_TIME_TAG:
                 case ValueTag.XS_UNTYPED_ATOMIC_TAG:
                 case ValueTag.XS_YEAR_MONTH_DURATION_TAG:
+                case ValueTag.JS_NULL_TAG:
                     return tid;
                 case ValueTag.XS_DECIMAL_TAG:
                 case ValueTag.XS_DOUBLE_TAG:

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/general_comparison.txt
----------------------------------------------------------------------
diff --git 
a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/general_comparison.txt
 
b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/general_comparison.txt
new file mode 100644
index 0000000..32b733f
--- /dev/null
+++ 
b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/general_comparison.txt
@@ -0,0 +1,31 @@
+false
+true
+true
+true
+true
+true
+true
+false
+true
+true
+true
+false
+false
+true
+false
+false
+true
+true
+true
+false
+true
+true
+false
+true
+false
+true
+false
+false
+false
+true
+true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/value_comparison.txt
----------------------------------------------------------------------
diff --git 
a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/value_comparison.txt
 
b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/value_comparison.txt
new file mode 100644
index 0000000..2f1f961
--- /dev/null
+++ 
b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/value_comparison.txt
@@ -0,0 +1,18 @@
+false
+false
+true
+true
+true
+false
+true
+false
+false
+false
+true
+false
+true
+false
+true
+true
+false
+true
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/general_comparison.xq
----------------------------------------------------------------------
diff --git 
a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/general_comparison.xq
 
b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/general_comparison.xq
new file mode 100644
index 0000000..dd98b5f
--- /dev/null
+++ 
b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/general_comparison.xq
@@ -0,0 +1,49 @@
+(: Licensed to the Apache Software Foundation (ASF) under one
+   or more contributor license agreements.  See the NOTICE file
+   distributed with this work for additional information
+   regarding copyright ownership.  The ASF licenses this file
+   to you under the Apache License, Version 2.0 (the
+   "License"); you may not use this file except in compliance
+   with the License.  You may obtain a copy of the License at
+   
+     http://www.apache.org/licenses/LICENSE-2.0
+   
+   Unless required by applicable law or agreed to in writing,
+   software distributed under the License is distributed on an
+   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+   KIND, either express or implied.  See the License for the
+   specific language governing permissions and limitations
+   under the License. :)
+
+(: JSONiq Changes to general comparison semantics :)
+(null, 2) = (1, 3),
+(null, 2) = (2, 3),
+(null, 2) = (1, null),
+(null, 2) != (1, 3),
+(null, 2) != (2, 3),
+(null, 2) != null,
+(null, 2) < (1, 3),
+(null, 2) < null,
+(null, 2) < 2,
+(null, 2) <= (1, 3),
+(null, 2) <= (null, 1),
+(null, 1) > (1, 3),
+(null, 1) > (2, 3),
+(null, 1) > (null, 3),
+(null, 1) > (1, 3),
+(null, 0) >= (1, 3),
+(null, 0) >= (null, 3),
+(null, 0) >= (1, 0),
+(null, 0) >= (-1, 3),
+null = 1,
+null != 1,
+null < 1,
+null > 1,
+null <= 1,
+null >= 1,
+null = null,
+null != null,
+null > null,
+null < null,
+null >= null,
+null <= null

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/value_comparison.xq
----------------------------------------------------------------------
diff --git 
a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/value_comparison.xq
 
b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/value_comparison.xq
new file mode 100644
index 0000000..7734336
--- /dev/null
+++ 
b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/value_comparison.xq
@@ -0,0 +1,36 @@
+(: Licensed to the Apache Software Foundation (ASF) under one
+   or more contributor license agreements.  See the NOTICE file
+   distributed with this work for additional information
+   regarding copyright ownership.  The ASF licenses this file
+   to you under the Apache License, Version 2.0 (the
+   "License"); you may not use this file except in compliance
+   with the License.  You may obtain a copy of the License at
+   
+     http://www.apache.org/licenses/LICENSE-2.0
+   
+   Unless required by applicable law or agreed to in writing,
+   software distributed under the License is distributed on an
+   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+   KIND, either express or implied.  See the License for the
+   specific language governing permissions and limitations
+   under the License. :)
+
+(: JSONiq Changes to value comparison semantics :)
+1 eq null,
+null eq 1,
+null eq null,
+1 ne null,
+null ne 1,
+null ne null,
+null lt 1,
+1 lt null,
+null lt null,
+null gt 1,
+1 gt null,
+null gt null,
+2 ge null,
+null ge 1,
+null ge null,
+null le 2,
+1 le null,
+null le null

http://git-wip-us.apache.org/repos/asf/vxquery/blob/7c6e7563/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml 
b/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml
index b879332..3a145ed 100644
--- a/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml
+++ b/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml
@@ -86,4 +86,14 @@
         <query name="jn_members3" date="2016-07-05"/>
         <output-file compare="Text">jn_members3.txt</output-file>
     </test-case>
+    <test-case name="changes-to-value-comparison-semantics" 
FilePath="Json/Functions/" Creator="Riyafa Abdul Hameed">
+        <description>Changes to value comparison semantics</description>
+        <query name="value_comparison" date="2016-07-19"/>
+        <output-file compare="Text">value_comparison.txt</output-file>
+    </test-case>
+    <test-case name="changes-to-value-comparison-semantics" 
FilePath="Json/Functions/" Creator="Riyafa Abdul Hameed">
+        <description>Changes to value comparison semantics</description>
+        <query name="general_comparison" date="2016-07-19"/>
+        <output-file compare="Text">general_comparison.txt</output-file>
+    </test-case>
 </test-group>
\ No newline at end of file

Reply via email to