You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by vi...@apache.org on 2012/08/21 04:05:31 UTC

svn commit: r1375368 - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery: compiler/algebricks/ compiler/rewriter/ context/ datamodel/accessors/nodes/ datamodel/values/ functions/ runtime/functions/bool/ runtime/functions...

Author: vinayakb
Date: Tue Aug 21 02:05:30 2012
New Revision: 1375368

URL: http://svn.apache.org/viewvc?rev=1375368&view=rev
Log:
Added support for child and attribute axes

Added:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/VXQueryNullWriterFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/values/XDMConstants.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/nodeid/
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/nodeid/SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AbstractPathStepScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluatorFactory.java
Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/RewriteRuleset.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImpl.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImplFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/NodeTreePointable.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-operators.xml
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnEmptyScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnExistsScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/SequenceType.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/XQType.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/VXQueryNullWriterFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/VXQueryNullWriterFactory.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/VXQueryNullWriterFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/algebricks/VXQueryNullWriterFactory.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,31 @@
+package org.apache.vxquery.compiler.algebricks;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.values.XDMConstants;
+
+import edu.uci.ics.hyracks.api.dataflow.value.INullWriter;
+import edu.uci.ics.hyracks.api.dataflow.value.INullWriterFactory;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+
+public class VXQueryNullWriterFactory implements INullWriterFactory {
+    private static final long serialVersionUID = 1L;
+
+    @Override
+    public INullWriter createNullWriter() {
+        final VoidPointable vp = (VoidPointable) VoidPointable.FACTORY.createPointable();
+        return new INullWriter() {
+            @Override
+            public void writeNull(DataOutput out) throws HyracksDataException {
+                XDMConstants.setEmptySequence(vp);
+                try {
+                    out.write(vp.getByteArray(), vp.getStartOffset(), vp.getLength());
+                } catch (IOException e) {
+                    throw new HyracksDataException(e);
+                }
+            }
+        };
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/RewriteRuleset.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/RewriteRuleset.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/RewriteRuleset.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/RewriteRuleset.java Tue Aug 21 02:05:30 2012
@@ -15,8 +15,10 @@ import edu.uci.ics.hyracks.algebricks.re
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractGbyExpressionsRule;
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.FactorRedundantGroupAndDecorVarsRule;
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.InferTypesRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.InlineAssignIntoAggregateRule;
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.InlineVariablesRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceGroupByForStandaloneAggregRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceAggregateCombinerRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceGroupByCombinerRule;
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule;
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.PullSelectOutOfEqJoin;
 import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushLimitDownRule;
@@ -39,7 +41,6 @@ public class RewriteRuleset {
     public final static List<IAlgebraicRewriteRule> buildNormalizationRuleCollection() {
         List<IAlgebraicRewriteRule> normalization = new LinkedList<IAlgebraicRewriteRule>();
         normalization.add(new EliminateSubplanRule());
-        normalization.add(new IntroduceGroupByForStandaloneAggregRule());
         normalization.add(new BreakSelectIntoConjunctsRule());
         normalization.add(new PushSelectIntoJoinRule());
         normalization.add(new ExtractGbyExpressionsRule());
@@ -79,6 +80,9 @@ public class RewriteRuleset {
         List<IAlgebraicRewriteRule> consolidation = new LinkedList<IAlgebraicRewriteRule>();
         consolidation.add(new ConsolidateSelectsRule());
         consolidation.add(new ConsolidateAssignsRule());
+        consolidation.add(new InlineAssignIntoAggregateRule());
+        consolidation.add(new IntroduceGroupByCombinerRule());
+        consolidation.add(new IntroduceAggregateCombinerRule());
         consolidation.add(new RemoveUnusedAssignAndAggregateRule());
         return consolidation;
     }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImpl.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImpl.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImpl.java Tue Aug 21 02:05:30 2012
@@ -385,6 +385,10 @@ public class StaticContextImpl implement
         return -1;
     }
 
+    List<SequenceType> getSequenceTypeList() {
+        return sequenceTypeList;
+    }
+
     @Override
     public int getMaxSequenceTypeCode() {
         return typeCounter;

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImplFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImplFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImplFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/context/StaticContextImplFactory.java Tue Aug 21 02:05:30 2012
@@ -1,21 +1,34 @@
 package org.apache.vxquery.context;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.vxquery.types.SequenceType;
+
 class StaticContextImplFactory implements IStaticContextFactory {
     private static final long serialVersionUID = 1L;
 
     private final IStaticContextFactory parentSCFactory;
 
-    private StaticContextImplFactory(IStaticContextFactory parentSCFactory) {
+    private final List<SequenceType> seqTypes;
+
+    private StaticContextImplFactory(IStaticContextFactory parentSCFactory, List<SequenceType> seqTypes) {
         this.parentSCFactory = parentSCFactory;
+        this.seqTypes = seqTypes;
     }
 
     @Override
     public StaticContext createStaticContext() {
-        return new StaticContextImpl(parentSCFactory.createStaticContext());
+        StaticContextImpl sctx = new StaticContextImpl(parentSCFactory.createStaticContext());
+        for (SequenceType sType : seqTypes) {
+            sctx.encodeSequenceType(sType);
+        }
+        return sctx;
     }
 
     static IStaticContextFactory createInstance(StaticContextImpl staticContextImpl) {
         IStaticContextFactory parentSCFactory = staticContextImpl.getParent().createFactory();
-        return new StaticContextImplFactory(parentSCFactory);
+        return new StaticContextImplFactory(parentSCFactory, new ArrayList<SequenceType>(
+                staticContextImpl.getSequenceTypeList()));
     }
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/NodeTreePointable.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/NodeTreePointable.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/NodeTreePointable.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/NodeTreePointable.java Tue Aug 21 02:05:30 2012
@@ -90,7 +90,7 @@ public class NodeTreePointable extends A
         return dictionaryExists() ? IntegerPointable.getInteger(bytes, getDictionaryEntryCountOffset()) : 0;
     }
 
-    public void getString(int idx, UTF8StringPointable string) {
+    public void getString(int idx, IPointable string) {
         int nEntries = getDictionaryEntryCount();
         if (idx < 0 || idx >= nEntries) {
             throw new IllegalArgumentException(idx + " not within [0, " + nEntries + ")");
@@ -136,11 +136,11 @@ public class NodeTreePointable extends A
         return nodeIdExists() ? NODE_ID_SIZE : 0;
     }
 
-    private int getDictionaryOffset() {
+    public int getDictionaryOffset() {
         return getNodeIdOffset() + getNodeIdSize();
     }
 
-    private int getDictionarySize() {
+    public int getDictionarySize() {
         return dictionaryExists() ? IntegerPointable.getInteger(bytes, getDictionaryOffset()) : 0;
     }
 

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/values/XDMConstants.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/values/XDMConstants.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/values/XDMConstants.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/values/XDMConstants.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,57 @@
+package org.apache.vxquery.datamodel.values;
+
+import java.io.IOException;
+import java.util.Arrays;
+
+import org.apache.vxquery.datamodel.builders.sequence.SequenceBuilder;
+
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public class XDMConstants {
+    private static final byte[] BOOLEAN_TRUE_CONSTANT;
+
+    private static final byte[] BOOLEAN_FALSE_CONSTANT;
+
+    private static final byte[] EMPTY_SEQUENCE;
+
+    static {
+        BOOLEAN_TRUE_CONSTANT = new byte[2];
+        BOOLEAN_TRUE_CONSTANT[0] = ValueTag.XS_BOOLEAN_TAG;
+        BooleanPointable.setBoolean(BOOLEAN_TRUE_CONSTANT, 1, true);
+
+        BOOLEAN_FALSE_CONSTANT = new byte[2];
+        BOOLEAN_FALSE_CONSTANT[0] = ValueTag.XS_BOOLEAN_TAG;
+        BooleanPointable.setBoolean(BOOLEAN_FALSE_CONSTANT, 1, false);
+
+        ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+        SequenceBuilder sb = new SequenceBuilder();
+        sb.reset(abvs);
+        try {
+            sb.finish();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+        EMPTY_SEQUENCE = Arrays.copyOf(abvs.getByteArray(), abvs.getLength());
+    }
+
+    public static void setTrue(IPointable p) {
+        set(p, BOOLEAN_TRUE_CONSTANT);
+    }
+
+    public static void setFalse(IPointable p) {
+        set(p, BOOLEAN_FALSE_CONSTANT);
+    }
+
+    public static void setEmptySequence(IPointable p) {
+        set(p, EMPTY_SEQUENCE);
+    }
+
+    private static void set(IPointable p, byte[] array) {
+        p.set(array, 0, array.length);
+    }
+
+    private XDMConstants() {
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-operators.xml
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-operators.xml?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-operators.xml (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-operators.xml Tue Aug 21 02:05:30 2012
@@ -678,6 +678,7 @@
     <operator name="opext:sort-distinct-nodes-asc-or-atomics">
         <param name="arg" type="item()*"/>
         <return type="item()*"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.nodeid.SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:sort-nodes-desc($arg as node()*) as node()* -->
@@ -772,12 +773,14 @@
     <operator name="opext:attribute">
         <param name="arg" type="node()*"/>
         <return type="node()*"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.step.AttributePathStepScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:child($arg as node()*) as node()* -->
     <operator name="opext:child">
         <param name="arg" type="node()*"/>
         <return type="node()*"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.step.ChildPathStepScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:descendant($arg as node()*) as node()* -->

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -1,6 +1,7 @@
 package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
@@ -30,11 +31,11 @@ public class AndScalarEvaluatorFactory e
                 for (TaggedValuePointable arg : args) {
                     arg.getValue(bp);
                     if (!bp.getBoolean()) {
-                        FnFalseScalarEvaluatorFactory.setFalse(result);
+                        XDMConstants.setFalse(result);
                         return;
                     }
                 }
-                FnTrueScalarEvaluatorFactory.setTrue(result);
+                XDMConstants.setTrue(result);
             }
         };
     }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnBooleanScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -3,6 +3,7 @@ package org.apache.vxquery.runtime.funct
 import org.apache.vxquery.datamodel.accessors.SequencePointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 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;
@@ -39,10 +40,10 @@ public class FnBooleanScalarEvaluatorFac
                     case ValueTag.SEQUENCE_TAG: {
                         tvp.getValue(seqp);
                         if (seqp.getEntryCount() == 0) {
-                            FnFalseScalarEvaluatorFactory.setFalse(result);
+                            XDMConstants.setFalse(result);
                             return;
                         }
-                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        XDMConstants.setTrue(result);
                         return;
                     }
 
@@ -55,30 +56,30 @@ public class FnBooleanScalarEvaluatorFac
                     case ValueTag.XS_INTEGER_TAG: {
                         tvp.getValue(lp);
                         if (lp.longValue() == 0) {
-                            FnFalseScalarEvaluatorFactory.setFalse(result);
+                            XDMConstants.setFalse(result);
                             return;
                         }
-                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        XDMConstants.setTrue(result);
                         return;
                     }
 
                     case ValueTag.XS_INT_TAG: {
                         tvp.getValue(ip);
                         if (ip.intValue() == 0) {
-                            FnFalseScalarEvaluatorFactory.setFalse(result);
+                            XDMConstants.setFalse(result);
                             return;
                         }
-                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        XDMConstants.setTrue(result);
                         return;
                     }
 
                     case ValueTag.XS_STRING_TAG: {
                         tvp.getValue(utf8p);
                         if (utf8p.getUTFLength() == 0) {
-                            FnFalseScalarEvaluatorFactory.setFalse(result);
+                            XDMConstants.setFalse(result);
                             return;
                         }
-                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        XDMConstants.setTrue(result);
                         return;
                     }
                 }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnFalseScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -1,7 +1,7 @@
 package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
@@ -11,23 +11,10 @@ import edu.uci.ics.hyracks.algebricks.ru
 import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.data.std.api.IPointable;
-import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
 
 public class FnFalseScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
 
-    private static final byte[] BOOLEAN_FALSE_CONSTANT;
-
-    static {
-        BOOLEAN_FALSE_CONSTANT = new byte[2];
-        BOOLEAN_FALSE_CONSTANT[0] = ValueTag.XS_BOOLEAN_TAG;
-        BooleanPointable.setBoolean(BOOLEAN_FALSE_CONSTANT, 1, false);
-    }
-
-    public static void setFalse(IPointable p) {
-        p.set(BOOLEAN_FALSE_CONSTANT, 0, 2);
-    }
-
     public FnFalseScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
         super(args);
     }
@@ -38,7 +25,7 @@ public class FnFalseScalarEvaluatorFacto
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
             @Override
             protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
-                result.set(BOOLEAN_FALSE_CONSTANT, 0, 2);
+                XDMConstants.setFalse(result);
             }
         };
     }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnNotScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -1,6 +1,7 @@
 package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
@@ -30,9 +31,9 @@ public class FnNotScalarEvaluatorFactory
                 TaggedValuePointable arg = args[0];
                 arg.getValue(bp);
                 if (bp.getBoolean()) {
-                    FnFalseScalarEvaluatorFactory.setFalse(result);
+                    XDMConstants.setFalse(result);
                 } else {
-                    FnTrueScalarEvaluatorFactory.setTrue(result);
+                    XDMConstants.setTrue(result);
                 }
             }
         };

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/FnTrueScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -1,7 +1,7 @@
 package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
@@ -11,23 +11,10 @@ import edu.uci.ics.hyracks.algebricks.ru
 import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
 import edu.uci.ics.hyracks.data.std.api.IPointable;
-import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
 
 public class FnTrueScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
     private static final long serialVersionUID = 1L;
 
-    private static final byte[] BOOLEAN_TRUE_CONSTANT;
-
-    static {
-        BOOLEAN_TRUE_CONSTANT = new byte[2];
-        BOOLEAN_TRUE_CONSTANT[0] = ValueTag.XS_BOOLEAN_TAG;
-        BooleanPointable.setBoolean(BOOLEAN_TRUE_CONSTANT, 1, true);
-    }
-
-    public static void setTrue(IPointable p) {
-        p.set(BOOLEAN_TRUE_CONSTANT, 0, 2);
-    }
-
     public FnTrueScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
         super(args);
     }
@@ -38,7 +25,7 @@ public class FnTrueScalarEvaluatorFactor
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
             @Override
             protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
-                result.set(BOOLEAN_TRUE_CONSTANT, 0, 2);
+                XDMConstants.setTrue(result);
             }
         };
     }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -1,6 +1,7 @@
 package org.apache.vxquery.runtime.functions.bool;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
 import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
