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/08 14:58:44 UTC

svn commit: r1370750 [1/2] - in /incubator/vxquery/trunk/vxquery: vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/ vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/ vxquery-core/src/main/java/org/apache/vxquery/...

Author: vinayakb
Date: Wed Aug  8 12:58:42 2012
New Revision: 1370750

URL: http://svn.apache.org/viewvc?rev=1370750&view=rev
Log:
Added Node constructors. Added And and Or functions. Added Reverse function. Added instance of. Fixed reporting of runtime errors.

Added:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java
    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/OrScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AbstractNodeConstructorScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluator.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnReverseScalarEvaluatorFactory.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/runtime/functions/type/SequenceTypeMatcher.java
Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/PointablePool.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/AttributeNodePointable.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
    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/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/ConcatenateScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/AbstractTypeScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/TreatScalarEvaluatorFactory.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/serializer/XMLSerializer.java
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/translator/XMLQueryTranslator.java
    incubator/vxquery/trunk/vxquery/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestRunnerFactory.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/PointablePool.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/PointablePool.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/PointablePool.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/PointablePool.java Wed Aug  8 12:58:42 2012
@@ -11,12 +11,12 @@ public class PointablePool {
 
     private final Map<Class<? extends IPointable>, PointableCache<? extends IPointable>> pcMap;
 
-    public PointablePool() {
+    PointablePool() {
         pfMap = new HashMap<Class<? extends IPointable>, IPointableFactory>();
         pcMap = new HashMap<Class<? extends IPointable>, PointableCache<? extends IPointable>>();
     }
 
-    public <T extends IPointable> void register(Class<T> klass, IPointableFactory factory) {
+    <T extends IPointable> void register(Class<T> klass, IPointableFactory factory) {
         pfMap.put(klass, factory);
         pcMap.put(klass, new PointableCache<T>());
     }

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/AttributeNodePointable.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/AttributeNodePointable.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/AttributeNodePointable.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/AttributeNodePointable.java Wed Aug  8 12:58:42 2012
@@ -1,6 +1,5 @@
 package org.apache.vxquery.datamodel.accessors.nodes;
 
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.CodedQNamePointable;
 
 import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
@@ -50,7 +49,7 @@ public class AttributeNodePointable exte
         return nodeTree.nodeIdExists() ? IntegerPointable.getInteger(bytes, getLocalNodeIdOffset(nodeTree)) : -1;
     }
 
-    public void getValue(NodeTreePointable nodeTree, TaggedValuePointable value) {
+    public void getValue(NodeTreePointable nodeTree, IPointable value) {
         value.set(bytes, getValueOffset(nodeTree), getValueSize(nodeTree));
     }
 

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AbstractNodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -2,10 +2,10 @@ package org.apache.vxquery.datamodel.bui
 
 import java.io.IOException;
 
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
 
 public abstract class AbstractNodeBuilder {
-    public abstract void reset(ArrayBackedValueStorage abvs) throws IOException;
+    public abstract void reset(IMutableValueStorage mvs) throws IOException;
 
     public abstract void finish() throws IOException;
 }
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/AttributeNodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -5,15 +5,15 @@ import java.io.IOException;
 
 import org.apache.vxquery.datamodel.values.ValueTag;
 
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
 import edu.uci.ics.hyracks.data.std.api.IValueReference;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
 
 public class AttributeNodeBuilder extends AbstractNodeBuilder {
     private DataOutput out;
 
     @Override
-    public void reset(ArrayBackedValueStorage abvs) throws IOException {
-        out = abvs.getDataOutput();
+    public void reset(IMutableValueStorage mvs) throws IOException {
+        out = mvs.getDataOutput();
         out.write(ValueTag.ATTRIBUTE_NODE_TAG);
     }
 

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/CommentNodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -1,5 +1,31 @@
 package org.apache.vxquery.datamodel.builders.nodes;
 
-public class CommentNodeBuilder {
+import java.io.DataOutput;
+import java.io.IOException;
 
-}
+import org.apache.vxquery.datamodel.values.ValueTag;
+
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
+
+public class CommentNodeBuilder extends AbstractNodeBuilder {
+    private DataOutput out;
+
+    @Override
+    public void reset(IMutableValueStorage mvs) throws IOException {
+        out = mvs.getDataOutput();
+        out.write(ValueTag.COMMENT_NODE_TAG);
+    }
+
+    @Override
+    public void finish() throws IOException {
+    }
+
+    public void setLocalNodeId(int localNodeId) throws IOException {
+        out.writeInt(localNodeId);
+    }
+
+    public void setValue(IValueReference value) throws IOException {
+        out.write(value.getByteArray(), value.getStartOffset(), value.getLength());
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/DocumentNodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -6,6 +6,7 @@ import java.io.IOException;
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.util.GrowableIntArray;
 
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
 import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
 
 public class DocumentNodeBuilder extends AbstractNodeBuilder {
@@ -23,8 +24,8 @@ public class DocumentNodeBuilder extends
     }
 
     @Override
-    public void reset(ArrayBackedValueStorage abvs) throws IOException {
-        out = abvs.getDataOutput();
+    public void reset(IMutableValueStorage mvs) throws IOException {
+        out = mvs.getDataOutput();
         out.write(ValueTag.DOCUMENT_NODE_TAG);
     }
 

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/ElementNodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -7,6 +7,8 @@ import org.apache.vxquery.datamodel.acce
 import org.apache.vxquery.datamodel.values.ValueTag;
 import org.apache.vxquery.util.GrowableIntArray;
 
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
 import edu.uci.ics.hyracks.data.std.primitive.BytePointable;
 import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
 import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -14,13 +16,13 @@ import edu.uci.ics.hyracks.data.std.util
 public class ElementNodeBuilder extends AbstractNodeBuilder {
     private final GrowableIntArray attrSlots;
 
-    private final ArrayBackedValueStorage attrDataArea;
+    private final IMutableValueStorage attrDataArea;
 
     private final GrowableIntArray childrenSlots;
 
-    private final ArrayBackedValueStorage childrenDataArea;
+    private final IMutableValueStorage childrenDataArea;
 
-    private ArrayBackedValueStorage abvs;
+    private IMutableValueStorage mvs;
 
     private DataOutput out;
 
@@ -42,11 +44,11 @@ public class ElementNodeBuilder extends 
     }
 
     @Override
-    public void reset(ArrayBackedValueStorage abvs) throws IOException {
-        this.abvs = abvs;
-        out = abvs.getDataOutput();
+    public void reset(IMutableValueStorage mvs) throws IOException {
+        this.mvs = mvs;
+        out = mvs.getDataOutput();
         out.write(ValueTag.ELEMENT_NODE_TAG);
-        headerOffset = abvs.getLength();
+        headerOffset = mvs.getLength();
         out.write(0);
     }
 
@@ -62,7 +64,7 @@ public class ElementNodeBuilder extends 
         if (childrenCount > 0) {
             header |= ElementNodePointable.CHILDREN_CHUNK_EXISTS_MASK;
         }
-        BytePointable.setByte(abvs.getByteArray(), headerOffset, header);
+        BytePointable.setByte(mvs.getByteArray(), headerOffset, header);
     }
 
     public void setName(int uriCode, int localNameCode, int prefixCode) throws IOException {
@@ -82,7 +84,7 @@ public class ElementNodeBuilder extends 
     }
 
     public void startNamespaceChunk() {
-        nsChunkStart = abvs.getLength();
+        nsChunkStart = mvs.getLength();
         nsCount = 0;
     }
 
@@ -96,7 +98,7 @@ public class ElementNodeBuilder extends 
     }
 
     public void endNamespaceChunk() {
-        byte[] bytes = abvs.getByteArray();
+        byte[] bytes = mvs.getByteArray();
         IntegerPointable.setInteger(bytes, nsChunkStart, nsCount);
     }
 
@@ -141,6 +143,11 @@ public class ElementNodeBuilder extends 
         childrenSlots.append(childrenDataArea.getLength());
     }
 
+    public void addChild(IValueReference value) throws IOException {
+        childrenDataArea.getDataOutput().write(value.getByteArray(), value.getStartOffset(), value.getLength());
+        childrenSlots.append(childrenDataArea.getLength());
+    }
+
     public void endChildrenChunk() throws IOException {
         childrenCount = childrenSlots.getSize();
         if (childrenCount > 0) {

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/PINodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -1,5 +1,35 @@
 package org.apache.vxquery.datamodel.builders.nodes;
 
-public class PINodeBuilder {
+import java.io.DataOutput;
+import java.io.IOException;
 
-}
+import org.apache.vxquery.datamodel.values.ValueTag;
+
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
+
+public class PINodeBuilder extends AbstractNodeBuilder {
+    private DataOutput out;
+
+    @Override
+    public void reset(IMutableValueStorage mvs) throws IOException {
+        out = mvs.getDataOutput();
+        out.write(ValueTag.PI_NODE_TAG);
+    }
+
+    @Override
+    public void finish() throws IOException {
+    }
+
+    public void setLocalNodeId(int localNodeId) throws IOException {
+        out.writeInt(localNodeId);
+    }
+
+    public void setTarget(IValueReference value) throws IOException {
+        out.write(value.getByteArray(), value.getStartOffset(), value.getLength());
+    }
+
+    public void setContent(IValueReference value) throws IOException {
+        out.write(value.getByteArray(), value.getStartOffset(), value.getLength());
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/nodes/TextNodeBuilder.java Wed Aug  8 12:58:42 2012
@@ -5,15 +5,15 @@ import java.io.IOException;
 
 import org.apache.vxquery.datamodel.values.ValueTag;
 
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
 import edu.uci.ics.hyracks.data.std.api.IValueReference;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
 
 public class TextNodeBuilder extends AbstractNodeBuilder {
     private DataOutput out;
 
     @Override
-    public void reset(ArrayBackedValueStorage abvs) throws IOException {
-        out = abvs.getDataOutput();
+    public void reset(IMutableValueStorage mvs) throws IOException {
+        out = mvs.getDataOutput();
         out.write(ValueTag.TEXT_NODE_TAG);
     }
 

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/datamodel/builders/sequence/SequenceBuilder.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,49 @@
+package org.apache.vxquery.datamodel.builders.sequence;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.util.GrowableIntArray;
+
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public class SequenceBuilder {
+    private final GrowableIntArray slots = new GrowableIntArray();
+    private final ArrayBackedValueStorage dataArea = new ArrayBackedValueStorage();
+    private IMutableValueStorage mvs;
+
+    public SequenceBuilder() {
+    }
+
+    public void reset(IMutableValueStorage mvs) {
+        this.mvs = mvs;
+        slots.clear();
+        dataArea.reset();
+    }
+
+    public void addItem(IValueReference p) throws IOException {
+        dataArea.getDataOutput().write(p.getByteArray(), p.getStartOffset(), p.getLength());
+        slots.append(dataArea.getLength());
+    }
+
+    public void finish() throws IOException {
+        DataOutput out = mvs.getDataOutput();
+        if (slots.getSize() != 1) {
+            out.write(ValueTag.SEQUENCE_TAG);
+            int size = slots.getSize();
+            out.writeInt(size);
+            if (size > 0) {
+                int[] slotArray = slots.getArray();
+                for (int i = 0; i < size; ++i) {
+                    out.writeInt(slotArray[i]);
+                }
+                out.write(dataArea.getByteArray(), dataArea.getStartOffset(), dataArea.getLength());
+            }
+        } else {
+            out.write(dataArea.getByteArray(), dataArea.getStartOffset(), dataArea.getLength());
+        }
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml Wed Aug  8 12:58:42 2012
@@ -712,6 +712,7 @@
     <function name="fn:reverse">
         <param name="arg" type="item()*"/>
         <return type="item()*"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.sequence.FnReverseScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:root() as  node() -->

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=1370750&r1=1370749&r2=1370750&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 Wed Aug  8 12:58:42 2012
@@ -649,6 +649,7 @@
         <param name="arg1" type="xs:boolean?"/>
         <param name="arg2" type="xs:boolean?"/>
         <return type="xs:boolean?"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.bool.AndScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:or($arg1 as xs:boolean?, $arg2 as xs:boolean?) as xs:boolean? -->
@@ -656,6 +657,7 @@
         <param name="arg1" type="xs:boolean?"/>
         <param name="arg2" type="xs:boolean?"/>
         <return type="xs:boolean?"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.bool.OrScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:sort-nodes-asc($arg as node()*) as node()* -->
@@ -705,12 +707,14 @@
         <param name="target" type="xs:string"/>
         <param name="content" type="xs:string"/>
         <return type="node()"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.PINodeConstructorScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:comment-constructor($content as xs:string) as node() -->
     <operator name="opext:comment-constructor">
         <param name="content" type="xs:string"/>
         <return type="node()"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.CommentNodeConstructorScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:element-constructor($name as xs:QName, $content as item()*) as node() -->
@@ -718,6 +722,7 @@
         <param name="name" type="xs:QName"/>
         <param name="content" type="item()*"/>
         <return type="node()"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.ElementNodeConstructorScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:attribute-constructor($name as xs:QName, $content as xs:anyAtomicType*) as node() -->
@@ -725,12 +730,14 @@
         <param name="name" type="xs:QName"/>
         <param name="content" type="xs:anyAtomicType*"/>
         <return type="node()"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.AttributeNodeConstructorScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:text-constructor($content as xs:anyAtomicType*) as node() -->
     <operator name="opext:text-constructor">
         <param name="content" type="xs:anyAtomicType*"/>
         <return type="node()"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.TextNodeConstructorScalarEvaluatorFactory"/>
     </operator>
 
     <!-- opext:document-constructor($content as node()) as node() -->
@@ -882,5 +889,6 @@
         <param name="arg" type="item()*"/>
         <param name="type" type="xs:int"/>
         <return type="xs:boolean"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.type.InstanceOfScalarEvaluatorFactory"/>
     </operator>
 </operators>

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AbstractArithmeticScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -19,6 +19,7 @@ package org.apache.vxquery.runtime.funct
 import java.io.DataOutput;
 
 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.XSDatePointable;
 import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
@@ -29,6 +30,7 @@ import org.apache.vxquery.exceptions.Err
 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.types.BuiltinTypeConstants;
 import org.apache.vxquery.types.BuiltinTypeRegistry;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -58,6 +60,7 @@ public abstract class AbstractArithmetic
         final DataOutput dOut = abvs.getDataOutput();
         final TypedPointables tp1 = new TypedPointables();
         final TypedPointables tp2 = new TypedPointables();
+        final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
         final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData();
 
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
@@ -65,6 +68,22 @@ public abstract class AbstractArithmetic
             protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
                 TaggedValuePointable tvp1 = args[0];
                 TaggedValuePointable tvp2 = args[1];
+                if (tvp1.getTag() == ValueTag.SEQUENCE_TAG) {
+                    tvp1.getValue(seqp);
+                    if (seqp.getEntryCount() == 0) {
+                        result.set(tvp1);
+                        return;
+                    }
+                    throw new SystemException(ErrorCode.XPTY0004);
+                }
+                if (tvp2.getTag() == ValueTag.SEQUENCE_TAG) {
+                    tvp2.getValue(seqp);
+                    if (seqp.getEntryCount() == 0) {
+                        result.set(tvp2);
+                        return;
+                    }
+                    throw new SystemException(ErrorCode.XPTY0004);
+                }
                 int tid1 = getBaseTypeForArithmetics(tvp1.getTag());
                 int tid2 = getBaseTypeForArithmetics(tvp2.getTag());
                 if (tid1 == ValueTag.XS_UNTYPED_ATOMIC_TAG) {
@@ -417,6 +436,9 @@ public abstract class AbstractArithmetic
             }
 
             private int getBaseTypeForArithmetics(int tid) throws SystemException {
+                if (tid >= BuiltinTypeConstants.BUILTIN_TYPE_COUNT) {
+                    throw new SystemException(ErrorCode.XPTY0004);
+                }
                 while (true) {
                     switch (tid) {
                         case ValueTag.XS_STRING_TAG:

Added: 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=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/AndScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,41 @@
+package org.apache.vxquery.runtime.functions.bool;
+
+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;
+import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+
+public class AndScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public AndScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+            private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
+
+            @Override
+            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+                for (TaggedValuePointable arg : args) {
+                    arg.getValue(bp);
+                    if (!bp.getBoolean()) {
+                        FnFalseScalarEvaluatorFactory.setFalse(result);
+                        return;
+                    }
+                }
+                FnTrueScalarEvaluatorFactory.setTrue(result);
+            }
+        };
+    }
+}
\ No newline at end of file

Added: 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=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/bool/OrScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,41 @@
+package org.apache.vxquery.runtime.functions.bool;
+
+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;
+import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+
+public class OrScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public OrScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+            private final BooleanPointable bp = (BooleanPointable) BooleanPointable.FACTORY.createPointable();
+
+            @Override
+            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+                for (TaggedValuePointable arg : args) {
+                    arg.getValue(bp);
+                    if (bp.getBoolean()) {
+                        FnTrueScalarEvaluatorFactory.setTrue(result);
+                        return;
+                    }
+                }
+                FnFalseScalarEvaluatorFactory.setFalse(result);
+            }
+        };
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AbstractNodeConstructorScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AbstractNodeConstructorScalarEvaluator.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AbstractNodeConstructorScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AbstractNodeConstructorScalarEvaluator.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,61 @@
+package org.apache.vxquery.runtime.functions.node;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable;
+import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
+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 edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.data.std.api.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public abstract class AbstractNodeConstructorScalarEvaluator extends AbstractTaggedValueArgumentScalarEvaluator {
+    protected final IHyracksTaskContext ctx;
+
+    private final ArrayBackedValueStorage abvs;
+
+    private final DictionaryBuilder db;
+
+    private final ArrayBackedValueStorage contentAbvs;
+
+    public AbstractNodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(args);
+        this.ctx = ctx;
+        abvs = new ArrayBackedValueStorage();
+        db = createsDictionary() ? new DictionaryBuilder() : null;
+        contentAbvs = createsDictionary() ? new ArrayBackedValueStorage() : abvs;
+    }
+
+    @Override
+    protected final void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+        abvs.reset();
+        contentAbvs.reset();
+        try {
+            DataOutput mainOut = abvs.getDataOutput();
+            mainOut.write(ValueTag.NODE_TREE_TAG);
+            byte header = (byte) (createsDictionary() ? NodeTreePointable.HEADER_DICTIONARY_EXISTS_MASK : 0);
+            mainOut.write(header);
+            constructNode(db, args, contentAbvs);
+            if (createsDictionary()) {
+                db.write(abvs);
+                abvs.append(contentAbvs);
+            }
+            result.set(abvs);
+        } catch (IOException e) {
+            throw new SystemException(ErrorCode.SYSE0001, e);
+        }
+    }
+
+    protected abstract void constructNode(DictionaryBuilder db, TaggedValuePointable[] args, IMutableValueStorage mvs)
+            throws IOException, SystemException;
+
+    protected abstract boolean createsDictionary();
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluator.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluator.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,57 @@
+package org.apache.vxquery.runtime.functions.node;
+
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
+import org.apache.vxquery.datamodel.builders.nodes.AttributeNodeBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class AttributeNodeConstructorScalarEvaluator extends AbstractNodeConstructorScalarEvaluator {
+    private final AttributeNodeBuilder anb;
+
+    private final XSQNamePointable namep;
+
+    private final UTF8StringPointable strp;
+
+    public AttributeNodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(ctx, args);
+        anb = new AttributeNodeBuilder();
+        namep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
+        strp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+    }
+
+    @Override
+    protected void constructNode(DictionaryBuilder db, TaggedValuePointable[] args, IMutableValueStorage mvs)
+            throws IOException, SystemException {
+        anb.reset(mvs);
+        TaggedValuePointable nameArg = args[0];
+        if (nameArg.getTag() != ValueTag.XS_QNAME_TAG) {
+            throw new SystemException(ErrorCode.XPST0081);
+        }
+        nameArg.getValue(namep);
+        namep.getUri(strp);
+        int uriCode = db.lookup(strp);
+        namep.getPrefix(strp);
+        int prefixCode = db.lookup(strp);
+        namep.getLocalName(strp);
+        int localCode = db.lookup(strp);
+        anb.setName(uriCode, localCode, prefixCode);
+        TaggedValuePointable valueArg = args[1];
+        anb.setValue(valueArg);
+        anb.finish();
+    }
+
+    @Override
+    protected boolean createsDictionary() {
+        return true;
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluatorFactory.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/AttributeNodeConstructorScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.node;
+
+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 AttributeNodeConstructorScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public AttributeNodeConstructorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new AttributeNodeConstructorScalarEvaluator(ctx, args);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluator.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluator.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,45 @@
+package org.apache.vxquery.runtime.functions.node;
+
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.builders.nodes.CommentNodeBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+
+public class CommentNodeConstructorScalarEvaluator extends AbstractNodeConstructorScalarEvaluator {
+    private final CommentNodeBuilder cnb;
+
+    private final VoidPointable vp;
+
+    public CommentNodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(ctx, args);
+        cnb = new CommentNodeBuilder();
+        vp = (VoidPointable) VoidPointable.FACTORY.createPointable();
+    }
+
+    @Override
+    protected void constructNode(DictionaryBuilder db, TaggedValuePointable[] args, IMutableValueStorage mvs)
+            throws IOException, SystemException {
+        cnb.reset(mvs);
+        TaggedValuePointable arg = args[0];
+        if (arg.getTag() != ValueTag.XS_UNTYPED_ATOMIC_TAG && arg.getTag() != ValueTag.XS_STRING_TAG) {
+            throw new SystemException(ErrorCode.TODO);
+        }
+        arg.getValue(vp);
+        cnb.setValue(vp);
+        cnb.finish();
+    }
+
+    @Override
+    protected boolean createsDictionary() {
+        return false;
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluatorFactory.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/CommentNodeConstructorScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.node;
+
+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 CommentNodeConstructorScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public CommentNodeConstructorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new CommentNodeConstructorScalarEvaluator(ctx, args);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,324 @@
+package org.apache.vxquery.runtime.functions.node;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.vxquery.datamodel.accessors.PointablePool;
+import org.apache.vxquery.datamodel.accessors.PointablePoolFactory;
+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.atomic.XSQNamePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.AttributeNodePointable;
+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.builders.nodes.AttributeNodeBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.ElementNodeBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+
+public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstructorScalarEvaluator {
+    private final ElementNodeBuilder enb;
+
+    private final AttributeNodeBuilder anb;
+
+    private final List<ElementNodeBuilder> freeENBList;
+
+    private final XSQNamePointable namep;
+
+    private final CodedQNamePointable cqp;
+
+    private final UTF8StringPointable strp;
+
+    private final SequencePointable seqp;
+
+    private final PointablePool ppool;
+
+    public ElementNodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(ctx, args);
+        enb = new ElementNodeBuilder();
+        anb = new AttributeNodeBuilder();
+        freeENBList = new ArrayList<ElementNodeBuilder>();
+        namep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
+        cqp = (CodedQNamePointable) CodedQNamePointable.FACTORY.createPointable();
+        strp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+        seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
+        ppool = PointablePoolFactory.INSTANCE.createPointablePool();
+    }
+
+    @Override
+    protected void constructNode(DictionaryBuilder db, TaggedValuePointable[] args, IMutableValueStorage mvs)
+            throws IOException, SystemException {
+        enb.reset(mvs);
+        TaggedValuePointable nameArg = args[0];
+        if (nameArg.getTag() != ValueTag.XS_QNAME_TAG) {
+            throw new SystemException(ErrorCode.XPST0081);
+        }
+        nameArg.getValue(namep);
+        namep.getUri(strp);
+        int uriCode = db.lookup(strp);
+        namep.getPrefix(strp);
+        int prefixCode = db.lookup(strp);
+        namep.getLocalName(strp);
+        int localCode = db.lookup(strp);
+        enb.setName(uriCode, localCode, prefixCode);
+        TaggedValuePointable valueArg = args[1];
+        enb.startAttributeChunk();
+        int index = processAttributes(valueArg, db);
+        enb.endAttributeChunk();
+        enb.startChildrenChunk();
+        if (index >= 0) {
+            processChildren(valueArg, index, db);
+        }
+        enb.endChildrenChunk();
+        enb.finish();
+    }
+
+    private int processAttributes(TaggedValuePointable tvp, DictionaryBuilder db) throws IOException {
+        if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
+            tvp.getValue(seqp);
+            TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class);
+            for (int i = 0; i < seqp.getEntryCount(); ++i) {
+                seqp.getEntry(i, tempTvp);
+                if (!processIfAttribute(tempTvp, db)) {
+                    return i;
+                }
+            }
+            ppool.giveBack(tempTvp);
+        } else {
+            if (!processIfAttribute(tvp, db)) {
+                return 0;
+            }
+        }
+        return -1;
+    }
+
+    private boolean processIfAttribute(TaggedValuePointable tvp, DictionaryBuilder db) throws IOException {
+        if (tvp.getTag() != ValueTag.NODE_TREE_TAG) {
+            return false;
+        }
+        NodeTreePointable ntp = ppool.takeOne(NodeTreePointable.class);
+        try {
+            tvp.getValue(ntp);
+            TaggedValuePointable innerTvp = ppool.takeOne(TaggedValuePointable.class);
+            try {
+                ntp.getRootNode(innerTvp);
+                if (innerTvp.getTag() != ValueTag.ATTRIBUTE_NODE_TAG) {
+                    return false;
+                }
+                AttributeNodePointable anp = ppool.takeOne(AttributeNodePointable.class);
+                try {
+                    innerTvp.getValue(anp);
+                    copyAttribute(enb, db, ntp, anp);
+                } finally {
+                    ppool.giveBack(anp);
+                }
+                return true;
+            } finally {
+                ppool.giveBack(innerTvp);
+            }
+        } finally {
+            ppool.giveBack(ntp);
+        }
+    }
+
+    private void copyAttribute(ElementNodeBuilder enb, DictionaryBuilder db, NodeTreePointable ntp,
+            AttributeNodePointable anp) throws IOException {
+        UTF8StringPointable strp = ppool.takeOne(UTF8StringPointable.class);
+        VoidPointable vp = ppool.takeOne(VoidPointable.class);
+        try {
+            enb.startAttribute(anb);
+            anp.getName(cqp);
+            int newURICode = recode(cqp.getNamespaceCode(), ntp, db, strp);
+            int newPrefixCode = recode(cqp.getPrefixCode(), ntp, db, strp);
+            int newLocalCode = recode(cqp.getLocalCode(), ntp, db, strp);
+            anb.setName(newURICode, newLocalCode, newPrefixCode);
+            anp.getValue(ntp, vp);
+            anb.setValue(vp);
+            enb.endAttribute(anb);
+        } finally {
+            ppool.giveBack(vp);
+            ppool.giveBack(strp);
+        }
+    }
+
+    private void copyElement(ElementNodeBuilder enb, DictionaryBuilder db, NodeTreePointable ntp,
+            ElementNodePointable enp) throws IOException {
+        UTF8StringPointable strp = ppool.takeOne(UTF8StringPointable.class);
+        SequencePointable seqp = ppool.takeOne(SequencePointable.class);
+        AttributeNodePointable anp = ppool.takeOne(AttributeNodePointable.class);
+        TaggedValuePointable tvp = ppool.takeOne(TaggedValuePointable.class);
+        ElementNodePointable cenp = ppool.takeOne(ElementNodePointable.class);
+        try {
+            ElementNodeBuilder tempEnb = createENB();
+            enb.startChild(tempEnb);
+            enp.getName(cqp);
+            int newURICode = recode(cqp.getNamespaceCode(), ntp, db, strp);
+            int newPrefixCode = recode(cqp.getPrefixCode(), ntp, db, strp);
+            int newLocalCode = recode(cqp.getLocalCode(), ntp, db, strp);
+            tempEnb.setName(newURICode, newLocalCode, newPrefixCode);
+            tempEnb.startAttributeChunk();
+            if (enp.attributesChunkExists()) {
+                enp.getAttributeSequence(ntp, seqp);
+                for (int i = 0; i < seqp.getEntryCount(); ++i) {
+                    seqp.getEntry(i, tvp);
+                    tvp.getValue(anp);
+                    copyAttribute(tempEnb, db, ntp, anp);
+                }
+            }
+            tempEnb.endAttributeChunk();
+            tempEnb.startChildrenChunk();
+            if (enp.childrenChunkExists()) {
+                enp.getChildrenSequence(ntp, seqp);
+                for (int i = 0; i < seqp.getEntryCount(); ++i) {
+                    seqp.getEntry(i, tvp);
+                    byte nTag = tvp.getTag();
+                    switch (nTag) {
+                        case ValueTag.ELEMENT_NODE_TAG: {
+                            tvp.getValue(cenp);
+                            copyElement(tempEnb, db, ntp, cenp);
+                            break;
+                        }
+                        case ValueTag.COMMENT_NODE_TAG:
+                        case ValueTag.PI_NODE_TAG:
+                        case ValueTag.TEXT_NODE_TAG: {
+                            tempEnb.addChild(tvp);
+                            break;
+                        }
+                    }
+                }
+            }
+            tempEnb.endChildrenChunk();
+            enb.endChild(tempEnb);
+            freeENB(tempEnb);
+        } finally {
+            ppool.giveBack(cenp);
+            ppool.giveBack(tvp);
+            ppool.giveBack(anp);
+            ppool.giveBack(seqp);
+            ppool.giveBack(strp);
+        }
+    }
+
+    private void copyDocument(ElementNodeBuilder enb, DictionaryBuilder db, NodeTreePointable ntp,
+            DocumentNodePointable dnp) throws IOException {
+        SequencePointable seqp = ppool.takeOne(SequencePointable.class);
+        AttributeNodePointable anp = ppool.takeOne(AttributeNodePointable.class);
+        TaggedValuePointable tvp = ppool.takeOne(TaggedValuePointable.class);
+        ElementNodePointable cenp = ppool.takeOne(ElementNodePointable.class);
+        try {
+            dnp.getContent(ntp, seqp);
+            for (int i = 0; i < seqp.getEntryCount(); ++i) {
+                seqp.getEntry(i, tvp);
+                if (tvp.getTag() == ValueTag.ELEMENT_NODE_TAG) {
+                    tvp.getValue(cenp);
+                    copyElement(enb, db, ntp, cenp);
+                    break;
+                }
+            }
+        } finally {
+            ppool.giveBack(cenp);
+            ppool.giveBack(tvp);
+            ppool.giveBack(anp);
+            ppool.giveBack(seqp);
+        }
+
+    }
+
+    private int recode(int oldCode, NodeTreePointable ntp, DictionaryBuilder db, UTF8StringPointable tempStrp) {
+        ntp.getString(oldCode, tempStrp);
+        return db.lookup(tempStrp);
+    }
+
+    private void processChildren(TaggedValuePointable tvp, int start, DictionaryBuilder db) throws IOException,
+            SystemException {
+        if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
+            tvp.getValue(seqp);
+            TaggedValuePointable tempTvp = ppool.takeOne(TaggedValuePointable.class);
+            for (int i = start; i < seqp.getEntryCount(); ++i) {
+                seqp.getEntry(i, tempTvp);
+                processChild(tempTvp, db);
+            }
+            ppool.giveBack(tempTvp);
+        } else {
+            processChild(tvp, db);
+        }
+    }
+
+    private void processChild(TaggedValuePointable tvp, DictionaryBuilder db) throws IOException, SystemException {
+        if (tvp.getTag() != ValueTag.NODE_TREE_TAG) {
+            enb.addChild(tvp);
+        } else {
+            NodeTreePointable ntp = ppool.takeOne(NodeTreePointable.class);
+            try {
+                tvp.getValue(ntp);
+                TaggedValuePointable innerTvp = ppool.takeOne(TaggedValuePointable.class);
+                try {
+                    ntp.getRootNode(innerTvp);
+                    byte nTag = innerTvp.getTag();
+                    switch (nTag) {
+                        case ValueTag.ATTRIBUTE_NODE_TAG: {
+                            throw new SystemException(ErrorCode.XQTY0024);
+                        }
+                        case ValueTag.ELEMENT_NODE_TAG: {
+                            ElementNodePointable enp = ppool.takeOne(ElementNodePointable.class);
+                            try {
+                                innerTvp.getValue(enp);
+                                copyElement(enb, db, ntp, enp);
+                            } finally {
+                                ppool.giveBack(enp);
+                            }
+                            break;
+                        }
+                        case ValueTag.COMMENT_NODE_TAG:
+                        case ValueTag.PI_NODE_TAG:
+                        case ValueTag.TEXT_NODE_TAG: {
+                            enb.addChild(innerTvp);
+                            break;
+                        }
+                        case ValueTag.DOCUMENT_NODE_TAG: {
+                            DocumentNodePointable dnp = ppool.takeOne(DocumentNodePointable.class);
+                            try {
+                                innerTvp.getValue(dnp);
+                                copyDocument(enb, db, ntp, dnp);
+                            } finally {
+                                ppool.giveBack(dnp);
+                            }
+                            break;
+                        }
+                    }
+                } finally {
+                    ppool.giveBack(innerTvp);
+                }
+            } finally {
+                ppool.giveBack(ntp);
+            }
+        }
+    }
+
+    private ElementNodeBuilder createENB() {
+        if (freeENBList.isEmpty()) {
+            return new ElementNodeBuilder();
+        }
+        return freeENBList.remove(freeENBList.size() - 1);
+    }
+
+    private void freeENB(ElementNodeBuilder enb) {
+        freeENBList.add(enb);
+    }
+
+    @Override
+    protected boolean createsDictionary() {
+        return true;
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluatorFactory.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.node;
+
+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 ElementNodeConstructorScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public ElementNodeConstructorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new ElementNodeConstructorScalarEvaluator(ctx, args);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluator.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluator.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,43 @@
+package org.apache.vxquery.runtime.functions.node;
+
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.PINodeBuilder;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+
+public class PINodeConstructorScalarEvaluator extends AbstractNodeConstructorScalarEvaluator {
+    private final PINodeBuilder pinb;
+
+    private final VoidPointable vp;
+
+    public PINodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(ctx, args);
+        pinb = new PINodeBuilder();
+        vp = (VoidPointable) VoidPointable.FACTORY.createPointable();
+    }
+
+    @Override
+    protected void constructNode(DictionaryBuilder db, TaggedValuePointable[] args, IMutableValueStorage mvs)
+            throws IOException, SystemException {
+        pinb.reset(mvs);
+        TaggedValuePointable targetArg = args[0];
+        targetArg.getValue(vp);
+        pinb.setTarget(vp);
+        TaggedValuePointable contentArg = args[1];
+        contentArg.getValue(vp);
+        pinb.setContent(vp);
+        pinb.finish();
+    }
+
+    @Override
+    protected boolean createsDictionary() {
+        return false;
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluatorFactory.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/PINodeConstructorScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.node;
+
+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 PINodeConstructorScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public PINodeConstructorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new PINodeConstructorScalarEvaluator(ctx, args);
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluator.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluator.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluator.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluator.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,45 @@
+package org.apache.vxquery.runtime.functions.node;
+
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.TextNodeBuilder;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.IMutableValueStorage;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+
+public class TextNodeConstructorScalarEvaluator extends AbstractNodeConstructorScalarEvaluator {
+    private final TextNodeBuilder tnb;
+
+    private final VoidPointable vp;
+
+    public TextNodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
+        super(ctx, args);
+        tnb = new TextNodeBuilder();
+        vp = (VoidPointable) VoidPointable.FACTORY.createPointable();
+    }
+
+    @Override
+    protected void constructNode(DictionaryBuilder db, TaggedValuePointable[] args, IMutableValueStorage mvs)
+            throws IOException, SystemException {
+        tnb.reset(mvs);
+        TaggedValuePointable arg = args[0];
+        if (arg.getTag() != ValueTag.XS_UNTYPED_ATOMIC_TAG && arg.getTag() != ValueTag.XS_STRING_TAG) {
+            throw new SystemException(ErrorCode.TODO);
+        }
+        arg.getValue(vp);
+        tnb.setValue(vp);
+        tnb.finish();
+    }
+
+    @Override
+    protected boolean createsDictionary() {
+        return false;
+    }
+}
\ No newline at end of file

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluatorFactory.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/TextNodeConstructorScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,22 @@
+package org.apache.vxquery.runtime.functions.node;
+
+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 TextNodeConstructorScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public TextNodeConstructorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new TextNodeConstructorScalarEvaluator(ctx, args);
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/ConcatenateScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/ConcatenateScalarEvaluatorFactory.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/ConcatenateScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/ConcatenateScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -1,16 +1,15 @@
 package org.apache.vxquery.runtime.functions.sequence;
 
-import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.vxquery.datamodel.accessors.SequencePointable;
 import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+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.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
-import org.apache.vxquery.util.GrowableIntArray;
 
 import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
 import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
@@ -31,62 +30,32 @@ public class ConcatenateScalarEvaluatorF
     protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
             throws AlgebricksException {
         final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-        final GrowableIntArray slots = new GrowableIntArray();
-        final ArrayBackedValueStorage dataArea = new ArrayBackedValueStorage();
+        final SequenceBuilder sb = new SequenceBuilder();
         final SequencePointable seq = new SequencePointable();
         final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable();
         return new AbstractTaggedValueArgumentScalarEvaluator(args) {
             @Override
             protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
-                abvs.reset();
-                slots.clear();
-                dataArea.reset();
-                for (int i = 0; i < args.length; ++i) {
-                    TaggedValuePointable tvp = args[i];
-                    if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
-                        tvp.getValue(seq);
-                        int seqLen = seq.getEntryCount();
-                        for (int j = 0; j < seqLen; ++j) {
-                            seq.getEntry(j, p);
-                            addItem(p);
-                        }
-                    } else {
-                        addItem(tvp);
-                    }
-                }
-                if (slots.getSize() != 1) {
-                    assembleResult(abvs, slots, dataArea);
-                    result.set(abvs);
-                } else {
-                    result.set(dataArea);
-                }
-            }
-
-            private void assembleResult(ArrayBackedValueStorage abvs, GrowableIntArray slots,
-                    ArrayBackedValueStorage dataArea) throws SystemException {
                 try {
-                    DataOutput out = abvs.getDataOutput();
-                    out.write(ValueTag.SEQUENCE_TAG);
-                    int size = slots.getSize();
-                    out.writeInt(size);
-                    if (size > 0) {
-                        int[] slotArray = slots.getArray();
-                        for (int i = 0; i < size; ++i) {
-                            out.writeInt(slotArray[i]);
+                    abvs.reset();
+                    sb.reset(abvs);
+                    for (int i = 0; i < args.length; ++i) {
+                        TaggedValuePointable tvp = args[i];
+                        if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
+                            tvp.getValue(seq);
+                            int seqLen = seq.getEntryCount();
+                            for (int j = 0; j < seqLen; ++j) {
+                                seq.getEntry(j, p);
+                                sb.addItem(p);
+                            }
+                        } else {
+                            sb.addItem(tvp);
                         }
-                        out.write(dataArea.getByteArray(), dataArea.getStartOffset(), dataArea.getLength());
                     }
+                    sb.finish();
+                    result.set(abvs);
                 } catch (IOException e) {
-                    throw new SystemException(ErrorCode.SYSE0001, e);
-                }
-            }
-
-            private void addItem(final IPointable p) throws SystemException {
-                try {
-                    dataArea.getDataOutput().write(p.getByteArray(), p.getStartOffset(), p.getLength());
-                    slots.append(dataArea.getLength());
-                } catch (IOException e) {
-                    throw new SystemException(ErrorCode.SYSE0001, e);
+                    throw new SystemException(ErrorCode.SYSE0001);
                 }
             }
         };

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnReverseScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnReverseScalarEvaluatorFactory.java?rev=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnReverseScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/sequence/FnReverseScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,61 @@
+package org.apache.vxquery.runtime.functions.sequence;
+
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+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.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;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public class FnReverseScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public FnReverseScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+        final SequenceBuilder sb = new SequenceBuilder();
+        final SequencePointable seq = new SequencePointable();
+        final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable();
+        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+            @Override
+            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+                try {
+                    TaggedValuePointable tvp = args[0];
+                    if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
+                        abvs.reset();
+                        sb.reset(abvs);
+                        tvp.getValue(seq);
+                        int seqLen = seq.getEntryCount();
+                        for (int j = 0; j < seqLen; ++j) {
+                            seq.getEntry(seqLen - j - 1, p);
+                            sb.addItem(p);
+                        }
+                        sb.finish();
+                        result.set(abvs);
+                    } else {
+                        result.set(tvp);
+                    }
+                } catch (IOException e) {
+                    throw new SystemException(ErrorCode.SYSE0001);
+                }
+            }
+        };
+    }
+}
\ No newline at end of file

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/AbstractTypeScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/AbstractTypeScalarEvaluatorFactory.java?rev=1370750&r1=1370749&r2=1370750&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/AbstractTypeScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/AbstractTypeScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -26,7 +26,7 @@ public abstract class AbstractTypeScalar
 
         private final IntegerPointable ip;
 
-        boolean first;
+        private boolean first;
 
         protected AbstractTypeScalarEvaluator(IScalarEvaluator[] args, IHyracksTaskContext ctx) {
             super(args);

Added: 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=1370750&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java Wed Aug  8 12:58:42 2012
@@ -0,0 +1,44 @@
+package org.apache.vxquery.runtime.functions.type;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+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;
+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 InstanceOfScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public InstanceOfScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        return new AbstractTypeScalarEvaluator(args, ctx) {
+            private final SequenceTypeMatcher matcher = new SequenceTypeMatcher();
+
+            @Override
+            protected void evaluate(TaggedValuePointable tvp, IPointable result) throws SystemException {
+                boolean success = matcher.sequenceTypeMatch(tvp);
+                if (success) {
+                    FnTrueScalarEvaluatorFactory.setTrue(result);
+                } else {
+                    FnFalseScalarEvaluatorFactory.setFalse(result);
+                }
+            }
+
+            @Override
+            protected void setSequenceType(SequenceType sType) {
+                matcher.setSequenceType(sType);
+            }
+        };
+    }
+}
\ No newline at end of file