Repository: vxquery Updated Branches: refs/heads/master 3d147858a -> 2f54a03ca
Implementing jn:json-doc and jn:members with tests Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/9f3515ea Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/9f3515ea Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/9f3515ea Branch: refs/heads/master Commit: 9f3515ea8aacd4b6fad57b7059821b6488c822ed Parents: 4a6f2aa Author: Christina Pavlopoulou <[email protected]> Authored: Mon Jun 27 11:34:23 2016 -0700 Committer: Christina Pavlopoulou <[email protected]> Committed: Wed Jul 6 17:37:51 2016 -0700 ---------------------------------------------------------------------- pom.xml | 2 + .../rules/ReplaceSourceMapInDocExpression.java | 8 + .../vxquery/functions/builtin-functions.xml | 14 ++ .../apache/vxquery/jsonparser/JSONParser.java | 198 +++++++++++++++++++ .../functions/index/IndexConstructorUtil.java | 3 +- .../json/JnDocScalarEvaluatorFactory.java | 77 ++++++++ .../json/JnMembersScalarEvaluator.java | 101 ++++++++++ .../json/JnMembersScalarEvaluatorFactory.java | 39 ++++ .../FnDocAvailableScalarEvaluatorFactory.java | 3 +- .../node/FnDocScalarEvaluatorFactory.java | 3 +- .../runtime/functions/util/FunctionHelper.java | 11 +- .../org/apache/vxquery/xmlparser/IParser.java | 29 +++ .../org/apache/vxquery/xmlparser/XMLParser.java | 14 +- .../Json/Functions/jn_members1.txt | 7 + .../Json/Functions/jn_members2.txt | 2 + .../Json/Functions/jn_members3.txt | 1 + .../Json/Parser/q01_parser.txt | 1 + .../Json/Parser/q02_parser.txt | 1 + .../Json/Parser/q03_parser.txt | 1 + .../Json/Parser/q04_parser.txt | 1 + .../Json/Parser/q05_parser.txt | 1 + .../Json/Parser/q06_parser.txt | 1 + .../Json/Parser/q07_parser.txt | 1 + .../Json/Parser/q08_parser.txt | 1 + .../Json/Parser/q09_parser.txt | 1 + .../XQuery/Json/Functions/jn_members1.xq | 22 +++ .../XQuery/Json/Functions/jn_members2.xq | 22 +++ .../XQuery/Json/Functions/jn_members3.xq | 22 +++ .../Queries/XQuery/Json/Parser/q01_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q02_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q03_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q04_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q05_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q06_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q07_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q08_parser.xq | 20 ++ .../Queries/XQuery/Json/Parser/q09_parser.xq | 20 ++ .../resources/TestSources/json/array/array.json | 1 + .../TestSources/json/array/nested_array.json | 1 + .../json/array/nested_array_object.json | 1 + .../TestSources/json/atomic_double.json | 1 + .../resources/TestSources/json/atomic_int.json | 1 + .../TestSources/json/atomic_string.json | 1 + .../TestSources/json/object/nested_object.json | 1 + .../json/object/nested_object_array.json | 1 + .../TestSources/json/object/object.json | 1 + .../src/test/resources/VXQueryCatalog.xml | 38 ++++ .../test/resources/cat/FunctionsInJSONiq.xml | 15 ++ .../test/resources/cat/JsonParserQueries.xml | 68 +++++++ .../src/test/resources/cat/SingleQuery.xml | 7 +- 50 files changed, 886 insertions(+), 18 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/pom.xml ---------------------------------------------------------------------- diff --git a/pom.xml b/pom.xml index 7a734dc..3f1f390 100644 --- a/pom.xml +++ b/pom.xml @@ -575,6 +575,8 @@ <exclude>**/ExpectedTestResults/**</exclude> <exclude>**/xqts.txt</exclude> <exclude>test-suite*/**/*</exclude> + <exclude>**/TestSources/**/*.json</exclude> + <exclude>ClusterControllerService/**</exclude> </excludes> </configuration> </plugin> http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/ReplaceSourceMapInDocExpression.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/ReplaceSourceMapInDocExpression.java b/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/ReplaceSourceMapInDocExpression.java index c3cee5e..8f241b3 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/ReplaceSourceMapInDocExpression.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/ReplaceSourceMapInDocExpression.java @@ -102,6 +102,14 @@ public class ReplaceSourceMapInDocExpression implements IAlgebraicRewriteRule { modified = true; } } + docExpression = ExpressionToolbox.findFirstFunctionExpression(expression, + BuiltinFunctions.JN_JSON_DOC_1.getFunctionIdentifier()); + if (docExpression != null) { + AbstractFunctionCallExpression absFnCall = (AbstractFunctionCallExpression) docExpression.getValue(); + if (updateDocExpression(opRef, absFnCall.getArguments().get(0), context)) { + modified = true; + } + } } return modified; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/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 67f3957..17c6715 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 @@ -323,6 +323,13 @@ <return type="document-node()?"/> <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.FnDocScalarEvaluatorFactory"/> </function> + + <!-- jn:json-doc($uri as xs:string?) as json-item()? --> + <function name="jn:json-doc"> + <param name="uri" type="xs:string?"/> + <return type="json-item()?"/> + <runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.JnDocScalarEvaluatorFactory"/> + </function> <!-- fn:doc-available($uri as xs:string?) as xs:boolean --> <function name="fn:doc-available"> @@ -1155,6 +1162,13 @@ <return type="xs:string*"/> <runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.JnKeysScalarEvaluatorFactory"/> </function> + + <!-- jn:members($arg as item()*) as item()* --> + <function name="jn:members"> + <param name="arg" type="item()*"/> + <return type="item()*"/> + <runtime type="scalar" class="org.apache.vxquery.runtime.functions.json.JnMembersScalarEvaluatorFactory"/> + </function> <!-- jn:null() as js:null --> <function name="jn:null"> http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/jsonparser/JSONParser.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/jsonparser/JSONParser.java b/vxquery-core/src/main/java/org/apache/vxquery/jsonparser/JSONParser.java new file mode 100644 index 0000000..9e8bffe --- /dev/null +++ b/vxquery-core/src/main/java/org/apache/vxquery/jsonparser/JSONParser.java @@ -0,0 +1,198 @@ +/* + * 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.jsonparser; + +import java.io.DataOutput; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; + +import org.apache.htrace.fasterxml.jackson.core.JsonFactory; +import org.apache.htrace.fasterxml.jackson.core.JsonParseException; +import org.apache.htrace.fasterxml.jackson.core.JsonParser; +import org.apache.htrace.fasterxml.jackson.core.JsonToken; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.vxquery.datamodel.builders.atomic.StringValueBuilder; +import org.apache.vxquery.datamodel.builders.jsonitem.ArrayBuilder; +import org.apache.vxquery.datamodel.builders.jsonitem.ObjectBuilder; +import org.apache.vxquery.datamodel.values.ValueTag; +import org.apache.vxquery.xmlparser.IParser; + +public class JSONParser implements IParser { + + final JsonFactory factory; + protected final ArrayBackedValueStorage atomic; + protected final List<ArrayBuilder> abStack; + protected final List<ObjectBuilder> obStack; + protected final List<ArrayBackedValueStorage> abvsStack; + protected final List<ArrayBackedValueStorage> keyStack; + protected final List<UTF8StringPointable> spStack; + protected final StringValueBuilder svb; + protected final DataOutput out; + protected itemType checkItem, startItem; + protected int levelArray, levelObject; + + enum itemType { + ARRAY, + OBJECT + } + + protected final List<itemType> itemStack; + + public JSONParser() throws JsonParseException { + factory = new JsonFactory(); + atomic = new ArrayBackedValueStorage(); + abStack = new ArrayList<ArrayBuilder>(); + obStack = new ArrayList<ObjectBuilder>(); + abvsStack = new ArrayList<ArrayBackedValueStorage>(); + keyStack = new ArrayList<ArrayBackedValueStorage>(); + spStack = new ArrayList<UTF8StringPointable>(); + itemStack = new ArrayList<itemType>(); + svb = new StringValueBuilder(); + abvsStack.add(atomic); + out = abvsStack.get(abvsStack.size() - 1).getDataOutput(); + + } + + public void parseDocument(File file, ArrayBackedValueStorage result) throws HyracksDataException { + try { + DataOutput outResult = result.getDataOutput(); + JsonParser parser = factory.createParser(file); + JsonToken token = parser.nextToken(); + checkItem = null; + startItem = null; + levelArray = 0; + levelObject = 0; + while (token != null) { + if (itemStack.size() > 1) { + checkItem = itemStack.get(itemStack.size() - 2); + } + switch (token) { + case START_ARRAY: + levelArray++; + if (levelArray > abStack.size()) { + abStack.add(new ArrayBuilder()); + } + if (levelArray + levelObject > abvsStack.size() - 1) { + abvsStack.add(new ArrayBackedValueStorage()); + } + itemStack.add(itemType.ARRAY); + abvsStack.get(levelArray + levelObject).reset(); + abStack.get(levelArray - 1).reset(abvsStack.get(levelArray + levelObject)); + break; + case START_OBJECT: + levelObject++; + if (levelObject > obStack.size()) { + obStack.add(new ObjectBuilder()); + } + if (levelArray + levelObject > abvsStack.size() - 1) { + abvsStack.add(new ArrayBackedValueStorage()); + } + itemStack.add(itemType.OBJECT); + abvsStack.get(levelArray + levelObject).reset(); + obStack.get(levelObject - 1).reset(abvsStack.get(levelArray + levelObject)); + break; + case FIELD_NAME: + if (levelObject > spStack.size()) { + keyStack.add(new ArrayBackedValueStorage()); + spStack.add(new UTF8StringPointable()); + } + keyStack.get(levelObject - 1).reset(); + DataOutput outk = keyStack.get(levelObject - 1).getDataOutput(); + svb.write(parser.getText(), outk); + spStack.get(levelObject - 1).set(keyStack.get(levelObject - 1)); + break; + case VALUE_NUMBER_INT: + atomicValues(ValueTag.XS_INTEGER_TAG, parser, out, svb, levelArray, levelObject); + break; + case VALUE_STRING: + atomicValues(ValueTag.XS_STRING_TAG, parser, out, svb, levelArray, levelObject); + break; + case VALUE_NUMBER_FLOAT: + atomicValues(ValueTag.XS_DOUBLE_TAG, parser, out, svb, levelArray, levelObject); + break; + case END_ARRAY: + abStack.get(levelArray - 1).finish(); + if (itemStack.size() > 1) { + if (checkItem == itemType.ARRAY) { + abStack.get(levelArray - 2).addItem(abvsStack.get(levelArray + levelObject)); + } else if (checkItem == itemType.OBJECT) { + obStack.get(levelObject - 1).addItem(spStack.get(levelObject - 1), + abvsStack.get(levelArray + levelObject)); + } + } + itemStack.remove(itemStack.size() - 1); + startItem = itemType.ARRAY; + levelArray--; + break; + case END_OBJECT: + obStack.get(levelObject - 1).finish(); + if (itemStack.size() > 1) { + if (checkItem == itemType.OBJECT) { + obStack.get(levelObject - 2).addItem(spStack.get(levelObject - 2), + abvsStack.get(levelArray + levelObject)); + } else if (checkItem == itemType.ARRAY) { + abStack.get(levelArray - 1).addItem(abvsStack.get(levelArray + levelObject)); + } + } + itemStack.remove(itemStack.size() - 1); + startItem = itemType.OBJECT; + levelObject--; + break; + default: + break; + } + token = parser.nextToken(); + } + if (startItem == itemType.ARRAY || startItem == itemType.OBJECT) { + outResult.write(abvsStack.get(1).getByteArray()); + } else { + //the atomic value is always set to be at the bottom of the arraybackedvaluestorage stack. + outResult.write(abvsStack.get(0).getByteArray()); + } + } catch (Exception e) { + throw new HyracksDataException(e.toString()); + } + } + + public void atomicValues(int tag, JsonParser parser, DataOutput out, StringValueBuilder svb, int levelArray, + int levelObject) throws IOException { + abvsStack.get(0).reset(); + out.write(tag); + if (tag == ValueTag.XS_DOUBLE_TAG) { + out.writeDouble(parser.getDoubleValue()); + } else if (tag == ValueTag.XS_STRING_TAG) { + svb.write(parser.getText(), out); + } else if (tag == ValueTag.XS_INTEGER_TAG) { + out.writeLong(parser.getLongValue()); + } + if (itemStack.size() != 0) { + if (itemStack.get(itemStack.size() - 1) == itemType.ARRAY) { + abStack.get(levelArray - 1).addItem(abvsStack.get(0)); + } else if (itemStack.get(itemStack.size() - 1) == itemType.OBJECT) { + obStack.get(levelObject - 1).addItem(spStack.get(levelObject - 1), abvsStack.get(0)); + } + } + } + + @Override + public void parseHDFSDocument(InputStream in, ArrayBackedValueStorage abvs) throws HyracksDataException { + + } +} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/index/IndexConstructorUtil.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/index/IndexConstructorUtil.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/index/IndexConstructorUtil.java index ed409f1..0d1dbf8 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/index/IndexConstructorUtil.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/index/IndexConstructorUtil.java @@ -36,6 +36,7 @@ import org.apache.vxquery.runtime.functions.index.updateIndex.Constants; import org.apache.vxquery.runtime.functions.index.updateIndex.MetaFileUtil; import org.apache.vxquery.runtime.functions.index.updateIndex.XmlMetadata; import org.apache.vxquery.runtime.functions.util.FunctionHelper; +import org.apache.vxquery.xmlparser.IParser; import org.apache.vxquery.xmlparser.ITreeNodeIdProvider; import org.apache.vxquery.xmlparser.XMLParser; @@ -185,7 +186,7 @@ public class IndexConstructorUtil { throws IOException { //Get the document node - XMLParser parser = new XMLParser(false, nodeIdProvider, nodeId); + IParser parser = new XMLParser(false, nodeIdProvider, nodeId); FunctionHelper.readInDocFromString(file.getPath(), bbis, di, abvsFileNode, parser); nodep.set(abvsFileNode.getByteArray(), abvsFileNode.getStartOffset(), abvsFileNode.getLength()); http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnDocScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnDocScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnDocScalarEvaluatorFactory.java new file mode 100644 index 0000000..827686f --- /dev/null +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnDocScalarEvaluatorFactory.java @@ -0,0 +1,77 @@ +/* + * 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 java.io.DataInputStream; +import java.io.IOException; + +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.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.hyracks.dataflow.common.comm.util.ByteBufferInputStream; +import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.values.ValueTag; +import org.apache.vxquery.exceptions.ErrorCode; +import org.apache.vxquery.exceptions.SystemException; +import org.apache.vxquery.jsonparser.JSONParser; +import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; +import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; +import org.apache.vxquery.runtime.functions.util.FunctionHelper; +import org.apache.vxquery.xmlparser.IParser; + +public class JnDocScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { + + private static final long serialVersionUID = 1L; + + public JnDocScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) { + super(args); + } + + @Override + protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) + throws AlgebricksException { + final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); + final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); + final ByteBufferInputStream bbis = new ByteBufferInputStream(); + final DataInputStream di = new DataInputStream(bbis); + + return new AbstractTaggedValueArgumentScalarEvaluator(args) { + + @Override + protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException { + TaggedValuePointable tvp = args[0]; + if (tvp.getTag() != ValueTag.XS_STRING_TAG) { + throw new SystemException(ErrorCode.FORG0006); + } + tvp.getValue(stringp); + try { + IParser parser = new JSONParser(); + FunctionHelper.readInDocFromPointable(stringp, bbis, di, abvs, parser); + } catch (IOException e) { + throw new SystemException(ErrorCode.FODC0002, e); + } + result.set(abvs); + } + + }; + } + +} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluator.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluator.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluator.java new file mode 100644 index 0000000..5777cbc --- /dev/null +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluator.java @@ -0,0 +1,101 @@ +/* +* 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 java.io.IOException; + +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.util.ArrayBackedValueStorage; +import org.apache.vxquery.datamodel.accessors.SequencePointable; +import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.accessors.jsonitem.ArrayPointable; +import org.apache.vxquery.datamodel.builders.sequence.SequenceBuilder; +import org.apache.vxquery.datamodel.values.ValueTag; +import org.apache.vxquery.datamodel.values.XDMConstants; +import org.apache.vxquery.exceptions.ErrorCode; +import org.apache.vxquery.exceptions.SystemException; +import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; + +public class JnMembersScalarEvaluator extends AbstractTaggedValueArgumentScalarEvaluator { + protected final IHyracksTaskContext ctx; + private final SequencePointable sp1, sp2; + private final ArrayBackedValueStorage abvs; + private final SequenceBuilder sb; + private ArrayPointable ap; + + public JnMembersScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) { + super(args); + this.ctx = ctx; + sp1 = (SequencePointable) SequencePointable.FACTORY.createPointable(); + sp2 = (SequencePointable) SequencePointable.FACTORY.createPointable(); + abvs = new ArrayBackedValueStorage(); + sb = new SequenceBuilder(); + ap = (ArrayPointable) ArrayPointable.FACTORY.createPointable(); + } + + @Override + protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException { + TaggedValuePointable tvp = args[0]; + TaggedValuePointable tvp1 = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); + abvs.reset(); + sb.reset(abvs); + if (tvp.getTag() == ValueTag.SEQUENCE_TAG) { + TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class); + try { + tvp.getValue(sp1); + int size1 = sp1.getEntryCount(); + for (int i = 0; i < size1; i++) { + sp1.getEntry(i, tempTvp); + if (tempTvp.getTag() == ValueTag.ARRAY_TAG) { + membersSequence(tempTvp, result, tvp1); + } else { + XDMConstants.setEmptySequence(result); + } + } + } finally { + ppool.giveBack(tempTvp); + } + } else if (tvp.getTag() == ValueTag.ARRAY_TAG) { + membersSequence(tvp, result, tvp1); + } else { + XDMConstants.setEmptySequence(result); + } + try { + sb.finish(); + result.set(abvs); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void membersSequence(TaggedValuePointable tvp, IPointable result, TaggedValuePointable tvp1) + throws SystemException { + tvp.getValue(ap); + tvp.getValue(sp2); + int size = sp2.getEntryCount(); + for (int j = 0; j < size; j++) { + sp2.getEntry(j, tvp1); + try { + sb.addItem(tvp1); + } catch (IOException e) { + throw new SystemException(ErrorCode.SYSE0001, e); + } + } + } +} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluatorFactory.java new file mode 100644 index 0000000..59a923d --- /dev/null +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/JnMembersScalarEvaluatorFactory.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 JnMembersScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { + + private static final long serialVersionUID = 1L; + + public JnMembersScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) { + super(args); + } + + @Override + protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) + throws AlgebricksException { + return new JnMembersScalarEvaluator(ctx, args); + } + +} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocAvailableScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocAvailableScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocAvailableScalarEvaluatorFactory.java index 8820234..d4d305d 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocAvailableScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocAvailableScalarEvaluatorFactory.java @@ -27,6 +27,7 @@ import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; +import org.apache.vxquery.xmlparser.IParser; import org.apache.vxquery.xmlparser.ITreeNodeIdProvider; import org.apache.vxquery.xmlparser.TreeNodeIdProvider; import org.apache.vxquery.xmlparser.XMLParser; @@ -77,7 +78,7 @@ public class FnDocAvailableScalarEvaluatorFactory extends AbstractTaggedValueArg } tvp.getValue(stringp); try { - XMLParser parser = new XMLParser(false, nodeIdProvider, nodeId); + IParser parser = new XMLParser(false, nodeIdProvider, nodeId); FunctionHelper.readInDocFromPointable(stringp, bbis, di, abvs, parser); XDMConstants.setTrue(result); } catch (Exception e) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocScalarEvaluatorFactory.java index 038a185..ecc8421 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/FnDocScalarEvaluatorFactory.java @@ -27,6 +27,7 @@ import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator; import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; +import org.apache.vxquery.xmlparser.IParser; import org.apache.vxquery.xmlparser.ITreeNodeIdProvider; import org.apache.vxquery.xmlparser.TreeNodeIdProvider; import org.apache.vxquery.xmlparser.XMLParser; @@ -78,7 +79,7 @@ public class FnDocScalarEvaluatorFactory extends AbstractTaggedValueArgumentScal tvp.getValue(stringp); try { // Only one document should be parsed so its ok to have a unique parser. - XMLParser parser = new XMLParser(false, nodeIdProvider, nodeId); + IParser parser = new XMLParser(false, nodeIdProvider, nodeId); FunctionHelper.readInDocFromPointable(stringp, bbis, di, abvs, parser); } catch (Exception e) { throw new SystemException(ErrorCode.SYSE0001, e); http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/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 5b9504e..8aa7696 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 @@ -26,6 +26,7 @@ import java.util.Arrays; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.htrace.fasterxml.jackson.core.JsonParseException; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.api.IPointable; import org.apache.hyracks.data.std.primitive.DoublePointable; @@ -51,7 +52,7 @@ import org.apache.vxquery.runtime.functions.strings.ICharacterIterator; import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator; import org.apache.vxquery.types.BuiltinTypeConstants; import org.apache.vxquery.types.BuiltinTypeRegistry; -import org.apache.vxquery.xmlparser.XMLParser; +import org.apache.vxquery.xmlparser.IParser; public class FunctionHelper { @@ -482,7 +483,7 @@ public class FunctionHelper { public static boolean compareTaggedValues(AbstractValueComparisonOperation aOp, TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx, TypedPointables tp1, TypedPointables tp2) - throws SystemException { + throws SystemException { int tid1 = getBaseTypeForComparisons(tvp1.getTag()); int tid2 = getBaseTypeForComparisons(tvp2.getTag()); @@ -1217,7 +1218,8 @@ public class FunctionHelper { } public static void readInDocFromPointable(UTF8StringPointable stringp, ByteBufferInputStream bbis, - DataInputStream di, ArrayBackedValueStorage abvs, XMLParser parser) throws HyracksDataException { + DataInputStream di, ArrayBackedValueStorage abvs, IParser parser) + throws NumberFormatException, JsonParseException, IOException { String fName; try { fName = getStringFromPointable(stringp, bbis, di); @@ -1228,7 +1230,8 @@ public class FunctionHelper { } public static void readInDocFromString(String fName, ByteBufferInputStream bbis, DataInputStream di, - ArrayBackedValueStorage abvs, XMLParser parser) throws HyracksDataException { + ArrayBackedValueStorage abvs, IParser parser) + throws NumberFormatException, JsonParseException, IOException { if (!fName.contains("hdfs:/")) { File file = new File(fName); if (file.exists()) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/IParser.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/IParser.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/IParser.java new file mode 100644 index 0000000..7397f03 --- /dev/null +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/IParser.java @@ -0,0 +1,29 @@ +/* + * 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.xmlparser; + +import java.io.File; +import java.io.InputStream; + +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; + +public interface IParser { + public void parseDocument(File file, ArrayBackedValueStorage abvs) throws HyracksDataException; + + public void parseHDFSDocument(InputStream in, ArrayBackedValueStorage abvs) throws HyracksDataException; +} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java index 34d7ba9..d11e1c1 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java @@ -39,7 +39,7 @@ import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.XMLReaderFactory; -public class XMLParser { +public class XMLParser implements IParser { final XMLReader parser; final SAXContentHandler handler; final InputSource in; @@ -128,7 +128,7 @@ public class XMLParser { } public void parseHDFSElements(InputStream inputStream, IFrameWriter writer, FrameTupleAccessor fta, int tupleIndex) - throws IOException { + throws HyracksDataException { try { Reader input; if (bufferSize > 0) { @@ -140,13 +140,10 @@ public class XMLParser { handler.setupElementWriter(writer, tupleIndex); parser.parse(in); input.close(); - } catch (IOException e) { + } catch (Exception e) { HyracksDataException hde = new HyracksDataException(e); hde.setNodeId(nodeId); throw hde; - } catch (SAXException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } @@ -162,13 +159,10 @@ public class XMLParser { parser.parse(in); handler.writeDocument(abvs); input.close(); - } catch (IOException e) { + } catch (Exception e) { HyracksDataException hde = new HyracksDataException(e); hde.setNodeId(nodeId); throw hde; - } catch (SAXException e) { - // TODO Auto-generated catch block - e.printStackTrace(); } } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members1.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members1.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members1.txt new file mode 100644 index 0000000..012b0cf --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members1.txt @@ -0,0 +1,7 @@ +mercury +venus +earth +mars +1 +2 +3 http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members2.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members2.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members2.txt new file mode 100644 index 0000000..7a754f4 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members2.txt @@ -0,0 +1,2 @@ +1 +2 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members3.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members3.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members3.txt new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Functions/jn_members3.txt @@ -0,0 +1 @@ + http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q01_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q01_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q01_parser.txt new file mode 100644 index 0000000..6ed63af --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q01_parser.txt @@ -0,0 +1 @@ +[1,2] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q02_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q02_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q02_parser.txt new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q02_parser.txt @@ -0,0 +1 @@ +1 http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q03_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q03_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q03_parser.txt new file mode 100644 index 0000000..5625e59 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q03_parser.txt @@ -0,0 +1 @@ +1.2 http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q04_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q04_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q04_parser.txt new file mode 100644 index 0000000..ec186f1 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q04_parser.txt @@ -0,0 +1 @@ +string \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q05_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q05_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q05_parser.txt new file mode 100644 index 0000000..0c9a608 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q05_parser.txt @@ -0,0 +1 @@ +[1,[2]] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q06_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q06_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q06_parser.txt new file mode 100644 index 0000000..4132caf --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q06_parser.txt @@ -0,0 +1 @@ +{"age":23} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q07_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q07_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q07_parser.txt new file mode 100644 index 0000000..af1fb05 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q07_parser.txt @@ -0,0 +1 @@ +{"employee":{"id":1}} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q08_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q08_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q08_parser.txt new file mode 100644 index 0000000..295244a --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q08_parser.txt @@ -0,0 +1 @@ +[{"1":{"2":[3,{"4":5}]}},1] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q09_parser.txt ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q09_parser.txt b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q09_parser.txt new file mode 100644 index 0000000..a98cd71 --- /dev/null +++ b/vxquery-xtest/src/test/resources/ExpectedTestResults/Json/Parser/q09_parser.txt @@ -0,0 +1 @@ +[{"1a":{"2a":[3,{"4a":5}]}},1,{"1b":{"2b":[3,{"4b":5}]}},{"1c":{"2c":[3,{"4c":5}]}}] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members1.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members1.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members1.xq new file mode 100644 index 0000000..0be505c --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members1.xq @@ -0,0 +1,22 @@ +(: 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 jn:members :) +( + let $planets :=("foo",{"foo":"bar"},["mercury","venus","earth","mars"],[1,2,3]) + return jn:members($planets) +) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members2.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members2.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members2.xq new file mode 100644 index 0000000..adaadfb --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members2.xq @@ -0,0 +1,22 @@ +(: 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 jn:members :) +( + let $planets :=[1,2] + return jn:members($planets) +) \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members3.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members3.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members3.xq new file mode 100644 index 0000000..e643d8d --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Functions/jn_members3.xq @@ -0,0 +1,22 @@ +(: 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 jn:members :) +( + let $planets := ("foo",{"foo":"bar"}) + return jn:members($planets) +) http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q01_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q01_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q01_parser.xq new file mode 100644 index 0000000..4752069 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q01_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing an array :) + jn:json-doc("array_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q02_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q02_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q02_parser.xq new file mode 100644 index 0000000..9d73500 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q02_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing an atomic int :) + jn:json-doc("int_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q03_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q03_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q03_parser.xq new file mode 100644 index 0000000..2ba7384 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q03_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing a double :) + jn:json-doc("double_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q04_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q04_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q04_parser.xq new file mode 100644 index 0000000..6f15917 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q04_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing a string :) + jn:json-doc("string_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q05_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q05_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q05_parser.xq new file mode 100644 index 0000000..413df0b --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q05_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing nested arrays :) + jn:json-doc("nested_arrays_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q06_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q06_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q06_parser.xq new file mode 100644 index 0000000..7e8e1b3 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q06_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing an object :) + jn:json-doc("object_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q07_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q07_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q07_parser.xq new file mode 100644 index 0000000..e25ac91 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q07_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing nested object :) + jn:json-doc("nested_object_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q08_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q08_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q08_parser.xq new file mode 100644 index 0000000..d60c2ce --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q08_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing nested objects and arrays :) + jn:json-doc("nested_object_array_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q09_parser.xq ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q09_parser.xq b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q09_parser.xq new file mode 100644 index 0000000..082ffc0 --- /dev/null +++ b/vxquery-xtest/src/test/resources/Queries/XQuery/Json/Parser/q09_parser.xq @@ -0,0 +1,20 @@ +(: 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. :) + +(: Json Parser Query :) +(: parse a file containing nested objects and arrays :) + jn:json-doc("nested_array_object_json_file") http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/array/array.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/array/array.json b/vxquery-xtest/src/test/resources/TestSources/json/array/array.json new file mode 100644 index 0000000..6ed63af --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/array/array.json @@ -0,0 +1 @@ +[1,2] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array.json b/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array.json new file mode 100644 index 0000000..0c9a608 --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array.json @@ -0,0 +1 @@ +[1,[2]] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array_object.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array_object.json b/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array_object.json new file mode 100644 index 0000000..a98cd71 --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/array/nested_array_object.json @@ -0,0 +1 @@ +[{"1a":{"2a":[3,{"4a":5}]}},1,{"1b":{"2b":[3,{"4b":5}]}},{"1c":{"2c":[3,{"4c":5}]}}] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/atomic_double.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/atomic_double.json b/vxquery-xtest/src/test/resources/TestSources/json/atomic_double.json new file mode 100644 index 0000000..5625e59 --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/atomic_double.json @@ -0,0 +1 @@ +1.2 http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/atomic_int.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/atomic_int.json b/vxquery-xtest/src/test/resources/TestSources/json/atomic_int.json new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/atomic_int.json @@ -0,0 +1 @@ +1 http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/atomic_string.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/atomic_string.json b/vxquery-xtest/src/test/resources/TestSources/json/atomic_string.json new file mode 100644 index 0000000..ace2d72 --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/atomic_string.json @@ -0,0 +1 @@ +"string" http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object.json b/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object.json new file mode 100644 index 0000000..af1fb05 --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object.json @@ -0,0 +1 @@ +{"employee":{"id":1}} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object_array.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object_array.json b/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object_array.json new file mode 100644 index 0000000..295244a --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/object/nested_object_array.json @@ -0,0 +1 @@ +[{"1":{"2":[3,{"4":5}]}},1] http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/TestSources/json/object/object.json ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/TestSources/json/object/object.json b/vxquery-xtest/src/test/resources/TestSources/json/object/object.json new file mode 100644 index 0000000..4132caf --- /dev/null +++ b/vxquery-xtest/src/test/resources/TestSources/json/object/object.json @@ -0,0 +1 @@ +{"age":23} http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/VXQueryCatalog.xml ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/VXQueryCatalog.xml b/vxquery-xtest/src/test/resources/VXQueryCatalog.xml index da8b22f..8ef09a6 100644 --- a/vxquery-xtest/src/test/resources/VXQueryCatalog.xml +++ b/vxquery-xtest/src/test/resources/VXQueryCatalog.xml @@ -49,6 +49,7 @@ <!ENTITY FunctionsInJSONiq SYSTEM "cat/FunctionsInJSONiq.xml"> <!ENTITY JsonObjectNavigationQueries SYSTEM "cat/JsonObjectNavigationQueries.xml"> <!ENTITY JsonArrayNavigationQueries SYSTEM "cat/JsonArrayNavigationQueries.xml"> +<!ENTITY JsonParserQueries SYSTEM "cat/JsonParserQueries.xml"> ]> <test-suite xmlns="http://www.w3.org/2005/02/query-test-XQTSCatalog" @@ -97,6 +98,42 @@ Creator="Shivani Mall"> <description last-mod="2015-06-26">File</description> </source> + <source ID="array_json_file" FileName="TestSources/json/array/array.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="int_json_file" FileName="TestSources/json/atomic_int.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="double_json_file" FileName="TestSources/json/atomic_double.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="string_json_file" FileName="TestSources/json/atomic_string.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="nested_arrays_json_file" FileName="TestSources/json/array/nested_array.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="object_json_file" FileName="TestSources/json/object/object.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="nested_object_json_file" FileName="TestSources/json/object/nested_object.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="nested_object_array_json_file" FileName="TestSources/json/object/nested_object_array.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-02">File</description> + </source> + <source ID="nested_array_object_json_file" FileName="TestSources/json/array/nested_array_object.json" + Creator="Christina Pavlopoulou"> + <description last-mod="2016-07-05">File</description> + </source> </sources> <test-group name="SingleQuery" featureOwner="Preston Carman"> <GroupInfo> @@ -267,6 +304,7 @@ </GroupInfo> &JsonObjectNavigationQueries; &JsonArrayNavigationQueries; + &JsonParserQueries; </test-group> </test-group> </test-suite> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/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 e8aface..b879332 100644 --- a/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml +++ b/vxquery-xtest/src/test/resources/cat/FunctionsInJSONiq.xml @@ -71,4 +71,19 @@ <query name="jn_keys2" date="2016-06-26"/> <output-file compare="Text">jn_keys2.txt</output-file> </test-case> + <test-case name="functions-in-jsoniq-jn_members" FilePath="Json/Functions/" Creator="Christina Pavlopoulou"> + <description>Query for json array members</description> + <query name="jn_members1" date="2016-07-05"/> + <output-file compare="Text">jn_members1.txt</output-file> + </test-case> + <test-case name="functions-in-jsoniq-jn_members" FilePath="Json/Functions/" Creator="Christina Pavlopoulou"> + <description>Query for json array members</description> + <query name="jn_members2" date="2016-07-05"/> + <output-file compare="Text">jn_members2.txt</output-file> + </test-case> + <test-case name="functions-in-jsoniq-jn_members" FilePath="Json/Functions/" Creator="Christina Pavlopoulou"> + <description>Query for json array members</description> + <query name="jn_members3" date="2016-07-05"/> + <output-file compare="Text">jn_members3.txt</output-file> + </test-case> </test-group> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/cat/JsonParserQueries.xml ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/cat/JsonParserQueries.xml b/vxquery-xtest/src/test/resources/cat/JsonParserQueries.xml new file mode 100644 index 0000000..d61a1e8 --- /dev/null +++ b/vxquery-xtest/src/test/resources/cat/JsonParserQueries.xml @@ -0,0 +1,68 @@ +<!-- + 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. +--> + +<test-group xmlns="http://www.w3.org/2005/02/query-test-XQTSCatalog" name="JsonArrayQueries" featureOwner="VXQuery"> + <GroupInfo> + <title>Json Parser</title> + <description/> + </GroupInfo> + <test-case name="json-parser-q01" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing json array from a file.</description> + <query name="q01_parser" date="2016-06-28"/> + <output-file compare="Text">q01_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q02" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing atomic int from json file.</description> + <query name="q02_parser" date="2016-06-28"/> + <output-file compare="Text">q02_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q03" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing atomic double from a json file.</description> + <query name="q03_parser" date="2016-06-28"/> + <output-file compare="Text">q03_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q04" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing atomic string from a json file.</description> + <query name="q04_parser" date="2016-06-28"/> + <output-file compare="Text">q04_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q05" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing nested arrays from a json file.</description> + <query name="q05_parser" date="2016-06-29"/> + <output-file compare="Text">q05_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q06" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing an object from a json file.</description> + <query name="q06_parser" date="2016-06-29"/> + <output-file compare="Text">q06_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q07" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing nested objects from a json file.</description> + <query name="q07_parser" date="2016-06-30"/> + <output-file compare="Text">q07_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q08" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing nested objects and arrays from a json file.</description> + <query name="q08_parser" date="2016-06-30"/> + <output-file compare="Text">q08_parser.txt</output-file> + </test-case> + <test-case name="json-parser-q09" FilePath="Json/Parser/" Creator="Christina Pavlopoulou"> + <description>Parsing nested objects and arrays from a json file.</description> + <query name="q09_parser" date="2016-07-05"/> + <output-file compare="Text">q09_parser.txt</output-file> + </test-case> +</test-group> http://git-wip-us.apache.org/repos/asf/vxquery/blob/9f3515ea/vxquery-xtest/src/test/resources/cat/SingleQuery.xml ---------------------------------------------------------------------- diff --git a/vxquery-xtest/src/test/resources/cat/SingleQuery.xml b/vxquery-xtest/src/test/resources/cat/SingleQuery.xml index add4fab..c9bd305 100644 --- a/vxquery-xtest/src/test/resources/cat/SingleQuery.xml +++ b/vxquery-xtest/src/test/resources/cat/SingleQuery.xml @@ -23,4 +23,9 @@ <query name="add" date="2014-08-18"/> <output-file compare="Text">add.txt</output-file> </test-case> -</test-group> \ No newline at end of file + <test-case name="simple-fn-doc" FilePath="Simple/" Creator="Preston Carman"> + <description>Adds two numbers.</description> + <query name="fn_doc" date="2014-08-18"/> + <output-file compare="Text">fn_doc.txt</output-file> + </test-case> +</test-group>