@@ -30,11 +31,11 @@ public class OrScalarEvaluatorFactory ex
                 for (TaggedValuePointable arg : args) {
                     arg.getValue(bp);
                     if (bp.getBoolean()) {
-                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        XDMConstants.setTrue(result);
                         return;
                     }
                 }
-                FnFalseScalarEvaluatorFactory.setFalse(result);
+                XDMConstants.setFalse(result);
             }
         };
     }

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/nodeid/SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/nodeid/SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/nodeid/SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/nodeid/SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,32 @@
+package org.apache.vxquery.runtime.functions.nodeid;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+
+public class SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory extends
+        AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public SortDistinctNodesAscOrAtomicsScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+            @Override
+            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+                result.set(args[0]);
+            }
+        };
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnEmptyScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnEmptyScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnEmptyScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnEmptyScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -3,11 +3,10 @@ package org.apache.vxquery.runtime.funct
 import org.apache.vxquery.datamodel.accessors.SequencePointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 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.bool.FnFalseScalarEvaluatorFactory;
-import org.apache.vxquery.runtime.functions.bool.FnTrueScalarEvaluatorFactory;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
@@ -33,11 +32,11 @@ public class FnEmptyScalarEvaluatorFacto
                 if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
                     tvp.getValue(seqp);
                     if (seqp.getEntryCount() == 0) {
-                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        XDMConstants.setTrue(result);
                         return;
                     }
                 }
