You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2015/07/16 21:28:11 UTC
vxquery git commit: Merge for Shivani's element constructur fix.
Repository: vxquery
Updated Branches:
refs/heads/master 94dcab204 -> 3a2ff97d8
Merge for Shivani's element constructur fix.
Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/3a2ff97d
Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/3a2ff97d
Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/3a2ff97d
Branch: refs/heads/master
Commit: 3a2ff97d892be9c07fe91720280b047e107555b1
Parents: 94dcab2
Author: Preston Carman <pr...@apache.org>
Authored: Thu Jul 16 12:25:22 2015 -0700
Committer: Preston Carman <pr...@apache.org>
Committed: Thu Jul 16 12:25:22 2015 -0700
----------------------------------------------------------------------
.../ElementNodeConstructorScalarEvaluator.java | 115 ++++++++++++++++++-
1 file changed, 109 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/vxquery/blob/3a2ff97d/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java
index bf9b484..9f9120a 100644
--- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java
+++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/node/ElementNodeConstructorScalarEvaluator.java
@@ -28,9 +28,14 @@ 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.accessors.nodes.PINodePointable;
+import org.apache.vxquery.datamodel.accessors.nodes.TextOrCommentNodePointable;
import org.apache.vxquery.datamodel.builders.nodes.AttributeNodeBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.CommentNodeBuilder;
import org.apache.vxquery.datamodel.builders.nodes.DictionaryBuilder;
import org.apache.vxquery.datamodel.builders.nodes.ElementNodeBuilder;
+import org.apache.vxquery.datamodel.builders.nodes.PINodeBuilder;
+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;
@@ -40,12 +45,20 @@ 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;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstructorScalarEvaluator {
- private final ElementNodeBuilder enb;
private final AttributeNodeBuilder anb;
+ private final CommentNodeBuilder cnb;
+
+ private final ElementNodeBuilder enb;
+
+ private final PINodeBuilder pnb;
+
+ private final TextNodeBuilder tnb;
+
private final List<ElementNodeBuilder> freeENBList;
private final XSQNamePointable namep;
@@ -56,10 +69,16 @@ public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstruct
private final SequencePointable seqp;
+ private final IMutableValueStorage abvs;
+
public ElementNodeConstructorScalarEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) {
super(ctx, args);
- enb = new ElementNodeBuilder();
anb = new AttributeNodeBuilder();
+ cnb = new CommentNodeBuilder();
+ enb = new ElementNodeBuilder();
+ pnb = new PINodeBuilder();
+ tnb = new TextNodeBuilder();
+ abvs = new ArrayBackedValueStorage();
freeENBList = new ArrayList<ElementNodeBuilder>();
namep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
cqp = (CodedQNamePointable) CodedQNamePointable.FACTORY.createPointable();
@@ -170,6 +189,7 @@ public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstruct
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);
@@ -201,17 +221,32 @@ public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstruct
break;
}
case ValueTag.COMMENT_NODE_TAG:
+ abvs.reset();
+ copyComment(tvp, ntp, abvs);
+ tempEnb.addChild(abvs);
+ break;
case ValueTag.PI_NODE_TAG:
- case ValueTag.TEXT_NODE_TAG: {
- tempEnb.addChild(tvp);
+ abvs.reset();
+ copyPI(tvp, ntp, abvs);
+ tempEnb.addChild(abvs);
+ break;
+ case ValueTag.TEXT_NODE_TAG:
+ abvs.reset();
+ copyText(tvp, ntp, abvs);
+ tempEnb.addChild(abvs);
+ break;
+ default:
+ abvs.reset();
+ convertToText(tvp, abvs);
+ tempEnb.addChild(abvs);
break;
- }
}
}
}
tempEnb.endChildrenChunk();
enb.endChild(tempEnb);
freeENB(tempEnb);
+
} finally {
ppool.giveBack(cenp);
ppool.giveBack(tvp);
@@ -267,6 +302,7 @@ public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstruct
}
private void processChild(TaggedValuePointable tvp, DictionaryBuilder db) throws IOException, SystemException {
+
if (tvp.getTag() != ValueTag.NODE_TREE_TAG) {
enb.addChild(tvp);
} else {
@@ -292,9 +328,19 @@ public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstruct
break;
}
case ValueTag.COMMENT_NODE_TAG:
+ abvs.reset();
+ copyComment(innerTvp, ntp, abvs);
+ enb.addChild(abvs);
+ break;
case ValueTag.PI_NODE_TAG:
+ abvs.reset();
+ copyPI(innerTvp, ntp, abvs);
+ enb.addChild(abvs);
+ break;
case ValueTag.TEXT_NODE_TAG: {
- enb.addChild(innerTvp);
+ abvs.reset();
+ copyText(innerTvp, ntp, abvs);
+ enb.addChild(abvs);
break;
}
case ValueTag.DOCUMENT_NODE_TAG: {
@@ -332,4 +378,61 @@ public class ElementNodeConstructorScalarEvaluator extends AbstractNodeConstruct
protected boolean createsDictionary() {
return true;
}
+
+ private void copyComment(TaggedValuePointable tvp, NodeTreePointable ntp, IMutableValueStorage mvs)
+ throws IOException {
+ VoidPointable vp = ppool.takeOne(VoidPointable.class);
+ TextOrCommentNodePointable tcnp = ppool.takeOne(TextOrCommentNodePointable.class);
+
+ tvp.getValue(tcnp);
+ tcnp.getValue(ntp, vp);
+
+ cnb.reset(mvs);
+ cnb.setValue(vp);
+
+ ppool.giveBack(vp);
+ ppool.giveBack(tcnp);
+ }
+
+ private void copyPI(TaggedValuePointable tvp, NodeTreePointable ntp, IMutableValueStorage mvs) throws IOException {
+ VoidPointable vp1 = ppool.takeOne(VoidPointable.class);
+ VoidPointable vp2 = ppool.takeOne(VoidPointable.class);
+ PINodePointable pnp = ppool.takeOne(PINodePointable.class);
+
+ tvp.getValue(pnp);
+ pnp.getContent(ntp, vp1);
+ pnp.getTarget(ntp, vp2);
+
+ pnb.reset(mvs);
+ pnb.setContent(vp2);
+ pnb.setTarget(vp1);
+
+ ppool.giveBack(pnp);
+ ppool.giveBack(vp1);
+ ppool.giveBack(vp2);
+ }
+
+ private void copyText(TaggedValuePointable tvp, NodeTreePointable ntp, IMutableValueStorage mvs) throws IOException {
+ VoidPointable vp = ppool.takeOne(VoidPointable.class);
+ TextOrCommentNodePointable tcnp = ppool.takeOne(TextOrCommentNodePointable.class);
+ tvp.getValue(tcnp);
+ tcnp.getValue(ntp, vp);
+
+ tnb.reset(mvs);
+ tnb.setValue(vp);
+
+ ppool.giveBack(vp);
+ ppool.giveBack(tcnp);
+
+ }
+
+ private void convertToText(TaggedValuePointable tvp, IMutableValueStorage mvs) throws IOException {
+ VoidPointable vp = ppool.takeOne(VoidPointable.class);
+ TextNodeBuilder tnb = new TextNodeBuilder();
+ tvp.getValue(vp);
+ tnb.reset(mvs);
+ tnb.setValue(vp);
+
+ ppool.giveBack(vp);
+ }
}
\ No newline at end of file