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/06/18 22:15:19 UTC

[12/18] vxquery git commit: n

n


Project: http://git-wip-us.apache.org/repos/asf/vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/vxquery/commit/a041a329
Tree: http://git-wip-us.apache.org/repos/asf/vxquery/tree/a041a329
Diff: http://git-wip-us.apache.org/repos/asf/vxquery/diff/a041a329

Branch: refs/heads/master
Commit: a041a329d54a560a64d65d0e4d3442a8be04c72c
Parents: b6f8d45
Author: Shivani Mall <sm...@ucr.edu>
Authored: Wed Jun 3 14:14:45 2015 -0700
Committer: Eldon Carman <ec...@ucr.edu>
Committed: Thu Jun 18 13:14:52 2015 -0700

----------------------------------------------------------------------
 src/site/apt/development_xml_document.apt       | 519 +++++++++++++++++++
 .../java/org/apache/vxquery/cli/VXQuery.java    |  79 +--
 .../query/VXQueryCompilationListener.java       | 107 ++++
 .../org/apache/vxquery/xtest/TestRunner.java    |  38 +-
 .../org/apache/vxquery/xtest/XTestOptions.java  |  21 +
 .../cat/GhcndRecordsPartition2Queries.xml       |   6 +
 .../cat/GhcndRecordsPartition4Queries.xml       |   6 +
 7 files changed, 700 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/src/site/apt/development_xml_document.apt