-                FnFalseScalarEvaluatorFactory.setFalse(result);
+                XDMConstants.setFalse(result);
             }
         };
     }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnExistsScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnExistsScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnExistsScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnExistsScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -3,11 +3,10 @@ package org.apache.vxquery.runtime.funct
 import org.apache.vxquery.datamodel.accessors.SequencePointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 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.bool.FnFalseScalarEvaluatorFactory;
-import org.apache.vxquery.runtime.functions.bool.FnTrueScalarEvaluatorFactory;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
@@ -33,11 +32,11 @@ public class FnExistsScalarEvaluatorFact
                 if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
                     tvp.getValue(seqp);
                     if (seqp.getEntryCount() == 0) {
-                        FnFalseScalarEvaluatorFactory.setFalse(result);
+                        XDMConstants.setFalse(result);
                         return;
                     }
                 }
-                FnTrueScalarEvaluatorFactory.setTrue(result);
+                XDMConstants.setTrue(result);
             }
         };
     }

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AbstractPathStepScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AbstractPathStepScalarEvaluator.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AbstractPathStepScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AbstractPathStepScalarEvaluator.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,272 @@
+package org.apache.vxquery.runtime.functions.step;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.CodedQNamePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.AttributeNodePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable;
+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 org.apache.vxquery.types.AttributeType;
+import org.apache.vxquery.types.ElementType;
+import org.apache.vxquery.types.NameTest;
+import org.apache.vxquery.types.NodeType;
+import org.apache.vxquery.types.SequenceType;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public abstract class AbstractPathStepScalarEvaluator extends AbstractTaggedValueArgumentScalarEvaluator {
+    protected final DynamicContext dCtx;
+
+    private final IntegerPointable ip;
+
+    private final NodeTreePointable ntp;
+
+    private final SequencePointable seqp;
+
+    private final ArrayBackedValueStorage seqAbvs;
+
+    private final SequenceBuilder seqb;
+
+    private final ArrayBackedValueStorage nodeAbvs;
+
+    private final TaggedValuePointable itemTvp;
+
+    private INodeFilter filter;
+
+    private boolean first;
+
+    public AbstractPathStepScalarEvaluator(IScalarEvaluator[] args, IHyracksTaskContext ctx) {
+        super(args);
+        dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData();
+        ip = (IntegerPointable) IntegerPointable.FACTORY.createPointable();
+        ntp = (NodeTreePointable) NodeTreePointable.FACTORY.createPointable();
+        seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
+        seqAbvs = new ArrayBackedValueStorage();
+        seqb = new SequenceBuilder();
+        nodeAbvs = new ArrayBackedValueStorage();
+        itemTvp = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+        first = true;
+    }
+
+    private void setNodeTest(SequenceType sType) {
+        final NodeType nodeType = (NodeType) sType.getItemType();
+        switch (nodeType.getNodeKind()) {
+            case ANY:
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        return true;
+                    }
+                };
+                break;
+
+            case ATTRIBUTE: {
+                AttributeType aType = (AttributeType) nodeType;
+                NameTest nameTest = aType.getNameTest();
+                byte[] uri = nameTest.getUri();
+                byte[] localName = nameTest.getLocalName();
+                final UTF8StringPointable urip = (UTF8StringPointable) (uri == null ? null
+                        : UTF8StringPointable.FACTORY.createPointable());
+                final UTF8StringPointable localp = (UTF8StringPointable) (localName == null ? null
+                        : UTF8StringPointable.FACTORY.createPointable());
+                if (uri != null) {
+                    urip.set(uri, 0, uri.length);
+                }
+                if (localName != null) {
+                    localp.set(localName, 0, localName.length);
+                }
+                final IPointable temp = VoidPointable.FACTORY.createPointable();
+                final AttributeNodePointable anp = (AttributeNodePointable) AttributeNodePointable.FACTORY
+                        .createPointable();
+                final CodedQNamePointable cqp = (CodedQNamePointable) CodedQNamePointable.FACTORY.createPointable();
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        if (tvp.getTag() != ValueTag.ATTRIBUTE_NODE_TAG) {
+                            return false;
+                        }
+                        tvp.getValue(anp);
+                        anp.getName(cqp);
+                        if (urip != null) {
+                            ntp.getString(cqp.getNamespaceCode(), temp);
+                            if (urip.compareTo(temp) != 0) {
+                                return false;
+                            }
+                        }
+                        if (localp != null) {
+                            ntp.getString(cqp.getLocalCode(), temp);
+                            if (localp.compareTo(temp) != 0) {
+                                return false;
+                            }
+                        }
+                        return true;
+                    }
+                };
+                break;
+            }
+
+            case COMMENT:
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        return tvp.getTag() == ValueTag.COMMENT_NODE_TAG;
+                    }
+                };
+                break;
+
+            case DOCUMENT:
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        return tvp.getTag() == ValueTag.DOCUMENT_NODE_TAG;
+                    }
+                };
+                break;
+
+            case ELEMENT: {
+                ElementType eType = (ElementType) nodeType;
+                NameTest nameTest = eType.getNameTest();
+                byte[] uri = nameTest.getUri();
+                byte[] localName = nameTest.getLocalName();
+                final UTF8StringPointable urip = (UTF8StringPointable) (uri == null ? null
+                        : UTF8StringPointable.FACTORY.createPointable());
+                final UTF8StringPointable localp = (UTF8StringPointable) (localName == null ? null
+                        : UTF8StringPointable.FACTORY.createPointable());
+                if (uri != null) {
+                    urip.set(uri, 0, uri.length);
+                }
+                if (localName != null) {
+                    localp.set(localName, 0, localName.length);
+                }
+                final IPointable temp = VoidPointable.FACTORY.createPointable();
+                final ElementNodePointable enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable();
+                final CodedQNamePointable cqp = (CodedQNamePointable) CodedQNamePointable.FACTORY.createPointable();
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        if (tvp.getTag() != ValueTag.ELEMENT_NODE_TAG) {
+                            return false;
+                        }
+                        tvp.getValue(enp);
+                        enp.getName(cqp);
+                        if (urip != null) {
+                            ntp.getString(cqp.getNamespaceCode(), temp);
+                            if (urip.compareTo(temp) != 0) {
+                                return false;
+                            }
+                        }
+                        if (localp != null) {
+                            ntp.getString(cqp.getLocalCode(), temp);
+                            if (localp.compareTo(temp) != 0) {
+                                return false;
+                            }
+                        }
+                        return true;
+                    }
+                };
+                break;
+            }
+
+            case PI:
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        return tvp.getTag() == ValueTag.PI_NODE_TAG;
+                    }
+                };
+                break;
+
+            case TEXT:
+                filter = new INodeFilter() {
+                    @Override
+                    public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp) {
+                        return tvp.getTag() == ValueTag.TEXT_NODE_TAG;
+                    }
+                };
+                break;
+        }
+    }
+
+    protected abstract void getSequence(NodeTreePointable ntp, SequencePointable seqp) throws SystemException;
+
+    @Override
+    protected final void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+        try {
+            if (first) {
+                if (args[1].getTag() != ValueTag.XS_INT_TAG) {
+                    throw new IllegalArgumentException("Expected int value tag, got: " + args[1].getTag());
+                }
+                args[1].getValue(ip);
+                int typeCode = ip.getInteger();
+                SequenceType sType = dCtx.getStaticContext().lookupSequenceType(typeCode);
+                setNodeTest(sType);
+                first = false;
+            }
+            if (args[0].getTag() != ValueTag.NODE_TREE_TAG) {
+                throw new SystemException(ErrorCode.SYSE0001);
+            }
+            args[0].getValue(ntp);
+            getSequence(ntp, seqp);
+            seqAbvs.reset();
+            seqb.reset(seqAbvs);
+            int seqSize = seqp.getEntryCount();
+            for (int i = 0; i < seqSize; ++i) {
+                seqp.getEntry(i, itemTvp);
+                if (matches()) {
+                    appendNodeToResult();
+                }
+            }
+            seqb.finish();
+            result.set(seqAbvs);
+        } catch (IOException e) {
+            throw new SystemException(ErrorCode.SYSE0001, e);
+        }
+    }
+
+    private boolean matches() {
+        return filter.accept(ntp, itemTvp);
+    }
+
+    private void appendNodeToResult() throws IOException {
+        nodeAbvs.reset();
+        DataOutput mainOut = nodeAbvs.getDataOutput();
+        mainOut.write(ValueTag.NODE_TREE_TAG);
+        boolean hasDictionary = ntp.dictionaryExists() && hasDictionary(itemTvp.getTag());
+        byte header = (byte) (hasDictionary ? NodeTreePointable.HEADER_DICTIONARY_EXISTS_MASK : 0);
+        mainOut.write(header);
+        if (hasDictionary) {
+            mainOut.write(ntp.getByteArray(), ntp.getDictionaryOffset(), ntp.getDictionarySize());
+        }
+        mainOut.write(itemTvp.getByteArray(), itemTvp.getStartOffset(), itemTvp.getLength());
+        seqb.addItem(nodeAbvs);
+    }
+
+    private boolean hasDictionary(byte tag) {
+        switch (tag) {
+            case ValueTag.ATTRIBUTE_NODE_TAG:
+            case ValueTag.DOCUMENT_NODE_TAG:
+            case ValueTag.ELEMENT_NODE_TAG:
+                return true;
+        }
+        return false;
+    }
+
+    private interface INodeFilter {
+        public boolean accept(NodeTreePointable ntp, TaggedValuePointable tvp);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluator.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluator.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,38 @@
+package org.apache.vxquery.runtime.functions.step;
+
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.exceptions.SystemException;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+
+public class AttributePathStepScalarEvaluator extends AbstractPathStepScalarEvaluator {
+    private final TaggedValuePointable rootTVP;
+
+    private final ElementNodePointable enp;
+
+    public AttributePathStepScalarEvaluator(IScalarEvaluator[] args, IHyracksTaskContext ctx) {
+        super(args, ctx);
+        rootTVP = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+        enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable();
+    }
+
+    @Override
+    protected void getSequence(NodeTreePointable ntp, SequencePointable seqp) throws SystemException {
+        ntp.getRootNode(rootTVP);
+        switch (rootTVP.getTag()) {
+            case ValueTag.ELEMENT_NODE_TAG:
+                rootTVP.getValue(enp);
+                if (enp.attributesChunkExists()) {
+                    enp.getAttributeSequence(ntp, seqp);
+                    return;
+                }
+        }
+        XDMConstants.setEmptySequence(seqp);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluatorFactory.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/AttributePathStepScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.step;
+
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+
+public class AttributePathStepScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public AttributePathStepScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new AttributePathStepScalarEvaluator(args, ctx);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluator.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluator.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,47 @@
+package org.apache.vxquery.runtime.functions.step;
+
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.DocumentNodePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.ElementNodePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.datamodel.values.XDMConstants;
+import org.apache.vxquery.exceptions.SystemException;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+
+public class ChildPathStepScalarEvaluator extends AbstractPathStepScalarEvaluator {
+    private final TaggedValuePointable rootTVP;
+
+    private final DocumentNodePointable dnp;
+
+    private final ElementNodePointable enp;
+
+    public ChildPathStepScalarEvaluator(IScalarEvaluator[] args, IHyracksTaskContext ctx) {
+        super(args, ctx);
+        rootTVP = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+        dnp = (DocumentNodePointable) DocumentNodePointable.FACTORY.createPointable();
+        enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable();
+    }
+
+    @Override
+    protected void getSequence(NodeTreePointable ntp, SequencePointable seqp) throws SystemException {
+        ntp.getRootNode(rootTVP);
+        switch (rootTVP.getTag()) {
+            case ValueTag.DOCUMENT_NODE_TAG:
+                rootTVP.getValue(dnp);
+                dnp.getContent(ntp, seqp);
+                return;
+
+            case ValueTag.ELEMENT_NODE_TAG:
+                rootTVP.getValue(enp);
+                if (enp.childrenChunkExists()) {
+                    enp.getChildrenSequence(ntp, seqp);
+                    return;
+                }
+        }
+        XDMConstants.setEmptySequence(seqp);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluatorFactory.java?rev=1375368&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/step/ChildPathStepScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.step;
+
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+
+public class ChildPathStepScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public ChildPathStepScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new ChildPathStepScalarEvaluator(args, ctx);
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java Tue Aug 21 02:05:30 2012
@@ -1,9 +1,8 @@
 package org.apache.vxquery.runtime.functions.type;
 
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.XDMConstants;
 import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.bool.FnFalseScalarEvaluatorFactory;
-import org.apache.vxquery.runtime.functions.bool.FnTrueScalarEvaluatorFactory;
 import org.apache.vxquery.types.SequenceType;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -29,9 +28,9 @@ public class InstanceOfScalarEvaluatorFa
             protected void evaluate(TaggedValuePointable tvp, IPointable result) throws SystemException {
                 boolean success = matcher.sequenceTypeMatch(tvp);
                 if (success) {
-                    FnTrueScalarEvaluatorFactory.setTrue(result);
+                    XDMConstants.setTrue(result);
                 } else {
-                    FnFalseScalarEvaluatorFactory.setFalse(result);
+                    XDMConstants.setFalse(result);
                 }
             }
 

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java Tue Aug 21 02:05:30 2012
@@ -16,11 +16,14 @@
  */
 package org.apache.vxquery.types;
 
+import java.io.Serializable;
 import java.util.Arrays;
 
 import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
 
-public final class NameTest {
+public final class NameTest implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     public static final String WILDCARD = null;
 
     public static final NameTest STAR_NAMETEST = new NameTest(null, null);

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/SequenceType.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/SequenceType.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/SequenceType.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/SequenceType.java Tue Aug 21 02:05:30 2012
@@ -16,11 +16,14 @@
 */
 package org.apache.vxquery.types;
 
+import java.io.Serializable;
 import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
-public final class SequenceType {
+public final class SequenceType implements Serializable {
+    private static final long serialVersionUID = 1L;
+
     public static final Map<ItemType, SequenceType[]> BUILTIN_SEQ_TYPES;
 
     private ItemType itemType;

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/XQType.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/XQType.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/XQType.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/types/XQType.java Tue Aug 21 02:05:30 2012
@@ -16,5 +16,7 @@
 */
 package org.apache.vxquery.types;
 
-public interface XQType {
+import java.io.Serializable;
+
+public interface XQType extends Serializable {
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java?rev=1375368&r1=1375367&r2=1375368&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/XMLQueryCompiler.java Tue Aug 21 02:05:30 2012
@@ -24,6 +24,7 @@ import org.apache.vxquery.compiler.algeb
 import org.apache.vxquery.compiler.algebricks.VXQueryComparatorFactoryProvider;
 import org.apache.vxquery.compiler.algebricks.VXQueryConstantValue;
 import org.apache.vxquery.compiler.algebricks.VXQueryExpressionRuntimeProvider;
+import org.apache.vxquery.compiler.algebricks.VXQueryNullWriterFactory;
 import org.apache.vxquery.compiler.algebricks.VXQueryPrinterFactoryProvider;
 import org.apache.vxquery.compiler.rewriter.RewriteRuleset;
 import org.apache.vxquery.exceptions.ErrorCode;
@@ -35,6 +36,7 @@ import org.apache.vxquery.types.Sequence
 import org.apache.vxquery.xmlquery.ast.ModuleNode;
 import org.apache.vxquery.xmlquery.translator.XMLQueryTranslator;
 
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
 import edu.uci.ics.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder;
@@ -110,6 +112,8 @@ public class XMLQueryCompiler {
                 return null;
             }
         });
+        builder.setNullWriterFactory(new VXQueryNullWriterFactory());
+        builder.setClusterLocations(new AlgebricksAbsolutePartitionConstraint(new String[] { "nc1" }));
         cFactory = builder.create();
         mdProvider = new VXQueryMetadataProvider();
     }