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