----------------------------------------------------------------------
diff --git a/src/site/apt/development_xml_document.apt b/src/site/apt/development_xml_document.apt
new file mode 100644
index 0000000..035518e
--- /dev/null
+++ b/src/site/apt/development_xml_document.apt
@@ -0,0 +1,519 @@
+~~ Licensed to the Apache Software Foundation (ASF) under one or more
+~~ contributor license agreements.  See the NOTICE file distributed with
+~~ this work for additional information regarding copyright ownership.
+~~ The ASF licenses this file to You under the Apache License, Version 2.0
+~~ (the "License"); you may not use this file except in compliance with
+~~ the License.  You may obtain a copy of the License at
+~~
+~~     http://www.apache.org/licenses/LICENSE-2.0
+~~
+~~ Unless required by applicable law or agreed to in writing, software
+~~ distributed under the License is distributed on an "AS IS" BASIS,
+~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+~~ See the License for the specific language governing permissions and
+~~ limitations under the License.
+
+VXQuery's XML Document Model 
+
+
+*Byte Array Break Down
+
+  Every XML document in VXQuery is stored in memory as one continuous array of bytes.
+  Pointables are used to refer to these bytes in the memory.
+  This document attempts to cover all the different types of elements of an XML document 
+  and their representation in VXQuery. As a result, we use a lots of pointables (same and different) 
+  through out the document. To simplify explanations, each pointable is explicitly assigned a NodeID only on this web page. 
+  Refer to the following link for details on the various pointables used: 
+  {{{http://vxquery.apache.org/development_xml_node_details.html} XML Node Details }}.
+
+**XML Document
+
+---
+<?xml version="1.0"?>
+<catalog xmlns:ex="http://example.org/" >
+  <ex:book isbn="0812416139">
+    <!--top secret-->
+    <title>Macbeth</title>
+    <?hide?>
+  </ex:book>
+</catalog>
+---
+
+**{Bytes}
+
+***  <<<107, 3, 0, 0, 0, 0, 0, 0, 0, -109, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 19, 0, 0, 0, 44, 0, 0, 0, 54, 0, 0, 0, 62, 0, 0, 0, 72, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 99, 97, 116, 97, 108, 111, 103, 0, 0, 0, 1, 0, 19, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 111, 114, 103, 47, 0, 0, 0, 2, 0, 4, 98, 111, 111, 107, 0, 0, 0, 3, 0, 2, 101, 120, 0, 0, 0, 4, 0, 4, 105, 115, 98, 110, 0, 0, 0, 5, 0, 5, 116, 105, 116, 108, 101, 0, 0, 0, 6, 101, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, -42, 0, 0, 0, -34, 104, 0, 0, 0, 2, 0, 3, 10, 32, 32, 102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 
 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+
+
+=========================================================================
+
+
+** {Node Tree Pointable} (NTP)
+
+  Refer to this link to view the {{Bytes}} for the NTP.
+
+  XML Documents in VXQuery are wrapped in Node Tree Pointables. As a side note, every 
+  result produced as an output of a function is also wrapped in a NTP.
+  
+  <<< 107 >>>  Value tag for Node Tree Pointable
+
+  <<< 3 >>>  Header byte (One byte) that uses the lowest three bit to denote if
+
+          ** bit <Node Id> exists: <Yes>
+          
+          ** bit <Dictionary> exists: <Yes>
+          
+          ** bit <Header Type> exists: <No>
+          
+  <<< 0, 0, 0, 0 >>>  These 4 bytes represent the <Node Id> which has value <<0>>
+
+  Following are the byte contents of the {{Dictionary}}. The byte array break 
+  down is explained in details further ahead.
+ 
+*** <<<0, 0, 0, -109, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 19, 0, 0, 0, 44, 0, 0, 0, 54, 0, 0, 0, 62, 0, 0, 0, 72, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 99, 97, 116, 97, 108, 111, 103, 0, 0, 0, 1, 0, 19, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 111, 114, 103, 47, 0, 0, 0, 2, 0, 4, 98, 111, 111, 107, 0, 0, 0, 3, 0, 2, 101, 120, 0, 0, 0, 4, 0, 4, 105, 115, 98, 110, 0, 0, 0, 5, 0, 5, 116, 105, 116, 108, 101, 0, 0, 0, 6>>>
+ 
+  Element Node in NTP(root node):
+  
+  In this NTP, the Element Node or the root node is a Document Node Pointable (DNP) ({{NodeID:0}}). Note that this root node can represent any pointable type. 
+  For example: ElementNodePointable, Attribute Node Pointable or Text Node Pointable.
+ 
+  <<<101>>> This is the <Value Tag> for Document Node Pointable.
+ 
+  Following are the byte contents for the Document Node Pointable ({{NodeID:0}}). 
+  The byte array break down is explained further ahead.
+ 
+*** <<<101, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, -42, 0, 0, 0, -34, 104, 0, 0, 0, 2, 0, 3, 10, 32, 32, 102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+
+=========================================================================
+
+**  {Dictionary}
+
+  Byte Array for the Dictionary
+  
+***  <<<0, 0, 0, -109, 0, 0, 0, 7, 0, 0, 0, 6, 0, 0, 0, 19, 0, 0, 0, 44, 0, 0, 0, 54, 0, 0, 0, 62, 0, 0, 0, 72, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 99, 97, 116, 97, 108, 111, 103, 0, 0, 0, 1, 0, 19, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 111, 114, 103, 47, 0, 0, 0, 2, 0, 4, 98, 111, 111, 107, 0, 0, 0, 3, 0, 2, 101, 120, 0, 0, 0, 4, 0, 4, 105, 115, 98, 110, 0, 0, 0, 5, 0, 5, 116, 105, 116, 108, 101, 0, 0, 0, 6>>>
+ 
+***  <<< 0, 0, 0, -109 >>> 
+  
+  These 4 bytes represent the <Size of Dictionary> in signed integer format. 
+  After conversion to unsigned integer format the value is <<147>>.
+  
+*** <<<0, 0, 0, 7>>> 
+
+  These 4 bytes represent the <Number of items> in the dictionary: <<7>>
+
+*** <<<0, 0, 0, 6, 0, 0, 0, 19, 0, 0, 0, 44, 0, 0, 0, 54, 0, 0, 0, 62, 0, 0, 0, 72, 0, 0, 0, 83>>> 
+    
+  This is a list of <Offsets> for each item in the dictionary. There are 7 offsets. 
+  Each offset is 4 bytes long. Following are the 7 offsets: <<6, 19, 44, 54, 62, 72, 83>>
+
+*** <<<0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 5, 0, 0, 0, 6>>>
+  
+  This is a sorted list of keys in alphabetical order. Each key is 4 byte long. 
+  Each key is mapped to a string in the dictionary. The keys are the numbers <<1>> through <<6>>.
+   
+  Following are the data values in the dictionary.Each data value is a 
+  StringPointable. Each StringPointable maps to XML document strings.  
+
+***  <<<0, 0, 0, 0, 0, 0>>> 
+
+  The <Size> of the string is <<0>>. The <String Value> is <<null>>. 
+  The StringPointable is followed by the key which is <<0>>.
+  
+***  <<<0, 7, 99, 97, 116, 97, 108, 111, 103, 0, 0, 0, 1>>>
+  
+  The <Size> of the string is <<7>>. The <String Value> is <<catalog>>. 
+  The StringPointable is followed by the key which is <<1>>.
+ 
+***  <<<0, 19, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97, 109, 112, 108, 101, 46, 111, 114, 103, 47, 0, 0, 0, 2>>> 
+ 
+  The <Size> of the string is <<19>>. The <String Value> is <<http://example.org/>>. The StringPointable is followed by the key which is <<2>>.
+ 
+***  <<<0, 4, 98, 111, 111, 107, 0, 0, 0, 3>>>
+ 
+  The <Size> of the string is <<4>>. The <String Value> is <<book>>. The StringPointable is followed by the key which is <<3>>. 
+ 
+*** <<<0, 2, 101, 120, 0, 0, 0, 4>>>
+ 
+  The <Size> of the string is <<2>>. The <String Value> is <<ex>>. The StringPointable is followed by the key which is <<4>>.
+ 
+*** <<<0, 4, 105, 115, 98, 110, 0, 0, 0, 5>>>
+ 
+  The <Size> of the string is <<4>>. The <String Value> is <<isbn>>. The StringPointable is followed by the key which is <<5>>.
+ 
+*** <<<0, 5, 116, 105, 116, 108, 101, 0, 0, 0, 6>>>
+
+  The <Size> of the string is <<4>>. The <String Value> is <<title>>. The StringPointable is followed by the key which is <<6>>.
+
+
+================================================================ 
+
+
+** Document Node Pointable ({NodeID:0})
+  
+  This child is contained in the parent {{Node Tree Pointable}}.
+  
+  Byte Array for DNP NodeID:0
+  
+***  <<<101, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, -42, 0, 0, 0, -34, 104, 0, 0, 0, 2, 0, 3, 10, 32, 32, 102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+  
+    
+  <<< 101 >>>  Value tag for Document Node Pointable
+  
+  <<< 0, 0, 0, 0 >>>  These 4 bytes represent the <Node Id> which has value <<0>>
+ 
+  Every Document Node Pointable contains a Sequence Pointable. This is analogous 
+  to a collection of items(data). In VXQuery, the items(data) 
+  in the Sequence Pointable are preceded by the number of items in the sequence 
+  and item size.
+ 
+ Sequence Content:
+ 
+  <<<0, 0, 0, 1>>>  These 4 bytes represents the <Number of Items> in the sequence which is <<1>> 
+ 
+  <<<0, 0, 1, 0>>>  These 4 bytes represents the <Size of the item> which is <<257>>
+ 
+  <Data in the Sequence>: Here the (item)data in the sequence is an 
+  Element Node Pointable ({{NodeID:1}}). Note that the data can represent any type of pointable or element.
+  
+*** <<<102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, -42, 0, 0, 0, -34, 104, 0, 0, 0, 2, 0, 3, 10, 32, 32, 102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+ 
+ 
+================================================================ 
+
+
+**  Element Node Pointable ({NodeID:1})
+
+  This child is contained in the parent Document Node Pointable ({{NodeID:0}}).
+  
+  Byte Array for ENP NodeID:1
+  
+***  <<<102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 10, 0, 0, 0, -42, 0, 0, 0, -34, 104, 0, 0, 0, 2, 0, 3, 10, 32, 32, 102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+ 
+  <<< 102 >>>  Value tag for Element Node Pointable
+  
+  <<< 4 >>>  Header byte (One byte) that uses the lowest three bits to denote if
+
+          ** bit <Namespace Chunk> exists: <No>
+          
+          ** bit <Attribute Chunk> exists: <No>
+          
+          ** bit <Children Chunk> exists: <Yes>
+          
+   <<<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1>>> This is a <Name Pointer> which is an array of integers(4 bytes) of size <<3>> 
+ 
+  <<<0, 0, 0, 1>>> This is the <Local Node Id> which uses 4 bytes.
+ 
+  Children Chunk is a Sequence Pointable. This is analogous to a collection of items(data). In VXQuery, the items(data) 
+  in the Sequence Pointable are preceded by the number of items in the sequence and item size. 
+
+  Sequence Content childrenChunk:
+
+  <<<0, 0, 0, 3>>>  <Number of Items> in the SequencePointable <children chunk> is <<3>>
+ 
+  <<<0, 0, 0, 10>>>  <Offset> of the first item is <<10>>
+ 
+  <<<0, 0, 0, -42>>>  <Offset> of the second item is <<214>>
+   
+  <<<0, 0, 0, -34>>>  <Offset> of the third item is <<222>>
+  
+  <Data in the Sequence>: Here the items(data) in the sequence are Text Node Pointables ({{NodeID:2}}), 
+  ({{NodeID:13}}) and Element Node Pointable ({{NodeID:3}}). 
+  Note that the data can represent any type of pointable or element.
+  
+***  <<<104, 0, 0, 0, 2, 0, 3, 10, 32, 32, 102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+
+
+================================================================
+
+
+** Text Node Pointable ({NodeID:2}) 
+  
+   This child is contained in the parent Element Node Pointable ({{NodeID:1}}).
+  
+  Byte Array for TNP NodeID:2
+  
+***  <<<104, 0, 0, 0, 2, 0, 3, 10, 32, 32>>>
+ 
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 2>>> This is the <Node Id> that uses 4 bytes and has value <<2>> 
+ 
+  <<<0, 3, 10, 32, 32>>> This is the <UTF8String> which has a size <<3>> and value <<10, 32, 32>>
+
+
+================================================================
+
+
+** Element Node Pointable ({NodeID:3})
+  
+  This child is contained in the parent Element Node Pointable ({{NodeID:1}}).
+   
+  Byte Array for TNP NodeID:3
+   
+***  <<<102, 6, 0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 30, 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57, 0, 0, 0, 7, 0, 0, 0, 12, 0, 0, 0, 29, 0, 0, 0, 41, 0, 0, 0, 81, 0, 0, 0, 93, 0, 0, 0, 106, 0, 0, 0, 116, 104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32>>>
+  
+  <<< 102 >>>  Value tag for Element Node Pointable
+  
+  <<< 6 >>>  Header byte (One byte) that uses the three lowest bit to denote if
+
+          ** bit <Namespace Chunk> exists: <No>
+          
+          ** bit <Attribute Chunk> exists: <Yes>
+          
+          ** bit <Children Chunk> exists: <Yes>
+ 
+  <<<0, 0, 0, 4, 0, 0, 0, 2, 0, 0, 0, 3>>> This is a <Name Pointer> which is an array of integers(4 bytes) of size <<3>> 
+ 
+  <<<0, 0, 0, 3>>> This is the <Local Node Id> which uses 4 bytes.
+ 
+  Attribute Chunk is a Sequence Pointable.
+  
+  Sequence Content attributeChunk:
+  
+  <<<0, 0, 0, 1>>>  <Number of Items> in the SequencePointable <attribute chunk> is <<1>>
+ 
+  <<<0, 0, 0, 30>>>  <Size> of the first item is <<30>>
+  
+   <Data in the Sequence>: Here the item(data) in the sequence is an 
+   Attribute Node Pointable ({{NodeID:4}}). Note that the data can represent any type of pointable or element.
+  
+***  <<< 103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52,  49, 54, 49, 51, 57>>>
+
+  Children Chunk is a Sequence Pointable. This is analogous to a collection of 
+  items(data). In VXQuery, the items(data) 
+  in the Sequence Pointable are preceded by the number of items in the sequence and item size. 
+  
+  Sequence Content childrenChunk:
+
+  <<<0, 0, 0, 7>>>  <Number of Items> in the SequencePointable <children chunk> is <<3>>
+ 
+  <<<0, 0, 0, 12>>>  <Offset> of the first item is <<12>>
+ 
+  <<<0, 0, 0, 29>>>  <Offset> of the second item is <<12>>
+   
+  <<<0, 0, 0, 41>>>  <Offset> of the third item is <<41>>
+  
+  <<<0, 0, 0, 81>>>  <Offset> of the fourth item is <<81>>
+
+  <<<0, 0, 0, 93>>>  <Offset> of the fifth item is <<93>>
+
+  <<<0, 0, 0, 106>>>  <Offset> of the sixth item is <<106>>
+
+  <<<0, 0, 0, 116>>>  <Offset> of the seventh item is <<116>>
+  
+  <Data in the Sequence>: Here the items(data) in the sequence are Text Node Pointables
+  ({{NodeID:5}}), ({{NodeID:7}}), ({{NodeID:10}}), ({{NodeID:12}}), 
+  ElementNodePointable ({{NodeID:8}}), CommentNodePointable ({{NodeID:6}}) and
+  PINodePointable ({{NodeID:11}}). 
+   
+***  <<<104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32, 105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116, 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32, 102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104, 104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32, 106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101, 0, 0, 104, 0, 0, 0, 12, 0, 3, 10, 32, 32, 104, 0, 0, 0, 13, 0, 1, 10>>>
+
+
+================================================================
+
+
+** Attribute Node Pointable ({NodeID:3})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}).
+  
+  Byte Array for ANP NodeID:3
+  
+***  <<<103, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 4, 14, 0, 10, 48, 56, 49, 50, 52, 49, 54, 49, 51, 57>>>
+  
+  <<< 103 >>>  Value tag for Attribute Node Pointable
+ 
+  <<<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5,>>> This is a <Name Pointer> 
+  which is an array of integers(4 bytes) of size <<3>>. It consists of <PrefixCode>, <NamespaceCode>, <LocalCode>.
+
+  <<<0, 0, 0, 4>>> This is the <NodeId> which has a value of <<4>>.
+ 
+  <<<14, 0, 10, 48, 56, 49, 50, 52,  49, 54, 49, 51, 57 >>> This is a 
+  string of length <<10>> and the length of the string is  <<0812416139>>
+
+
+================================================================
+
+
+** Text Node Pointable ({NodeID:5})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+  
+  Byte Array for TNP NodeID:5
+  
+***  <<<104, 0, 0, 0, 5, 0, 5, 10, 32, 32, 32, 32>>>
+ 
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 5>>> This is the <Node Id> that uses 4 bytes and has value <<2>> 
+ 
+  <<< 0, 5, 10, 32, 32, 32, 32>>> This is the <UTF8String> which has a size <<5>> 
+  and value represents a <<new line>> and 4 <<spaces>>
+
+
+================================================================
+
+
+** Comment Node Pointable ({NodeID:6})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+  
+  Byte Array for TNP NodeID:6
+ 
+*** <<<105, 0, 0, 0, 6, 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116>>>
+  
+  <<< 105 >>>  Value tag for Comment Node Pointable
+ 
+  <<<0, 0, 0, 6>>> This is the <Node Id> that uses 4 bytes and has value <<6>> 
+ 
+  <<< 0, 10, 116, 111, 112, 32, 115, 101, 99, 114, 101, 116>>> This is the <UTF8String> which has a size <<10>> and value <<top secret>>
+ 
+ 
+================================================================
+ 
+ 
+** Text Node Pointable ({NodeID:7})
+ 
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+  
+  Byte Array for TNP NodeID:7
+  
+***  <<< 104, 0, 0, 0, 7, 0, 5, 10, 32, 32, 32, 32>>>  
+ 
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 7>>> This is the <Node Id> that uses 4 bytes and has value <<7>> 
+ 
+  <<< 0, 5, 10, 32, 32, 32, 32>>> This is the <UTF8String> which has a size <<5>> and value represents a <<new line>> and 4 <<spaces>>
+
+
+================================================================
+
+
+** Element Node Pointable ({NodeID:8})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+  
+  Byte Array for TNP NodeID:8
+  
+***  <<<102, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 1, 0, 0, 0, 14, 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104>>>
+ 
+  <<< 102 >>>  Value tag for Element Node Pointable
+  
+  <<< 4 >>>  Header byte (One byte) that uses the lowest three bits to denote if
+
+          ** bit <Namespace Chunk> exists: <No>
+          
+          ** bit <Attribute Chunk> exists: <No>
+          
+          ** bit <Children Chunk> exists: <Yes>
+ 
+  <<<0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6>>> This is a <Name Pointer> which is an array of integers(4 bytes) of size <<3>> 
+ 
+  <<<0, 0, 0, 8>>> This is the <Node Id> that uses 4 bytes and has value <<8>> 
+  
+  Following is a SequencePointable.
+  
+  Sequence Content childrenChunk
+
+  <<<0, 0, 0, 1>>> <Number of Items> in the SequencePointable <children chunk> is <<1>>
+  
+  <<<0, 0, 0, 14>>> <Offset> of the first item is <<14>>
+  
+  <Data in the Sequence>: Here the (item)data in the sequence is an Text Node Pointable ({{NodeID:9}}).
+  
+***   <<< 104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104>>>
+ 
+ 
+================================================================
+ 
+ 
+** Text Node Pointable ({NodeID:9})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:8}}).
+  
+  Byte Array for TNP NodeID:9
+  
+***  <<<104, 0, 0, 0, 9, 0, 7, 77, 97, 99, 98, 101, 116, 104>>>
+ 
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 9>>> This is the <Node Id> that uses 4 bytes and has value <<9>> 
+ 
+  <<<0, 7, 77, 97, 99, 98, 101, 116, 104>>> This is the <UTF8String> which has a size <<7>> and value <<Macbeth>>
+
+
+================================================================
+
+
+** Text Node Pointable ({NodeID:10})
+   
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+   
+  Byte Array for TNP NodeID:10
+  
+***  <<<104, 0, 0, 0, 10, 0, 5, 10, 32, 32, 32, 32>>>
+    
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 10>>> This is the <Node Id> that uses 4 bytes and has value <<2>> 
+ 
+  <<<0, 5, 10, 32, 32, 32, 32>>> This is the <UTF8String> which has a size <<5>> 
+  and value represents a <<new line>> and 4 <<spaces>>
+
+
+================================================================
+
+
+** PI Node Pointable ({NodeID:11})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+  
+  Byte Array for TNP NodeID:11
+  
+***  <<<106, 0, 0, 0, 11, 0, 4, 104, 105, 100, 101>>>
+  
+  <<< 106 >>> Value tag for Processing Intruction Node Pointable
+ 
+  <<<0, 0, 0, 11>>> This is the <Node Id> that uses 4 bytes and has value <<11>>
+ 
+  <<<0, 4, 104, 105, 100, 101>>>  This is the <UTF8String> which has a size <<4>> and value <<hide>>
+ 
+  <<<0, 0>>> This is also a string representing content. It is a <<null string>>. 
+
+
+================================================================
+
+
+** Text Node Pointable ({NodeID:12})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:3}}) childrenChunnk.
+  
+   Byte Array for TNP NodeID:12
+  
+***  <<<104, 0, 0, 0, 12, 0, 3, 10, 32, 32>>>
+  
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 12>>> This is the <Node Id> that uses 4 bytes and has value <<12>> 
+
+  <<<0, 3, 10, 32, 32>>> This is the <UTF8String> which has a size <<3>> and value represents a <<new line>> and 2 <<spaces>>.
+
+
+================================================================
+
+
+** Text Node Pointable ({NodeID:13})
+
+  This child is contained in the parent Element Node Pointable ({{NodeID:1}}).
+  
+  Byte Array for TNP NodeID:13
+  
+***  <<<104, 0, 0, 0, 13, 0, 1, 10>>>
+
+  <<< 104 >>>  Value tag for Text Node Pointable
+
+  <<<0, 0, 0, 13>>> This is the <Node Id> that uses 4 bytes and has value <<13>> 
+ 
+  <<<0, 1, 10>>> This is the <UTF8String> which has a size <<1>> and value represents a <<new line>>.
+
+
+================================================================
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java
----------------------------------------------------------------------
diff --git a/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java b/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java
index 080f8a1..061c5ac 100644
--- a/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java
+++ b/vxquery-cli/src/main/java/org/apache/vxquery/cli/VXQuery.java
@@ -39,6 +39,7 @@ import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.result.ResultUtils;
 import org.apache.vxquery.xmlquery.ast.ModuleNode;
 import org.apache.vxquery.xmlquery.query.Module;
