You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2016/08/08 03:54:41 UTC
vxquery git commit: Implement libjn:values
Repository: vxquery
Updated Branches:
refs/heads/master 4a19104c8 -> 180d113f9
Implement libjn:values
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/180d113f
Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/180d113f
Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/180d113f
Branch: refs/heads/master
Commit: 180d113f9b70fc906962525a77e9d2a364c1f4c1
Parents: 4a19104
Author: riyafa <ri...@cse.mrt.ac.lk>
Authored: Sun Jul 31 20:10:10 2016 +0530
Committer: Preston Carman <pr...@apache.org>
Committed: Sun Aug 7 20:54:16 2016 -0700
----------------------------------------------------------------------
.../vxquery/functions/builtin-functions.xml | 6 ++
.../json/LibjnValuesScalarEvaluator.java | 107 +++++++++++++++++++
.../json/LibjnValuesScalarEvaluatorFactory.java | 39 +++++++
.../SimpleObjectUnionScalarEvaluator.java | 1 -
.../Json/Libraries/values.txt | 5 +
.../Queries/XQuery/Json/Libraries/values.xq | 35 ++++++
.../test/resources/cat/LibrariesInJSONiq.xml | 5 +
7 files changed, 197 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml b/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
index 5e58596..e1b6a7a 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
+++ b/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
@@ -1212,4 +1212,10 @@
<return type="item()*"/>
<runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.LibjnFlattenScalarEvaluatorFactory"/>
</function>
+ <!-- libjn:values($sequence as item()*) as item()* -->
+ <function name="libjn:values">
+ <param name="sequence" type="item()*"/>
+ <return type="item()*"/>
+ <runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.LibjnValuesScalarEvaluatorFactory"/>
+ </function>
</functions>
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluator.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluator.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluator.java
new file mode 100644
index 0000000..70ffcd8
--- /dev/null
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluator.java
@@ -0,0 +1,107 @@
+/*
+* 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.
+*/
+package org.apache.vxquery.runtime.functions.json;
+
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.UTF8StringPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.jsonitem.ObjectPointable;
+import org.apache.vxquery.datamodel.builders.sequence.SequenceBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
+
+import java.io.IOException;
+
+public class LibjnValuesScalarEvaluator extends AbstractTaggedValueArgumentScalarEvaluator {
+ protected final IHyracksTaskContext ctx;
+ private final ObjectPointable op;
+ private final UTF8StringPointable stringKey;
+ private final ArrayBackedValueStorage abvs1;
+ private final SequenceBuilder sb;
+
+ public LibjnValuesScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+ super(args);
+ this.ctx = ctx;
+ stringKey = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+ abvs1 = new ArrayBackedValueStorage();
+ sb = new SequenceBuilder();
+ op = (ObjectPointable) ObjectPointable.FACTORY.createPointable();
+ }
+
+ @Override
+ protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+ TaggedValuePointable sequence = args[0];
+
+ TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class);
+ SequencePointable sp = ppool.takeOne(SequencePointable.class);
+ try {
+ abvs1.reset();
+ sb.reset(abvs1);
+ if (sequence.getTag() == ValueTag.SEQUENCE_TAG) {
+ sequence.getValue(sp);
+ for (int i = 0; i < sp.getEntryCount(); ++i) {
+ sp.getEntry(i, tempTvp);
+ if (tempTvp.getTag() == ValueTag.OBJECT_TAG) {
+ tempTvp.getValue(op);
+ addValues(tempTvp);
+ }
+ }
+ } else if (sequence.getTag() == ValueTag.OBJECT_TAG) {
+ sequence.getValue(op);
+ addValues(tempTvp);
+ }
+ sb.finish();
+ result.set(abvs1);
+ } catch (IOException e) {
+ throw new SystemException(ErrorCode.SYSE0001, e);
+ } finally {
+ ppool.giveBack(tempTvp);
+ ppool.giveBack(sp);
+ }
+ }
+
+ private void addValues(TaggedValuePointable tempTvp) throws IOException, SystemException {
+ TaggedValuePointable tempValue = ppool.takeOne(TaggedValuePointable.class);
+ SequencePointable sp1 = ppool.takeOne(SequencePointable.class);
+ try {
+ op.getKeys(tempTvp);
+ if (tempTvp.getTag() == ValueTag.XS_STRING_TAG) {
+ tempTvp.getValue(stringKey);
+ op.getValue(stringKey, tempValue);
+ sb.addItem(tempValue);
+ } else if (tempTvp.getTag() == ValueTag.SEQUENCE_TAG) {
+ tempTvp.getValue(sp1);
+ for (int j = 0; j < sp1.getEntryCount(); ++j) {
+ sp1.getEntry(j, tempTvp);
+ tempTvp.getValue(stringKey);
+ op.getValue(stringKey, tempValue);
+ sb.addItem(tempValue);
+ }
+ }
+ } finally {
+ ppool.giveBack(tempValue);
+ ppool.giveBack(sp1);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluatorFactory.java
new file mode 100644
index 0000000..18bff0a
--- /dev/null
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnValuesScalarEvaluatorFactory.java
@@ -0,0 +1,39 @@
+/*
+* 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.
+*/
+package org.apache.vxquery.runtime.functions.json;
+
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+
+public class LibjnValuesScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+
+ private static final long serialVersionUID = 1L;
+
+ public LibjnValuesScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+ super(args);
+ }
+
+ @Override
+ protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+ throws AlgebricksException {
+ return new LibjnValuesScalarEvaluator(ctx, args);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/jsonitem/SimpleObjectUnionScalarEvaluator.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/jsonitem/SimpleObjectUnionScalarEvaluator.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/jsonitem/SimpleObjectUnionScalarEvaluator.java
index 4eaf8f7..7583918 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/jsonitem/SimpleObjectUnionScalarEvaluator.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/jsonitem/SimpleObjectUnionScalarEvaluator.java
@@ -61,7 +61,6 @@ public class SimpleObjectUnionScalarEvaluator extends AbstractObjectConstructorS
op = (ObjectPointable) ObjectPointable.FACTORY.createPointable();
sp.getEntry(i, tempTvp);
tempTvp.getValue(op);
- op.getKeys(tempTvp);
addPairs(tempTvp, tempValue);
}
} else if (arg.getTag() == ValueTag.OBJECT_TAG) {
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Libraries/values.txt
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Libraries/values.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Libraries/values.txt
new file mode 100644
index 0000000..74efe4c
--- /dev/null
+++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Libraries/values.txt
@@ -0,0 +1,5 @@
+Kirk
+Spock
+Scott
+Archer
+Trip
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Libraries/values.xq
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Libraries/values.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Libraries/values.xq
new file mode 100644
index 0000000..57dc2de
--- /dev/null
+++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Libraries/values.xq
@@ -0,0 +1,35 @@
+(: 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 libjn:values :)
+libjn:values(
+ (
+ {
+ "Captain" : "Kirk",
+ "First Officer" : "Spock",
+ "Engineer" : "Scott"
+ },
+ [ 1, 2, 3, 4 ],
+ {
+ "Captain" : "Archer",
+ "Engineer" : "Trip"
+ },
+ true(),
+ 1,
+ jn:null()
+ )
+)
http://git-wip-us.apache.org/repos/asf/vxquery/blob/180d113f/vxquery-xtest/src/test/resources/cat/LibrariesInJSONiq.xml
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/test/resources/cat/LibrariesInJSONiq.xml b/vxquery-xtest/src/test/resources/cat/LibrariesInJSONiq.xml
index fcae9a9..4de12e4 100644
--- a/vxquery-xtest/src/test/resources/cat/LibrariesInJSONiq.xml
+++ b/vxquery-xtest/src/test/resources/cat/LibrariesInJSONiq.xml
@@ -40,4 +40,9 @@
<query name="flatten" date="2016-07-20"/>
<output-file compare="Text">flatten.txt</output-file>
</test-case>
+ <test-case name="values" FilePath="Json/Libraries/" Creator="Riyafa Abdul Hameed">
+ <description>Json Libraries.</description>
+ <query name="values" date="2016-07-31"/>
+ <output-file compare="Text">values.txt</output-file>
+ </test-case>
</test-group>