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>