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