+import org.apache.vxquery.xmlquery.query.VXQueryCompilationListener;
 import org.apache.vxquery.xmlquery.query.XMLQueryCompiler;
 import org.apache.vxquery.xmlquery.query.XQueryCompilationListener;
 import org.json.JSONException;
@@ -183,81 +184,9 @@ public class VXQuery {
             if (opts.showQuery) {
                 System.err.println(qStr);
             }
-            XQueryCompilationListener listener = new XQueryCompilationListener() {
-
-                /**
-                 * On providing -showrp argument, output the query inputs, outputs and user constraints for each module as result of code generation.
-                 * 
-                 * @param module
-                 */
-                @Override
-                public void notifyCodegenResult(Module module) {
-                    if (opts.showRP) {
-                        JobSpecification jobSpec = module.getHyracksJobSpecification();
-                        try {
-                            System.err.println(jobSpec.toJSON().toString(2));
-                        } catch (JSONException e) {
-                            e.printStackTrace();
-                            System.err.println(jobSpec.toString());
-                        }
-                    }
-                }
-
-                /**
-                 * On providing -showtet argument, output the syntax translation tree for the module in the format: "-- logical operator(if exists) | execution mode |"
-                 * where execution mode can be one of: UNPARTITIONED,PARTITIONED,LOCAL
-                 * 
-                 * @param module
-                 */
-                @Override
-                public void notifyTranslationResult(Module module) {
-                    if (opts.showTET) {
-                        System.err.println(appendPrettyPlan(new StringBuilder(), module).toString());
-                    }
-                }
-
-                @Override
-                public void notifyTypecheckResult(Module module) {
-                }
 
-                /**
-                 * On providing -showoet argument, output the optimized expression tree for the module in the format:
-                 * "-- logical operator(if exists) | execution mode |" where execution mode can be one of: UNPARTITIONED,PARTITIONED,LOCAL
-                 * 
-                 * @param module
-                 */
-                @Override
-                public void notifyOptimizedResult(Module module) {
-                    if (opts.showOET) {
-                        System.err.println(appendPrettyPlan(new StringBuilder(), module).toString());
-                    }
-                }
-
-                /**
-                 * On providing -showast argument, output the abstract syntax tree obtained from parsing by serializing the DomDriver object to a pretty-printed XML
-                 * String.
-                 * 
-                 * @param moduleNode
-                 */
-                @Override
-                public void notifyParseResult(ModuleNode moduleNode) {
-                    if (opts.showAST) {
-                        System.err.println(new XStream(new DomDriver()).toXML(moduleNode));
-                    }
-                }
-
-                private StringBuilder appendPrettyPlan(StringBuilder sb, Module module) {
-                    try {
-                        ILogicalExpressionVisitor<String, Integer> ev = new VXQueryLogicalExpressionPrettyPrintVisitor(
-                                module.getModuleContext());
-                        LogicalOperatorPrettyPrintVisitor v = new LogicalOperatorPrettyPrintVisitor(ev);
-                        PlanPrettyPrinter.printPlan(module.getBody(), sb, v, 0);
-                    } catch (AlgebricksException e) {
-                        e.printStackTrace();
-                    }
-                    return sb;
-                }
-            };
+            VXQueryCompilationListener listener = new VXQueryCompilationListener(opts.showAST, opts.showTET,
+                    opts.showOET, opts.showRP);
 
             start = opts.timing ? new Date() : null;
             XMLQueryCompiler compiler = new XMLQueryCompiler(listener, getNodeList(), opts.frameSize,
@@ -389,7 +318,7 @@ public class VXQuery {
             ncConfig.dataIPAddress = "127.0.0.1";
             ncConfig.resultIPAddress = "127.0.0.1";
             ncConfig.nodeId = "nc" + (i + 1);
-            ncConfig.ioDevices = Files.createTempDirectory(ncConfig.nodeId).toString(); 
+            ncConfig.ioDevices = Files.createTempDirectory(ncConfig.nodeId).toString();
             ncs[i] = new NodeControllerService(ncConfig);
             ncs[i].start();
         }

http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java
----------------------------------------------------------------------
diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java
new file mode 100644
index 0000000..7969c9e
--- /dev/null
+++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java
@@ -0,0 +1,107 @@
+package org.apache.vxquery.xmlquery.query;
+
+import org.apache.vxquery.compiler.algebricks.prettyprint.VXQueryLogicalExpressionPrettyPrintVisitor;
+import org.apache.vxquery.xmlquery.ast.ModuleNode;
+import org.apache.vxquery.xmlquery.query.Module;
+import org.apache.vxquery.xmlquery.query.XQueryCompilationListener;
+import org.json.JSONException;
+import org.kohsuke.args4j.Option;
+
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor;
+import edu.uci.ics.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter;
+import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionVisitor;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+
+public class VXQueryCompilationListener implements XQueryCompilationListener {
+    
+    boolean showTET, showRP, showOET, showAST;
+
+    public VXQueryCompilationListener(boolean showAST, boolean showTET, boolean showOET, boolean showRP) {
+        this.showTET = showTET;
+        this.showRP = showRP;
+        this.showOET = showOET;
+        this.showAST = showAST;
+    }
+
+    /**
+     * Outputs the query inputs, outputs and user constraints for each module as result of code generation.
+     * 
+     * @param module
+     */
+    public void notifyCodegenResult(Module module) {
+        if (showRP) {
+            JobSpecification jobSpec = module.getHyracksJobSpecification();
+            try {
+                System.err.println("***Runtime Plan: ");
+                System.err.println(jobSpec.toJSON().toString(2));
+            } catch (JSONException e) {
+                e.printStackTrace();
+                System.err.println(jobSpec.toString());
+            }
+        }
+    }
+
+    /**
+     * Outputs the syntax translation tree for the module in the format: "-- logical operator(if exists) | execution mode |"
+     * where execution mode can be one of: UNPARTITIONED,PARTITIONED,LOCAL
+     * 
+     * @param module
+     */
+    @Override
+    public void notifyTranslationResult(Module module) {
+        if (showTET) {
+            System.err.println("***Translated Expression Tree: ");
+            System.err.println(appendPrettyPlan(new StringBuilder(), module).toString());
+        }
+    }
+
+    @Override
+    public void notifyTypecheckResult(Module module) {
+    }
+
+    /**
+     * Outputs the optimized expression tree for the module in the format:
+     * "-- logical operator(if exists) | execution mode |" where execution mode can be one of: UNPARTITIONED,PARTITIONED,LOCAL
+     * 
+     * @param module
+     */
+    @Override
+    public void notifyOptimizedResult(Module module) {
+        if (showOET) {
+            System.err.println("***Optimized Expression Tree: ");
+            System.err.println(appendPrettyPlan(new StringBuilder(), module).toString());
+        }
+    }
+
+    /**
+     * Outputs the abstract syntax tree obtained from parsing by serializing the DomDriver object to a pretty-printed XML
+     * String.
+     * 
+     * @param moduleNode
+     */
+    @Override
+    public void notifyParseResult(ModuleNode moduleNode) {
+        if (showAST) {
+            System.err.println("***Abstract Syntax Tree: ");
+            System.err.println(new XStream(new DomDriver()).toXML(moduleNode));
+        }
+    }
+
+    private StringBuilder appendPrettyPlan(StringBuilder sb, Module module) {
+        try {
+            ILogicalExpressionVisitor<String, Integer> ev = new VXQueryLogicalExpressionPrettyPrintVisitor(
+                    module.getModuleContext());
+            LogicalOperatorPrettyPrintVisitor v = new LogicalOperatorPrettyPrintVisitor(ev);
+            PlanPrettyPrinter.printPlan(module.getBody(), sb, v, 0);
+        } catch (AlgebricksException e) {
+            e.printStackTrace();
+        }
+        return sb;
+    }
+    
+
+}

http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestRunner.java
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestRunner.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestRunner.java
index facc698..cc4602e 100644
--- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestRunner.java
+++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/TestRunner.java
@@ -14,8 +14,10 @@
  */
 package org.apache.vxquery.xtest;
 
+import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.nio.ByteBuffer;
@@ -23,8 +25,10 @@ import java.util.EnumSet;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.io.IOUtils;
 import org.apache.vxquery.compiler.CompilerControlBlock;
 import org.apache.vxquery.compiler.algebricks.VXQueryGlobalDataFactory;
+import org.apache.vxquery.compiler.algebricks.prettyprint.VXQueryLogicalExpressionPrettyPrintVisitor;
 import org.apache.vxquery.context.DynamicContext;
 import org.apache.vxquery.context.DynamicContextImpl;
 import org.apache.vxquery.context.RootStaticContextImpl;
@@ -32,8 +36,21 @@ import org.apache.vxquery.context.StaticContextImpl;
 import org.apache.vxquery.exceptions.ErrorCode;
 import org.apache.vxquery.exceptions.SystemException;
 import org.apache.vxquery.result.ResultUtils;
+import org.apache.vxquery.xmlquery.ast.ModuleNode;
+import org.apache.vxquery.xmlquery.query.Module;
+import org.apache.vxquery.xmlquery.query.VXQueryCompilationListener;
 import org.apache.vxquery.xmlquery.query.XMLQueryCompiler;
+import org.apache.vxquery.xmlquery.query.XQueryCompilationListener;
+import org.apache.vxquery.xtest.XTestOptions;
+import org.json.JSONException;
 
+import com.thoughtworks.xstream.XStream;
+import com.thoughtworks.xstream.io.xml.DomDriver;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor;
+import edu.uci.ics.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter;
+import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionVisitor;
 import edu.uci.ics.hyracks.api.client.HyracksConnection;
 import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
 import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
@@ -99,10 +116,21 @@ public class TestRunner {
         if (opts.verbose) {
             System.err.println("Starting " + testCase.getXQueryDisplayName());
         }
+
         long start = System.currentTimeMillis();
+
         try {
             try {
-                XMLQueryCompiler compiler = new XMLQueryCompiler(null, new String[] { "nc1" }, opts.frameSize);
+                FileInputStream query = new FileInputStream(testCase.getXQueryFile());
+                if (opts.showQuery) {
+                    System.err.println("***Query for " + testCase.getXQueryDisplayName() + ": ");
+                    System.err.println(IOUtils.toString(query, "UTF-8"));
+                    //query.reset();
+                }
+
+                VXQueryCompilationListener listener = new VXQueryCompilationListener(opts.showAST, opts.showTET,
+                        opts.showOET, opts.showRP);
+                XMLQueryCompiler compiler = new XMLQueryCompiler(listener, new String[] { "nc1" }, opts.frameSize);
                 Reader in = new InputStreamReader(new FileInputStream(testCase.getXQueryFile()), "UTF-8");
                 CompilerControlBlock ccb = new CompilerControlBlock(new StaticContextImpl(
                         RootStaticContextImpl.INSTANCE), new ResultSetId(testCase.getXQueryDisplayName().hashCode()),
@@ -167,6 +195,14 @@ public class TestRunner {
             long end = System.currentTimeMillis();
             res.time = end - start;
         }
+        if (opts.showResult) {
+            System.err.println("***Result: ");
+            System.err.println(res.result);
+            if(res.result == null){
+                System.err.println("***Error: ");
+                System.err.println(res.error);
+            }
+        }
         return res;
     }
 

http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTestOptions.java
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTestOptions.java b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTestOptions.java
index 10dfa1c..e3da66f 100644
--- a/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTestOptions.java
+++ b/vxquery-xtest/src/main/java/org/apache/vxquery/xtest/XTestOptions.java
@@ -55,4 +55,25 @@ public class XTestOptions {
 
     @Option(name = "-htmlreport", required = false, usage = "HTML Report output file")
     String htmlReport;
+    
+    @Option(name = "-showquery", usage = "Show query string")
+    boolean showQuery;
+
+    @Option(name = "-showast", usage = "Show abstract syntax tree")
+    boolean showAST;
+
+    @Option(name = "-showtet", usage = "Show translated expression tree") 
+    boolean showTET;
+
+    @Option(name = "-showoet", usage = "Show optimized expression tree") 
+    boolean showOET;
+
+    @Option(name = "-showrp", usage = "Show Runtime plan") 
+    boolean showRP;
+
+    @Option(name = "-compileonly", usage = "Compile the query and stop")
+    boolean compileOnly;
+    
+    @Option(name = "-showresult", usage = "shows query result")
+    boolean showResult;
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition2Queries.xml
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition2Queries.xml b/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition2Queries.xml
index 17d6819..6a22cd2 100644
--- a/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition2Queries.xml
+++ b/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition2Queries.xml
@@ -29,6 +29,12 @@
       <description>Count records returned for q03 from the weather benchmark with 2 partitions.</description>
       <query name="q03_records" date="2014-04-01"/>
       <output-file compare="Text">q03_records.txt</output-file>
+      <output-file compare="Text">q03_records-1.txt</output-file>
+      <output-file compare="Text">q03_records-2.txt</output-file>
+      <output-file compare="Text">q03_records-3.txt</output-file>
+      <output-file compare="Text">q03_records-4.txt</output-file>
+      <output-file compare="Text">q03_records-5.txt</output-file>
+
    </test-case>
    <test-case name="ghcnd-records-partition-2-q05" FilePath="GhcndRecords/Partition-2/" Creator="Preston Carman">
       <description>Count records returned for q05 from the weather benchmark with 2 partitions.</description>

http://git-wip-us.apache.org/repos/asf/vxquery/blob/a041a329/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition4Queries.xml
----------------------------------------------------------------------
diff --git a/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition4Queries.xml b/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition4Queries.xml
index 3789c51..70324fe 100644
--- a/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition4Queries.xml
+++ b/vxquery-xtest/src/test/resources/cat/GhcndRecordsPartition4Queries.xml
@@ -29,6 +29,12 @@
       <description>Count records returned for q03 from the weather benchmark with 4 partitions.</description>
       <query name="q03_records" date="2014-04-01"/>
       <output-file compare="Text">q03_records.txt</output-file>
+      <output-file compare="Text">q03_records-1.txt</output-file>
+      <output-file compare="Text">q03_records-2.txt</output-file>
+      <output-file compare="Text">q03_records-3.txt</output-file>
+      <output-file compare="Text">q03_records-4.txt</output-file>
+      <output-file compare="Text">q03_records-5.txt</output-file>
+
    </test-case>
    <test-case name="ghcnd-records-partition-4-q05" FilePath="GhcndRecords/Partition-4/" Creator="Preston Carman">
       <description>Count records returned for q05 from the weather benchmark with 4 partitions.</description>