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>