Less code for libjn:descendant-arrays 145/head
authorChristina Pavlopoulou <cpavl001@ucr.edu>
Sat, 13 Aug 2016 00:24:17 +0000 (17:24 -0700)
committerPreston Carman <prestonc@apache.org>
Sat, 13 Aug 2016 01:03:13 +0000 (18:03 -0700)
vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnDescendantArraysScalarEvaluator.java [new file with mode: 0644]
vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnDescendantArraysScalarEvaluatorFactory.java

diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnDescendantArraysScalarEvaluator.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/json/LibjnDescendantArraysScalarEvaluator.java
new file mode 100644 (file)
index 0000000..f2a5524
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+* 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.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.jsonitem.ObjectPointable;
+
+public class LibjnDescendantArraysScalarEvaluator  extends AbstractLibjnDescendantScalarEvaluator {
+
+    public LibjnDescendantArraysScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(ctx, args);
+    }
+
+    @Override
+    protected void processPair(TaggedValuePointable tvp, ObjectPointable op) throws IOException {
+        tvp.getValue(stringp);
+        op.getValue(stringp, tvp);
+    }
+    
+    @Override
+    protected void processArray(TaggedValuePointable tvp) throws IOException {
+        sb.addItem(tvp);
+        super.processArray(tvp);
+    }
+    
+}
+
index 4899d9b..5692664 100644 (file)
  */
 package org.apache.vxquery.runtime.functions.json;
 
-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.vxquery.datamodel.accessors.SequencePointable;
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.accessors.jsonitem.ArrayPointable;
-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.datamodel.values.XDMConstants;
-import org.apache.vxquery.exceptions.ErrorCode;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
 
 public class LibjnDescendantArraysScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
@@ -48,110 +33,6 @@ public class LibjnDescendantArraysScalarEvaluatorFactory extends AbstractTaggedV
     @Override
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
             throws AlgebricksException {
-        final SequencePointable sp = (SequencePointable) SequencePointable.FACTORY.createPointable();
-        final ArrayPointable ap = (ArrayPointable) ArrayPointable.FACTORY.createPointable();
-        final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
-        final SequenceBuilder sb = new SequenceBuilder();
-        final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-
-        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
-
-            @Override
-            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
-                abvs.reset();
-                sb.reset(abvs);
-                TaggedValuePointable tvp = args[0];
-                if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
-                    TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class);
-                    tvp.getValue(sp);
-                    int size = sp.getEntryCount();
-                    for (int i = 0; i < size; i++) {
-                        sp.getEntry(i, tempTvp);
-                        if (tempTvp.getTag() == ValueTag.ARRAY_TAG) {
-                            nested(tempTvp, ap);
-                        }
-                        if (tempTvp.getTag() == ValueTag.OBJECT_TAG) {
-                            insideObject(tempTvp);
-                        }
-                    }
-                    ppool.giveBack(tempTvp);
-                } else if (tvp.getTag() == ValueTag.ARRAY_TAG) {
-                    nested(tvp, ap);
-                } else if (tvp.getTag() == ValueTag.OBJECT_TAG) {
-                    insideObject(tvp);
-                } else {
-                    XDMConstants.setEmptySequence(tvp);
-                }
-                try {
-                    sb.finish();
-                    result.set(abvs);
-                } catch (IOException e) {
-                    throw new SystemException(ErrorCode.SYSE0001, e);
-                }
-            }
-
-            public void nested(TaggedValuePointable tvp, ArrayPointable ap) throws SystemException {
-                TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class);
-                ArrayPointable tempAp = ppool.takeOne(ArrayPointable.class);
-                appendSequence(tvp, ap);
-                int size = ap.getEntryCount();
-                for (int i = 0; i < size; i++) {
-
-                    ap.getEntry(i, tempTvp);
-                    if (tempTvp.getTag() == ValueTag.ARRAY_TAG) {
-                        nested(tempTvp, tempAp);
-                    }
-                }
-                ppool.giveBack(tempTvp);
-                ppool.giveBack(tempAp);
-            }
-
-            public void appendSequence(TaggedValuePointable tvp, ArrayPointable ap) throws SystemException {
-                tvp.getValue(ap);
-                try {
-                    sb.addItem(tvp);
-                } catch (IOException e) {
-                    throw new SystemException(ErrorCode.SYSE0001, e);
-                }
-            }
-
-            public void insideObject(TaggedValuePointable tvp) throws SystemException {
-                TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class);
-                ObjectPointable op = ppool.takeOne(ObjectPointable.class);
-                SequencePointable sp = ppool.takeOne(SequencePointable.class);
-                tvp.getValue(op);
-                try {
-                    op.getKeys(tvp);
-                    if (tvp.getTag() == ValueTag.XS_STRING_TAG) {
-                        tvp.getValue(stringp);
-                        op.getValue(stringp, tempTvp);
-                        checkFunction(tempTvp);
-                    } else if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
-                        tvp.getValue(sp);
-                        int size = sp.getEntryCount();
-                        for (int i = 0; i < size; i++) {
-                            sp.getEntry(i, tempTvp);
-                            tempTvp.getValue(stringp);
-                            op.getValue(stringp, tempTvp);
-                            checkFunction(tempTvp);
-                        }
-                    }
-                } catch (IOException e1) {
-                    throw new SystemException(ErrorCode.SYSE0001, e1);
-                }
-                ppool.giveBack(sp);
-                ppool.giveBack(op);
-                ppool.giveBack(tempTvp);
-            }
-
-            public void checkFunction(TaggedValuePointable tvp) throws SystemException {
-                if (tvp.getTag() == ValueTag.OBJECT_TAG) {
-                    insideObject(tvp);
-                } else {
-                    nested(tvp, ap);
-                }
-            }
-        };
+        return new LibjnDescendantArraysScalarEvaluator(ctx, args);
     }
-
 }