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