Merge branch 'master' into asterix_lsm_stabilization
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..d748fde
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+target
+.classpath
+.settings
+.project
+ClusterControllerService
+asterix-app/rttest
+asterix-app/mdtest/
+asterix-app/opttest/
+build
+asterix_logs
\ No newline at end of file
diff --git a/asterix-algebra/pom.xml b/asterix-algebra/pom.xml
new file mode 100644
index 0000000..350734b
--- /dev/null
+++ b/asterix-algebra/pom.xml
@@ -0,0 +1,107 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-algebra</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>javacc-maven-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<id>javacc</id>
+						<goals>
+							<goal>javacc</goal>
+						</goals>
+						<configuration>
+							<isStatic>false</isStatic>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											org.codehaus.mojo
+										</groupId>
+										<artifactId>
+											javacc-maven-plugin
+										</artifactId>
+										<versionRange>
+											[2.6,)
+										</versionRange>
+										<goals>
+											<goal>javacc</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-runtime</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-aql</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-metadata</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>algebricks-compiler</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.json</groupId>
+			<artifactId>json</artifactId>
+			<version>20090211</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/AsterixOperatorAnnotations.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalExpressionDeepCopyVisitor.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalExpressionDeepCopyVisitor.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalExpressionDeepCopyVisitor.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalExpressionDeepCopyVisitor.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
new file mode 100644
index 0000000..718c0f1
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
@@ -0,0 +1,427 @@
+package edu.uci.ics.asterix.algebra.base;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.Counter;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistributeResultOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ExchangeOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ExtensionOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.IndexInsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ScriptOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SinkOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestMapOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteResultOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
+import edu.uci.ics.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
+import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
+
+public class LogicalOperatorDeepCopyVisitor implements ILogicalOperatorVisitor<ILogicalOperator, ILogicalOperator> {
+    private final Counter counter;
+    private final LogicalExpressionDeepCopyVisitor exprDeepCopyVisitor;
+
+    // Key: Variable in the original plan. Value: New variable replacing the original one in the copied plan.
+    private final Map<LogicalVariable, LogicalVariable> outVarMapping = new HashMap<LogicalVariable, LogicalVariable>();
+
+    // Key: Variable in the original plan. Value: Variable with which to replace original variable in the plan copy.
+    private final Map<LogicalVariable, LogicalVariable> inVarMapping;
+
+    public LogicalOperatorDeepCopyVisitor(Counter counter) {
+        this.counter = counter;
+        this.inVarMapping = Collections.emptyMap();
+        exprDeepCopyVisitor = new LogicalExpressionDeepCopyVisitor(counter, inVarMapping, outVarMapping);
+    }
+
+    /**
+     * @param counter
+     *            Starting variable counter.
+     * @param inVarMapping
+     *            Variable mapping keyed by variables in the original plan.
+     *            Those variables are replaced by their corresponding value in the map in the copied plan.
+     */
+    public LogicalOperatorDeepCopyVisitor(Counter counter, Map<LogicalVariable, LogicalVariable> inVarMapping) {
+        this.counter = counter;
+        this.inVarMapping = inVarMapping;
+        exprDeepCopyVisitor = new LogicalExpressionDeepCopyVisitor(counter, inVarMapping, outVarMapping);
+    }
+
+    private void copyAnnotations(ILogicalOperator src, ILogicalOperator dest) {
+        dest.getAnnotations().putAll(src.getAnnotations());
+    }
+
+    public ILogicalOperator deepCopy(ILogicalOperator op, ILogicalOperator arg) throws AlgebricksException {
+        return op.accept(this, arg);
+    }
+
+    private void deepCopyInputs(ILogicalOperator src, ILogicalOperator dest, ILogicalOperator arg)
+            throws AlgebricksException {
+        List<Mutable<ILogicalOperator>> inputs = src.getInputs();
+        List<Mutable<ILogicalOperator>> inputsCopy = dest.getInputs();
+        for (Mutable<ILogicalOperator> input : inputs) {
+            inputsCopy.add(deepCopyOperatorReference(input, arg));
+        }
+    }
+
+    private Mutable<ILogicalOperator> deepCopyOperatorReference(Mutable<ILogicalOperator> opRef, ILogicalOperator arg)
+            throws AlgebricksException {
+        return new MutableObject<ILogicalOperator>(deepCopy(opRef.getValue(), arg));
+    }
+
+    private List<Mutable<ILogicalOperator>> deepCopyOperatorReferenceList(List<Mutable<ILogicalOperator>> list,
+            ILogicalOperator arg) throws AlgebricksException {
+        List<Mutable<ILogicalOperator>> listCopy = new ArrayList<Mutable<ILogicalOperator>>(list.size());
+        for (Mutable<ILogicalOperator> opRef : list) {
+            listCopy.add(deepCopyOperatorReference(opRef, arg));
+        }
+        return listCopy;
+    }
+
+    private IOrder deepCopyOrder(IOrder order) {
+        switch (order.getKind()) {
+            case ASC:
+            case DESC:
+                return order;
+            case FUNCTIONCALL:
+            default:
+                throw new UnsupportedOperationException();
+        }
+    }
+
+    private List<Pair<IOrder, Mutable<ILogicalExpression>>> deepCopyOrderExpressionReferencePairList(
+            List<Pair<IOrder, Mutable<ILogicalExpression>>> list) throws AlgebricksException {
+        ArrayList<Pair<IOrder, Mutable<ILogicalExpression>>> listCopy = new ArrayList<Pair<IOrder, Mutable<ILogicalExpression>>>(
+                list.size());
+        for (Pair<IOrder, Mutable<ILogicalExpression>> pair : list) {
+            listCopy.add(new Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>(deepCopyOrder(pair.first),
+                    exprDeepCopyVisitor.deepCopyExpressionReference(pair.second)));
+        }
+        return listCopy;
+    }
+
+    private ILogicalPlan deepCopyPlan(ILogicalPlan plan, ILogicalOperator arg) throws AlgebricksException {
+        List<Mutable<ILogicalOperator>> rootsCopy = deepCopyOperatorReferenceList(plan.getRoots(), arg);
+        ILogicalPlan planCopy = new ALogicalPlanImpl(rootsCopy);
+        return planCopy;
+    }
+
+    private List<ILogicalPlan> deepCopyPlanList(List<ILogicalPlan> list, List<ILogicalPlan> listCopy,
+            ILogicalOperator arg) throws AlgebricksException {
+        for (ILogicalPlan plan : list) {
+            listCopy.add(deepCopyPlan(plan, arg));
+        }
+        return listCopy;
+    }
+
+    private LogicalVariable deepCopyVariable(LogicalVariable var) {
+        if (var == null) {
+            return null;
+        }
+        LogicalVariable givenVarReplacement = inVarMapping.get(var);
+        if (givenVarReplacement != null) {
+            outVarMapping.put(var, givenVarReplacement);
+            return givenVarReplacement;
+        }
+        LogicalVariable varCopy = outVarMapping.get(var);
+        if (varCopy == null) {
+            counter.inc();
+            varCopy = new LogicalVariable(counter.get());
+            outVarMapping.put(var, varCopy);
+        }
+        return varCopy;
+    }
+
+    private List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> deepCopyVariableExpressionReferencePairList(
+            List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> list) throws AlgebricksException {
+        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> listCopy = new ArrayList<Pair<LogicalVariable, Mutable<ILogicalExpression>>>(
+                list.size());
+        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> pair : list) {
+            listCopy.add(new Pair<LogicalVariable, Mutable<ILogicalExpression>>(deepCopyVariable(pair.first),
+                    exprDeepCopyVisitor.deepCopyExpressionReference(pair.second)));
+        }
+        return listCopy;
+    }
+
+    // TODO return List<...>
+    private ArrayList<LogicalVariable> deepCopyVariableList(List<LogicalVariable> list) {
+        ArrayList<LogicalVariable> listCopy = new ArrayList<LogicalVariable>(list.size());
+        for (LogicalVariable var : list) {
+            listCopy.add(deepCopyVariable(var));
+        }
+        return listCopy;
+    }
+
+    public void reset() {
+        outVarMapping.clear();
+    }
+
+    public void updatePrimaryKeys(IOptimizationContext context) {
+        for (Map.Entry<LogicalVariable, LogicalVariable> entry : outVarMapping.entrySet()) {
+            List<LogicalVariable> primaryKey = context.findPrimaryKey(entry.getKey());
+            if (primaryKey != null) {
+                List<LogicalVariable> head = new ArrayList<LogicalVariable>();
+                for (LogicalVariable variable : primaryKey) {
+                    head.add(outVarMapping.get(variable));
+                }
+                List<LogicalVariable> tail = new ArrayList<LogicalVariable>(1);
+                tail.add(entry.getValue());
+                context.addPrimaryKey(new FunctionalDependency(head, tail));
+            }
+        }
+    }
+
+    public LogicalVariable varCopy(LogicalVariable var) throws AlgebricksException {
+        return outVarMapping.get(var);
+    }
+
+    @Override
+    public ILogicalOperator visitAggregateOperator(AggregateOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        AggregateOperator opCopy = new AggregateOperator(deepCopyVariableList(op.getVariables()),
+                exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getExpressions()));
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitAssignOperator(AssignOperator op, ILogicalOperator arg) throws AlgebricksException {
+        AssignOperator opCopy = new AssignOperator(deepCopyVariableList(op.getVariables()),
+                exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getExpressions()));
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitDataScanOperator(DataSourceScanOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        DataSourceScanOperator opCopy = new DataSourceScanOperator(deepCopyVariableList(op.getVariables()),
+                op.getDataSource());
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitDistinctOperator(DistinctOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitEmptyTupleSourceOperator(EmptyTupleSourceOperator op, ILogicalOperator arg) {
+        EmptyTupleSourceOperator opCopy = new EmptyTupleSourceOperator();
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitExchangeOperator(ExchangeOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitGroupByOperator(GroupByOperator op, ILogicalOperator arg) throws AlgebricksException {
+        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByListCopy = deepCopyVariableExpressionReferencePairList(op
+                .getGroupByList());
+        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> decorListCopy = deepCopyVariableExpressionReferencePairList(op
+                .getDecorList());
+        List<ILogicalPlan> nestedPlansCopy = new ArrayList<ILogicalPlan>();
+
+        GroupByOperator opCopy = new GroupByOperator(groupByListCopy, decorListCopy, nestedPlansCopy);
+        deepCopyPlanList(op.getNestedPlans(), nestedPlansCopy, opCopy);
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitInnerJoinOperator(InnerJoinOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        InnerJoinOperator opCopy = new InnerJoinOperator(exprDeepCopyVisitor.deepCopyExpressionReference(op
+                .getCondition()), deepCopyOperatorReference(op.getInputs().get(0), null), deepCopyOperatorReference(op
+                .getInputs().get(1), null));
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitLeftOuterJoinOperator(LeftOuterJoinOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitLimitOperator(LimitOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitNestedTupleSourceOperator(NestedTupleSourceOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        NestedTupleSourceOperator opCopy = new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(arg));
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitOrderOperator(OrderOperator op, ILogicalOperator arg) throws AlgebricksException {
+        OrderOperator opCopy = new OrderOperator(deepCopyOrderExpressionReferencePairList(op.getOrderExpressions()));
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitPartitioningSplitOperator(PartitioningSplitOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitProjectOperator(ProjectOperator op, ILogicalOperator arg) throws AlgebricksException {
+        ProjectOperator opCopy = new ProjectOperator(deepCopyVariableList(op.getVariables()));
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitReplicateOperator(ReplicateOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitRunningAggregateOperator(RunningAggregateOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitScriptOperator(ScriptOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitSelectOperator(SelectOperator op, ILogicalOperator arg) throws AlgebricksException {
+        SelectOperator opCopy = new SelectOperator(exprDeepCopyVisitor.deepCopyExpressionReference(op.getCondition()));
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitSubplanOperator(SubplanOperator op, ILogicalOperator arg) throws AlgebricksException {
+        List<ILogicalPlan> nestedPlansCopy = new ArrayList<ILogicalPlan>();
+
+        SubplanOperator opCopy = new SubplanOperator(nestedPlansCopy);
+        deepCopyPlanList(op.getNestedPlans(), nestedPlansCopy, opCopy);
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitUnionOperator(UnionAllOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitUnnestMapOperator(UnnestMapOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitUnnestOperator(UnnestOperator op, ILogicalOperator arg) throws AlgebricksException {
+        UnnestOperator opCopy = new UnnestOperator(deepCopyVariable(op.getVariable()),
+                exprDeepCopyVisitor.deepCopyExpressionReference(op.getExpressionRef()),
+                deepCopyVariable(op.getPositionalVariable()), op.getPositionalVariableType());
+        deepCopyInputs(op, opCopy, arg);
+        copyAnnotations(op, opCopy);
+        opCopy.setExecutionMode(op.getExecutionMode());
+        return opCopy;
+    }
+
+    @Override
+    public ILogicalOperator visitWriteOperator(WriteOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitDistributeResultOperator(DistributeResultOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitWriteResultOperator(WriteResultOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitInsertDeleteOperator(InsertDeleteOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitIndexInsertDeleteOperator(IndexInsertDeleteOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitSinkOperator(SinkOperator op, ILogicalOperator arg) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public ILogicalOperator visitExtensionOperator(ExtensionOperator op, ILogicalOperator arg)
+            throws AlgebricksException {
+        throw new UnsupportedOperationException();
+    }
+
+    public Map<LogicalVariable, LogicalVariable> getVariableMapping() {
+        return outVarMapping;
+    }
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/CommitOperator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/CommitOperator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/CommitOperator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/CommitOperator.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/BTreeSearchPOperator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/BTreeSearchPOperator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/BTreeSearchPOperator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/BTreeSearchPOperator.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitPOperator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitPOperator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitPOperator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitPOperator.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntime.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntimeFactory.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntimeFactory.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntimeFactory.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/CommitRuntimeFactory.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/IndexSearchPOperator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/IndexSearchPOperator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/IndexSearchPOperator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/IndexSearchPOperator.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/InvertedIndexPOperator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/InvertedIndexPOperator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/InvertedIndexPOperator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/InvertedIndexPOperator.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/RTreeSearchPOperator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/RTreeSearchPOperator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/RTreeSearchPOperator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/operators/physical/RTreeSearchPOperator.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/jobgen/AqlLogicalExpressionJobGen.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/jobgen/AqlLogicalExpressionJobGen.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/jobgen/AqlLogicalExpressionJobGen.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/jobgen/AqlLogicalExpressionJobGen.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/AnalysisUtil.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/AnalysisUtil.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/AnalysisUtil.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/AnalysisUtil.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/FuzzyUtils.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/FuzzyUtils.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/FuzzyUtils.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/FuzzyUtils.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/RuleCollections.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/RuleCollections.java
new file mode 100644
index 0000000..d5169c7
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/RuleCollections.java
@@ -0,0 +1,273 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.optimizer.base;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import edu.uci.ics.asterix.optimizer.rules.AsterixInlineVariablesRule;
+import edu.uci.ics.asterix.optimizer.rules.ByNameToByIndexFieldAccessRule;
+import edu.uci.ics.asterix.optimizer.rules.ConstantFoldingRule;
+import edu.uci.ics.asterix.optimizer.rules.CountVarToCountOneRule;
+import edu.uci.ics.asterix.optimizer.rules.ExtractDistinctByExpressionsRule;
+import edu.uci.ics.asterix.optimizer.rules.ExtractOrderExpressionsRule;
+import edu.uci.ics.asterix.optimizer.rules.FeedScanCollectionToUnnest;
+import edu.uci.ics.asterix.optimizer.rules.FuzzyEqRule;
+import edu.uci.ics.asterix.optimizer.rules.IfElseToSwitchCaseFunctionRule;
+import edu.uci.ics.asterix.optimizer.rules.InlineUnnestFunctionRule;
+import edu.uci.ics.asterix.optimizer.rules.IntroduceDynamicTypeCastRule;
+import edu.uci.ics.asterix.optimizer.rules.IntroduceEnforcedListTypeRule;
+import edu.uci.ics.asterix.optimizer.rules.IntroduceInstantLockSearchCallbackRule;
+import edu.uci.ics.asterix.optimizer.rules.IntroduceRapidFrameFlushProjectRule;
+import edu.uci.ics.asterix.optimizer.rules.IntroduceSecondaryIndexInsertDeleteRule;
+import edu.uci.ics.asterix.optimizer.rules.IntroduceStaticTypeCastRule;
+import edu.uci.ics.asterix.optimizer.rules.LoadRecordFieldsRule;
+import edu.uci.ics.asterix.optimizer.rules.NestGroupByRule;
+import edu.uci.ics.asterix.optimizer.rules.NestedSubplanToJoinRule;
+import edu.uci.ics.asterix.optimizer.rules.PullPositionalVariableFromUnnestRule;
+import edu.uci.ics.asterix.optimizer.rules.PushAggFuncIntoStandaloneAggregateRule;
+import edu.uci.ics.asterix.optimizer.rules.PushAggregateIntoGroupbyRule;
+import edu.uci.ics.asterix.optimizer.rules.PushFieldAccessRule;
+import edu.uci.ics.asterix.optimizer.rules.PushGroupByThroughProduct;
+import edu.uci.ics.asterix.optimizer.rules.PushProperJoinThroughProduct;
+import edu.uci.ics.asterix.optimizer.rules.PushSimilarityFunctionsBelowJoin;
+import edu.uci.ics.asterix.optimizer.rules.RemoveRedundantListifyRule;
+import edu.uci.ics.asterix.optimizer.rules.RemoveUnusedOneToOneEquiJoinRule;
+import edu.uci.ics.asterix.optimizer.rules.ReplaceSinkOpWithCommitOpRule;
+import edu.uci.ics.asterix.optimizer.rules.SetAsterixPhysicalOperatorsRule;
+import edu.uci.ics.asterix.optimizer.rules.SetClosedRecordConstructorsRule;
+import edu.uci.ics.asterix.optimizer.rules.SimilarityCheckRule;
+import edu.uci.ics.asterix.optimizer.rules.UnnestToDataScanRule;
+import edu.uci.ics.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule;
+import edu.uci.ics.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.BreakSelectIntoConjunctsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ComplexJoinInferenceRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ComplexUnnestToProductRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ConsolidateAssignsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ConsolidateSelectsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.EliminateSubplanRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.EnforceOrderByAfterSubplan;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.EnforceStructuralPropertiesRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractCommonExpressionsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractCommonOperatorsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractGbyExpressionsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.FactorRedundantGroupAndDecorVarsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.InferTypesRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.InlineAssignIntoAggregateRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.InlineSingleReferenceVariablesRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.InsertOuterJoinRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.InsertProjectBeforeUnionRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroHashPartitionMergeExchange;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroJoinInsideSubplanRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceAggregateCombinerRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceGroupByCombinerRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceGroupByForSubplanRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceProjectsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PullSelectOutOfEqJoin;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushAssignBelowUnionAllRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushAssignDownThroughProductRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushLimitDownRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushNestedOrderByUnderPreSortedGroupByRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushProjectDownRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushSelectDownRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushSelectIntoJoinRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushSubplanWithAggregateDownThroughProductRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.ReinferAllTypesRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.RemoveRedundantGroupByDecorVars;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.RemoveRedundantVariablesRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.RemoveUnusedAssignAndAggregateRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.SetAlgebricksPhysicalOperatorsRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.SetExecutionModeRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.SimpleUnnestToProductRule;
+import edu.uci.ics.hyracks.algebricks.rewriter.rules.SubplanOutOfGroupRule;
+
+public final class RuleCollections {
+
+    public final static List<IAlgebraicRewriteRule> buildTypeInferenceRuleCollection() {
+        List<IAlgebraicRewriteRule> typeInfer = new LinkedList<IAlgebraicRewriteRule>();
+        typeInfer.add(new InlineUnnestFunctionRule());
+        typeInfer.add(new InferTypesRule());
+        return typeInfer;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildNormalizationRuleCollection() {
+        List<IAlgebraicRewriteRule> normalization = new LinkedList<IAlgebraicRewriteRule>();
+        normalization.add(new EliminateSubplanRule());
+        normalization.add(new EnforceOrderByAfterSubplan());
+        normalization.add(new PushAggFuncIntoStandaloneAggregateRule());
+        normalization.add(new BreakSelectIntoConjunctsRule());
+        normalization.add(new ExtractGbyExpressionsRule());
+        normalization.add(new ExtractDistinctByExpressionsRule());
+        normalization.add(new ExtractOrderExpressionsRule());
+        normalization.add(new ExtractCommonExpressionsRule());
+
+        // IntroduceStaticTypeCastRule should go before
+        // IntroduceDynamicTypeCastRule to
+        // avoid unnecessary dynamic casting
+        normalization.add(new IntroduceStaticTypeCastRule());
+        normalization.add(new IntroduceDynamicTypeCastRule());
+        normalization.add(new IntroduceEnforcedListTypeRule());
+        normalization.add(new ConstantFoldingRule());
+        normalization.add(new UnnestToDataScanRule());
+        normalization.add(new IfElseToSwitchCaseFunctionRule());
+        normalization.add(new FuzzyEqRule());
+        normalization.add(new SimilarityCheckRule());
+        return normalization;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildCondPushDownAndJoinInferenceRuleCollection() {
+        List<IAlgebraicRewriteRule> condPushDownAndJoinInference = new LinkedList<IAlgebraicRewriteRule>();
+
+        condPushDownAndJoinInference.add(new PushSelectDownRule());
+        condPushDownAndJoinInference.add(new RemoveRedundantListifyRule());
+        condPushDownAndJoinInference.add(new SimpleUnnestToProductRule());
+        condPushDownAndJoinInference.add(new ComplexUnnestToProductRule());
+        condPushDownAndJoinInference.add(new ComplexJoinInferenceRule());
+        condPushDownAndJoinInference.add(new PushSelectIntoJoinRule());
+        condPushDownAndJoinInference.add(new IntroJoinInsideSubplanRule());
+        condPushDownAndJoinInference.add(new PushAssignDownThroughProductRule());
+        condPushDownAndJoinInference.add(new PushSubplanWithAggregateDownThroughProductRule());
+        condPushDownAndJoinInference.add(new IntroduceGroupByForSubplanRule());
+        condPushDownAndJoinInference.add(new SubplanOutOfGroupRule());
+        condPushDownAndJoinInference.add(new InsertOuterJoinRule());
+
+        condPushDownAndJoinInference.add(new RemoveRedundantVariablesRule());
+        condPushDownAndJoinInference.add(new AsterixInlineVariablesRule());
+        condPushDownAndJoinInference.add(new RemoveUnusedAssignAndAggregateRule());
+
+        condPushDownAndJoinInference.add(new FactorRedundantGroupAndDecorVarsRule());
+        condPushDownAndJoinInference.add(new PushAggregateIntoGroupbyRule());
+        condPushDownAndJoinInference.add(new EliminateSubplanRule());
+        condPushDownAndJoinInference.add(new PushProperJoinThroughProduct());
+        condPushDownAndJoinInference.add(new PushGroupByThroughProduct());
+        condPushDownAndJoinInference.add(new NestGroupByRule());
+
+        return condPushDownAndJoinInference;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildLoadFieldsRuleCollection() {
+        List<IAlgebraicRewriteRule> fieldLoads = new LinkedList<IAlgebraicRewriteRule>();
+        fieldLoads.add(new LoadRecordFieldsRule());
+        fieldLoads.add(new PushFieldAccessRule());
+        // fieldLoads.add(new ByNameToByHandleFieldAccessRule()); -- disabled
+        fieldLoads.add(new ByNameToByIndexFieldAccessRule());
+        fieldLoads.add(new RemoveRedundantVariablesRule());
+        fieldLoads.add(new AsterixInlineVariablesRule());
+        fieldLoads.add(new RemoveUnusedAssignAndAggregateRule());
+        fieldLoads.add(new ConstantFoldingRule());
+        fieldLoads.add(new FeedScanCollectionToUnnest());
+        fieldLoads.add(new ComplexJoinInferenceRule());
+        return fieldLoads;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildFuzzyJoinRuleCollection() {
+        List<IAlgebraicRewriteRule> fuzzy = new LinkedList<IAlgebraicRewriteRule>();
+        // fuzzy.add(new FuzzyJoinRule()); -- The non-indexed fuzzy join will be temporarily disabled. It should be enabled some time in the near future.
+        fuzzy.add(new InferTypesRule());
+        return fuzzy;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildConsolidationRuleCollection() {
+        List<IAlgebraicRewriteRule> consolidation = new LinkedList<IAlgebraicRewriteRule>();
+        consolidation.add(new ConsolidateSelectsRule());
+        consolidation.add(new ConsolidateAssignsRule());
+        consolidation.add(new InlineAssignIntoAggregateRule());
+        consolidation.add(new IntroduceGroupByCombinerRule());
+        consolidation.add(new IntroduceAggregateCombinerRule());
+        consolidation.add(new CountVarToCountOneRule());
+        consolidation.add(new RemoveUnusedAssignAndAggregateRule());
+        consolidation.add(new RemoveRedundantGroupByDecorVars());
+        consolidation.add(new NestedSubplanToJoinRule());
+        return consolidation;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildAccessMethodRuleCollection() {
+        List<IAlgebraicRewriteRule> accessMethod = new LinkedList<IAlgebraicRewriteRule>();
+        accessMethod.add(new IntroduceSelectAccessMethodRule());
+        accessMethod.add(new IntroduceJoinAccessMethodRule());
+        accessMethod.add(new IntroduceSecondaryIndexInsertDeleteRule());
+        accessMethod.add(new RemoveUnusedOneToOneEquiJoinRule());
+        accessMethod.add(new PushSimilarityFunctionsBelowJoin());
+        accessMethod.add(new RemoveUnusedAssignAndAggregateRule());
+        return accessMethod;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildPlanCleanupRuleCollection() {
+        List<IAlgebraicRewriteRule> planCleanupRules = new LinkedList<IAlgebraicRewriteRule>();
+        planCleanupRules.add(new PushAssignBelowUnionAllRule());
+        planCleanupRules.add(new ExtractCommonExpressionsRule());
+        planCleanupRules.add(new RemoveRedundantVariablesRule());
+        planCleanupRules.add(new PushProjectDownRule());
+        planCleanupRules.add(new PushSelectDownRule());
+        planCleanupRules.add(new RemoveUnusedAssignAndAggregateRule());
+        return planCleanupRules;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildDataExchangeRuleCollection() {
+        List<IAlgebraicRewriteRule> dataExchange = new LinkedList<IAlgebraicRewriteRule>();
+        dataExchange.add(new SetExecutionModeRule());
+        return dataExchange;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesAllLevelsRuleCollection() {
+        List<IAlgebraicRewriteRule> physicalRewritesAllLevels = new LinkedList<IAlgebraicRewriteRule>();
+        physicalRewritesAllLevels.add(new PullSelectOutOfEqJoin());
+        //Turned off the following rule for now not to change OptimizerTest results.
+        //physicalRewritesAllLevels.add(new IntroduceTransactionCommitByAssignOpRule());
+        physicalRewritesAllLevels.add(new ReplaceSinkOpWithCommitOpRule());
+        physicalRewritesAllLevels.add(new SetAlgebricksPhysicalOperatorsRule());
+        physicalRewritesAllLevels.add(new SetAsterixPhysicalOperatorsRule());
+        physicalRewritesAllLevels.add(new IntroduceInstantLockSearchCallbackRule());
+        physicalRewritesAllLevels.add(new EnforceStructuralPropertiesRule());
+        physicalRewritesAllLevels.add(new IntroHashPartitionMergeExchange());
+        physicalRewritesAllLevels.add(new SetClosedRecordConstructorsRule());
+        physicalRewritesAllLevels.add(new PullPositionalVariableFromUnnestRule());
+        physicalRewritesAllLevels.add(new PushProjectDownRule());
+        physicalRewritesAllLevels.add(new InsertProjectBeforeUnionRule());
+        physicalRewritesAllLevels.add(new InlineSingleReferenceVariablesRule());
+        physicalRewritesAllLevels.add(new RemoveUnusedAssignAndAggregateRule());
+        physicalRewritesAllLevels.add(new ConsolidateAssignsRule());
+        // After adding projects, we may need need to set physical operators again.
+        physicalRewritesAllLevels.add(new SetAlgebricksPhysicalOperatorsRule());
+        return physicalRewritesAllLevels;
+    }
+
+    public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesTopLevelRuleCollection() {
+        List<IAlgebraicRewriteRule> physicalRewritesTopLevel = new LinkedList<IAlgebraicRewriteRule>();
+        physicalRewritesTopLevel.add(new PushNestedOrderByUnderPreSortedGroupByRule());
+        physicalRewritesTopLevel.add(new PushLimitDownRule());
+        physicalRewritesTopLevel.add(new IntroduceProjectsRule());
+        physicalRewritesTopLevel.add(new SetAlgebricksPhysicalOperatorsRule());
+        physicalRewritesTopLevel.add(new IntroduceRapidFrameFlushProjectRule());
+        physicalRewritesTopLevel.add(new SetExecutionModeRule());
+        return physicalRewritesTopLevel;
+    }
+
+    public final static List<IAlgebraicRewriteRule> prepareForJobGenRuleCollection() {
+        List<IAlgebraicRewriteRule> prepareForJobGenRewrites = new LinkedList<IAlgebraicRewriteRule>();
+        prepareForJobGenRewrites.add(new IsolateHyracksOperatorsRule(
+                HeuristicOptimizer.hyraxOperatorsBelowWhichJobGenIsDisabled));
+        prepareForJobGenRewrites.add(new ExtractCommonOperatorsRule());
+        // Re-infer all types, so that, e.g., the effect of not-is-null is
+        // propagated.
+        prepareForJobGenRewrites.add(new ReinferAllTypesRule());
+        return prepareForJobGenRewrites;
+    }
+
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldIndexAndTypeHandle.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldIndexAndTypeHandle.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldIndexAndTypeHandle.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldIndexAndTypeHandle.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldNameHandle.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldNameHandle.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldNameHandle.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/FieldNameHandle.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/IHandle.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/IHandle.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/IHandle.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/handle/IHandle.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/AsterixInlineVariablesRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/AsterixInlineVariablesRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/AsterixInlineVariablesRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/AsterixInlineVariablesRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByHandleFieldAccessRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/CountVarToCountOneRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/CountVarToCountOneRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/CountVarToCountOneRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/CountVarToCountOneRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractDistinctByExpressionsRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractOrderExpressionsRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractOrderExpressionsRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractOrderExpressionsRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ExtractOrderExpressionsRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FeedScanCollectionToUnnest.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FeedScanCollectionToUnnest.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FeedScanCollectionToUnnest.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FeedScanCollectionToUnnest.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyEqRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyEqRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyEqRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyEqRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyJoinRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyJoinRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyJoinRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/FuzzyJoinRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IfElseToSwitchCaseFunctionRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IfElseToSwitchCaseFunctionRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IfElseToSwitchCaseFunctionRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IfElseToSwitchCaseFunctionRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/InlineUnnestFunctionRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/InlineUnnestFunctionRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/InlineUnnestFunctionRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/InlineUnnestFunctionRule.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
new file mode 100644
index 0000000..5cff07b
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.optimizer.rules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+/**
+ * Dynamically cast a variable from its type to a specified required type, in a
+ * recursive way. It enables: 1. bag-based fields in a record, 2. bidirectional
+ * cast of a open field and a matched closed field, and 3. put in null fields
+ * when necessary.
+ * Here is an example: A record { "hobby": {{"music", "coding"}}, "id": "001",
+ * "name": "Person Three"} which confirms to closed type ( id: string, name:
+ * string, hobby: {{string}}? ) can be cast to an open type (id: string ), or
+ * vice versa.
+ * However, if the input record is a variable, then we don't know its exact
+ * field layout at compile time. For example, records conforming to the same
+ * type can have different field orderings and different open parts. That's why
+ * we need dynamic type casting.
+ * Note that as we can see in the example, the ordering of fields of a record is
+ * not required. Since the open/closed part of a record has completely different
+ * underlying memory/storage layout, a cast-record function will change the
+ * layout as specified at runtime.
+ * Implementation wise, this rule checks the target dataset type and the input
+ * record type, and if the types are different, then it plugs in an assign with
+ * a cast-record function, and projects away the original (uncast) field.
+ */
+public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+        return false;
+    }
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+        /**
+         * pattern match: sink insert assign
+         * resulting plan: sink-insert-project-assign
+         */
+        AbstractLogicalOperator op1 = (AbstractLogicalOperator) opRef.getValue();
+        if (op1.getOperatorTag() != LogicalOperatorTag.SINK)
+            return false;
+        AbstractLogicalOperator op2 = (AbstractLogicalOperator) op1.getInputs().get(0).getValue();
+        if (op2.getOperatorTag() != LogicalOperatorTag.INSERT_DELETE)
+            return false;
+        InsertDeleteOperator insertDeleteOp = (InsertDeleteOperator) op2;
+        if (insertDeleteOp.getOperation() == InsertDeleteOperator.Kind.DELETE)
+            return false;
+        AbstractLogicalOperator op3 = (AbstractLogicalOperator) op2.getInputs().get(0).getValue();
+        if (op3.getOperatorTag() != LogicalOperatorTag.ASSIGN)
+            return false;
+
+        InsertDeleteOperator insertDeleteOperator = (InsertDeleteOperator) op2;
+        AssignOperator oldAssignOperator = (AssignOperator) op3;
+
+        AqlDataSource dataSource = (AqlDataSource) insertDeleteOperator.getDataSource();
+        IAType[] schemaTypes = (IAType[]) dataSource.getSchemaTypes();
+        ARecordType requiredRecordType = (ARecordType) schemaTypes[schemaTypes.length - 1];
+
+        List<LogicalVariable> usedVariables = new ArrayList<LogicalVariable>();
+        VariableUtilities.getUsedVariables(oldAssignOperator, usedVariables);
+        LogicalVariable inputRecordVar;
+        if (usedVariables.size() > 0) {
+            inputRecordVar = usedVariables.get(0);
+        } else {
+            VariableUtilities.getLiveVariables(oldAssignOperator, usedVariables);
+            inputRecordVar = usedVariables.get(0);
+        }
+        IVariableTypeEnvironment env = oldAssignOperator.computeInputTypeEnvironment(context);
+        ARecordType inputRecordType = (ARecordType) env.getVarType(inputRecordVar);
+
+        boolean needCast = !requiredRecordType.equals(inputRecordType);
+        if (!needCast)
+            return false;
+
+        // insert
+        // project
+        // assign
+        // assign
+        AbstractFunctionCallExpression cast = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CAST_RECORD));
+        cast.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(inputRecordVar)));
+        TypeComputerUtilities.setRequiredAndInputTypes(cast, requiredRecordType, inputRecordType);
+        LogicalVariable newAssignVar = context.newVar();
+        AssignOperator newAssignOperator = new AssignOperator(newAssignVar, new MutableObject<ILogicalExpression>(cast));
+        newAssignOperator.getInputs().add(new MutableObject<ILogicalOperator>(op3));
+
+        List<LogicalVariable> projectVariables = new ArrayList<LogicalVariable>();
+        VariableUtilities.getProducedVariables(oldAssignOperator, projectVariables);
+        projectVariables.add(newAssignVar);
+        ProjectOperator projectOperator = new ProjectOperator(projectVariables);
+        projectOperator.getInputs().add(new MutableObject<ILogicalOperator>(newAssignOperator));
+
+        ILogicalExpression payloadExpr = new VariableReferenceExpression(newAssignVar);
+        MutableObject<ILogicalExpression> payloadRef = new MutableObject<ILogicalExpression>(payloadExpr);
+        InsertDeleteOperator newInserDeleteOperator = new InsertDeleteOperator(insertDeleteOperator.getDataSource(),
+                payloadRef, insertDeleteOperator.getPrimaryKeyExpressions(), insertDeleteOperator.getOperation());
+        newInserDeleteOperator.getInputs().add(new MutableObject<ILogicalOperator>(projectOperator));
+        insertDeleteOperator.getInputs().clear();
+        op1.getInputs().get(0).setValue(newInserDeleteOperator);
+
+        context.computeAndSetTypeEnvironmentForOperator(newAssignOperator);
+        context.computeAndSetTypeEnvironmentForOperator(projectOperator);
+        context.computeAndSetTypeEnvironmentForOperator(newInserDeleteOperator);
+        return true;
+    }
+
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceInstantLockSearchCallbackRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceInstantLockSearchCallbackRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceInstantLockSearchCallbackRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceInstantLockSearchCallbackRule.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceRapidFrameFlushProjectRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceRapidFrameFlushProjectRule.java
new file mode 100644
index 0000000..d3e11ed2
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceRapidFrameFlushProjectRule.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.optimizer.rules;
+
+import org.apache.commons.lang3.mutable.Mutable;
+
+import edu.uci.ics.asterix.algebra.operators.CommitOperator;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ExtensionOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.physical.StreamProjectPOperator;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+/**
+ * This rule will search for project operators in an insert/delete/update plan and
+ * pass a hint to all those projects between the first "insert" and the commit
+ * operator. This hint is used by the project operator so that frames are pushed to
+ * the next operator without waiting until they get full. The purpose of this is to
+ * reduce the time of holding exclusive locks on the keys that have been inserted.
+ * 
+ * @author salsubaiee
+ */
+public class IntroduceRapidFrameFlushProjectRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+        return false;
+    }
+
+    private boolean checkIfRuleIsApplicable(AbstractLogicalOperator op) {
+        if (op.getOperatorTag() != LogicalOperatorTag.EXTENSION_OPERATOR) {
+            return false;
+        }
+        ExtensionOperator extensionOp = (ExtensionOperator) op;
+        if (!(extensionOp.getDelegate() instanceof CommitOperator)) {
+            return false;
+        }
+
+        AbstractLogicalOperator descendantOp = op;
+        while (descendantOp != null) {
+            if (descendantOp.getOperatorTag() == LogicalOperatorTag.PROJECT) {
+                if (descendantOp.getPhysicalOperator() == null) {
+                    return false;
+                }
+            } else if (descendantOp.getOperatorTag() == LogicalOperatorTag.INSERT_DELETE) {
+                break;
+            }
+            descendantOp = (AbstractLogicalOperator) descendantOp.getInputs().get(0).getValue();
+        }
+        return true;
+    }
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+
+        AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
+
+        if (!checkIfRuleIsApplicable(op)) {
+            return false;
+        }
+        AbstractLogicalOperator descendantOp = op;
+        ProjectOperator projectOp = null;
+
+        boolean planModified = false;
+        while (descendantOp != null) {
+            if (descendantOp.getOperatorTag() == LogicalOperatorTag.PROJECT) {
+                projectOp = (ProjectOperator) descendantOp;
+                StreamProjectPOperator physicalOp = (StreamProjectPOperator) projectOp.getPhysicalOperator();
+                physicalOp.setRapidFrameFlush(true);
+                planModified = true;
+            } else if (descendantOp.getOperatorTag() == LogicalOperatorTag.INSERT_DELETE) {
+                break;
+            }
+            descendantOp = (AbstractLogicalOperator) descendantOp.getInputs().get(0).getValue();
+        }
+        return planModified;
+    }
+}
\ No newline at end of file
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
new file mode 100644
index 0000000..6985753
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
@@ -0,0 +1,269 @@
+package edu.uci.ics.asterix.optimizer.rules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
+import edu.uci.ics.asterix.metadata.declared.AqlIndex;
+import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.IndexInsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+        return false;
+    }
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+        AbstractLogicalOperator op0 = (AbstractLogicalOperator) opRef.getValue();
+        if (op0.getOperatorTag() != LogicalOperatorTag.SINK) {
+            return false;
+        }
+        AbstractLogicalOperator op1 = (AbstractLogicalOperator) op0.getInputs().get(0).getValue();
+        if (op1.getOperatorTag() != LogicalOperatorTag.INSERT_DELETE) {
+            return false;
+        }
+
+        FunctionIdentifier fid = null;
+        /** find the record variable */
+        InsertDeleteOperator insertOp = (InsertDeleteOperator) op1;
+        ILogicalExpression recordExpr = insertOp.getPayloadExpression().getValue();
+        List<LogicalVariable> recordVar = new ArrayList<LogicalVariable>();
+        /** assume the payload is always a single variable expression */
+        recordExpr.getUsedVariables(recordVar);
+
+        /** op2 is the assign operator which extract primary keys from the record variable */
+        AbstractLogicalOperator op2 = (AbstractLogicalOperator) op1.getInputs().get(0).getValue();
+
+        if (recordVar.size() == 0) {
+            /**
+             * For the case primary key-assignment expressions are constant expressions,
+             * find assign op that creates record to be inserted/deleted.
+             */
+            while (fid != AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR) {
+                if (op2.getInputs().size() == 0) {
+                    return false;
+                }
+                op2 = (AbstractLogicalOperator) op2.getInputs().get(0).getValue();
+                if (op2.getOperatorTag() != LogicalOperatorTag.ASSIGN) {
+                    continue;
+                }
+                AssignOperator assignOp = (AssignOperator) op2;
+                ILogicalExpression assignExpr = assignOp.getExpressions().get(0).getValue();
+                if (assignExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                    ScalarFunctionCallExpression funcExpr = (ScalarFunctionCallExpression) assignOp.getExpressions()
+                            .get(0).getValue();
+                    fid = funcExpr.getFunctionIdentifier();
+                }
+            }
+            AssignOperator assignOp2 = (AssignOperator) op2;
+            recordVar.addAll(assignOp2.getVariables());
+        }
+        AqlDataSource datasetSource = (AqlDataSource) insertOp.getDataSource();
+        AqlMetadataProvider mp = (AqlMetadataProvider) context.getMetadataProvider();
+        String dataverseName = datasetSource.getId().getDataverseName();
+        String datasetName = datasetSource.getId().getDatasetName();
+        Dataset dataset = mp.findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
+            return false;
+        }
+
+        List<LogicalVariable> projectVars = new ArrayList<LogicalVariable>();
+        VariableUtilities.getUsedVariables(op1, projectVars);
+        // Create operators for secondary index insert/delete.
+        String itemTypeName = dataset.getItemTypeName();
+        IAType itemType = mp.findType(dataset.getDataverseName(), itemTypeName);
+        if (itemType.getTypeTag() != ATypeTag.RECORD) {
+            throw new AlgebricksException("Only record types can be indexed.");
+        }
+        ARecordType recType = (ARecordType) itemType;
+        List<Index> indexes = mp.getDatasetIndexes(dataset.getDataverseName(), dataset.getDatasetName());
+        ILogicalOperator currentTop = op1;
+        boolean hasSecondaryIndex = false;
+        for (Index index : indexes) {
+            if (!index.isSecondaryIndex()) {
+                continue;
+            }
+            hasSecondaryIndex = true;
+            List<String> secondaryKeyFields = index.getKeyFieldNames();
+            List<LogicalVariable> secondaryKeyVars = new ArrayList<LogicalVariable>();
+            List<Mutable<ILogicalExpression>> expressions = new ArrayList<Mutable<ILogicalExpression>>();
+            List<Mutable<ILogicalExpression>> secondaryExpressions = new ArrayList<Mutable<ILogicalExpression>>();
+            for (String secondaryKey : secondaryKeyFields) {
+                Mutable<ILogicalExpression> varRef = new MutableObject<ILogicalExpression>(
+                        new VariableReferenceExpression(recordVar.get(0)));
+                String[] fieldNames = recType.getFieldNames();
+                int pos = -1;
+                for (int j = 0; j < fieldNames.length; j++) {
+                    if (fieldNames[j].equals(secondaryKey)) {
+                        pos = j;
+                        break;
+                    }
+                }
+                // Assumes the indexed field is in the closed portion of the type.
+                Mutable<ILogicalExpression> indexRef = new MutableObject<ILogicalExpression>(new ConstantExpression(
+                        new AsterixConstantValue(new AInt32(pos))));
+                AbstractFunctionCallExpression func = new ScalarFunctionCallExpression(
+                        FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX), varRef, indexRef);
+                expressions.add(new MutableObject<ILogicalExpression>(func));
+                LogicalVariable newVar = context.newVar();
+                secondaryKeyVars.add(newVar);
+            }
+
+            AssignOperator assign = new AssignOperator(secondaryKeyVars, expressions);
+            ProjectOperator project = new ProjectOperator(projectVars);
+            assign.getInputs().add(new MutableObject<ILogicalOperator>(project));
+            project.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
+            context.computeAndSetTypeEnvironmentForOperator(project);
+            context.computeAndSetTypeEnvironmentForOperator(assign);
+            if (index.getIndexType() == IndexType.BTREE || index.getIndexType() == IndexType.WORD_INVIX
+                    || index.getIndexType() == IndexType.NGRAM_INVIX
+                    || index.getIndexType() == IndexType.FUZZY_WORD_INVIX
+                    || index.getIndexType() == IndexType.FUZZY_NGRAM_INVIX) {
+                for (LogicalVariable secondaryKeyVar : secondaryKeyVars) {
+                    secondaryExpressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
+                            secondaryKeyVar)));
+                }
+                Mutable<ILogicalExpression> filterExpression = createFilterExpression(secondaryKeyVars,
+                        context.getOutputTypeEnvironment(assign), false);
+                AqlIndex dataSourceIndex = new AqlIndex(index, dataverseName, datasetName, mp);
+                IndexInsertDeleteOperator indexUpdate = new IndexInsertDeleteOperator(dataSourceIndex,
+                        insertOp.getPrimaryKeyExpressions(), secondaryExpressions, filterExpression,
+                        insertOp.getOperation());
+                indexUpdate.getInputs().add(new MutableObject<ILogicalOperator>(assign));
+                currentTop = indexUpdate;
+                context.computeAndSetTypeEnvironmentForOperator(indexUpdate);
+            } else if (index.getIndexType() == IndexType.RTREE) {
+                Pair<IAType, Boolean> keyPairType = Index
+                        .getNonNullableKeyFieldType(secondaryKeyFields.get(0), recType);
+                IAType spatialType = keyPairType.first;
+                int dimension = NonTaggedFormatUtil.getNumDimensions(spatialType.getTypeTag());
+                int numKeys = dimension * 2;
+                List<LogicalVariable> keyVarList = new ArrayList<LogicalVariable>();
+                List<Mutable<ILogicalExpression>> keyExprList = new ArrayList<Mutable<ILogicalExpression>>();
+                for (int i = 0; i < numKeys; i++) {
+                    LogicalVariable keyVar = context.newVar();
+                    keyVarList.add(keyVar);
+                    AbstractFunctionCallExpression createMBR = new ScalarFunctionCallExpression(
+                            FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CREATE_MBR));
+                    createMBR.getArguments().add(
+                            new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVars
+                                    .get(0))));
+                    createMBR.getArguments().add(
+                            new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                                    new AInt32(dimension)))));
+                    createMBR.getArguments().add(
+                            new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                                    new AInt32(i)))));
+                    keyExprList.add(new MutableObject<ILogicalExpression>(createMBR));
+                }
+                for (LogicalVariable secondaryKeyVar : keyVarList) {
+                    secondaryExpressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
+                            secondaryKeyVar)));
+                }
+                AssignOperator assignCoordinates = new AssignOperator(keyVarList, keyExprList);
+                assignCoordinates.getInputs().add(new MutableObject<ILogicalOperator>(assign));
+                context.computeAndSetTypeEnvironmentForOperator(assignCoordinates);
+                // We must enforce the filter if the originating spatial type is nullable.
+                boolean forceFilter = keyPairType.second;
+                Mutable<ILogicalExpression> filterExpression = createFilterExpression(keyVarList,
+                        context.getOutputTypeEnvironment(assignCoordinates), forceFilter);
+                AqlIndex dataSourceIndex = new AqlIndex(index, dataverseName, datasetName, mp);
+                IndexInsertDeleteOperator indexUpdate = new IndexInsertDeleteOperator(dataSourceIndex,
+                        insertOp.getPrimaryKeyExpressions(), secondaryExpressions, filterExpression,
+                        insertOp.getOperation());
+                indexUpdate.getInputs().add(new MutableObject<ILogicalOperator>(assignCoordinates));
+                currentTop = indexUpdate;
+                context.computeAndSetTypeEnvironmentForOperator(indexUpdate);
+            }
+        }
+        if (!hasSecondaryIndex) {
+            return false;
+        }
+        op0.getInputs().clear();
+        op0.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
+        return true;
+    }
+
+    @SuppressWarnings("unchecked")
+    private Mutable<ILogicalExpression> createFilterExpression(List<LogicalVariable> secondaryKeyVars,
+            IVariableTypeEnvironment typeEnv, boolean forceFilter) throws AlgebricksException {
+        List<Mutable<ILogicalExpression>> filterExpressions = new ArrayList<Mutable<ILogicalExpression>>();
+        // Add 'is not null' to all nullable secondary index keys as a filtering condition.
+        for (LogicalVariable secondaryKeyVar : secondaryKeyVars) {
+            IAType secondaryKeyType = (IAType) typeEnv.getVarType(secondaryKeyVar);
+            if (!isNullableType(secondaryKeyType) && !forceFilter) {
+                continue;
+            }
+            ScalarFunctionCallExpression isNullFuncExpr = new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.IS_NULL),
+                    new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVar)));
+            ScalarFunctionCallExpression notFuncExpr = new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.NOT), new MutableObject<ILogicalExpression>(
+                            isNullFuncExpr));
+            filterExpressions.add(new MutableObject<ILogicalExpression>(notFuncExpr));
+        }
+        // No nullable secondary keys.
+        if (filterExpressions.isEmpty()) {
+            return null;
+        }
+        Mutable<ILogicalExpression> filterExpression = null;
+        if (filterExpressions.size() > 1) {
+            // Create a conjunctive condition.
+            filterExpression = new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.AND), filterExpressions));
+        } else {
+            filterExpression = filterExpressions.get(0);
+        }
+        return filterExpression;
+    }
+
+    private boolean isNullableType(IAType type) {
+        if (type.getTypeTag() == ATypeTag.UNION) {
+            return ((AUnionType) type).isNullableType();
+        }
+        return false;
+    }
+}
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
new file mode 100644
index 0000000..f42782b
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
@@ -0,0 +1,157 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.optimizer.rules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+
+import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
+import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.optimizer.rules.typecast.StaticTypeCastUtil;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+/**
+ * Statically cast a constant from its type to a specified required type, in a
+ * recursive way. It enables: 1. bag-based fields in a record, 2. bidirectional
+ * cast of an open field and a matched closed field, and 3. put in null fields
+ * when necessary. It should be fired before the constant folding rule.
+ * This rule is not responsible for type casting between primitive types.
+ * Here is an example: A record { "hobby": {{"music", "coding"}}, "id": "001",
+ * "name": "Person Three"} which confirms to closed type ( id: string, name:
+ * string, hobby: {{string}}? ) can be cast to an open type (id: string ), or
+ * vice versa.
+ * Implementation wise: first, we match the record's type and its target dataset
+ * type to see if it is "cast-able"; second, if the types are cast-able, we
+ * embed the required type into the original producer expression. If the types
+ * are not cast-able, we throw a compile time exception.
+ * Then, at runtime (not in this rule), the corresponding record/list
+ * constructors know what to do by checking the required output type.
+ * TODO: right now record/list constructor of the cast result is not done in the
+ * ConstantFoldingRule and has to go to the runtime, because the
+ * ConstantFoldingRule uses ARecordSerializerDeserializer which seems to have
+ * some problem.
+ */
+public class IntroduceStaticTypeCastRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+        return false;
+    }
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+        /**
+         * pattern match: sink/insert/assign record type is propagated from
+         * insert data source to the record-constructor expression
+         */
+        if (context.checkIfInDontApplySet(this, opRef.getValue()))
+            return false;
+        context.addToDontApplySet(this, opRef.getValue());
+
+        AbstractLogicalOperator op1 = (AbstractLogicalOperator) opRef.getValue();
+        List<LogicalVariable> producedVariables = new ArrayList<LogicalVariable>();
+        LogicalVariable oldRecordVariable;
+
+        if (op1.getOperatorTag() != LogicalOperatorTag.SINK)
+            return false;
+        AbstractLogicalOperator op2 = (AbstractLogicalOperator) op1.getInputs().get(0).getValue();
+        if (op2.getOperatorTag() != LogicalOperatorTag.INSERT_DELETE)
+            return false;
+        InsertDeleteOperator insertDeleteOp = (InsertDeleteOperator) op2;
+        if (insertDeleteOp.getOperation() == InsertDeleteOperator.Kind.DELETE)
+            return false;
+        /**
+         * get required record type
+         */
+        InsertDeleteOperator insertDeleteOperator = (InsertDeleteOperator) op2;
+        AqlDataSource dataSource = (AqlDataSource) insertDeleteOperator.getDataSource();
+        IAType[] schemaTypes = (IAType[]) dataSource.getSchemaTypes();
+        IAType requiredRecordType = schemaTypes[schemaTypes.length - 1];
+
+        List<LogicalVariable> usedVariables = new ArrayList<LogicalVariable>();
+        insertDeleteOperator.getPayloadExpression().getValue().getUsedVariables(usedVariables);
+
+        // the used variable should contain the record that will be inserted
+        // but it will not fail in many cases even if the used variable set is
+        // empty
+        if (usedVariables.size() == 0)
+            return false;
+
+        oldRecordVariable = usedVariables.get(0);
+        LogicalVariable inputRecordVar = usedVariables.get(0);
+        IVariableTypeEnvironment env = insertDeleteOperator.computeOutputTypeEnvironment(context);
+        IAType inputRecordType = (IAType) env.getVarType(inputRecordVar);
+
+        AbstractLogicalOperator currentOperator = (AbstractLogicalOperator) op2.getInputs().get(0).getValue();
+        /**
+         * find the assign operator for the "input record" to the insert_delete
+         * operator
+         */
+        do {
+            context.addToDontApplySet(this, currentOperator);
+            if (currentOperator.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
+                AssignOperator assignOp = (AssignOperator) currentOperator;
+                producedVariables.clear();
+                VariableUtilities.getProducedVariables(currentOperator, producedVariables);
+                int position = producedVariables.indexOf(oldRecordVariable);
+
+                /**
+                 * set the top-down propagated type
+                 */
+                if (position >= 0) {
+                    AssignOperator originalAssign = (AssignOperator) currentOperator;
+                    List<Mutable<ILogicalExpression>> expressionRefs = originalAssign.getExpressions();
+                    ILogicalExpression expr = expressionRefs.get(position).getValue();
+                    if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                        AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+                        // that expression has been rewritten, and it will not
+                        // fail but just return false
+                        if (TypeComputerUtilities.getRequiredType(funcExpr) != null) {
+                            context.computeAndSetTypeEnvironmentForOperator(assignOp);
+                            return false;
+                        }
+                        IVariableTypeEnvironment assignEnv = assignOp.computeOutputTypeEnvironment(context);
+                        StaticTypeCastUtil.rewriteFuncExpr(funcExpr, requiredRecordType, inputRecordType, assignEnv);
+                    }
+                    context.computeAndSetTypeEnvironmentForOperator(originalAssign);
+                }
+            }
+            if (currentOperator.getInputs().size() > 0)
+                currentOperator = (AbstractLogicalOperator) currentOperator.getInputs().get(0).getValue();
+            else
+                break;
+        } while (currentOperator != null);
+        return true;
+    }
+
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceTransactionCommitByAssignOpRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/LoadRecordFieldsRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/LoadRecordFieldsRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/LoadRecordFieldsRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/LoadRecordFieldsRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestGroupByRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestGroupByRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestGroupByRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestGroupByRule.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestedSubplanToJoinRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestedSubplanToJoinRule.java
new file mode 100644
index 0000000..c5d415e
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/NestedSubplanToJoinRule.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.optimizer.rules;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractOperatorWithNestedPlans;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.util.OperatorPropertiesUtil;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+/**
+ * replace Subplan operators with nested loop joins where the join condition is true, if the Subplan
+ * does not contain free variables (does not have correlations to the input stream).
+ * 
+ * @author yingyib
+ */
+public class NestedSubplanToJoinRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+        return false;
+    }
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+        if (context.checkIfInDontApplySet(this, opRef.getValue()))
+            return false;
+        context.addToDontApplySet(this, opRef.getValue());
+
+        ILogicalOperator op1 = opRef.getValue();
+        if (op1.getInputs().size() == 0) {
+            return false;
+        }
+
+        boolean rewritten = false;
+        for (int index = 0; index < op1.getInputs().size(); index++) {
+            AbstractLogicalOperator child = (AbstractLogicalOperator) op1.getInputs().get(index).getValue();
+            if (child.getOperatorTag() != LogicalOperatorTag.SUBPLAN) {
+                continue;
+            }
+
+            AbstractOperatorWithNestedPlans subplan = (AbstractOperatorWithNestedPlans) child;
+            Set<LogicalVariable> freeVars = new HashSet<LogicalVariable>();
+            OperatorPropertiesUtil.getFreeVariablesInSubplans(subplan, freeVars);
+            if (!freeVars.isEmpty()) {
+                /**
+                 * the subplan is correlated with the outer plan, other rules can deal with it
+                 */
+                continue;
+            }
+
+            /** get the input operator of the subplan operator */
+            ILogicalOperator subplanInput = subplan.getInputs().get(0).getValue();
+
+            /** get all nested top operators */
+            List<ILogicalPlan> nestedPlans = subplan.getNestedPlans();
+            List<Mutable<ILogicalOperator>> nestedRoots = new ArrayList<Mutable<ILogicalOperator>>();
+            for (ILogicalPlan nestedPlan : nestedPlans) {
+                nestedRoots.addAll(nestedPlan.getRoots());
+            }
+            if (nestedRoots.size() == 0) {
+                /** there is no nested top operators */
+                return false;
+            }
+
+            /** expend the input and roots into a DAG of nested loop joins */
+            Mutable<ILogicalExpression> expr = new MutableObject<ILogicalExpression>(ConstantExpression.TRUE);
+            Mutable<ILogicalOperator> nestedRootRef = nestedRoots.get(0);
+            ILogicalOperator join = new LeftOuterJoinOperator(expr, new MutableObject<ILogicalOperator>(subplanInput),
+                    nestedRootRef);
+
+            /** rewrite the nested tuple source to be empty tuple source */
+            rewriteNestedTupleSource(nestedRootRef);
+
+            for (int i = 1; i < nestedRoots.size(); i++) {
+                join = new LeftOuterJoinOperator(expr, new MutableObject<ILogicalOperator>(join), nestedRoots.get(i));
+            }
+            op1.getInputs().get(index).setValue(join);
+            context.computeAndSetTypeEnvironmentForOperator(join);
+            rewritten = true;
+        }
+        return rewritten;
+    }
+
+    /**
+     * rewrite NestedTupleSource operators to EmptyTupleSource operators
+     * 
+     * @param nestedRootRef
+     */
+    private void rewriteNestedTupleSource(Mutable<ILogicalOperator> nestedRootRef) {
+        AbstractLogicalOperator nestedRoot = (AbstractLogicalOperator) nestedRootRef.getValue();
+        if (nestedRoot.getOperatorTag() == LogicalOperatorTag.NESTEDTUPLESOURCE) {
+            nestedRootRef.setValue(new EmptyTupleSourceOperator());
+        }
+        List<Mutable<ILogicalOperator>> inputs = nestedRoot.getInputs();
+        for (Mutable<ILogicalOperator> input : inputs) {
+            rewriteNestedTupleSource(input);
+        }
+    }
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PullPositionalVariableFromUnnestRule.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
new file mode 100644
index 0000000..bee8c40
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.optimizer.rules;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+/**
+ * Pushes aggregate functions into a stand alone aggregate operator (no group by). 
+ */
+public class PushAggFuncIntoStandaloneAggregateRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+        return false;
+    }
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+        // Pattern to match: assign <-- aggregate <-- !(group-by)
+        AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
+        if (op.getOperatorTag() != LogicalOperatorTag.ASSIGN) {
+            return false;
+        }
+        Mutable<ILogicalOperator> opRef2 = op.getInputs().get(0);
+        AbstractLogicalOperator op2 = (AbstractLogicalOperator) opRef2.getValue();
+        if (op2.getOperatorTag() != LogicalOperatorTag.AGGREGATE) {
+            return false;
+        }
+        // If there's a group by below the agg, then we want to have the agg pushed into the group by.
+        Mutable<ILogicalOperator> opRef3 = op2.getInputs().get(0);
+        AbstractLogicalOperator op3 = (AbstractLogicalOperator) opRef3.getValue();
+        if (op3.getOperatorTag() == LogicalOperatorTag.GROUP) {
+            return false;
+        }
+        
+        AssignOperator assignOp = (AssignOperator) op;
+        AggregateOperator aggOp = (AggregateOperator) op2;
+        if (aggOp.getVariables().size() != 1) {
+            return false;
+        }
+
+        // Make sure the agg expr is a listify.
+        ILogicalExpression aggExpr = aggOp.getExpressions().get(0).getValue();
+        if (aggExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+            return false;
+        }
+        AbstractFunctionCallExpression origAggFuncExpr = (AbstractFunctionCallExpression) aggExpr;
+        if (origAggFuncExpr.getFunctionIdentifier() != AsterixBuiltinFunctions.LISTIFY) {
+            return false;
+        }
+        
+        LogicalVariable aggVar = aggOp.getVariables().get(0);
+        List<LogicalVariable> used = new LinkedList<LogicalVariable>();
+        VariableUtilities.getUsedVariables(assignOp, used);
+        if (!used.contains(aggVar)) {
+            return false;
+        }
+        
+        Mutable<ILogicalExpression> srcAssignExprRef = fingAggFuncExprRef(assignOp.getExpressions(), aggVar);
+        if (srcAssignExprRef == null) {
+        	return false;
+        }
+        AbstractFunctionCallExpression assignFuncExpr = (AbstractFunctionCallExpression) srcAssignExprRef.getValue();
+        FunctionIdentifier aggFuncIdent = AsterixBuiltinFunctions.getAggregateFunction(assignFuncExpr.getFunctionIdentifier());
+        
+        // Push the agg func into the agg op.                
+        AbstractFunctionCallExpression aggOpExpr = (AbstractFunctionCallExpression) aggOp.getExpressions().get(0).getValue();
+        List<Mutable<ILogicalExpression>> aggArgs = new ArrayList<Mutable<ILogicalExpression>>();
+        aggArgs.add(aggOpExpr.getArguments().get(0));
+        AggregateFunctionCallExpression aggFuncExpr = AsterixBuiltinFunctions.makeAggregateFunctionExpression(aggFuncIdent, aggArgs);
+        aggOp.getExpressions().get(0).setValue(aggFuncExpr);
+        
+        // The assign now just "renames" the variable to make sure the upstream plan still works.
+        srcAssignExprRef.setValue(new VariableReferenceExpression(aggVar));
+        
+        context.computeAndSetTypeEnvironmentForOperator(aggOp);
+        context.computeAndSetTypeEnvironmentForOperator(assignOp);
+        
+        return true;
+    }
+    
+    private Mutable<ILogicalExpression> fingAggFuncExprRef(List<Mutable<ILogicalExpression>> exprRefs, LogicalVariable aggVar) {
+    	for (Mutable<ILogicalExpression> exprRef : exprRefs) {
+            ILogicalExpression expr = exprRef.getValue();
+            if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
+                continue;
+            }
+            AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+            FunctionIdentifier funcIdent = AsterixBuiltinFunctions.getAggregateFunction(funcExpr.getFunctionIdentifier());
+            if (funcIdent == null) {
+            	// Recursively look in func args.
+            	return fingAggFuncExprRef(funcExpr.getArguments(), aggVar);
+            }
+            // Check if this is the expr that uses aggVar.
+            Collection<LogicalVariable> usedVars = new HashSet<LogicalVariable>();
+            funcExpr.getUsedVariables(usedVars);
+            if (usedVars.contains(aggVar)) {
+            	return exprRef;
+            }
+    	}
+    	return null;
+    }
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushFieldAccessRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushFieldAccessRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushFieldAccessRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushFieldAccessRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushGroupByThroughProduct.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushGroupByThroughProduct.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushGroupByThroughProduct.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushGroupByThroughProduct.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushProperJoinThroughProduct.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushProperJoinThroughProduct.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushProperJoinThroughProduct.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushProperJoinThroughProduct.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushSimilarityFunctionsBelowJoin.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushSimilarityFunctionsBelowJoin.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushSimilarityFunctionsBelowJoin.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushSimilarityFunctionsBelowJoin.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveRedundantListifyRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveRedundantListifyRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveRedundantListifyRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveRedundantListifyRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/RemoveUnusedOneToOneEquiJoinRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetAsterixPhysicalOperatorsRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SimilarityCheckRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SimilarityCheckRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SimilarityCheckRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/SimilarityCheckRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/UnnestToDataScanRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/UnnestToDataScanRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/UnnestToDataScanRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/UnnestToDataScanRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodJobGenParams.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodUtils.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodUtils.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/AccessMethodUtils.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeAccessMethod.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeJobGenParams.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeJobGenParams.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeJobGenParams.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/BTreeJobGenParams.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IAccessMethod.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IAccessMethod.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IAccessMethod.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IOptimizableFuncExpr.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IOptimizableFuncExpr.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IOptimizableFuncExpr.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IOptimizableFuncExpr.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexJobGenParams.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexJobGenParams.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexJobGenParams.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/InvertedIndexJobGenParams.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableFuncExpr.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableFuncExpr.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableFuncExpr.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableFuncExpr.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeAccessMethod.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeJobGenParams.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeJobGenParams.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeJobGenParams.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/am/RTreeJobGenParams.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
new file mode 100644
index 0000000..6cb4d5c
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
@@ -0,0 +1,492 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.optimizer.rules.typecast;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.AString;
+import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.AsterixFunctionInfo;
+import edu.uci.ics.asterix.om.pointables.base.DefaultOpenFieldType;
+import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+
+/**
+ * This class is utility to do type cast.
+ * It offers two public methods:
+ * 1. public static boolean rewriteListExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
+ * IVariableTypeEnvironment env) throws AlgebricksException, which only enforces the list type recursively.
+ * 2. public static boolean rewriteFuncExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
+ * IVariableTypeEnvironment env) throws AlgebricksException, which enforces the list type and the record type recursively.
+ * 
+ * @author yingyib
+ */
+public class StaticTypeCastUtil {
+
+    /**
+     * This method is only called when funcExpr contains list constructor function calls.
+     * The List constructor is very special because a nested list is of type List<ANY>.
+     * However, the bottom-up type inference (InferTypeRule in algebricks) did not infer that so we need this method to enforce the type.
+     * We do not want to break the generality of algebricks so this method is called in an ASTERIX rule: @ IntroduceEnforcedListTypeRule} .
+     * 
+     * @param funcExpr
+     *            record constructor function expression
+     * @param requiredListType
+     *            required record type
+     * @param inputRecordType
+     * @param env
+     *            type environment
+     * @throws AlgebricksException
+     */
+    public static boolean rewriteListExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
+            IVariableTypeEnvironment env) throws AlgebricksException {
+        if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR) {
+            if (reqType.equals(BuiltinType.ANY)) {
+                reqType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
+            }
+            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
+                    env);
+        } else if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR) {
+            if (reqType.equals(BuiltinType.ANY)) {
+                reqType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
+            }
+            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
+                    env);
+        } else {
+            List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
+            boolean changed = false;
+            for (Mutable<ILogicalExpression> arg : args) {
+                ILogicalExpression argExpr = arg.getValue();
+                if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                    AbstractFunctionCallExpression argFuncExpr = (AbstractFunctionCallExpression) argExpr;
+                    IAType exprType = (IAType) env.getType(argFuncExpr);
+                    changed = changed || rewriteListExpr(argFuncExpr, exprType, exprType, env);
+                }
+            }
+            return changed;
+        }
+    }
+
+    /**
+     * This method is to recursively enforce required types, for the list type and the record type.
+     * The List constructor is very special because
+     * 1. a nested list in a list is of type List<ANY>;
+     * 2. a nested record in a list is of type Open_Record{}.
+     * The open record constructor is very special because
+     * 1. a nested list in the open part is of type List<ANY>;
+     * 2. a nested record in the open part is of type Open_Record{}.
+     * However, the bottom-up type inference (InferTypeRule in algebricks) did not infer that so we need this method to enforce the type.
+     * We do not want to break the generality of algebricks so this method is called in an ASTERIX rule: @ IntroduceStaticTypeCastRule} .
+     * 
+     * @param funcExpr
+     *            the function expression whose type needs to be top-down enforced
+     * @param reqType
+     *            the required type inferred from parent operators/expressions
+     * @param inputType
+     *            the current inferred
+     * @param env
+     *            the type environment
+     * @return true if the type is casted; otherwise, false.
+     * @throws AlgebricksException
+     */
+    public static boolean rewriteFuncExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
+            IVariableTypeEnvironment env) throws AlgebricksException {
+        /**
+         * sanity check: if there are list(ordered or unordered)/record variable expressions in the funcExpr, we will not do STATIC type casting
+         * because they are not "statically cast-able".
+         * instead, the record will be dynamically casted at the runtime
+         */
+        if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR) {
+            if (reqType.equals(BuiltinType.ANY)) {
+                reqType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
+            }
+            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
+                    env);
+        } else if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR) {
+            if (reqType.equals(BuiltinType.ANY)) {
+                reqType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
+            }
+            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
+                    env);
+        } else if (inputType.getTypeTag().equals(ATypeTag.RECORD)) {
+            if (reqType.equals(BuiltinType.ANY)) {
+                reqType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
+            }
+            return rewriteRecordFuncExpr(funcExpr, (ARecordType) reqType, (ARecordType) inputType, env);
+        } else {
+            List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
+            boolean changed = false;
+            for (Mutable<ILogicalExpression> arg : args) {
+                ILogicalExpression argExpr = arg.getValue();
+                if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                    AbstractFunctionCallExpression argFuncExpr = (AbstractFunctionCallExpression) argExpr;
+                    IAType exprType = (IAType) env.getType(argFuncExpr);
+                    changed = changed || rewriteFuncExpr(argFuncExpr, exprType, exprType, env);
+                }
+            }
+            return changed;
+        }
+    }
+
+    /**
+     * only called when funcExpr is record constructor
+     * 
+     * @param funcExpr
+     *            record constructor function expression
+     * @param requiredListType
+     *            required record type
+     * @param inputRecordType
+     * @param env
+     *            type environment
+     * @throws AlgebricksException
+     */
+    private static boolean rewriteRecordFuncExpr(AbstractFunctionCallExpression funcExpr,
+            ARecordType requiredRecordType, ARecordType inputRecordType, IVariableTypeEnvironment env)
+            throws AlgebricksException {
+        // if already rewritten, the required type is not null
+        if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
+            return false;
+        TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredRecordType, inputRecordType);
+        staticRecordTypeCast(funcExpr, requiredRecordType, inputRecordType, env);
+        return true;
+    }
+
+    /**
+     * only called when funcExpr is list constructor
+     * 
+     * @param funcExpr
+     *            list constructor function expression
+     * @param requiredListType
+     *            required list type
+     * @param inputListType
+     * @param env
+     *            type environment
+     * @throws AlgebricksException
+     */
+    private static boolean rewriteListFuncExpr(AbstractFunctionCallExpression funcExpr,
+            AbstractCollectionType requiredListType, AbstractCollectionType inputListType, IVariableTypeEnvironment env)
+            throws AlgebricksException {
+        if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
+            return false;
+
+        TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredListType, inputListType);
+        List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
+
+        IAType itemType = requiredListType.getItemType();
+        IAType inputItemType = inputListType.getItemType();
+        for (int j = 0; j < args.size(); j++) {
+            ILogicalExpression arg = args.get(j).getValue();
+            if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) arg;
+                IAType currentItemType = (IAType) env.getType(argFunc);
+                if (inputItemType == null || inputItemType == BuiltinType.ANY) {
+                    currentItemType = (IAType) env.getType(argFunc);
+                    rewriteFuncExpr(argFunc, itemType, currentItemType, env);
+                } else {
+                    rewriteFuncExpr(argFunc, itemType, inputItemType, env);
+                }
+            }
+        }
+        return true;
+    }
+
+    /**
+     * This method statically cast the type of records from their current type to the required type.
+     * 
+     * @param func
+     *            The record constructor expression.
+     * @param reqType
+     *            The required type.
+     * @param inputType
+     *            The current type.
+     * @param env
+     *            The type environment.
+     * @throws AlgebricksException
+     */
+    private static void staticRecordTypeCast(AbstractFunctionCallExpression func, ARecordType reqType,
+            ARecordType inputType, IVariableTypeEnvironment env) throws AlgebricksException {
+        IAType[] reqFieldTypes = reqType.getFieldTypes();
+        String[] reqFieldNames = reqType.getFieldNames();
+        IAType[] inputFieldTypes = inputType.getFieldTypes();
+        String[] inputFieldNames = inputType.getFieldNames();
+
+        int[] fieldPermutation = new int[reqFieldTypes.length];
+        boolean[] nullFields = new boolean[reqFieldTypes.length];
+        boolean[] openFields = new boolean[inputFieldTypes.length];
+
+        Arrays.fill(nullFields, false);
+        Arrays.fill(openFields, true);
+        Arrays.fill(fieldPermutation, -1);
+
+        // forward match: match from actual to required
+        boolean matched = false;
+        for (int i = 0; i < inputFieldNames.length; i++) {
+            String fieldName = inputFieldNames[i];
+            IAType fieldType = inputFieldTypes[i];
+
+            if (2 * i + 1 > func.getArguments().size())
+                throw new AlgebricksException("expression index out of bound");
+
+            // 2*i+1 is the index of field value expression
+            ILogicalExpression arg = func.getArguments().get(2 * i + 1).getValue();
+            matched = false;
+            for (int j = 0; j < reqFieldNames.length; j++) {
+                String reqFieldName = reqFieldNames[j];
+                IAType reqFieldType = reqFieldTypes[j];
+                if (fieldName.equals(reqFieldName)) {
+                    //type matched
+                    if (fieldType.equals(reqFieldType)) {
+                        fieldPermutation[j] = i;
+                        openFields[i] = false;
+                        matched = true;
+
+                        if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                            ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
+                            rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
+                        }
+                        break;
+                    }
+
+                    // match the optional field
+                    if (reqFieldType.getTypeTag() == ATypeTag.UNION
+                            && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
+                        IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
+                                NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+                        reqFieldType = itemType;
+                        if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
+                            fieldPermutation[j] = i;
+                            openFields[i] = false;
+                            matched = true;
+
+                            // rewrite record expr
+                            if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                                ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
+                                rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
+                            }
+                            break;
+                        }
+                    }
+
+                    // match the optional type input for a non-optional field
+                    // delay that to runtime by calling the not-null function
+                    if (fieldType.getTypeTag() == ATypeTag.UNION
+                            && NonTaggedFormatUtil.isOptionalField((AUnionType) fieldType)) {
+                        IAType itemType = ((AUnionType) fieldType).getUnionList().get(
+                                NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+                        if (reqFieldType.equals(itemType)) {
+                            fieldPermutation[j] = i;
+                            openFields[i] = false;
+                            matched = true;
+
+                            ScalarFunctionCallExpression notNullFunc = new ScalarFunctionCallExpression(
+                                    new AsterixFunctionInfo(AsterixBuiltinFunctions.NOT_NULL));
+                            notNullFunc.getArguments().add(new MutableObject<ILogicalExpression>(arg));
+                            //wrap the not null function to the original function
+                            func.getArguments().get(2 * i + 1).setValue(notNullFunc);
+                            break;
+                        }
+                    }
+
+                    // match the record field: need cast
+                    if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                        ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
+                        rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
+                        fieldPermutation[j] = i;
+                        openFields[i] = false;
+                        matched = true;
+                        break;
+                    }
+                }
+            }
+            // the input has extra fields
+            if (!matched && !reqType.isOpen())
+                throw new AlgebricksException("static type mismatch: including an extra closed field " + fieldName);
+        }
+
+        // backward match: match from required to actual
+        for (int i = 0; i < reqFieldNames.length; i++) {
+            String reqFieldName = reqFieldNames[i];
+            IAType reqFieldType = reqFieldTypes[i];
+            matched = false;
+            for (int j = 0; j < inputFieldNames.length; j++) {
+                String fieldName = inputFieldNames[j];
+                IAType fieldType = inputFieldTypes[j];
+                if (!fieldName.equals(reqFieldName))
+                    continue;
+                // should check open field here
+                // because number of entries in fieldPermuations is the
+                // number of required schema fields
+                // here we want to check if an input field is matched
+                // the entry index of fieldPermuatons is req field index
+                if (!openFields[j]) {
+                    matched = true;
+                    break;
+                }
+
+                // match the optional field
+                if (reqFieldType.getTypeTag() == ATypeTag.UNION
+                        && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
+                    IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
+                            NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+                    if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
+                        matched = true;
+                        break;
+                    }
+                }
+            }
+            if (matched)
+                continue;
+
+            if (reqFieldType.getTypeTag() == ATypeTag.UNION
+                    && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
+                // add a null field
+                nullFields[i] = true;
+            } else {
+                // no matched field in the input for a required closed field
+                throw new AlgebricksException("static type mismatch: miss a required closed field " + reqFieldName);
+            }
+        }
+
+        List<Mutable<ILogicalExpression>> arguments = func.getArguments();
+        List<Mutable<ILogicalExpression>> originalArguments = new ArrayList<Mutable<ILogicalExpression>>();
+        originalArguments.addAll(arguments);
+        arguments.clear();
+        // re-order the closed part and fill in null fields
+        for (int i = 0; i < fieldPermutation.length; i++) {
+            int pos = fieldPermutation[i];
+            if (pos >= 0) {
+                arguments.add(originalArguments.get(2 * pos));
+                arguments.add(originalArguments.get(2 * pos + 1));
+            }
+            if (nullFields[i]) {
+                // add a null field
+                arguments.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                        new AString(reqFieldNames[i])))));
+                arguments.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                        ANull.NULL))));
+            }
+        }
+
+        // add the open part
+        for (int i = 0; i < openFields.length; i++) {
+            if (openFields[i]) {
+                arguments.add(originalArguments.get(2 * i));
+                Mutable<ILogicalExpression> expRef = originalArguments.get(2 * i + 1);
+                ILogicalExpression argExpr = expRef.getValue();
+                List<LogicalVariable> parameterVars = new ArrayList<LogicalVariable>();
+                argExpr.getUsedVariables(parameterVars);
+                // we need to handle open fields recursively by their default
+                // types
+                // for list, their item type is any
+                // for record, their
+                boolean castInjected = false;
+                if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL
+                        || argExpr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
+                    IAType reqFieldType = inputFieldTypes[i];
+                    // do not enforce nested type in the case of no-used variables
+                    if (inputFieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
+                        reqFieldType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
+                        if (!inputFieldTypes[i].equals(reqFieldType) && parameterVars.size() > 0) {
+                            //inject dynamic type casting
+                            injectCastFunction(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CAST_RECORD),
+                                    reqFieldType, inputFieldTypes[i], expRef, argExpr);
+                            castInjected = true;
+                        }
+                    }
+                    if (inputFieldTypes[i].getTypeTag() == ATypeTag.ORDEREDLIST) {
+                        reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
+                        if (!inputFieldTypes[i].equals(reqFieldType) && parameterVars.size() > 0) {
+                            //inject dynamic type casting
+                            injectCastFunction(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CAST_LIST),
+                                    reqFieldType, inputFieldTypes[i], expRef, argExpr);
+                            castInjected = true;
+                        }
+                    }
+                    if (inputFieldTypes[i].getTypeTag() == ATypeTag.UNORDEREDLIST) {
+                        reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
+                        if (!inputFieldTypes[i].equals(reqFieldType) && parameterVars.size() > 0) {
+                            //inject dynamic type casting
+                            injectCastFunction(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CAST_LIST),
+                                    reqFieldType, inputFieldTypes[i], expRef, argExpr);
+                            castInjected = true;
+                        }
+                    }
+                    if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+                        //recursively rewrite function arguments
+                        if (TypeComputerUtilities.getRequiredType((AbstractFunctionCallExpression) argExpr) == null
+                                && reqFieldType != null) {
+                            if (castInjected) {
+                                //rewrite the arg expression inside the dynamic cast
+                                ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) argExpr;
+                                rewriteFuncExpr(argFunc, inputFieldTypes[i], inputFieldTypes[i], env);
+                            } else {
+                                //rewrite arg
+                                ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) argExpr;
+                                rewriteFuncExpr(argFunc, reqFieldType, inputFieldTypes[i], env);
+                            }
+                        }
+                    }
+                }
+                arguments.add(expRef);
+            }
+        }
+    }
+
+    /**
+     * Inject a dynamic cast function wrapping an existing expression
+     * 
+     * @param funcInfo
+     *            the cast function
+     * @param reqType
+     *            the required type
+     * @param inputType
+     *            the original type
+     * @param exprRef
+     *            the expression reference
+     * @param argExpr
+     *            the original expression
+     */
+    private static void injectCastFunction(IFunctionInfo funcInfo, IAType reqType, IAType inputType,
+            Mutable<ILogicalExpression> exprRef, ILogicalExpression argExpr) {
+        ScalarFunctionCallExpression cast = new ScalarFunctionCallExpression(funcInfo);
+        cast.getArguments().add(new MutableObject<ILogicalExpression>(argExpr));
+        exprRef.setValue(cast);
+        TypeComputerUtilities.setRequiredAndInputTypes(cast, reqType, inputType);
+    }
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AbstractAqlTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AbstractAqlTranslator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AbstractAqlTranslator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AbstractAqlTranslator.java
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
new file mode 100644
index 0000000..09fc2b9
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
@@ -0,0 +1,1424 @@
+package edu.uci.ics.asterix.translator;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.concurrent.atomic.AtomicLong;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Expression.Kind;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.ListConstructor.Type;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OperatorType;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause.OrderModifier;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression.Quantifier;
+import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr.Sign;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
+import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
+import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
+import edu.uci.ics.asterix.metadata.declared.AqlSourceId;
+import edu.uci.ics.asterix.metadata.declared.ResultSetDataSink;
+import edu.uci.ics.asterix.metadata.declared.ResultSetSinkId;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AString;
+import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.AsterixFunctionInfo;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.formats.FormatUtils;
+import edu.uci.ics.asterix.translator.CompiledStatements.ICompiledDmlStatement;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.Counter;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation.BroadcastSide;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistributeResultOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SinkOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteResultOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
+import edu.uci.ics.hyracks.api.io.FileReference;
+import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
+
+/**
+ * Each visit returns a pair of an operator and a variable. The variable
+ * corresponds to the new column, if any, added to the tuple flow. E.g., for
+ * Unnest, the column is the variable bound to the elements in the list, for
+ * Subplan it is null. The first argument of a visit method is the expression
+ * which is translated. The second argument of a visit method is the tuple
+ * source for the current subtree.
+ */
+
+public class AqlExpressionToPlanTranslator extends AbstractAqlTranslator implements
+        IAqlExpressionVisitor<Pair<ILogicalOperator, LogicalVariable>, Mutable<ILogicalOperator>> {
+
+    private final AqlMetadataProvider metadataProvider;
+    private final TranslationContext context;
+    private final String outputDatasetName;
+    private final ICompiledDmlStatement stmt;
+    private static AtomicLong outputFileID = new AtomicLong(0);
+    private static final String OUTPUT_FILE_PREFIX = "OUTPUT_";
+    private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1);
+
+    public AqlExpressionToPlanTranslator(AqlMetadataProvider metadataProvider, int currentVarCounter,
+            String outputDatasetName, ICompiledDmlStatement stmt) {
+        this.context = new TranslationContext(new Counter(currentVarCounter));
+        this.outputDatasetName = outputDatasetName;
+        this.stmt = stmt;
+        this.metadataProvider = metadataProvider;
+    }
+
+    public int getVarCounter() {
+        return context.getVarCounter();
+    }
+
+    public ILogicalPlan translate(Query expr) throws AlgebricksException, AsterixException {
+        IDataFormat format = FormatUtils.getDefaultFormat();
+        format.registerRuntimeFunctions();
+
+        Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, new MutableObject<ILogicalOperator>(
+                new EmptyTupleSourceOperator()));
+
+        ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<Mutable<ILogicalOperator>>();
+        ILogicalOperator topOp = p.first;
+        ProjectOperator project = (ProjectOperator) topOp;
+        LogicalVariable resVar = project.getVariables().get(0);
+        if (outputDatasetName == null) {
+            FileSplit outputFileSplit = metadataProvider.getOutputFile();
+            if (outputFileSplit == null) {
+                outputFileSplit = getDefaultOutputFileLocation();
+            }
+            metadataProvider.setOutputFile(outputFileSplit);
+            String resultNodeName = outputFileSplit.getNodeName();
+
+            List<Mutable<ILogicalExpression>> writeExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
+            writeExprList.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(resVar)));
+            ResultSetSinkId rssId = new ResultSetSinkId(metadataProvider.getResultSetId());
+            ResultSetDataSink sink = new ResultSetDataSink(rssId, null);
+            topOp = new DistributeResultOperator(writeExprList, sink);
+            topOp.getInputs().add(new MutableObject<ILogicalOperator>(project));
+        } else {
+
+            AqlDataSource targetDatasource = validateDatasetInfo(metadataProvider, stmt.getDataverseName(),
+                    stmt.getDatasetName());
+            ArrayList<LogicalVariable> vars = new ArrayList<LogicalVariable>();
+            ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
+            List<Mutable<ILogicalExpression>> varRefsForLoading = new ArrayList<Mutable<ILogicalExpression>>();
+            List<String> partitionKeys = DatasetUtils.getPartitioningKeys(targetDatasource.getDataset());
+            for (String keyFieldName : partitionKeys) {
+                IFunctionInfo finfoAccess = AsterixBuiltinFunctions
+                        .getAsterixFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME);
+                @SuppressWarnings("unchecked")
+                ScalarFunctionCallExpression f = new ScalarFunctionCallExpression(finfoAccess,
+                        new MutableObject<ILogicalExpression>(new VariableReferenceExpression(METADATA_DUMMY_VAR)),
+                        new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                                new AString(keyFieldName)))));
+                f.substituteVar(METADATA_DUMMY_VAR, resVar);
+                exprs.add(new MutableObject<ILogicalExpression>(f));
+                LogicalVariable v = context.newVar();
+                vars.add(v);
+                varRefsForLoading.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
+            }
+            AssignOperator assign = new AssignOperator(vars, exprs);
+            assign.getInputs().add(new MutableObject<ILogicalOperator>(project));
+
+            Mutable<ILogicalExpression> varRef = new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
+                    resVar));
+            ILogicalOperator leafOperator = null;
+
+            switch (stmt.getKind()) {
+                case WRITE_FROM_QUERY_RESULT: {
+                    leafOperator = new WriteResultOperator(targetDatasource, varRef, varRefsForLoading);
+                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(assign));
+                    break;
+                }
+                case INSERT: {
+                    ILogicalOperator insertOp = new InsertDeleteOperator(targetDatasource, varRef, varRefsForLoading,
+                            InsertDeleteOperator.Kind.INSERT);
+                    insertOp.getInputs().add(new MutableObject<ILogicalOperator>(assign));
+                    leafOperator = new SinkOperator();
+                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(insertOp));
+                    break;
+                }
+                case DELETE: {
+                    ILogicalOperator deleteOp = new InsertDeleteOperator(targetDatasource, varRef, varRefsForLoading,
+                            InsertDeleteOperator.Kind.DELETE);
+                    deleteOp.getInputs().add(new MutableObject<ILogicalOperator>(assign));
+                    leafOperator = new SinkOperator();
+                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(deleteOp));
+                    break;
+                }
+                case BEGIN_FEED: {
+                    ILogicalOperator insertOp = new InsertDeleteOperator(targetDatasource, varRef, varRefsForLoading,
+                            InsertDeleteOperator.Kind.INSERT);
+                    insertOp.getInputs().add(new MutableObject<ILogicalOperator>(assign));
+                    leafOperator = new SinkOperator();
+                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(insertOp));
+                    break;
+                }
+            }
+            topOp = leafOperator;
+        }
+        globalPlanRoots.add(new MutableObject<ILogicalOperator>(topOp));
+        ILogicalPlan plan = new ALogicalPlanImpl(globalPlanRoots);
+        return plan;
+    }
+
+    private AqlDataSource validateDatasetInfo(AqlMetadataProvider metadataProvider, String dataverseName,
+            String datasetName) throws AlgebricksException {
+        Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Cannot find dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+
+        AqlSourceId sourceId = new AqlSourceId(dataverseName, datasetName);
+        String itemTypeName = dataset.getItemTypeName();
+        IAType itemType = metadataProvider.findType(dataverseName, itemTypeName);
+        AqlDataSource dataSource = new AqlDataSource(sourceId, dataset, itemType);
+        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
+            throw new AlgebricksException("Cannot write output to an external dataset.");
+        }
+        return dataSource;
+    }
+
+    private FileSplit getDefaultOutputFileLocation() throws MetadataException {
+        String outputDir = System.getProperty("java.io.tmpDir");
+        String filePath = outputDir + System.getProperty("file.separator") + OUTPUT_FILE_PREFIX
+                + outputFileID.incrementAndGet();
+        return new FileSplit(AsterixProperties.INSTANCE.getMetadataNodeName(), new FileReference(new File(filePath)));
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitForClause(ForClause fc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        LogicalVariable v = context.newVar(fc.getVarExpr());
+        Expression inExpr = fc.getInExpr();
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(inExpr, tupSource);
+        ILogicalOperator returnedOp;
+
+        if (fc.getPosVarExpr() == null) {
+            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)));
+        } else {
+            LogicalVariable pVar = context.newVar(fc.getPosVarExpr());
+            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
+                    pVar, BuiltinType.AINT32);
+        }
+        returnedOp.getInputs().add(eo.second);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLetClause(LetClause lc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        LogicalVariable v;
+        ILogicalOperator returnedOp;
+
+        switch (lc.getBindingExpr().getKind()) {
+            case VARIABLE_EXPRESSION: {
+                v = context.newVar(lc.getVarExpr());
+                LogicalVariable prev = context.getVar(((VariableExpr) lc.getBindingExpr()).getVar().getId());
+                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(
+                        new VariableReferenceExpression(prev)));
+                returnedOp.getInputs().add(tupSource);
+                break;
+            }
+            default: {
+                v = context.newVar(lc.getVarExpr());
+                Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(lc.getBindingExpr(),
+                        tupSource);
+                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(eo.first));
+                returnedOp.getInputs().add(eo.second);
+                break;
+            }
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFlworExpression(FLWOGRExpression flwor,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Mutable<ILogicalOperator> flworPlan = tupSource;
+        boolean isTop = context.isTopFlwor();
+        if (isTop) {
+            context.setTopFlwor(false);
+        }
+        for (Clause c : flwor.getClauseList()) {
+            Pair<ILogicalOperator, LogicalVariable> pC = c.accept(this, flworPlan);
+            flworPlan = new MutableObject<ILogicalOperator>(pC.first);
+        }
+
+        Expression r = flwor.getReturnExpr();
+        boolean noFlworClause = flwor.noForClause();
+
+        if (r.getKind() == Kind.VARIABLE_EXPRESSION) {
+            VariableExpr v = (VariableExpr) r;
+            LogicalVariable var = context.getVar(v.getVar().getId());
+
+            return produceFlwrResult(noFlworClause, isTop, flworPlan, var);
+
+        } else {
+            Mutable<ILogicalOperator> baseOp = new MutableObject<ILogicalOperator>(flworPlan.getValue());
+            Pair<ILogicalOperator, LogicalVariable> rRes = r.accept(this, baseOp);
+            ILogicalOperator rOp = rRes.first;
+            ILogicalOperator resOp;
+            if (expressionNeedsNoNesting(r)) {
+                baseOp.setValue(flworPlan.getValue());
+                resOp = rOp;
+            } else {
+                SubplanOperator s = new SubplanOperator(rOp);
+                s.getInputs().add(flworPlan);
+                resOp = s;
+                baseOp.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
+            }
+            Mutable<ILogicalOperator> resOpRef = new MutableObject<ILogicalOperator>(resOp);
+            return produceFlwrResult(noFlworClause, isTop, resOpRef, rRes.second);
+        }
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFieldAccessor(FieldAccessor fa,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(fa.getExpr(), tupSource);
+        LogicalVariable v = context.newVar();
+        AbstractFunctionCallExpression fldAccess = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME));
+        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+        ILogicalExpression faExpr = new ConstantExpression(new AsterixConstantValue(new AString(fa.getIdent()
+                .getValue())));
+        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(faExpr));
+        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(fldAccess));
+        a.getInputs().add(p.second);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitIndexAccessor(IndexAccessor ia,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(ia.getExpr(), tupSource);
+        LogicalVariable v = context.newVar();
+        AbstractFunctionCallExpression f;
+        int i = ia.getIndex();
+        if (i == IndexAccessor.ANY) {
+            f = new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.ANY_COLLECTION_MEMBER));
+            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+        } else {
+            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.GET_ITEM));
+            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+            f.getArguments().add(
+                    new MutableObject<ILogicalExpression>(new ConstantExpression(
+                            new AsterixConstantValue(new AInt32(i)))));
+        }
+        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
+        a.getInputs().add(p.second);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitCallExpr(CallExpr fcall, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        LogicalVariable v = context.newVar();
+        FunctionSignature signature = fcall.getFunctionSignature();
+        List<Mutable<ILogicalExpression>> args = new ArrayList<Mutable<ILogicalExpression>>();
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        for (Expression expr : fcall.getExprList()) {
+            switch (expr.getKind()) {
+                case VARIABLE_EXPRESSION: {
+                    LogicalVariable var = context.getVar(((VariableExpr) expr).getVar().getId());
+                    args.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+                    break;
+                }
+                case LITERAL_EXPRESSION: {
+                    LiteralExpr val = (LiteralExpr) expr;
+                    args.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                            ConstantHelper.objectFromLiteral(val.getValue())))));
+                    break;
+                }
+                default: {
+                    Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
+                    AbstractLogicalOperator o1 = (AbstractLogicalOperator) eo.second.getValue();
+                    args.add(new MutableObject<ILogicalExpression>(eo.first));
+                    if (o1 != null && !(o1.getOperatorTag() == LogicalOperatorTag.ASSIGN && hasOnlyChild(o1, topOp))) {
+                        topOp = eo.second;
+                    }
+                    break;
+                }
+            }
+        }
+
+        AbstractFunctionCallExpression f;
+        if ((f = lookupUserDefinedFunction(signature, args)) == null) {
+            f = lookupBuiltinFunction(signature.getName(), signature.getArity(), args);
+        }
+
+        if (f == null) {
+            throw new AsterixException(" Unknown function " + signature.getName() + "@" + signature.getArity());
+        }
+
+        // Put hints into function call expr.
+        if (fcall.hasHints()) {
+            for (IExpressionAnnotation hint : fcall.getHints()) {
+                f.getAnnotations().put(hint, hint);
+            }
+        }
+
+        AssignOperator op = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
+        if (topOp != null) {
+            op.getInputs().add(topOp);
+        }
+
+        return new Pair<ILogicalOperator, LogicalVariable>(op, v);
+    }
+
+    private AbstractFunctionCallExpression lookupUserDefinedFunction(FunctionSignature signature,
+            List<Mutable<ILogicalExpression>> args) throws MetadataException {
+        if (signature.getNamespace() == null) {
+            return null;
+        }
+        Function function = MetadataManager.INSTANCE.getFunction(metadataProvider.getMetadataTxnContext(), signature);
+        if (function == null) {
+            return null;
+        }
+        AbstractFunctionCallExpression f = null;
+        if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_AQL)) {
+            IFunctionInfo finfo = new AsterixFunctionInfo(signature);
+            return new ScalarFunctionCallExpression(finfo, args);
+        } else {
+            throw new MetadataException(" User defined functions written in " + function.getLanguage()
+                    + " are not supported");
+        }
+    }
+
+    private AbstractFunctionCallExpression lookupBuiltinFunction(String functionName, int arity,
+            List<Mutable<ILogicalExpression>> args) {
+        AbstractFunctionCallExpression f = null;
+        FunctionIdentifier fi = new FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionName, arity);
+        AsterixFunctionInfo afi = AsterixBuiltinFunctions.lookupFunction(fi);
+        FunctionIdentifier builtinAquafi = afi == null ? null : afi.getFunctionIdentifier();
+
+        if (builtinAquafi != null) {
+            fi = builtinAquafi;
+        } else {
+            fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, functionName, arity);
+            afi = AsterixBuiltinFunctions.lookupFunction(fi);
+            if (afi == null) {
+                return null;
+            }
+        }
+        if (AsterixBuiltinFunctions.isBuiltinAggregateFunction(fi)) {
+            f = AsterixBuiltinFunctions.makeAggregateFunctionExpression(fi, args);
+        } else if (AsterixBuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
+            UnnestingFunctionCallExpression ufce = new UnnestingFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(fi), args);
+            ufce.setReturnsUniqueValues(AsterixBuiltinFunctions.returnsUniqueValues(fi));
+            f = ufce;
+        } else {
+            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fi), args);
+        }
+        return f;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDecl(FunctionDecl fd,
+            Mutable<ILogicalOperator> tupSource) {
+        // TODO Auto-generated method stub
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitGroupbyClause(GroupbyClause gc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        GroupByOperator gOp = new GroupByOperator();
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (GbyVariableExpressionPair ve : gc.getGbyPairList()) {
+            LogicalVariable v;
+            VariableExpr vexpr = ve.getVar();
+            if (vexpr != null) {
+                v = context.newVar(vexpr);
+            } else {
+                v = context.newVar();
+            }
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
+            gOp.addGbyExpression(v, eo.first);
+            topOp = eo.second;
+        }
+        for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
+            LogicalVariable v;
+            VariableExpr vexpr = ve.getVar();
+            if (vexpr != null) {
+                v = context.newVar(vexpr);
+            } else {
+                v = context.newVar();
+            }
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
+            gOp.addDecorExpression(v, eo.first);
+            topOp = eo.second;
+        }
+        gOp.getInputs().add(topOp);
+
+        for (VariableExpr var : gc.getWithVarList()) {
+            LogicalVariable aggVar = context.newVar();
+            LogicalVariable oldVar = context.getVar(var);
+            List<Mutable<ILogicalExpression>> flArgs = new ArrayList<Mutable<ILogicalExpression>>(1);
+            flArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oldVar)));
+            AggregateFunctionCallExpression fListify = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
+                    AsterixBuiltinFunctions.LISTIFY, flArgs);
+            AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar),
+                    (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fListify)));
+
+            agg.getInputs().add(
+                    new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
+                            new MutableObject<ILogicalOperator>(gOp))));
+            ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(agg));
+            gOp.getNestedPlans().add(plan);
+            // Hide the variable that was part of the "with", replacing it with
+            // the one bound by the aggregation op.
+            context.setVar(var, aggVar);
+        }
+
+        gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
+        return new Pair<ILogicalOperator, LogicalVariable>(gOp, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitIfExpr(IfExpr ifexpr, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        // In the most general case, IfThenElse is translated in the following
+        // way.
+        //
+        // We assign the result of the condition to one variable varCond.
+        // We create one subplan which contains the plan for the "then" branch,
+        // on top of which there is a selection whose condition is varCond.
+        // Similarly, we create one subplan for the "else" branch, in which the
+        // selection is not(varCond).
+        // Finally, we concatenate the results. (??)
+
+        Pair<ILogicalOperator, LogicalVariable> pCond = ifexpr.getCondExpr().accept(this, tupSource);
+        ILogicalOperator opCond = pCond.first;
+        LogicalVariable varCond = pCond.second;
+
+        SubplanOperator sp = new SubplanOperator();
+        Mutable<ILogicalOperator> nestedSource = new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
+                new MutableObject<ILogicalOperator>(sp)));
+
+        Pair<ILogicalOperator, LogicalVariable> pThen = ifexpr.getThenExpr().accept(this, nestedSource);
+        SelectOperator sel1 = new SelectOperator(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
+                varCond)));
+        sel1.getInputs().add(new MutableObject<ILogicalOperator>(pThen.first));
+
+        Pair<ILogicalOperator, LogicalVariable> pElse = ifexpr.getElseExpr().accept(this, nestedSource);
+        AbstractFunctionCallExpression notVarCond = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), new MutableObject<ILogicalExpression>(
+                        new VariableReferenceExpression(varCond)));
+        SelectOperator sel2 = new SelectOperator(new MutableObject<ILogicalExpression>(notVarCond));
+        sel2.getInputs().add(new MutableObject<ILogicalOperator>(pElse.first));
+
+        ILogicalPlan p1 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel1));
+        sp.getNestedPlans().add(p1);
+        ILogicalPlan p2 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel2));
+        sp.getNestedPlans().add(p2);
+
+        Mutable<ILogicalOperator> opCondRef = new MutableObject<ILogicalOperator>(opCond);
+        sp.getInputs().add(opCondRef);
+
+        LogicalVariable resV = context.newVar();
+        AbstractFunctionCallExpression concatNonNull = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CONCAT_NON_NULL),
+                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pThen.second)),
+                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pElse.second)));
+        AssignOperator a = new AssignOperator(resV, new MutableObject<ILogicalExpression>(concatNonNull));
+        a.getInputs().add(new MutableObject<ILogicalOperator>(sp));
+
+        return new Pair<ILogicalOperator, LogicalVariable>(a, resV);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLiteralExpr(LiteralExpr l, Mutable<ILogicalOperator> tupSource) {
+        LogicalVariable var = context.newVar();
+        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(new ConstantExpression(
+                new AsterixConstantValue(ConstantHelper.objectFromLiteral(l.getValue())))));
+        if (tupSource != null) {
+            a.getInputs().add(tupSource);
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitOperatorExpr(OperatorExpr op,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        ArrayList<OperatorType> ops = op.getOpList();
+        int nOps = ops.size();
+
+        if (nOps > 0 && (ops.get(0) == OperatorType.AND || ops.get(0) == OperatorType.OR)) {
+            return visitAndOrOperator(op, tupSource);
+        }
+
+        ArrayList<Expression> exprs = op.getExprList();
+
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        ILogicalExpression currExpr = null;
+        for (int i = 0; i <= nOps; i++) {
+
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
+            topOp = p.second;
+            ILogicalExpression e = p.first;
+            // now look at the operator
+            if (i < nOps) {
+                if (OperatorExpr.opIsComparison(ops.get(i))) {
+                    AbstractFunctionCallExpression c = createComparisonExpression(ops.get(i));
+
+                    // chain the operators
+                    if (i == 0) {
+                        c.getArguments().add(new MutableObject<ILogicalExpression>(e));
+                        currExpr = c;
+                        if (op.isBroadcastOperand(i)) {
+                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
+                            bcast.setObject(BroadcastSide.LEFT);
+                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+                        }
+                    } else {
+                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
+                                new MutableObject<ILogicalExpression>(e));
+                        c.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
+                        currExpr = c;
+                        if (i == 1 && op.isBroadcastOperand(i)) {
+                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
+                            bcast.setObject(BroadcastSide.RIGHT);
+                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+                        }
+                    }
+                } else {
+                    AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(ops.get(i));
+
+                    if (i == 0) {
+                        f.getArguments().add(new MutableObject<ILogicalExpression>(e));
+                        currExpr = f;
+                    } else {
+                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
+                                new MutableObject<ILogicalExpression>(e));
+                        f.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
+                        currExpr = f;
+                    }
+                }
+            } else { // don't forget the last expression...
+                ((AbstractFunctionCallExpression) currExpr).getArguments()
+                        .add(new MutableObject<ILogicalExpression>(e));
+                if (i == 1 && op.isBroadcastOperand(i)) {
+                    BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
+                    bcast.setObject(BroadcastSide.RIGHT);
+                    ((AbstractFunctionCallExpression) currExpr).getAnnotations().put(
+                            BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+                }
+            }
+        }
+
+        // Add hints as annotations.
+        if (op.hasHints() && currExpr instanceof AbstractFunctionCallExpression) {
+            AbstractFunctionCallExpression currFuncExpr = (AbstractFunctionCallExpression) currExpr;
+            for (IExpressionAnnotation hint : op.getHints()) {
+                currFuncExpr.getAnnotations().put(hint, hint);
+            }
+        }
+
+        LogicalVariable assignedVar = context.newVar();
+        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(currExpr));
+
+        a.getInputs().add(topOp);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitOrderbyClause(OrderbyClause oc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+
+        OrderOperator ord = new OrderOperator();
+        Iterator<OrderModifier> modifIter = oc.getModifierList().iterator();
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (Expression e : oc.getOrderbyList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(e, topOp);
+            OrderModifier m = modifIter.next();
+            OrderOperator.IOrder comp = (m == OrderModifier.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
+            ord.getOrderExpressions()
+                    .add(new Pair<IOrder, Mutable<ILogicalExpression>>(comp, new MutableObject<ILogicalExpression>(
+                            p.first)));
+            topOp = p.second;
+        }
+        ord.getInputs().add(topOp);
+        if (oc.getNumTuples() > 0) {
+            ord.getAnnotations().put(OperatorAnnotations.CARDINALITY, oc.getNumTuples());
+        }
+        if (oc.getNumFrames() > 0) {
+            ord.getAnnotations().put(OperatorAnnotations.MAX_NUMBER_FRAMES, oc.getNumFrames());
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(ord, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitQuantifiedExpression(QuantifiedExpression qe,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        ILogicalOperator firstOp = null;
+        Mutable<ILogicalOperator> lastOp = null;
+
+        for (QuantifiedPair qt : qe.getQuantifiedList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(qt.getExpr(), topOp);
+            topOp = eo1.second;
+            LogicalVariable uVar = context.newVar(qt.getVarExpr());
+            ILogicalOperator u = new UnnestOperator(uVar, new MutableObject<ILogicalExpression>(
+                    makeUnnestExpression(eo1.first)));
+
+            if (firstOp == null) {
+                firstOp = u;
+            }
+            if (lastOp != null) {
+                u.getInputs().add(lastOp);
+            }
+            lastOp = new MutableObject<ILogicalOperator>(u);
+        }
+
+        // We make all the unnest correspond. to quantif. vars. sit on top
+        // in the hope of enabling joins & other optimiz.
+        firstOp.getInputs().add(topOp);
+        topOp = lastOp;
+
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(qe.getSatisfiesExpr(), topOp);
+
+        AggregateFunctionCallExpression fAgg;
+        SelectOperator s;
+        if (qe.getQuantifier() == Quantifier.SOME) {
+            s = new SelectOperator(new MutableObject<ILogicalExpression>(eo2.first));
+            s.getInputs().add(eo2.second);
+            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.NON_EMPTY_STREAM,
+                    new ArrayList<Mutable<ILogicalExpression>>());
+        } else { // EVERY
+            List<Mutable<ILogicalExpression>> satExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
+            satExprList.add(new MutableObject<ILogicalExpression>(eo2.first));
+            s = new SelectOperator(new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), satExprList)));
+            s.getInputs().add(eo2.second);
+            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.EMPTY_STREAM,
+                    new ArrayList<Mutable<ILogicalExpression>>());
+        }
+        LogicalVariable qeVar = context.newVar();
+        AggregateOperator a = new AggregateOperator(mkSingletonArrayList(qeVar),
+                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fAgg)));
+        a.getInputs().add(new MutableObject<ILogicalOperator>(s));
+        return new Pair<ILogicalOperator, LogicalVariable>(a, qeVar);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitQuery(Query q, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        return q.getBody().accept(this, tupSource);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitRecordConstructor(RecordConstructor rc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR));
+        LogicalVariable v1 = context.newVar();
+        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (FieldBinding fb : rc.getFbList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(fb.getLeftExpr(), topOp);
+            f.getArguments().add(new MutableObject<ILogicalExpression>(eo1.first));
+            topOp = eo1.second;
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(fb.getRightExpr(), topOp);
+            f.getArguments().add(new MutableObject<ILogicalExpression>(eo2.first));
+            topOp = eo2.second;
+        }
+        a.getInputs().add(topOp);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitListConstructor(ListConstructor lc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        FunctionIdentifier fid = (lc.getType() == Type.ORDERED_LIST_CONSTRUCTOR) ? AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR
+                : AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR;
+        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
+        LogicalVariable v1 = context.newVar();
+        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (Expression expr : lc.getExprList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
+            f.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
+            topOp = eo.second;
+        }
+        a.getInputs().add(topOp);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUnaryExpr(UnaryExpr u, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        Expression expr = u.getExpr();
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, tupSource);
+        LogicalVariable v1 = context.newVar();
+        AssignOperator a;
+        if (u.getSign() == Sign.POSITIVE) {
+            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(eo.first));
+        } else {
+            AbstractFunctionCallExpression m = new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.NUMERIC_UNARY_MINUS));
+            m.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
+            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(m));
+        }
+        a.getInputs().add(eo.second);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitVariableExpr(VariableExpr v, Mutable<ILogicalOperator> tupSource) {
+        // Should we ever get to this method?
+        LogicalVariable var = context.newVar();
+        LogicalVariable oldV = context.getVar(v.getVar().getId());
+        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(
+                new VariableReferenceExpression(oldV)));
+        a.getInputs().add(tupSource);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitWhereClause(WhereClause w, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(w.getWhereExpr(), tupSource);
+        SelectOperator s = new SelectOperator(new MutableObject<ILogicalExpression>(p.first));
+        s.getInputs().add(p.second);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(s, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLimitClause(LimitClause lc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = aqlExprToAlgExpression(lc.getLimitExpr(), tupSource);
+        LimitOperator opLim;
+        Expression offset = lc.getOffset();
+        if (offset != null) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p2 = aqlExprToAlgExpression(offset, p1.second);
+            opLim = new LimitOperator(p1.first, p2.first);
+            opLim.getInputs().add(p2.second);
+        } else {
+            opLim = new LimitOperator(p1.first);
+            opLim.getInputs().add(p1.second);
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(opLim, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDistinctClause(DistinctClause dc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        List<Mutable<ILogicalExpression>> exprList = new ArrayList<Mutable<ILogicalExpression>>();
+        Mutable<ILogicalOperator> input = null;
+        for (Expression expr : dc.getDistinctByExpr()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(expr, tupSource);
+            exprList.add(new MutableObject<ILogicalExpression>(p.first));
+            input = p.second;
+        }
+        DistinctOperator opDistinct = new DistinctOperator(exprList);
+        opDistinct.getInputs().add(input);
+        return new Pair<ILogicalOperator, LogicalVariable>(opDistinct, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUnionExpr(UnionExpr unionExpr,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Mutable<ILogicalOperator> ts = tupSource;
+        ILogicalOperator lastOp = null;
+        LogicalVariable lastVar = null;
+        boolean first = true;
+        for (Expression e : unionExpr.getExprs()) {
+            if (first) {
+                first = false;
+            } else {
+                ts = new MutableObject<ILogicalOperator>(new EmptyTupleSourceOperator());
+            }
+            Pair<ILogicalOperator, LogicalVariable> p1 = e.accept(this, ts);
+            if (lastOp == null) {
+                lastOp = p1.first;
+                lastVar = p1.second;
+            } else {
+                LogicalVariable unnestVar1 = context.newVar();
+                UnnestOperator unnest1 = new UnnestOperator(unnestVar1, new MutableObject<ILogicalExpression>(
+                        makeUnnestExpression(new VariableReferenceExpression(lastVar))));
+                unnest1.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
+                LogicalVariable unnestVar2 = context.newVar();
+                UnnestOperator unnest2 = new UnnestOperator(unnestVar2, new MutableObject<ILogicalExpression>(
+                        makeUnnestExpression(new VariableReferenceExpression(p1.second))));
+                unnest2.getInputs().add(new MutableObject<ILogicalOperator>(p1.first));
+                List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> varMap = new ArrayList<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>(
+                        1);
+                LogicalVariable resultVar = context.newVar();
+                Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple = new Triple<LogicalVariable, LogicalVariable, LogicalVariable>(
+                        unnestVar1, unnestVar2, resultVar);
+                varMap.add(triple);
+                UnionAllOperator unionOp = new UnionAllOperator(varMap);
+                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest1));
+                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest2));
+                lastVar = resultVar;
+                lastOp = unionOp;
+            }
+        }
+        LogicalVariable aggVar = context.newVar();
+        ArrayList<LogicalVariable> aggregVars = new ArrayList<LogicalVariable>(1);
+        aggregVars.add(aggVar);
+        List<Mutable<ILogicalExpression>> afcExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
+        afcExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(lastVar)));
+        AggregateFunctionCallExpression afc = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
+                AsterixBuiltinFunctions.LISTIFY, afcExprs);
+        ArrayList<Mutable<ILogicalExpression>> aggregExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
+        aggregExprs.add(new MutableObject<ILogicalExpression>(afc));
+        AggregateOperator agg = new AggregateOperator(aggregVars, aggregExprs);
+        agg.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
+        return new Pair<ILogicalOperator, LogicalVariable>(agg, aggVar);
+    }
+
+    private AbstractFunctionCallExpression createComparisonExpression(OperatorType t) {
+        FunctionIdentifier fi = operatorTypeToFunctionIdentifier(t);
+        IFunctionInfo finfo = FunctionUtils.getFunctionInfo(fi);
+        return new ScalarFunctionCallExpression(finfo);
+    }
+
+    private FunctionIdentifier operatorTypeToFunctionIdentifier(OperatorType t) {
+        switch (t) {
+            case EQ: {
+                return AlgebricksBuiltinFunctions.EQ;
+            }
+            case NEQ: {
+                return AlgebricksBuiltinFunctions.NEQ;
+            }
+            case GT: {
+                return AlgebricksBuiltinFunctions.GT;
+            }
+            case GE: {
+                return AlgebricksBuiltinFunctions.GE;
+            }
+            case LT: {
+                return AlgebricksBuiltinFunctions.LT;
+            }
+            case LE: {
+                return AlgebricksBuiltinFunctions.LE;
+            }
+            default: {
+                throw new IllegalStateException();
+            }
+        }
+    }
+
+    private AbstractFunctionCallExpression createFunctionCallExpressionForBuiltinOperator(OperatorType t)
+            throws AsterixException {
+
+        FunctionIdentifier fid = null;
+        switch (t) {
+            case PLUS: {
+                fid = AlgebricksBuiltinFunctions.NUMERIC_ADD;
+                break;
+            }
+            case MINUS: {
+                fid = AsterixBuiltinFunctions.NUMERIC_SUBTRACT;
+                break;
+            }
+            case MUL: {
+                fid = AsterixBuiltinFunctions.NUMERIC_MULTIPLY;
+                break;
+            }
+            case DIV: {
+                fid = AsterixBuiltinFunctions.NUMERIC_DIVIDE;
+                break;
+            }
+            case MOD: {
+                fid = AsterixBuiltinFunctions.NUMERIC_MOD;
+                break;
+            }
+            case IDIV: {
+                fid = AsterixBuiltinFunctions.NUMERIC_IDIV;
+                break;
+            }
+            case CARET: {
+                fid = AsterixBuiltinFunctions.CARET;
+                break;
+            }
+            case AND: {
+                fid = AlgebricksBuiltinFunctions.AND;
+                break;
+            }
+            case OR: {
+                fid = AlgebricksBuiltinFunctions.OR;
+                break;
+            }
+            case FUZZY_EQ: {
+                fid = AsterixBuiltinFunctions.FUZZY_EQ;
+                break;
+            }
+
+            default: {
+                throw new NotImplementedException("Operator " + t + " is not yet implemented");
+            }
+        }
+        return new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
+    }
+
+    private static boolean hasOnlyChild(ILogicalOperator parent, Mutable<ILogicalOperator> childCandidate) {
+        List<Mutable<ILogicalOperator>> inp = parent.getInputs();
+        if (inp == null || inp.size() != 1) {
+            return false;
+        }
+        return inp.get(0) == childCandidate;
+    }
+
+    private Pair<ILogicalExpression, Mutable<ILogicalOperator>> aqlExprToAlgExpression(Expression expr,
+            Mutable<ILogicalOperator> topOp) throws AsterixException {
+        switch (expr.getKind()) {
+            case VARIABLE_EXPRESSION: {
+                VariableReferenceExpression ve = new VariableReferenceExpression(context.getVar(((VariableExpr) expr)
+                        .getVar().getId()));
+                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(ve, topOp);
+            }
+            case LITERAL_EXPRESSION: {
+                LiteralExpr val = (LiteralExpr) expr;
+                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new ConstantExpression(
+                        new AsterixConstantValue(ConstantHelper.objectFromLiteral(val.getValue()))), topOp);
+            }
+            default: {
+                // Mutable<ILogicalOperator> src = new
+                // Mutable<ILogicalOperator>();
+                // Mutable<ILogicalOperator> src = topOp;
+                if (expressionNeedsNoNesting(expr)) {
+                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, topOp);
+                    ILogicalExpression exp = ((AssignOperator) p.first).getExpressions().get(0).getValue();
+                    return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(exp, p.first.getInputs().get(0));
+                } else {
+                    Mutable<ILogicalOperator> src = new MutableObject<ILogicalOperator>();
+
+                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, src);
+
+                    if (((AbstractLogicalOperator) p.first).getOperatorTag() == LogicalOperatorTag.SUBPLAN) {
+                        // src.setOperator(topOp.getOperator());
+                        Mutable<ILogicalOperator> top2 = new MutableObject<ILogicalOperator>(p.first);
+                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
+                                p.second), top2);
+                    } else {
+                        SubplanOperator s = new SubplanOperator();
+                        s.getInputs().add(topOp);
+                        src.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
+                        Mutable<ILogicalOperator> planRoot = new MutableObject<ILogicalOperator>(p.first);
+                        s.setRootOp(planRoot);
+                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
+                                p.second), new MutableObject<ILogicalOperator>(s));
+                    }
+                }
+            }
+        }
+
+    }
+
+    private Pair<ILogicalOperator, LogicalVariable> produceFlwrResult(boolean noForClause, boolean isTop,
+            Mutable<ILogicalOperator> resOpRef, LogicalVariable resVar) {
+        if (isTop) {
+            ProjectOperator pr = new ProjectOperator(resVar);
+            pr.getInputs().add(resOpRef);
+            return new Pair<ILogicalOperator, LogicalVariable>(pr, resVar);
+
+        } else if (noForClause) {
+            return new Pair<ILogicalOperator, LogicalVariable>(resOpRef.getValue(), resVar);
+        } else {
+            return aggListify(resVar, resOpRef, false);
+        }
+    }
+
+    private Pair<ILogicalOperator, LogicalVariable> aggListify(LogicalVariable var, Mutable<ILogicalOperator> opRef,
+            boolean bProject) {
+        AggregateFunctionCallExpression funAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
+                AsterixBuiltinFunctions.LISTIFY, new ArrayList<Mutable<ILogicalExpression>>());
+        funAgg.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+        LogicalVariable varListified = context.newVar();
+        AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(varListified),
+                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(funAgg)));
+        agg.getInputs().add(opRef);
+        ILogicalOperator res;
+        if (bProject) {
+            ProjectOperator pr = new ProjectOperator(varListified);
+            pr.getInputs().add(new MutableObject<ILogicalOperator>(agg));
+            res = pr;
+        } else {
+            res = agg;
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(res, varListified);
+    }
+
+    private Pair<ILogicalOperator, LogicalVariable> visitAndOrOperator(OperatorExpr op,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        ArrayList<OperatorType> ops = op.getOpList();
+        int nOps = ops.size();
+
+        ArrayList<Expression> exprs = op.getExprList();
+
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        OperatorType opLogical = ops.get(0);
+        AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(opLogical);
+
+        for (int i = 0; i <= nOps; i++) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
+            topOp = p.second;
+            // now look at the operator
+            if (i < nOps) {
+                if (ops.get(i) != opLogical) {
+                    throw new TranslationException("Unexpected operator " + ops.get(i)
+                            + " in an OperatorExpr starting with " + opLogical);
+                }
+            }
+            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+        }
+
+        LogicalVariable assignedVar = context.newVar();
+        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(f));
+        a.getInputs().add(topOp);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
+
+    }
+
+    private static boolean expressionNeedsNoNesting(Expression expr) {
+        Kind k = expr.getKind();
+        return k == Kind.LITERAL_EXPRESSION || k == Kind.LIST_CONSTRUCTOR_EXPRESSION
+                || k == Kind.RECORD_CONSTRUCTOR_EXPRESSION || k == Kind.VARIABLE_EXPRESSION
+                || k == Kind.CALL_EXPRESSION || k == Kind.OP_EXPRESSION || k == Kind.FIELD_ACCESSOR_EXPRESSION
+                || k == Kind.INDEX_ACCESSOR_EXPRESSION || k == Kind.UNARY_EXPRESSION;
+    }
+
+    private <T> ArrayList<T> mkSingletonArrayList(T item) {
+        ArrayList<T> array = new ArrayList<T>(1);
+        array.add(item);
+        return array;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitTypeDecl(TypeDecl td, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitRecordTypeDefiniton(RecordTypeDefinition tre,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitTypeReferenceExpression(TypeReferenceExpression tre,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitNodegroupDecl(NodegroupDecl ngd, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromFileStatement(LoadFromFileStatement stmtLoad,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitWriteFromQueryResultStatement(
+            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDropStatement(DropStatement del, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitControlFeedStatement(ControlFeedStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitCreateIndexStatement(CreateIndexStatement cis,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    private ILogicalExpression makeUnnestExpression(ILogicalExpression expr) {
+        switch (expr.getExpressionTag()) {
+            case VARIABLE: {
+                return new UnnestingFunctionCallExpression(
+                        FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
+                        new MutableObject<ILogicalExpression>(expr));
+            }
+            case FUNCTION_CALL: {
+                AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
+                if (fce.getKind() == FunctionKind.UNNEST) {
+                    return expr;
+                } else {
+                    return new UnnestingFunctionCallExpression(
+                            FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
+                            new MutableObject<ILogicalExpression>(expr));
+                }
+            }
+            default: {
+                return expr;
+            }
+        }
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitInsertStatement(InsertStatement insert,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDeleteStatement(DeleteStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUpdateStatement(UpdateStatement update,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUpdateClause(UpdateClause del, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDecl(DataverseDecl dv, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDatasetDecl(DatasetDecl dd, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitSetStatement(SetStatement ss, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitWriteStatement(WriteStatement ws, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromQueryResultStatement(
+            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitCreateDataverseStatement(CreateDataverseStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitIndexDropStatement(IndexDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitNodeGroupDropStatement(NodeGroupDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDropStatement(DataverseDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitTypeDropStatement(TypeDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visit(CreateFunctionStatement cfs, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDropStatement(FunctionDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitBeginFeedStatement(BeginFeedStatement bf,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
new file mode 100644
index 0000000..9f28113
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
@@ -0,0 +1,1452 @@
+package edu.uci.ics.asterix.translator;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Expression.Kind;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.Identifier;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.JoinClause;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.ListConstructor.Type;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.MetaVariableClause;
+import edu.uci.ics.asterix.aql.expression.MetaVariableExpr;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OperatorType;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause.OrderModifier;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression.Quantifier;
+import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr.Sign;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlPlusExpressionVisitor;
+import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
+import edu.uci.ics.asterix.metadata.declared.FileSplitDataSink;
+import edu.uci.ics.asterix.metadata.declared.FileSplitSinkId;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AString;
+import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.AsterixFunctionInfo;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+import edu.uci.ics.asterix.translator.CompiledStatements.ICompiledDmlStatement;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.Counter;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation.BroadcastSide;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+
+/**
+ * Each visit returns a pair of an operator and a variable. The variable
+ * corresponds to the new column, if any, added to the tuple flow. E.g., for
+ * Unnest, the column is the variable bound to the elements in the list, for
+ * Subplan it is null. The first argument of a visit method is the expression
+ * which is translated. The second argument of a visit method is the tuple
+ * source for the current subtree.
+ */
+
+public class AqlPlusExpressionToPlanTranslator extends AbstractAqlTranslator implements
+        IAqlPlusExpressionVisitor<Pair<ILogicalOperator, LogicalVariable>, Mutable<ILogicalOperator>> {
+
+    private static final Logger LOGGER = Logger.getLogger(AqlPlusExpressionToPlanTranslator.class.getName());
+
+    private class MetaScopeLogicalVariable {
+        private HashMap<Identifier, LogicalVariable> map = new HashMap<Identifier, LogicalVariable>();
+
+        public VariableReferenceExpression getVariableReferenceExpression(Identifier id) throws AsterixException {
+            LogicalVariable var = map.get(id);
+            LOGGER.fine("get:" + id + ":" + var);
+            if (var == null) {
+                throw new AsterixException("Identifier " + id + " not found in AQL+ meta-scope.");
+            }
+            return new VariableReferenceExpression(var);
+        }
+
+        public void put(Identifier id, LogicalVariable var) {
+            LOGGER.fine("put:" + id + ":" + var);
+            map.put(id, var);
+        }
+    }
+
+    private class MetaScopeILogicalOperator {
+        private HashMap<Identifier, ILogicalOperator> map = new HashMap<Identifier, ILogicalOperator>();
+
+        public ILogicalOperator get(Identifier id) throws AsterixException {
+            ILogicalOperator op = map.get(id);
+            if (op == null) {
+                throw new AsterixException("Identifier " + id + " not found in AQL+ meta-scope.");
+            }
+            return op;
+        }
+
+        public void put(Identifier id, ILogicalOperator op) {
+            LOGGER.fine("put:" + id + ":" + op);
+            map.put(id, op);
+        }
+    }
+
+    private final JobId jobId;
+    private TranslationContext context;
+    private String outputDatasetName;
+    private ICompiledDmlStatement stmt;
+    private AqlMetadataProvider metadataProvider;
+
+    private MetaScopeLogicalVariable metaScopeExp = new MetaScopeLogicalVariable();
+    private MetaScopeILogicalOperator metaScopeOp = new MetaScopeILogicalOperator();
+    private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1);
+
+    public AqlPlusExpressionToPlanTranslator(JobId jobId, AqlMetadataProvider metadataProvider,
+            Counter currentVarCounter, String outputDatasetName, ICompiledDmlStatement stmt) {
+        this.jobId = jobId;
+        this.metadataProvider = metadataProvider;
+        this.context = new TranslationContext(currentVarCounter);
+        this.outputDatasetName = outputDatasetName;
+        this.stmt = stmt;
+        this.context.setTopFlwor(false);
+    }
+
+    public int getVarCounter() {
+        return context.getVarCounter();
+    }
+
+    public ILogicalPlan translate(Query expr) throws AlgebricksException, AsterixException {
+        return translate(expr, null);
+    }
+
+    public ILogicalPlan translate(Query expr, AqlMetadataProvider metadata) throws AlgebricksException,
+            AsterixException {
+        IDataFormat format = metadata.getFormat();
+        if (format == null) {
+            throw new AlgebricksException("Data format has not been set.");
+        }
+        format.registerRuntimeFunctions();
+        Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, new MutableObject<ILogicalOperator>(
+                new EmptyTupleSourceOperator()));
+
+        ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<Mutable<ILogicalOperator>>();
+
+        boolean isTransactionalWrite = false;
+        ILogicalOperator topOp = p.first;
+        ProjectOperator project = (ProjectOperator) topOp;
+        LogicalVariable resVar = project.getVariables().get(0);
+        if (outputDatasetName == null) {
+            List<Mutable<ILogicalExpression>> writeExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
+            writeExprList.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(resVar)));
+            FileSplitSinkId fssi = new FileSplitSinkId(metadata.getOutputFile());
+            FileSplitDataSink sink = new FileSplitDataSink(fssi, null);
+            topOp = new WriteOperator(writeExprList, sink);
+            topOp.getInputs().add(new MutableObject<ILogicalOperator>(project));
+        } else {
+            Dataset dataset = metadata.findDataset(stmt.getDataverseName(), outputDatasetName);
+            if (dataset == null) {
+                throw new AlgebricksException("Cannot find dataset " + outputDatasetName);
+            }
+            if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
+                throw new AlgebricksException("Cannot write output to an external dataset.");
+            }
+            ARecordType itemType = (ARecordType) metadata.findType(dataset.getDataverseName(),
+                    dataset.getItemTypeName());
+            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
+            ArrayList<LogicalVariable> vars = new ArrayList<LogicalVariable>();
+            ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
+            List<Mutable<ILogicalExpression>> varRefsForLoading = new ArrayList<Mutable<ILogicalExpression>>();
+            for (String partitioningKey : partitioningKeys) {
+                Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioner = format
+                        .partitioningEvaluatorFactory(itemType, partitioningKey);
+                AbstractFunctionCallExpression f = partitioner.second.cloneExpression();
+                f.substituteVar(METADATA_DUMMY_VAR, resVar);
+                exprs.add(new MutableObject<ILogicalExpression>(f));
+                LogicalVariable v = context.newVar();
+                vars.add(v);
+                varRefsForLoading.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
+            }
+            AssignOperator assign = new AssignOperator(vars, exprs);
+            assign.getInputs().add(new MutableObject<ILogicalOperator>(project));
+        }
+
+        globalPlanRoots.add(new MutableObject<ILogicalOperator>(topOp));
+        ILogicalPlan plan = new ALogicalPlanImpl(globalPlanRoots);
+        return plan;
+    }
+
+    public ILogicalPlan translate(List<Clause> clauses) throws AlgebricksException, AsterixException {
+
+        if (clauses == null) {
+            return null;
+        }
+
+        Mutable<ILogicalOperator> opRef = new MutableObject<ILogicalOperator>(new EmptyTupleSourceOperator());
+        Pair<ILogicalOperator, LogicalVariable> p = null;
+        for (Clause c : clauses) {
+            p = c.accept(this, opRef);
+            opRef = new MutableObject<ILogicalOperator>(p.first);
+        }
+
+        ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<Mutable<ILogicalOperator>>();
+
+        ILogicalOperator topOp = p.first;
+
+        globalPlanRoots.add(new MutableObject<ILogicalOperator>(topOp));
+        ILogicalPlan plan = new ALogicalPlanImpl(globalPlanRoots);
+        return plan;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitForClause(ForClause fc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        LogicalVariable v = context.newVar(fc.getVarExpr());
+
+        Expression inExpr = fc.getInExpr();
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(inExpr, tupSource);
+        ILogicalOperator returnedOp;
+
+        if (fc.getPosVarExpr() == null) {
+            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)));
+        } else {
+            LogicalVariable pVar = context.newVar(fc.getPosVarExpr());
+            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
+                    pVar, BuiltinType.AINT32);
+        }
+        returnedOp.getInputs().add(eo.second);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLetClause(LetClause lc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        LogicalVariable v;
+        ILogicalOperator returnedOp;
+
+        switch (lc.getBindingExpr().getKind()) {
+            case VARIABLE_EXPRESSION: {
+                v = context.newVar(lc.getVarExpr());
+                LogicalVariable prev = context.getVar(((VariableExpr) lc.getBindingExpr()).getVar().getId());
+                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(
+                        new VariableReferenceExpression(prev)));
+                returnedOp.getInputs().add(tupSource);
+                break;
+            }
+            default: {
+                Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(lc.getBindingExpr(),
+                        tupSource);
+                v = context.newVar(lc.getVarExpr());
+                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(eo.first));
+                returnedOp.getInputs().add(eo.second);
+                break;
+            }
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFlworExpression(FLWOGRExpression flwor,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Mutable<ILogicalOperator> flworPlan = tupSource;
+        boolean isTop = context.isTopFlwor();
+        if (isTop) {
+            context.setTopFlwor(false);
+        }
+        for (Clause c : flwor.getClauseList()) {
+            Pair<ILogicalOperator, LogicalVariable> pC = c.accept(this, flworPlan);
+            flworPlan = new MutableObject<ILogicalOperator>(pC.first);
+        }
+
+        Expression r = flwor.getReturnExpr();
+        boolean noFlworClause = flwor.noForClause();
+
+        if (r.getKind() == Kind.VARIABLE_EXPRESSION) {
+            VariableExpr v = (VariableExpr) r;
+            LogicalVariable var = context.getVar(v.getVar().getId());
+
+            return produceFlwrResult(noFlworClause, isTop, flworPlan, var);
+
+        } else {
+            Mutable<ILogicalOperator> baseOp = new MutableObject<ILogicalOperator>(flworPlan.getValue());
+            Pair<ILogicalOperator, LogicalVariable> rRes = r.accept(this, baseOp);
+            ILogicalOperator rOp = rRes.first;
+            ILogicalOperator resOp;
+            if (expressionNeedsNoNesting(r)) {
+                baseOp.setValue(flworPlan.getValue());
+                resOp = rOp;
+            } else {
+                SubplanOperator s = new SubplanOperator(rOp);
+                s.getInputs().add(flworPlan);
+                resOp = s;
+                baseOp.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
+            }
+            Mutable<ILogicalOperator> resOpRef = new MutableObject<ILogicalOperator>(resOp);
+            return produceFlwrResult(noFlworClause, isTop, resOpRef, rRes.second);
+        }
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFieldAccessor(FieldAccessor fa,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(fa.getExpr(), tupSource);
+        LogicalVariable v = context.newVar();
+        AbstractFunctionCallExpression fldAccess = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME));
+        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+        ILogicalExpression faExpr = new ConstantExpression(new AsterixConstantValue(new AString(fa.getIdent()
+                .getValue())));
+        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(faExpr));
+        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(fldAccess));
+        a.getInputs().add(p.second);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
+
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitIndexAccessor(IndexAccessor ia,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(ia.getExpr(), tupSource);
+        LogicalVariable v = context.newVar();
+        AbstractFunctionCallExpression f;
+        int i = ia.getIndex();
+        if (i == IndexAccessor.ANY) {
+            f = new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.ANY_COLLECTION_MEMBER));
+            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+        } else {
+            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.GET_ITEM));
+            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+            f.getArguments().add(
+                    new MutableObject<ILogicalExpression>(new ConstantExpression(
+                            new AsterixConstantValue(new AInt32(i)))));
+        }
+        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
+        a.getInputs().add(p.second);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitCallExpr(CallExpr fcall, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        LogicalVariable v = context.newVar();
+        FunctionSignature signature = fcall.getFunctionSignature();
+        List<Mutable<ILogicalExpression>> args = new ArrayList<Mutable<ILogicalExpression>>();
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        for (Expression expr : fcall.getExprList()) {
+            switch (expr.getKind()) {
+                case VARIABLE_EXPRESSION: {
+                    LogicalVariable var = context.getVar(((VariableExpr) expr).getVar().getId());
+                    args.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+                    break;
+                }
+                case LITERAL_EXPRESSION: {
+                    LiteralExpr val = (LiteralExpr) expr;
+                    args.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                            ConstantHelper.objectFromLiteral(val.getValue())))));
+                    break;
+                }
+                default: {
+                    Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
+                    AbstractLogicalOperator o1 = (AbstractLogicalOperator) eo.second.getValue();
+                    args.add(new MutableObject<ILogicalExpression>(eo.first));
+                    if (o1 != null && !(o1.getOperatorTag() == LogicalOperatorTag.ASSIGN && hasOnlyChild(o1, topOp))) {
+                        topOp = eo.second;
+                    }
+                    break;
+                }
+            }
+        }
+
+        FunctionIdentifier fi = new FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, signature.getName());
+        AsterixFunctionInfo afi = AsterixBuiltinFunctions.lookupFunction(fi);
+        FunctionIdentifier builtinAquafi = afi == null ? null : afi.getFunctionIdentifier();
+
+        if (builtinAquafi != null) {
+            fi = builtinAquafi;
+        } else {
+            fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, signature.getName());
+            FunctionIdentifier builtinAsterixFi = AsterixBuiltinFunctions.getBuiltinFunctionIdentifier(fi);
+            if (builtinAsterixFi != null) {
+                fi = builtinAsterixFi;
+            }
+        }
+        AbstractFunctionCallExpression f;
+        if (AsterixBuiltinFunctions.isBuiltinAggregateFunction(fi)) {
+            f = AsterixBuiltinFunctions.makeAggregateFunctionExpression(fi, args);
+        } else if (AsterixBuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
+            UnnestingFunctionCallExpression ufce = new UnnestingFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(fi), args);
+            ufce.setReturnsUniqueValues(AsterixBuiltinFunctions.returnsUniqueValues(fi));
+            f = ufce;
+        } else {
+            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fi), args);
+        }
+        AssignOperator op = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
+        if (topOp != null) {
+            op.getInputs().add(topOp);
+        }
+
+        return new Pair<ILogicalOperator, LogicalVariable>(op, v);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDecl(FunctionDecl fd,
+            Mutable<ILogicalOperator> tupSource) {
+        // TODO Auto-generated method stub
+        throw new NotImplementedException();
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitGroupbyClause(GroupbyClause gc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        GroupByOperator gOp = new GroupByOperator();
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (GbyVariableExpressionPair ve : gc.getGbyPairList()) {
+            LogicalVariable v;
+            VariableExpr vexpr = ve.getVar();
+            if (vexpr != null) {
+                v = context.newVar(vexpr);
+            } else {
+                v = context.newVar();
+            }
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
+            gOp.addGbyExpression(v, eo.first);
+            topOp = eo.second;
+        }
+        for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
+            LogicalVariable v;
+            VariableExpr vexpr = ve.getVar();
+            if (vexpr != null) {
+                v = context.newVar(vexpr);
+            } else {
+                v = context.newVar();
+            }
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
+            gOp.addDecorExpression(v, eo.first);
+            topOp = eo.second;
+        }
+        gOp.getInputs().add(topOp);
+
+        for (VariableExpr var : gc.getWithVarList()) {
+            LogicalVariable aggVar = context.newVar();
+            LogicalVariable oldVar = context.getVar(var);
+            List<Mutable<ILogicalExpression>> flArgs = new ArrayList<Mutable<ILogicalExpression>>(1);
+            flArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oldVar)));
+            AggregateFunctionCallExpression fListify = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
+                    AsterixBuiltinFunctions.LISTIFY, flArgs);
+            AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar),
+                    (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fListify)));
+            agg.getInputs().add(
+                    new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
+                            new MutableObject<ILogicalOperator>(gOp))));
+            ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(agg));
+            gOp.getNestedPlans().add(plan);
+            // Hide the variable that was part of the "with", replacing it with
+            // the one bound by the aggregation op.
+            context.setVar(var, aggVar);
+        }
+
+        gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
+        return new Pair<ILogicalOperator, LogicalVariable>(gOp, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitIfExpr(IfExpr ifexpr, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        // In the most general case, IfThenElse is translated in the following
+        // way.
+        //
+        // We assign the result of the condition to one variable varCond.
+        // We create one subplan which contains the plan for the "then" branch,
+        // on top of which there is a selection whose condition is varCond.
+        // Similarly, we create one subplan for the "else" branch, in which the
+        // selection is not(varCond).
+        // Finally, we concatenate the results. (??)
+
+        Pair<ILogicalOperator, LogicalVariable> pCond = ifexpr.getCondExpr().accept(this, tupSource);
+        ILogicalOperator opCond = pCond.first;
+        LogicalVariable varCond = pCond.second;
+
+        SubplanOperator sp = new SubplanOperator();
+        Mutable<ILogicalOperator> nestedSource = new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
+                new MutableObject<ILogicalOperator>(sp)));
+
+        Pair<ILogicalOperator, LogicalVariable> pThen = ifexpr.getThenExpr().accept(this, nestedSource);
+        SelectOperator sel1 = new SelectOperator(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
+                varCond)));
+        sel1.getInputs().add(new MutableObject<ILogicalOperator>(pThen.first));
+
+        Pair<ILogicalOperator, LogicalVariable> pElse = ifexpr.getElseExpr().accept(this, nestedSource);
+        AbstractFunctionCallExpression notVarCond = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), new MutableObject<ILogicalExpression>(
+                        new VariableReferenceExpression(varCond)));
+        SelectOperator sel2 = new SelectOperator(new MutableObject<ILogicalExpression>(notVarCond));
+        sel2.getInputs().add(new MutableObject<ILogicalOperator>(pElse.first));
+
+        ILogicalPlan p1 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel1));
+        sp.getNestedPlans().add(p1);
+        ILogicalPlan p2 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel2));
+        sp.getNestedPlans().add(p2);
+
+        Mutable<ILogicalOperator> opCondRef = new MutableObject<ILogicalOperator>(opCond);
+        sp.getInputs().add(opCondRef);
+
+        LogicalVariable resV = context.newVar();
+        AbstractFunctionCallExpression concatNonNull = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CONCAT_NON_NULL),
+                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pThen.second)),
+                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pElse.second)));
+        AssignOperator a = new AssignOperator(resV, new MutableObject<ILogicalExpression>(concatNonNull));
+        a.getInputs().add(new MutableObject<ILogicalOperator>(sp));
+
+        return new Pair<ILogicalOperator, LogicalVariable>(a, resV);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLiteralExpr(LiteralExpr l, Mutable<ILogicalOperator> tupSource) {
+        LogicalVariable var = context.newVar();
+        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(new ConstantExpression(
+                new AsterixConstantValue(ConstantHelper.objectFromLiteral(l.getValue())))));
+        if (tupSource != null) {
+            a.getInputs().add(tupSource);
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitOperatorExpr(OperatorExpr op,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        ArrayList<OperatorType> ops = op.getOpList();
+        int nOps = ops.size();
+
+        if (nOps > 0 && (ops.get(0) == OperatorType.AND || ops.get(0) == OperatorType.OR)) {
+            return visitAndOrOperator(op, tupSource);
+        }
+
+        ArrayList<Expression> exprs = op.getExprList();
+
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        ILogicalExpression currExpr = null;
+        for (int i = 0; i <= nOps; i++) {
+
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
+            topOp = p.second;
+            ILogicalExpression e = p.first;
+            // now look at the operator
+            if (i < nOps) {
+                if (OperatorExpr.opIsComparison(ops.get(i))) {
+                    AbstractFunctionCallExpression c = createComparisonExpression(ops.get(i));
+
+                    // chain the operators
+                    if (i == 0) {
+                        c.getArguments().add(new MutableObject<ILogicalExpression>(e));
+                        currExpr = c;
+                        if (op.isBroadcastOperand(i)) {
+                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
+                            bcast.setObject(BroadcastSide.LEFT);
+                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+                        }
+                    } else {
+                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
+                                new MutableObject<ILogicalExpression>(e));
+                        c.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
+                        currExpr = c;
+                        if (i == 1 && op.isBroadcastOperand(i)) {
+                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
+                            bcast.setObject(BroadcastSide.RIGHT);
+                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+                        }
+                    }
+                } else {
+                    AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(ops.get(i));
+
+                    if (i == 0) {
+                        f.getArguments().add(new MutableObject<ILogicalExpression>(e));
+                        currExpr = f;
+                    } else {
+                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
+                                new MutableObject<ILogicalExpression>(e));
+                        f.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
+                        currExpr = f;
+                    }
+                }
+            } else { // don't forget the last expression...
+                ((AbstractFunctionCallExpression) currExpr).getArguments()
+                        .add(new MutableObject<ILogicalExpression>(e));
+                if (i == 1 && op.isBroadcastOperand(i)) {
+                    BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
+                    bcast.setObject(BroadcastSide.RIGHT);
+                    ((AbstractFunctionCallExpression) currExpr).getAnnotations().put(
+                            BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
+                }
+            }
+        }
+
+        LogicalVariable assignedVar = context.newVar();
+        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(currExpr));
+
+        a.getInputs().add(topOp);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitOrderbyClause(OrderbyClause oc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+
+        OrderOperator ord = new OrderOperator();
+        Iterator<OrderModifier> modifIter = oc.getModifierList().iterator();
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (Expression e : oc.getOrderbyList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(e, topOp);
+            OrderModifier m = modifIter.next();
+            OrderOperator.IOrder comp = (m == OrderModifier.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
+            ord.getOrderExpressions()
+                    .add(new Pair<IOrder, Mutable<ILogicalExpression>>(comp, new MutableObject<ILogicalExpression>(
+                            p.first)));
+            topOp = p.second;
+        }
+        ord.getInputs().add(topOp);
+        if (oc.getNumTuples() > 0) {
+            ord.getAnnotations().put(OperatorAnnotations.CARDINALITY, oc.getNumTuples());
+        }
+        if (oc.getNumFrames() > 0) {
+            ord.getAnnotations().put(OperatorAnnotations.MAX_NUMBER_FRAMES, oc.getNumFrames());
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(ord, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitQuantifiedExpression(QuantifiedExpression qe,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        ILogicalOperator firstOp = null;
+        Mutable<ILogicalOperator> lastOp = null;
+
+        for (QuantifiedPair qt : qe.getQuantifiedList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(qt.getExpr(), topOp);
+            topOp = eo1.second;
+            LogicalVariable uVar = context.newVar(qt.getVarExpr());
+            ILogicalOperator u = new UnnestOperator(uVar, new MutableObject<ILogicalExpression>(
+                    makeUnnestExpression(eo1.first)));
+
+            if (firstOp == null) {
+                firstOp = u;
+            }
+            if (lastOp != null) {
+                u.getInputs().add(lastOp);
+            }
+            lastOp = new MutableObject<ILogicalOperator>(u);
+        }
+
+        // We make all the unnest correspond. to quantif. vars. sit on top
+        // in the hope of enabling joins & other optimiz.
+        firstOp.getInputs().add(topOp);
+        topOp = lastOp;
+
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(qe.getSatisfiesExpr(), topOp);
+
+        AggregateFunctionCallExpression fAgg;
+        SelectOperator s;
+        if (qe.getQuantifier() == Quantifier.SOME) {
+            s = new SelectOperator(new MutableObject<ILogicalExpression>(eo2.first));
+            s.getInputs().add(eo2.second);
+            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.NON_EMPTY_STREAM,
+                    new ArrayList<Mutable<ILogicalExpression>>());
+        } else { // EVERY
+            List<Mutable<ILogicalExpression>> satExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
+            satExprList.add(new MutableObject<ILogicalExpression>(eo2.first));
+            s = new SelectOperator(new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), satExprList)));
+            s.getInputs().add(eo2.second);
+            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.EMPTY_STREAM,
+                    new ArrayList<Mutable<ILogicalExpression>>());
+        }
+        LogicalVariable qeVar = context.newVar();
+        AggregateOperator a = new AggregateOperator(mkSingletonArrayList(qeVar),
+                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fAgg)));
+        a.getInputs().add(new MutableObject<ILogicalOperator>(s));
+        return new Pair<ILogicalOperator, LogicalVariable>(a, qeVar);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitQuery(Query q, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        return q.getBody().accept(this, tupSource);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitRecordConstructor(RecordConstructor rc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(
+                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR));
+        LogicalVariable v1 = context.newVar();
+        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (FieldBinding fb : rc.getFbList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(fb.getLeftExpr(), topOp);
+            f.getArguments().add(new MutableObject<ILogicalExpression>(eo1.first));
+            topOp = eo1.second;
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(fb.getRightExpr(), topOp);
+            f.getArguments().add(new MutableObject<ILogicalExpression>(eo2.first));
+            topOp = eo2.second;
+        }
+        a.getInputs().add(topOp);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitListConstructor(ListConstructor lc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        FunctionIdentifier fid = (lc.getType() == Type.ORDERED_LIST_CONSTRUCTOR) ? AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR
+                : AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR;
+        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
+        LogicalVariable v1 = context.newVar();
+        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
+        Mutable<ILogicalOperator> topOp = tupSource;
+        for (Expression expr : lc.getExprList()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
+            f.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
+            topOp = eo.second;
+        }
+        a.getInputs().add(topOp);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUnaryExpr(UnaryExpr u, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        Expression expr = u.getExpr();
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, tupSource);
+        LogicalVariable v1 = context.newVar();
+        AssignOperator a;
+        if (u.getSign() == Sign.POSITIVE) {
+            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(eo.first));
+        } else {
+            AbstractFunctionCallExpression m = new ScalarFunctionCallExpression(
+                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.NUMERIC_UNARY_MINUS));
+            m.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
+            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(m));
+        }
+        a.getInputs().add(eo.second);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitVariableExpr(VariableExpr v, Mutable<ILogicalOperator> tupSource) {
+        // Should we ever get to this method?
+        LogicalVariable var = context.newVar();
+        LogicalVariable oldV = context.getVar(v.getVar().getId());
+        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(
+                new VariableReferenceExpression(oldV)));
+        a.getInputs().add(tupSource);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitWhereClause(WhereClause w, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(w.getWhereExpr(), tupSource);
+        SelectOperator s = new SelectOperator(new MutableObject<ILogicalExpression>(p.first));
+        s.getInputs().add(p.second);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(s, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLimitClause(LimitClause lc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = aqlExprToAlgExpression(lc.getLimitExpr(), tupSource);
+        LimitOperator opLim;
+        Expression offset = lc.getOffset();
+        if (offset != null) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p2 = aqlExprToAlgExpression(offset, p1.second);
+            opLim = new LimitOperator(p1.first, p2.first);
+            opLim.getInputs().add(p2.second);
+        } else {
+            opLim = new LimitOperator(p1.first);
+            opLim.getInputs().add(p1.second);
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(opLim, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDistinctClause(DistinctClause dc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        List<Mutable<ILogicalExpression>> exprList = new ArrayList<Mutable<ILogicalExpression>>();
+        Mutable<ILogicalOperator> input = null;
+        for (Expression expr : dc.getDistinctByExpr()) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(expr, tupSource);
+            exprList.add(new MutableObject<ILogicalExpression>(p.first));
+            input = p.second;
+        }
+        DistinctOperator opDistinct = new DistinctOperator(exprList);
+        opDistinct.getInputs().add(input);
+        return new Pair<ILogicalOperator, LogicalVariable>(opDistinct, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUnionExpr(UnionExpr unionExpr,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        Mutable<ILogicalOperator> ts = tupSource;
+        ILogicalOperator lastOp = null;
+        LogicalVariable lastVar = null;
+        boolean first = true;
+        for (Expression e : unionExpr.getExprs()) {
+            if (first) {
+                first = false;
+            } else {
+                ts = new MutableObject<ILogicalOperator>(new EmptyTupleSourceOperator());
+            }
+            Pair<ILogicalOperator, LogicalVariable> p1 = e.accept(this, ts);
+            if (lastOp == null) {
+                lastOp = p1.first;
+                lastVar = p1.second;
+            } else {
+                LogicalVariable unnestVar1 = context.newVar();
+                UnnestOperator unnest1 = new UnnestOperator(unnestVar1, new MutableObject<ILogicalExpression>(
+                        makeUnnestExpression(new VariableReferenceExpression(lastVar))));
+                unnest1.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
+                LogicalVariable unnestVar2 = context.newVar();
+                UnnestOperator unnest2 = new UnnestOperator(unnestVar2, new MutableObject<ILogicalExpression>(
+                        makeUnnestExpression(new VariableReferenceExpression(p1.second))));
+                unnest2.getInputs().add(new MutableObject<ILogicalOperator>(p1.first));
+                List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> varMap = new ArrayList<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>(
+                        1);
+                LogicalVariable resultVar = context.newVar();
+                Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple = new Triple<LogicalVariable, LogicalVariable, LogicalVariable>(
+                        unnestVar1, unnestVar2, resultVar);
+                varMap.add(triple);
+                UnionAllOperator unionOp = new UnionAllOperator(varMap);
+                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest1));
+                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest2));
+                lastVar = resultVar;
+                lastOp = unionOp;
+            }
+        }
+        LogicalVariable aggVar = context.newVar();
+        ArrayList<LogicalVariable> aggregVars = new ArrayList<LogicalVariable>(1);
+        aggregVars.add(aggVar);
+        List<Mutable<ILogicalExpression>> afcExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
+        afcExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(lastVar)));
+        AggregateFunctionCallExpression afc = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
+                AsterixBuiltinFunctions.LISTIFY, afcExprs);
+        ArrayList<Mutable<ILogicalExpression>> aggregExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
+        aggregExprs.add(new MutableObject<ILogicalExpression>(afc));
+        AggregateOperator agg = new AggregateOperator(aggregVars, aggregExprs);
+        agg.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
+        return new Pair<ILogicalOperator, LogicalVariable>(agg, aggVar);
+    }
+
+    private AbstractFunctionCallExpression createComparisonExpression(OperatorType t) {
+        FunctionIdentifier fi = operatorTypeToFunctionIdentifier(t);
+        IFunctionInfo finfo = FunctionUtils.getFunctionInfo(fi);
+        return new ScalarFunctionCallExpression(finfo);
+    }
+
+    private FunctionIdentifier operatorTypeToFunctionIdentifier(OperatorType t) {
+        switch (t) {
+            case EQ: {
+                return AlgebricksBuiltinFunctions.EQ;
+            }
+            case NEQ: {
+                return AlgebricksBuiltinFunctions.NEQ;
+            }
+            case GT: {
+                return AlgebricksBuiltinFunctions.GT;
+            }
+            case GE: {
+                return AlgebricksBuiltinFunctions.GE;
+            }
+            case LT: {
+                return AlgebricksBuiltinFunctions.LT;
+            }
+            case LE: {
+                return AlgebricksBuiltinFunctions.LE;
+            }
+            default: {
+                throw new IllegalStateException();
+            }
+        }
+    }
+
+    private AbstractFunctionCallExpression createFunctionCallExpressionForBuiltinOperator(OperatorType t)
+            throws AsterixException {
+
+        FunctionIdentifier fid = null;
+        switch (t) {
+            case PLUS: {
+                fid = AlgebricksBuiltinFunctions.NUMERIC_ADD;
+                break;
+            }
+            case MINUS: {
+                fid = AsterixBuiltinFunctions.NUMERIC_SUBTRACT;
+                break;
+            }
+            case MUL: {
+                fid = AsterixBuiltinFunctions.NUMERIC_MULTIPLY;
+                break;
+            }
+            case DIV: {
+                fid = AsterixBuiltinFunctions.NUMERIC_DIVIDE;
+                break;
+            }
+            case MOD: {
+                fid = AsterixBuiltinFunctions.NUMERIC_MOD;
+                break;
+            }
+            case IDIV: {
+                fid = AsterixBuiltinFunctions.NUMERIC_IDIV;
+                break;
+            }
+            case CARET: {
+                fid = AsterixBuiltinFunctions.CARET;
+                break;
+            }
+            case AND: {
+                fid = AlgebricksBuiltinFunctions.AND;
+                break;
+            }
+            case OR: {
+                fid = AlgebricksBuiltinFunctions.OR;
+                break;
+            }
+            case FUZZY_EQ: {
+                fid = AsterixBuiltinFunctions.FUZZY_EQ;
+                break;
+            }
+
+            default: {
+                throw new NotImplementedException("Operator " + t + " is not yet implemented");
+            }
+        }
+        return new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
+    }
+
+    private static boolean hasOnlyChild(ILogicalOperator parent, Mutable<ILogicalOperator> childCandidate) {
+        List<Mutable<ILogicalOperator>> inp = parent.getInputs();
+        if (inp == null || inp.size() != 1) {
+            return false;
+        }
+        return inp.get(0) == childCandidate;
+    }
+
+    private Pair<ILogicalExpression, Mutable<ILogicalOperator>> aqlExprToAlgExpression(Expression expr,
+            Mutable<ILogicalOperator> topOp) throws AsterixException {
+        switch (expr.getKind()) {
+            case VARIABLE_EXPRESSION: {
+                VariableReferenceExpression ve = new VariableReferenceExpression(context.getVar(((VariableExpr) expr)
+                        .getVar().getId()));
+                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(ve, topOp);
+            }
+            case METAVARIABLE_EXPRESSION: {
+                ILogicalExpression le = metaScopeExp.getVariableReferenceExpression(((VariableExpr) expr).getVar());
+                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(le, topOp);
+            }
+            case LITERAL_EXPRESSION: {
+                LiteralExpr val = (LiteralExpr) expr;
+                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new ConstantExpression(
+                        new AsterixConstantValue(ConstantHelper.objectFromLiteral(val.getValue()))), topOp);
+            }
+            default: {
+                // Mutable<ILogicalExpression> src = new
+                // Mutable<ILogicalExpression>();
+                // Mutable<ILogicalExpression> src = topOp;
+                if (expressionNeedsNoNesting(expr)) {
+                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, topOp);
+                    ILogicalExpression exp = ((AssignOperator) p.first).getExpressions().get(0).getValue();
+                    return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(exp, p.first.getInputs().get(0));
+                } else {
+                    Mutable<ILogicalOperator> src = new MutableObject<ILogicalOperator>();
+
+                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, src);
+
+                    if (((AbstractLogicalOperator) p.first).getOperatorTag() == LogicalOperatorTag.SUBPLAN) {
+                        // src.setOperator(topOp.getOperator());
+                        Mutable<ILogicalOperator> top2 = new MutableObject<ILogicalOperator>(p.first);
+                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
+                                p.second), top2);
+                    } else {
+                        SubplanOperator s = new SubplanOperator();
+                        s.getInputs().add(topOp);
+                        src.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
+                        Mutable<ILogicalOperator> planRoot = new MutableObject<ILogicalOperator>(p.first);
+                        s.setRootOp(planRoot);
+                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
+                                p.second), new MutableObject<ILogicalOperator>(s));
+                    }
+                }
+            }
+        }
+
+    }
+
+    private Pair<ILogicalOperator, LogicalVariable> produceFlwrResult(boolean noForClause, boolean isTop,
+            Mutable<ILogicalOperator> resOpRef, LogicalVariable resVar) {
+        if (isTop) {
+            ProjectOperator pr = new ProjectOperator(resVar);
+            pr.getInputs().add(resOpRef);
+            return new Pair<ILogicalOperator, LogicalVariable>(pr, resVar);
+
+        } else if (noForClause) {
+            return new Pair<ILogicalOperator, LogicalVariable>(resOpRef.getValue(), resVar);
+        } else {
+            return aggListify(resVar, resOpRef, false);
+        }
+    }
+
+    private Pair<ILogicalOperator, LogicalVariable> aggListify(LogicalVariable var, Mutable<ILogicalOperator> opRef,
+            boolean bProject) {
+        AggregateFunctionCallExpression funAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
+                AsterixBuiltinFunctions.LISTIFY, new ArrayList<Mutable<ILogicalExpression>>());
+        funAgg.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
+        LogicalVariable varListified = context.newVar();
+        AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(varListified),
+                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(funAgg)));
+        agg.getInputs().add(opRef);
+        ILogicalOperator res;
+        if (bProject) {
+            ProjectOperator pr = new ProjectOperator(varListified);
+            pr.getInputs().add(new MutableObject<ILogicalOperator>(agg));
+            res = pr;
+        } else {
+            res = agg;
+        }
+        return new Pair<ILogicalOperator, LogicalVariable>(res, varListified);
+    }
+
+    private Pair<ILogicalOperator, LogicalVariable> visitAndOrOperator(OperatorExpr op,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        ArrayList<OperatorType> ops = op.getOpList();
+        int nOps = ops.size();
+
+        ArrayList<Expression> exprs = op.getExprList();
+
+        Mutable<ILogicalOperator> topOp = tupSource;
+
+        OperatorType opLogical = ops.get(0);
+        AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(opLogical);
+
+        for (int i = 0; i <= nOps; i++) {
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
+            topOp = p.second;
+            // now look at the operator
+            if (i < nOps) {
+                if (ops.get(i) != opLogical) {
+                    throw new TranslationException("Unexpected operator " + ops.get(i)
+                            + " in an OperatorExpr starting with " + opLogical);
+                }
+            }
+            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
+        }
+
+        LogicalVariable assignedVar = context.newVar();
+        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(f));
+        a.getInputs().add(topOp);
+
+        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
+
+    }
+
+    private static boolean expressionNeedsNoNesting(Expression expr) {
+        Kind k = expr.getKind();
+        return k == Kind.LITERAL_EXPRESSION || k == Kind.LIST_CONSTRUCTOR_EXPRESSION
+                || k == Kind.RECORD_CONSTRUCTOR_EXPRESSION || k == Kind.VARIABLE_EXPRESSION
+                || k == Kind.CALL_EXPRESSION || k == Kind.OP_EXPRESSION || k == Kind.FIELD_ACCESSOR_EXPRESSION
+                || k == Kind.INDEX_ACCESSOR_EXPRESSION || k == Kind.UNARY_EXPRESSION;
+    }
+
+    private <T> ArrayList<T> mkSingletonArrayList(T item) {
+        ArrayList<T> array = new ArrayList<T>(1);
+        array.add(item);
+        return array;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitTypeDecl(TypeDecl td, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitRecordTypeDefiniton(RecordTypeDefinition tre,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitTypeReferenceExpression(TypeReferenceExpression tre,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitNodegroupDecl(NodegroupDecl ngd, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromFileStatement(LoadFromFileStatement stmtLoad,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitWriteFromQueryResultStatement(
+            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDropStatement(DropStatement del, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitCreateIndexStatement(CreateIndexStatement cis,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitMetaVariableClause(MetaVariableClause mc,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        return new Pair<ILogicalOperator, LogicalVariable>(metaScopeOp.get(mc.getVar()), null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitJoinClause(JoinClause jc, Mutable<ILogicalOperator> tupSource)
+            throws AsterixException {
+        // Pair<ILogicalOperator, LogicalVariable> leftSide =
+        // jc.getLeftExpr().accept(this, tupSource);
+        Mutable<ILogicalOperator> opRef = tupSource;
+        Pair<ILogicalOperator, LogicalVariable> leftSide = null;
+        for (Clause c : jc.getLeftClauses()) {
+            leftSide = c.accept(this, opRef);
+            opRef = new MutableObject<ILogicalOperator>(leftSide.first);
+        }
+
+        // Pair<ILogicalOperator, LogicalVariable> rightSide =
+        // jc.getRightExpr().accept(this, tupSource);
+        opRef = tupSource;
+        Pair<ILogicalOperator, LogicalVariable> rightSide = null;
+        for (Clause c : jc.getRightClauses()) {
+            rightSide = c.accept(this, opRef);
+            opRef = new MutableObject<ILogicalOperator>(rightSide.first);
+        }
+
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> whereCond = aqlExprToAlgExpression(jc.getWhereExpr(),
+                tupSource);
+
+        AbstractBinaryJoinOperator join;
+        switch (jc.getKind()) {
+            case INNER: {
+                join = new InnerJoinOperator(new MutableObject<ILogicalExpression>(whereCond.first));
+                break;
+            }
+            case LEFT_OUTER: {
+                join = new LeftOuterJoinOperator(new MutableObject<ILogicalExpression>(whereCond.first));
+                break;
+            }
+            default: {
+                throw new IllegalStateException();
+            }
+        }
+        join.getInputs().add(new MutableObject<ILogicalOperator>(leftSide.first));
+        join.getInputs().add(new MutableObject<ILogicalOperator>(rightSide.first));
+        return new Pair<ILogicalOperator, LogicalVariable>(join, null);
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitMetaVariableExpr(MetaVariableExpr me,
+            Mutable<ILogicalOperator> tupSource) throws AsterixException {
+        LogicalVariable var = context.newVar();
+        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(
+                metaScopeExp.getVariableReferenceExpression(me.getVar())));
+        a.getInputs().add(tupSource);
+        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
+    }
+
+    public void addOperatorToMetaScope(Identifier id, ILogicalOperator op) {
+        metaScopeOp.put(id, op);
+    }
+
+    public void addVariableToMetaScope(Identifier id, LogicalVariable var) {
+        metaScopeExp.put(id, var);
+    }
+
+    private ILogicalExpression makeUnnestExpression(ILogicalExpression expr) {
+        switch (expr.getExpressionTag()) {
+            case VARIABLE: {
+                return new UnnestingFunctionCallExpression(
+                        FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
+                        new MutableObject<ILogicalExpression>(expr));
+            }
+            case FUNCTION_CALL: {
+                AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
+                if (fce.getKind() == FunctionKind.UNNEST) {
+                    return expr;
+                } else {
+                    return new UnnestingFunctionCallExpression(
+                            FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
+                            new MutableObject<ILogicalExpression>(expr));
+                }
+            }
+            default: {
+                return expr;
+            }
+        }
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitInsertStatement(InsertStatement insert,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDeleteStatement(DeleteStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUpdateStatement(UpdateStatement update,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitUpdateClause(UpdateClause del, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDecl(DataverseDecl dv, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDatasetDecl(DatasetDecl dd, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitSetStatement(SetStatement ss, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitWriteStatement(WriteStatement ws, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromQueryResultStatement(
+            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitCreateDataverseStatement(CreateDataverseStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitIndexDropStatement(IndexDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitNodeGroupDropStatement(NodeGroupDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDropStatement(DataverseDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitTypeDropStatement(TypeDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitControlFeedStatement(ControlFeedStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visit(CreateFunctionStatement cfs, Mutable<ILogicalOperator> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDropStatement(FunctionDropStatement del,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<ILogicalOperator, LogicalVariable> visitBeginFeedStatement(BeginFeedStatement bf,
+            Mutable<ILogicalOperator> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
new file mode 100644
index 0000000..6cf8d28
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
@@ -0,0 +1,538 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.translator;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Statement.Kind;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement.OperationType;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.Identifier;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.literal.StringLiteral;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+
+/**
+ * An AQL statement instance is translated into an instance of type CompileX
+ * that has additional fields for use by the AqlTranslator.
+ */
+public class CompiledStatements {
+
+    public static interface ICompiledStatement {
+
+        public Kind getKind();
+    }
+
+    public static class CompiledWriteFromQueryResultStatement implements ICompiledDmlStatement {
+
+        private String dataverseName;
+        private String datasetName;
+        private Query query;
+        private int varCounter;
+
+        public CompiledWriteFromQueryResultStatement(String dataverseName, String datasetName, Query query,
+                int varCounter) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.query = query;
+            this.varCounter = varCounter;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public int getVarCounter() {
+            return varCounter;
+        }
+
+        public Query getQuery() {
+            return query;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.WRITE_FROM_QUERY_RESULT;
+        }
+
+    }
+
+    public static class CompiledDatasetDropStatement implements ICompiledStatement {
+        private final String dataverseName;
+        private final String datasetName;
+
+        public CompiledDatasetDropStatement(String dataverseName, String datasetName) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.DATASET_DROP;
+        }
+    }
+
+    // added by yasser
+    public static class CompiledCreateDataverseStatement implements ICompiledStatement {
+        private String dataverseName;
+        private String format;
+
+        public CompiledCreateDataverseStatement(String dataverseName, String format) {
+            this.dataverseName = dataverseName;
+            this.format = format;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getFormat() {
+            return format;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.CREATE_DATAVERSE;
+        }
+    }
+
+    public static class CompiledNodeGroupDropStatement implements ICompiledStatement {
+        private String nodeGroupName;
+
+        public CompiledNodeGroupDropStatement(String nodeGroupName) {
+            this.nodeGroupName = nodeGroupName;
+        }
+
+        public String getNodeGroupName() {
+            return nodeGroupName;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.NODEGROUP_DROP;
+        }
+    }
+
+    public static class CompiledIndexDropStatement implements ICompiledStatement {
+        private String dataverseName;
+        private String datasetName;
+        private String indexName;
+
+        public CompiledIndexDropStatement(String dataverseName, String datasetName, String indexName) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.indexName = indexName;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public String getIndexName() {
+            return indexName;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.INDEX_DROP;
+        }
+    }
+
+    public static class CompiledDataverseDropStatement implements ICompiledStatement {
+        private String dataverseName;
+        private boolean ifExists;
+
+        public CompiledDataverseDropStatement(String dataverseName, boolean ifExists) {
+            this.dataverseName = dataverseName;
+            this.ifExists = ifExists;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public boolean getIfExists() {
+            return ifExists;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.DATAVERSE_DROP;
+        }
+    }
+
+    public static class CompiledTypeDropStatement implements ICompiledStatement {
+        private String typeName;
+
+        public CompiledTypeDropStatement(String nodeGroupName) {
+            this.typeName = nodeGroupName;
+        }
+
+        public String getTypeName() {
+            return typeName;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.TYPE_DROP;
+        }
+    }
+
+    public static interface ICompiledDmlStatement extends ICompiledStatement {
+
+        public String getDataverseName();
+
+        public String getDatasetName();
+    }
+
+    public static class CompiledCreateIndexStatement implements ICompiledDmlStatement {
+        private final String indexName;
+        private final String dataverseName;
+        private final String datasetName;
+        private final List<String> keyFields;
+        private final IndexType indexType;
+
+        // Specific to NGram index.
+        private final int gramLength;
+
+        public CompiledCreateIndexStatement(String indexName, String dataverseName, String datasetName,
+                List<String> keyFields, int gramLength, IndexType indexType) {
+            this.indexName = indexName;
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.keyFields = keyFields;
+            this.gramLength = gramLength;
+            this.indexType = indexType;
+        }
+
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getIndexName() {
+            return indexName;
+        }
+
+        public List<String> getKeyFields() {
+            return keyFields;
+        }
+
+        public IndexType getIndexType() {
+            return indexType;
+        }
+
+        public int getGramLength() {
+            return gramLength;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.CREATE_INDEX;
+        }
+    }
+
+    public static class CompiledLoadFromFileStatement implements ICompiledDmlStatement {
+        private String dataverseName;
+        private String datasetName;
+        private boolean alreadySorted;
+        private String adapter;
+        private Map<String, String> properties;
+
+        public CompiledLoadFromFileStatement(String dataverseName, String datasetName, String adapter,
+                Map<String, String> properties, boolean alreadySorted) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.alreadySorted = alreadySorted;
+            this.adapter = adapter;
+            this.properties = properties;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public boolean alreadySorted() {
+            return alreadySorted;
+        }
+
+        public String getAdapter() {
+            return adapter;
+        }
+
+        public Map<String, String> getProperties() {
+            return properties;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.LOAD_FROM_FILE;
+        }
+    }
+
+    public static class CompiledInsertStatement implements ICompiledDmlStatement {
+        private final String dataverseName;
+        private final String datasetName;
+        private final Query query;
+        private final int varCounter;
+
+        public CompiledInsertStatement(String dataverseName, String datasetName, Query query, int varCounter) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.query = query;
+            this.varCounter = varCounter;
+        }
+
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public int getVarCounter() {
+            return varCounter;
+        }
+
+        public Query getQuery() {
+            return query;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.INSERT;
+        }
+    }
+
+    public static class CompiledBeginFeedStatement implements ICompiledDmlStatement {
+        private String dataverseName;
+        private String datasetName;
+        private Query query;
+        private int varCounter;
+
+        public CompiledBeginFeedStatement(String dataverseName, String datasetName, Query query, int varCounter) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.query = query;
+            this.varCounter = varCounter;
+        }
+
+        @Override
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        @Override
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public int getVarCounter() {
+            return varCounter;
+        }
+
+        public Query getQuery() {
+            return query;
+        }
+
+        public void setQuery(Query query) {
+            this.query = query;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.BEGIN_FEED;
+        }
+    }
+
+    public static class CompiledControlFeedStatement implements ICompiledDmlStatement {
+        private String dataverseName;
+        private String datasetName;
+        private OperationType operationType;
+        private Query query;
+        private int varCounter;
+        private Map<String, String> alteredParams;
+
+        public CompiledControlFeedStatement(OperationType operationType, String dataverseName, String datasetName,
+                Map<String, String> alteredParams) {
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.operationType = operationType;
+            this.alteredParams = alteredParams;
+        }
+
+        @Override
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        @Override
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        public OperationType getOperationType() {
+            return operationType;
+        }
+
+        public int getVarCounter() {
+            return varCounter;
+        }
+
+        public Query getQuery() {
+            return query;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.CONTROL_FEED;
+        }
+
+        public Map<String, String> getProperties() {
+            return alteredParams;
+        }
+
+        public void setProperties(Map<String, String> properties) {
+            this.alteredParams = properties;
+        }
+    }
+
+    public static class CompiledDeleteStatement implements ICompiledDmlStatement {
+        private VariableExpr var;
+        private String dataverseName;
+        private String datasetName;
+        private Expression condition;
+        private int varCounter;
+        private AqlMetadataProvider metadataProvider;
+
+        public CompiledDeleteStatement(VariableExpr var, String dataverseName, String datasetName,
+                Expression condition, int varCounter, AqlMetadataProvider metadataProvider) {
+            this.var = var;
+            this.dataverseName = dataverseName;
+            this.datasetName = datasetName;
+            this.condition = condition;
+            this.varCounter = varCounter;
+            this.metadataProvider = metadataProvider;
+        }
+
+        @Override
+        public String getDatasetName() {
+            return datasetName;
+        }
+
+        @Override
+        public String getDataverseName() {
+            return dataverseName;
+        }
+
+        public int getVarCounter() {
+            return varCounter;
+        }
+
+        public Expression getCondition() {
+            return condition;
+        }
+
+        public Query getQuery() throws AlgebricksException {
+
+            List<Expression> arguments = new ArrayList<Expression>();
+            String arg = dataverseName == null ? datasetName : dataverseName + "." + datasetName;
+            LiteralExpr argumentLiteral = new LiteralExpr(new StringLiteral(arg));
+            arguments.add(argumentLiteral);
+
+            CallExpr callExpression = new CallExpr(new FunctionSignature(FunctionConstants.ASTERIX_NS, "dataset", 1),
+                    arguments);
+            List<Clause> clauseList = new ArrayList<Clause>();
+            Clause forClause = new ForClause(var, callExpression);
+            clauseList.add(forClause);
+            Clause whereClause = null;
+            if (condition != null) {
+                whereClause = new WhereClause(condition);
+                clauseList.add(whereClause);
+            }
+
+            Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
+            if (dataset == null) {
+                throw new AlgebricksException("Unknown dataset " + datasetName);
+            }
+            String itemTypeName = dataset.getItemTypeName();
+            IAType itemType = metadataProvider.findType(dataset.getDataverseName(), itemTypeName);
+            ARecordType recType = (ARecordType) itemType;
+            String[] fieldNames = recType.getFieldNames();
+            List<FieldBinding> fieldBindings = new ArrayList<FieldBinding>();
+            for (int i = 0; i < fieldNames.length; i++) {
+                FieldAccessor fa = new FieldAccessor(var, new Identifier(fieldNames[i]));
+                FieldBinding fb = new FieldBinding(new LiteralExpr(new StringLiteral(fieldNames[i])), fa);
+                fieldBindings.add(fb);
+            }
+            RecordConstructor rc = new RecordConstructor(fieldBindings);
+
+            FLWOGRExpression flowgr = new FLWOGRExpression(clauseList, rc);
+            Query query = new Query();
+            query.setBody(flowgr);
+            return query;
+        }
+
+        @Override
+        public Kind getKind() {
+            return Kind.DELETE;
+        }
+
+    }
+
+}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/ConstantHelper.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/ConstantHelper.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/ConstantHelper.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/ConstantHelper.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationContext.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationContext.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationContext.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationContext.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationException.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationException.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationException.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TranslationException.java
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TypeTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TypeTranslator.java
similarity index 100%
rename from asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TypeTranslator.java
rename to asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/TypeTranslator.java
diff --git a/asterix/asterix-algebra/src/main/javacc/AQLPlus.jj b/asterix-algebra/src/main/javacc/AQLPlus.jj
similarity index 100%
rename from asterix/asterix-algebra/src/main/javacc/AQLPlus.jj
rename to asterix-algebra/src/main/javacc/AQLPlus.jj
diff --git a/asterix/asterix-app/data/custord-tiny/customer-tiny-neg.adm b/asterix-app/data/custord-tiny/customer-tiny-neg.adm
similarity index 100%
rename from asterix/asterix-app/data/custord-tiny/customer-tiny-neg.adm
rename to asterix-app/data/custord-tiny/customer-tiny-neg.adm
diff --git a/asterix/asterix-app/data/custord-tiny/customer-tiny.adm b/asterix-app/data/custord-tiny/customer-tiny.adm
similarity index 100%
rename from asterix/asterix-app/data/custord-tiny/customer-tiny.adm
rename to asterix-app/data/custord-tiny/customer-tiny.adm
diff --git a/asterix/asterix-app/data/custord-tiny/order-tiny.adm b/asterix-app/data/custord-tiny/order-tiny.adm
similarity index 100%
rename from asterix/asterix-app/data/custord-tiny/order-tiny.adm
rename to asterix-app/data/custord-tiny/order-tiny.adm
diff --git a/asterix/asterix-app/data/dblp-small/dblp-small-id.txt b/asterix-app/data/dblp-small/dblp-small-id.txt
similarity index 100%
rename from asterix/asterix-app/data/dblp-small/dblp-small-id.txt
rename to asterix-app/data/dblp-small/dblp-small-id.txt
diff --git a/asterix/asterix-app/data/dblp-small/dblp-small-nulls.adm b/asterix-app/data/dblp-small/dblp-small-nulls.adm
similarity index 100%
rename from asterix/asterix-app/data/dblp-small/dblp-small-nulls.adm
rename to asterix-app/data/dblp-small/dblp-small-nulls.adm
diff --git a/asterix/asterix-app/data/dblp-small/dblp-small.adm b/asterix-app/data/dblp-small/dblp-small.adm
similarity index 100%
rename from asterix/asterix-app/data/dblp-small/dblp-small.adm
rename to asterix-app/data/dblp-small/dblp-small.adm
diff --git a/asterix/asterix-app/data/dblp-small/part-00000.adm b/asterix-app/data/dblp-small/part-00000.adm
similarity index 100%
rename from asterix/asterix-app/data/dblp-small/part-00000.adm
rename to asterix-app/data/dblp-small/part-00000.adm
diff --git a/asterix/asterix-app/data/dblp-small/part-00001.adm b/asterix-app/data/dblp-small/part-00001.adm
similarity index 100%
rename from asterix/asterix-app/data/dblp-small/part-00001.adm
rename to asterix-app/data/dblp-small/part-00001.adm
diff --git a/asterix/asterix-app/data/demo0927/customerData.adm b/asterix-app/data/demo0927/customerData.adm
similarity index 100%
rename from asterix/asterix-app/data/demo0927/customerData.adm
rename to asterix-app/data/demo0927/customerData.adm
diff --git a/asterix/asterix-app/data/demo0927/orderData.adm b/asterix-app/data/demo0927/orderData.adm
similarity index 100%
rename from asterix/asterix-app/data/demo0927/orderData.adm
rename to asterix-app/data/demo0927/orderData.adm
diff --git a/asterix/asterix-app/data/empty.adm b/asterix-app/data/empty.adm
similarity index 100%
rename from asterix/asterix-app/data/empty.adm
rename to asterix-app/data/empty.adm
diff --git a/asterix/asterix-app/data/events/test/event.adm b/asterix-app/data/events/test/event.adm
similarity index 100%
rename from asterix/asterix-app/data/events/test/event.adm
rename to asterix-app/data/events/test/event.adm
diff --git a/asterix/asterix-app/data/events/tiny/event.adm b/asterix-app/data/events/tiny/event.adm
similarity index 100%
rename from asterix/asterix-app/data/events/tiny/event.adm
rename to asterix-app/data/events/tiny/event.adm
diff --git a/asterix/asterix-app/data/events/tiny/user.adm b/asterix-app/data/events/tiny/user.adm
similarity index 100%
rename from asterix/asterix-app/data/events/tiny/user.adm
rename to asterix-app/data/events/tiny/user.adm
diff --git a/asterix/asterix-app/data/fn-ln.adm b/asterix-app/data/fn-ln.adm
similarity index 100%
rename from asterix/asterix-app/data/fn-ln.adm
rename to asterix-app/data/fn-ln.adm
diff --git a/asterix/asterix-app/data/hdfs/asterix_info.txt b/asterix-app/data/hdfs/asterix_info.txt
similarity index 100%
rename from asterix/asterix-app/data/hdfs/asterix_info.txt
rename to asterix-app/data/hdfs/asterix_info.txt
diff --git a/asterix/asterix-app/data/hdfs/large_text b/asterix-app/data/hdfs/large_text
similarity index 100%
rename from asterix/asterix-app/data/hdfs/large_text
rename to asterix-app/data/hdfs/large_text
diff --git a/asterix/asterix-app/data/hdfs/obamatweets.adm b/asterix-app/data/hdfs/obamatweets.adm
similarity index 100%
rename from asterix/asterix-app/data/hdfs/obamatweets.adm
rename to asterix-app/data/hdfs/obamatweets.adm
diff --git a/asterix/asterix-app/data/hdfs/textFileS b/asterix-app/data/hdfs/textFileS
similarity index 100%
rename from asterix/asterix-app/data/hdfs/textFileS
rename to asterix-app/data/hdfs/textFileS
Binary files differ
diff --git a/asterix/asterix-app/data/id-fn-ln.adm b/asterix-app/data/id-fn-ln.adm
similarity index 100%
rename from asterix/asterix-app/data/id-fn-ln.adm
rename to asterix-app/data/id-fn-ln.adm
diff --git a/asterix/asterix-app/data/metadata/customerData.json b/asterix-app/data/metadata/customerData.json
similarity index 100%
rename from asterix/asterix-app/data/metadata/customerData.json
rename to asterix-app/data/metadata/customerData.json
diff --git a/asterix/asterix-app/data/metadata/orderData.json b/asterix-app/data/metadata/orderData.json
similarity index 100%
rename from asterix/asterix-app/data/metadata/orderData.json
rename to asterix-app/data/metadata/orderData.json
diff --git a/asterix/asterix-app/data/names.adm b/asterix-app/data/names.adm
similarity index 100%
rename from asterix/asterix-app/data/names.adm
rename to asterix-app/data/names.adm
diff --git a/asterix/asterix-app/data/nested01/person1.adm b/asterix-app/data/nested01/person1.adm
similarity index 100%
rename from asterix/asterix-app/data/nested01/person1.adm
rename to asterix-app/data/nested01/person1.adm
diff --git a/asterix/asterix-app/data/nested01/person2.adm b/asterix-app/data/nested01/person2.adm
similarity index 100%
rename from asterix/asterix-app/data/nested01/person2.adm
rename to asterix-app/data/nested01/person2.adm
diff --git a/asterix/asterix-app/data/nontagged/allData.json b/asterix-app/data/nontagged/allData.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/allData.json
rename to asterix-app/data/nontagged/allData.json
diff --git a/asterix/asterix-app/data/nontagged/customerData.json b/asterix-app/data/nontagged/customerData.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/customerData.json
rename to asterix-app/data/nontagged/customerData.json
diff --git a/asterix/asterix-app/data/nontagged/employee.json b/asterix-app/data/nontagged/employee.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/employee.json
rename to asterix-app/data/nontagged/employee.json
diff --git a/asterix/asterix-app/data/nontagged/numericData.adm b/asterix-app/data/nontagged/numericData.adm
similarity index 100%
rename from asterix/asterix-app/data/nontagged/numericData.adm
rename to asterix-app/data/nontagged/numericData.adm
diff --git a/asterix/asterix-app/data/nontagged/numericData.json b/asterix-app/data/nontagged/numericData.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/numericData.json
rename to asterix-app/data/nontagged/numericData.json
diff --git a/asterix/asterix-app/data/nontagged/numericData.txt b/asterix-app/data/nontagged/numericData.txt
similarity index 100%
rename from asterix/asterix-app/data/nontagged/numericData.txt
rename to asterix-app/data/nontagged/numericData.txt
diff --git a/asterix/asterix-app/data/nontagged/orderData.json b/asterix-app/data/nontagged/orderData.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/orderData.json
rename to asterix-app/data/nontagged/orderData.json
diff --git a/asterix/asterix-app/data/nontagged/spatialData.json b/asterix-app/data/nontagged/spatialData.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/spatialData.json
rename to asterix-app/data/nontagged/spatialData.json
diff --git a/asterix/asterix-app/data/nontagged/spatialData.txt b/asterix-app/data/nontagged/spatialData.txt
similarity index 100%
rename from asterix/asterix-app/data/nontagged/spatialData.txt
rename to asterix-app/data/nontagged/spatialData.txt
diff --git a/asterix/asterix-app/data/nontagged/tempData.json b/asterix-app/data/nontagged/tempData.json
similarity index 100%
rename from asterix/asterix-app/data/nontagged/tempData.json
rename to asterix-app/data/nontagged/tempData.json
diff --git a/asterix/asterix-app/data/nontagged/tempData.txt b/asterix-app/data/nontagged/tempData.txt
similarity index 100%
rename from asterix/asterix-app/data/nontagged/tempData.txt
rename to asterix-app/data/nontagged/tempData.txt
diff --git a/asterix/asterix-app/data/pub-small/csx-small-id.txt b/asterix-app/data/pub-small/csx-small-id.txt
similarity index 100%
rename from asterix/asterix-app/data/pub-small/csx-small-id.txt
rename to asterix-app/data/pub-small/csx-small-id.txt
diff --git a/asterix/asterix-app/data/pub-small/dblp-small-id.txt b/asterix-app/data/pub-small/dblp-small-id.txt
similarity index 100%
rename from asterix/asterix-app/data/pub-small/dblp-small-id.txt
rename to asterix-app/data/pub-small/dblp-small-id.txt
diff --git a/asterix/asterix-app/data/pub-small/tokensranked.adm b/asterix-app/data/pub-small/tokensranked.adm
similarity index 100%
rename from asterix/asterix-app/data/pub-small/tokensranked.adm
rename to asterix-app/data/pub-small/tokensranked.adm
diff --git a/asterix/asterix-app/data/schemas/customer.scm b/asterix-app/data/schemas/customer.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/customer.scm
rename to asterix-app/data/schemas/customer.scm
diff --git a/asterix/asterix-app/data/schemas/lineitem.scm b/asterix-app/data/schemas/lineitem.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/lineitem.scm
rename to asterix-app/data/schemas/lineitem.scm
diff --git a/asterix/asterix-app/data/schemas/nation.scm b/asterix-app/data/schemas/nation.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/nation.scm
rename to asterix-app/data/schemas/nation.scm
diff --git a/asterix/asterix-app/data/schemas/orders.scm b/asterix-app/data/schemas/orders.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/orders.scm
rename to asterix-app/data/schemas/orders.scm
diff --git a/asterix/asterix-app/data/schemas/part.scm b/asterix-app/data/schemas/part.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/part.scm
rename to asterix-app/data/schemas/part.scm
diff --git a/asterix/asterix-app/data/schemas/partsupp.scm b/asterix-app/data/schemas/partsupp.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/partsupp.scm
rename to asterix-app/data/schemas/partsupp.scm
diff --git a/asterix/asterix-app/data/schemas/region.scm b/asterix-app/data/schemas/region.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/region.scm
rename to asterix-app/data/schemas/region.scm
diff --git a/asterix/asterix-app/data/schemas/supplier.scm b/asterix-app/data/schemas/supplier.scm
similarity index 100%
rename from asterix/asterix-app/data/schemas/supplier.scm
rename to asterix-app/data/schemas/supplier.scm
diff --git a/asterix/asterix-app/data/semistructured/co1k/customer.adm b/asterix-app/data/semistructured/co1k/customer.adm
similarity index 100%
rename from asterix/asterix-app/data/semistructured/co1k/customer.adm
rename to asterix-app/data/semistructured/co1k/customer.adm
diff --git a/asterix/asterix-app/data/semistructured/co1k/orders.adm b/asterix-app/data/semistructured/co1k/orders.adm
similarity index 100%
rename from asterix/asterix-app/data/semistructured/co1k/orders.adm
rename to asterix-app/data/semistructured/co1k/orders.adm
diff --git a/asterix/asterix-app/data/semistructured/co1k_olist/customer.adm b/asterix-app/data/semistructured/co1k_olist/customer.adm
similarity index 100%
rename from asterix/asterix-app/data/semistructured/co1k_olist/customer.adm
rename to asterix-app/data/semistructured/co1k_olist/customer.adm
diff --git a/asterix/asterix-app/data/semistructured/tiny01/customer.adm b/asterix-app/data/semistructured/tiny01/customer.adm
similarity index 100%
rename from asterix/asterix-app/data/semistructured/tiny01/customer.adm
rename to asterix-app/data/semistructured/tiny01/customer.adm
diff --git a/asterix/asterix-app/data/semistructured/tiny01/orders.adm b/asterix-app/data/semistructured/tiny01/orders.adm
similarity index 100%
rename from asterix/asterix-app/data/semistructured/tiny01/orders.adm
rename to asterix-app/data/semistructured/tiny01/orders.adm
diff --git a/asterix/asterix-app/data/spatial/spatialData.json b/asterix-app/data/spatial/spatialData.json
similarity index 100%
rename from asterix/asterix-app/data/spatial/spatialData.json
rename to asterix-app/data/spatial/spatialData.json
diff --git a/asterix/asterix-app/data/spatial/spatialData0.json b/asterix-app/data/spatial/spatialData0.json
similarity index 100%
rename from asterix/asterix-app/data/spatial/spatialData0.json
rename to asterix-app/data/spatial/spatialData0.json
diff --git a/asterix/asterix-app/data/spatial/spatialDataAggregation.json b/asterix-app/data/spatial/spatialDataAggregation.json
similarity index 100%
rename from asterix/asterix-app/data/spatial/spatialDataAggregation.json
rename to asterix-app/data/spatial/spatialDataAggregation.json
diff --git a/asterix/asterix-app/data/spatial/spatialDataNulls.json b/asterix-app/data/spatial/spatialDataNulls.json
similarity index 100%
rename from asterix/asterix-app/data/spatial/spatialDataNulls.json
rename to asterix-app/data/spatial/spatialDataNulls.json
diff --git a/asterix/asterix-app/data/spj01/cust1.adm b/asterix-app/data/spj01/cust1.adm
similarity index 100%
rename from asterix/asterix-app/data/spj01/cust1.adm
rename to asterix-app/data/spj01/cust1.adm
diff --git a/asterix/asterix-app/data/spj01/cust2.adm b/asterix-app/data/spj01/cust2.adm
similarity index 100%
rename from asterix/asterix-app/data/spj01/cust2.adm
rename to asterix-app/data/spj01/cust2.adm
diff --git a/asterix/asterix-app/data/spj01/ord1.adm b/asterix-app/data/spj01/ord1.adm
similarity index 100%
rename from asterix/asterix-app/data/spj01/ord1.adm
rename to asterix-app/data/spj01/ord1.adm
diff --git a/asterix/asterix-app/data/spj01/ord2.adm b/asterix-app/data/spj01/ord2.adm
similarity index 100%
rename from asterix/asterix-app/data/spj01/ord2.adm
rename to asterix-app/data/spj01/ord2.adm
diff --git a/asterix/asterix-app/data/spj01/payment1.adm b/asterix-app/data/spj01/payment1.adm
similarity index 100%
rename from asterix/asterix-app/data/spj01/payment1.adm
rename to asterix-app/data/spj01/payment1.adm
diff --git a/asterix/asterix-app/data/spj01/payment2.adm b/asterix-app/data/spj01/payment2.adm
similarity index 100%
rename from asterix/asterix-app/data/spj01/payment2.adm
rename to asterix-app/data/spj01/payment2.adm
diff --git a/asterix/asterix-app/data/temporal/temporalData.json b/asterix-app/data/temporal/temporalData.json
similarity index 100%
rename from asterix/asterix-app/data/temporal/temporalData.json
rename to asterix-app/data/temporal/temporalData.json
diff --git a/asterix/asterix-app/data/temporal/temporalData.txt b/asterix-app/data/temporal/temporalData.txt
similarity index 100%
rename from asterix/asterix-app/data/temporal/temporalData.txt
rename to asterix-app/data/temporal/temporalData.txt
diff --git a/asterix/asterix-app/data/test1.adm b/asterix-app/data/test1.adm
similarity index 100%
rename from asterix/asterix-app/data/test1.adm
rename to asterix-app/data/test1.adm
diff --git a/asterix/asterix-app/data/tpch0.001/customer-part1.tbl b/asterix-app/data/tpch0.001/customer-part1.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/customer-part1.tbl
rename to asterix-app/data/tpch0.001/customer-part1.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/customer-part2.tbl b/asterix-app/data/tpch0.001/customer-part2.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/customer-part2.tbl
rename to asterix-app/data/tpch0.001/customer-part2.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/customer.tbl b/asterix-app/data/tpch0.001/customer.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/customer.tbl
rename to asterix-app/data/tpch0.001/customer.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/lineitem.tbl b/asterix-app/data/tpch0.001/lineitem.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/lineitem.tbl
rename to asterix-app/data/tpch0.001/lineitem.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/lineitem_0.tbl b/asterix-app/data/tpch0.001/lineitem_0.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/lineitem_0.tbl
rename to asterix-app/data/tpch0.001/lineitem_0.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/nation.tbl b/asterix-app/data/tpch0.001/nation.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/nation.tbl
rename to asterix-app/data/tpch0.001/nation.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/orders-part1.tbl b/asterix-app/data/tpch0.001/orders-part1.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/orders-part1.tbl
rename to asterix-app/data/tpch0.001/orders-part1.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/orders-part2.tbl b/asterix-app/data/tpch0.001/orders-part2.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/orders-part2.tbl
rename to asterix-app/data/tpch0.001/orders-part2.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/orders.tbl b/asterix-app/data/tpch0.001/orders.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/orders.tbl
rename to asterix-app/data/tpch0.001/orders.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/part.tbl b/asterix-app/data/tpch0.001/part.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/part.tbl
rename to asterix-app/data/tpch0.001/part.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/partsupp.tbl b/asterix-app/data/tpch0.001/partsupp.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/partsupp.tbl
rename to asterix-app/data/tpch0.001/partsupp.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/region.tbl b/asterix-app/data/tpch0.001/region.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/region.tbl
rename to asterix-app/data/tpch0.001/region.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/supplier.tbl b/asterix-app/data/tpch0.001/supplier.tbl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/supplier.tbl
rename to asterix-app/data/tpch0.001/supplier.tbl
diff --git a/asterix/asterix-app/data/tpch0.001/tpch.ddl b/asterix-app/data/tpch0.001/tpch.ddl
similarity index 100%
rename from asterix/asterix-app/data/tpch0.001/tpch.ddl
rename to asterix-app/data/tpch0.001/tpch.ddl
diff --git a/asterix/asterix-app/data/twitter/extrasmalltweets.txt b/asterix-app/data/twitter/extrasmalltweets.txt
similarity index 100%
rename from asterix/asterix-app/data/twitter/extrasmalltweets.txt
rename to asterix-app/data/twitter/extrasmalltweets.txt
diff --git a/asterix/asterix-app/data/twitter/obamatweets.adm b/asterix-app/data/twitter/obamatweets.adm
similarity index 100%
rename from asterix/asterix-app/data/twitter/obamatweets.adm
rename to asterix-app/data/twitter/obamatweets.adm
diff --git a/asterix/asterix-app/data/twitter/smalltweets.txt b/asterix-app/data/twitter/smalltweets.txt
similarity index 100%
rename from asterix/asterix-app/data/twitter/smalltweets.txt
rename to asterix-app/data/twitter/smalltweets.txt
diff --git a/asterix/asterix-app/data/twitter/tw_messages.adm b/asterix-app/data/twitter/tw_messages.adm
similarity index 100%
rename from asterix/asterix-app/data/twitter/tw_messages.adm
rename to asterix-app/data/twitter/tw_messages.adm
diff --git a/asterix/asterix-app/data/users-visitors-small/users.json b/asterix-app/data/users-visitors-small/users.json
similarity index 100%
rename from asterix/asterix-app/data/users-visitors-small/users.json
rename to asterix-app/data/users-visitors-small/users.json
diff --git a/asterix/asterix-app/data/users-visitors-small/visitors.json b/asterix-app/data/users-visitors-small/visitors.json
similarity index 100%
rename from asterix/asterix-app/data/users-visitors-small/visitors.json
rename to asterix-app/data/users-visitors-small/visitors.json
diff --git a/asterix/asterix-app/data/wisc/empty.adm b/asterix-app/data/wisc/empty.adm
similarity index 100%
rename from asterix/asterix-app/data/wisc/empty.adm
rename to asterix-app/data/wisc/empty.adm
diff --git a/asterix/asterix-app/data/wisc/onektup.adm b/asterix-app/data/wisc/onektup.adm
similarity index 100%
rename from asterix/asterix-app/data/wisc/onektup.adm
rename to asterix-app/data/wisc/onektup.adm
diff --git a/asterix/asterix-app/data/wisc/tenktup.adm b/asterix-app/data/wisc/tenktup.adm
similarity index 100%
rename from asterix/asterix-app/data/wisc/tenktup.adm
rename to asterix-app/data/wisc/tenktup.adm
diff --git a/asterix-app/pom.xml b/asterix-app/pom.xml
new file mode 100644
index 0000000..15af3bc
--- /dev/null
+++ b/asterix-app/pom.xml
@@ -0,0 +1,225 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-app</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>appassembler-maven-plugin</artifactId>
+				<version>1.0</version>
+				<executions>
+					<execution>
+						<configuration>
+							<programs>
+								<program>
+									<mainClass>edu.uci.ics.asterix.drivers.AsterixWebServer</mainClass>
+									<name>asterix-web</name>
+								</program>
+								<program>
+									<mainClass>edu.uci.ics.asterix.drivers.AsterixClientDriver</mainClass>
+									<name>asterix-cmd</name>
+								</program>
+								<program>
+									<mainClass>edu.uci.ics.asterix.drivers.AsterixCLI</mainClass>
+									<name>asterix-cli</name>
+								</program>
+							</programs>
+							<repositoryLayout>flat</repositoryLayout>
+							<repositoryName>lib</repositoryName>
+						</configuration>
+						<phase>package</phase>
+						<goals>
+							<goal>assemble</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.2-beta-5</version>
+				<executions>
+					<execution>
+						<configuration>
+							<descriptors>
+								<descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+							</descriptors>
+						</configuration>
+						<phase>package</phase>
+						<goals>
+							<goal>attached</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.8</version>
+				<configuration>
+					<!-- doesn't work from m2eclipse, currently <additionalClasspathElements> 
+						<additionalClasspathElement>${basedir}/src/main/resources</additionalClasspathElement> 
+						</additionalClasspathElements> -->
+					<forkMode>pertest</forkMode>
+					<argLine>-enableassertions -Xmx${test.heap.size}m 
+						-Dfile.encoding=UTF-8
+						-Djava.util.logging.config.file=src/test/resources/logging.properties
+						-Xdebug
+						-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n</argLine>
+					<includes>
+						<include>**/*TestSuite.java</include>
+						<include>**/*Test.java</include>
+					</includes>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-algebra</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.5</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.jetty</groupId>
+			<artifactId>jetty-server</artifactId>
+			<version>8.0.0.M2</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.eclipse.jetty</groupId>
+			<artifactId>jetty-servlet</artifactId>
+			<version>8.0.0.M2</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.8.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-control-cc</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-control-nc</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>algebricks-compiler</artifactId>
+		</dependency>
+		<dependency>
+            <groupId>edu.uci.ics.hyracks</groupId>
+            <artifactId>hyracks-client</artifactId>
+        </dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-aql</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-om</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-metadata</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-tools</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-common</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+                <dependency>
+                        <groupId>edu.uci.ics.asterix</groupId>
+                        <artifactId>asterix-common</artifactId>
+                        <version>0.0.6-SNAPSHOT</version>
+                        <type>test-jar</type>
+                        <scope>test</scope>
+                </dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-core</artifactId>
+			<version>0.20.2</version>
+			<type>jar</type>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-test</artifactId>
+			<version>0.20.2</version>
+			<type>jar</type>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>xerces</groupId>
+			<artifactId>xercesImpl</artifactId>
+			<version>2.9.1</version>
+			<type>jar</type>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>xalan</groupId>
+			<artifactId>xalan</artifactId>
+			<version>2.7.1</version>
+			<type>jar</type>
+			<scope>test</scope>
+		</dependency>
+                <dependency>
+                    <groupId>net.sourceforge.cobertura</groupId>
+                    <artifactId>cobertura</artifactId>
+                    <version>1.9.4</version>
+                </dependency>
+                <dependency>
+                	<groupId>edu.uci.ics.asterix</groupId>
+                	<artifactId>asterix-test-framework</artifactId>
+                	<version>0.0.6-SNAPSHOT</version>
+                	<scope>test</scope>
+                </dependency>
+	</dependencies>
+
+</project>
diff --git a/asterix/asterix-app/scripts/asterix/startallncs.sh b/asterix-app/scripts/asterix/startallncs.sh
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/startallncs.sh
rename to asterix-app/scripts/asterix/startallncs.sh
diff --git a/asterix/asterix-app/scripts/asterix/startcc.sh b/asterix-app/scripts/asterix/startcc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/startcc.sh
rename to asterix-app/scripts/asterix/startcc.sh
diff --git a/asterix/asterix-app/scripts/asterix/startnc.sh b/asterix-app/scripts/asterix/startnc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/startnc.sh
rename to asterix-app/scripts/asterix/startnc.sh
diff --git a/asterix/asterix-app/scripts/asterix/stopallncs.sh b/asterix-app/scripts/asterix/stopallncs.sh
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/stopallncs.sh
rename to asterix-app/scripts/asterix/stopallncs.sh
diff --git a/asterix/asterix-app/scripts/asterix/stopcc.sh b/asterix-app/scripts/asterix/stopcc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/stopcc.sh
rename to asterix-app/scripts/asterix/stopcc.sh
diff --git a/asterix/asterix-app/scripts/asterix/stopnc.sh b/asterix-app/scripts/asterix/stopnc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/stopnc.sh
rename to asterix-app/scripts/asterix/stopnc.sh
diff --git a/asterix/asterix-app/scripts/asterix/test.properties b/asterix-app/scripts/asterix/test.properties
similarity index 100%
rename from asterix/asterix-app/scripts/asterix/test.properties
rename to asterix-app/scripts/asterix/test.properties
diff --git a/asterix/asterix-app/scripts/idefix/deploy.hcli b/asterix-app/scripts/idefix/deploy.hcli
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/deploy.hcli
rename to asterix-app/scripts/idefix/deploy.hcli
diff --git a/asterix/asterix-app/scripts/idefix/startcc.sh b/asterix-app/scripts/idefix/startcc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/startcc.sh
rename to asterix-app/scripts/idefix/startcc.sh
diff --git a/asterix/asterix-app/scripts/idefix/startnc1.sh b/asterix-app/scripts/idefix/startnc1.sh
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/startnc1.sh
rename to asterix-app/scripts/idefix/startnc1.sh
diff --git a/asterix/asterix-app/scripts/idefix/startnc2.sh b/asterix-app/scripts/idefix/startnc2.sh
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/startnc2.sh
rename to asterix-app/scripts/idefix/startnc2.sh
diff --git a/asterix/asterix-app/scripts/idefix/stopallncs.sh b/asterix-app/scripts/idefix/stopallncs.sh
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/stopallncs.sh
rename to asterix-app/scripts/idefix/stopallncs.sh
diff --git a/asterix/asterix-app/scripts/idefix/stopcc.sh b/asterix-app/scripts/idefix/stopcc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/stopcc.sh
rename to asterix-app/scripts/idefix/stopcc.sh
diff --git a/asterix/asterix-app/scripts/idefix/undeploy.hcli b/asterix-app/scripts/idefix/undeploy.hcli
similarity index 100%
rename from asterix/asterix-app/scripts/idefix/undeploy.hcli
rename to asterix-app/scripts/idefix/undeploy.hcli
diff --git a/asterix/asterix-app/scripts/rainbow/execute.sh b/asterix-app/scripts/rainbow/execute.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/execute.sh
rename to asterix-app/scripts/rainbow/execute.sh
diff --git a/asterix/asterix-app/scripts/rainbow/startallncs.sh b/asterix-app/scripts/rainbow/startallncs.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/startallncs.sh
rename to asterix-app/scripts/rainbow/startallncs.sh
diff --git a/asterix/asterix-app/scripts/rainbow/startcc.sh b/asterix-app/scripts/rainbow/startcc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/startcc.sh
rename to asterix-app/scripts/rainbow/startcc.sh
diff --git a/asterix/asterix-app/scripts/rainbow/startnc.sh b/asterix-app/scripts/rainbow/startnc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/startnc.sh
rename to asterix-app/scripts/rainbow/startnc.sh
diff --git a/asterix/asterix-app/scripts/rainbow/stopallncs.sh b/asterix-app/scripts/rainbow/stopallncs.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/stopallncs.sh
rename to asterix-app/scripts/rainbow/stopallncs.sh
diff --git a/asterix/asterix-app/scripts/rainbow/stopcc.sh b/asterix-app/scripts/rainbow/stopcc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/stopcc.sh
rename to asterix-app/scripts/rainbow/stopcc.sh
diff --git a/asterix/asterix-app/scripts/rainbow/stopnc.sh b/asterix-app/scripts/rainbow/stopnc.sh
similarity index 100%
rename from asterix/asterix-app/scripts/rainbow/stopnc.sh
rename to asterix-app/scripts/rainbow/stopnc.sh
diff --git a/asterix/asterix-app/src/main/assembly/binary-assembly.xml b/asterix-app/src/main/assembly/binary-assembly.xml
similarity index 100%
rename from asterix/asterix-app/src/main/assembly/binary-assembly.xml
rename to asterix-app/src/main/assembly/binary-assembly.xml
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/common/APIFramework.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixClientConfig.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixClientConfig.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixClientConfig.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixClientConfig.java
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
new file mode 100644
index 0000000..272050f
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
@@ -0,0 +1,89 @@
+package edu.uci.ics.asterix.api.common;
+
+import java.util.EnumSet;
+
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.hyracks.bootstrap.CCApplicationEntryPoint;
+import edu.uci.ics.asterix.hyracks.bootstrap.NCApplicationEntryPoint;
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+import edu.uci.ics.hyracks.api.job.JobFlag;
+import edu.uci.ics.hyracks.api.job.JobId;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.control.cc.ClusterControllerService;
+import edu.uci.ics.hyracks.control.common.controllers.CCConfig;
+import edu.uci.ics.hyracks.control.common.controllers.NCConfig;
+import edu.uci.ics.hyracks.control.nc.NodeControllerService;
+
+public class AsterixHyracksIntegrationUtil {
+
+    public static final String NC1_ID = "nc1";
+    public static final String NC2_ID = "nc2";
+    public static final String[] ASTERIX_DATA_DIRS = new String[] { "nc1data", "nc2data" };
+
+    public static final int DEFAULT_HYRACKS_CC_CLIENT_PORT = 1098;
+
+    public static final int DEFAULT_HYRACKS_CC_CLUSTER_PORT = 1099;
+
+    private static ClusterControllerService cc;
+    private static NodeControllerService nc1;
+    private static NodeControllerService nc2;
+    private static IHyracksClientConnection hcc;
+
+    public static void init() throws Exception {
+        CCConfig ccConfig = new CCConfig();
+        ccConfig.clusterNetIpAddress = "127.0.0.1";
+        ccConfig.clientNetIpAddress = "127.0.0.1";
+        ccConfig.clientNetPort = DEFAULT_HYRACKS_CC_CLIENT_PORT;
+        ccConfig.clusterNetPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
+        ccConfig.defaultMaxJobAttempts = 0;
+        ccConfig.appCCMainClass = CCApplicationEntryPoint.class.getName();
+        // ccConfig.useJOL = true;
+        cc = new ClusterControllerService(ccConfig);
+        cc.start();
+
+        NCConfig ncConfig1 = new NCConfig();
+        ncConfig1.ccHost = "localhost";
+        ncConfig1.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
+        ncConfig1.clusterNetIPAddress = "127.0.0.1";
+        ncConfig1.dataIPAddress = "127.0.0.1";
+        ncConfig1.datasetIPAddress = "127.0.0.1";
+        ncConfig1.resultHistorySize = 1000;
+        ncConfig1.nodeId = NC1_ID;
+        ncConfig1.appNCMainClass = NCApplicationEntryPoint.class.getName();
+        nc1 = new NodeControllerService(ncConfig1);
+        nc1.start();
+
+        NCConfig ncConfig2 = new NCConfig();
+        ncConfig2.ccHost = "localhost";
+        ncConfig2.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
+        ncConfig2.clusterNetIPAddress = "127.0.0.1";
+        ncConfig2.dataIPAddress = "127.0.0.1";
+        ncConfig2.datasetIPAddress = "127.0.0.1";
+        ncConfig2.resultHistorySize = 1000;
+        ncConfig2.nodeId = NC2_ID;
+        ncConfig2.appNCMainClass = NCApplicationEntryPoint.class.getName();
+        nc2 = new NodeControllerService(ncConfig2);
+        nc2.start();
+
+        hcc = new HyracksConnection(cc.getConfig().clientNetIpAddress, cc.getConfig().clientNetPort);
+    }
+
+    public static IHyracksClientConnection getHyracksClientConnection() {
+        return hcc;
+    }
+
+    public static void deinit() throws Exception {
+        nc2.stop();
+        nc1.stop();
+        cc.stop();
+    }
+
+    public static void runJob(JobSpecification spec) throws Exception {
+        GlobalConfig.ASTERIX_LOGGER.info(spec.toJSON().toString());
+        JobId jobId = hcc.startJob(spec, EnumSet.of(JobFlag.PROFILE_RUNTIME));
+        GlobalConfig.ASTERIX_LOGGER.info(jobId.toString());
+        hcc.waitForCompletion(jobId);
+    }
+
+}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/Job.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/Job.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/Job.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/common/Job.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/SessionConfig.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/SessionConfig.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/SessionConfig.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/common/SessionConfig.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/APIServlet.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/DDLAPIServlet.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/HyracksProperties.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/HyracksProperties.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/HyracksProperties.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/HyracksProperties.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryAPIServlet.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryResultAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryResultAPIServlet.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryResultAPIServlet.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryResultAPIServlet.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryStatusAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryStatusAPIServlet.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryStatusAPIServlet.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/QueryStatusAPIServlet.java
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
new file mode 100644
index 0000000..2c15578
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.api.http.servlet;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.List;
+import java.util.logging.Level;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.json.JSONObject;
+
+import edu.uci.ics.asterix.api.common.APIFramework.DisplayFormat;
+import edu.uci.ics.asterix.api.common.SessionConfig;
+import edu.uci.ics.asterix.aql.base.Statement;
+import edu.uci.ics.asterix.aql.base.Statement.Kind;
+import edu.uci.ics.asterix.aql.parser.AQLParser;
+import edu.uci.ics.asterix.aql.parser.ParseException;
+import edu.uci.ics.asterix.aql.translator.AqlTranslator;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.result.ResultReader;
+import edu.uci.ics.asterix.result.ResultUtils;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+import edu.uci.ics.hyracks.api.dataset.IHyracksDataset;
+import edu.uci.ics.hyracks.client.dataset.HyracksDataset;
+
+abstract class RESTAPIServlet extends HttpServlet {
+    private static final long serialVersionUID = 1L;
+
+    private static final String HYRACKS_CONNECTION_ATTR = "edu.uci.ics.asterix.HYRACKS_CONNECTION";
+
+    private static final String HYRACKS_DATASET_ATTR = "edu.uci.ics.asterix.HYRACKS_DATASET";
+
+    @Override
+    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
+        response.setContentType("application/json");
+        response.setCharacterEncoding("utf-8");
+
+        PrintWriter out = response.getWriter();
+
+        DisplayFormat format = DisplayFormat.HTML;
+
+        String contentType = request.getContentType();
+
+        if ((contentType == null) || (contentType.equals("text/plain"))) {
+            format = DisplayFormat.TEXT;
+        } else if (contentType.equals("application/json")) {
+            format = DisplayFormat.JSON;
+        }
+
+        String query = getQueryParameter(request);
+        boolean asyncResults = isAsync(request);
+
+        ServletContext context = getServletContext();
+        IHyracksClientConnection hcc;
+        IHyracksDataset hds;
+
+        try {
+            synchronized (context) {
+                hcc = (IHyracksClientConnection) context.getAttribute(HYRACKS_CONNECTION_ATTR);
+
+                hds = (IHyracksDataset) context.getAttribute(HYRACKS_DATASET_ATTR);
+                if (hds == null) {
+                    hds = new HyracksDataset(hcc, ResultReader.FRAME_SIZE, ResultReader.NUM_READERS);
+                    context.setAttribute(HYRACKS_DATASET_ATTR, hds);
+                }
+            }
+
+            AQLParser parser = new AQLParser(query);
+            List<Statement> aqlStatements = parser.Statement();
+            if (checkForbiddenStatements(aqlStatements, out)) {
+                return;
+            }
+            SessionConfig sessionConfig = new SessionConfig(true, false, false, false, false, false, true, false);
+
+            MetadataManager.INSTANCE.init();
+
+            AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, out, sessionConfig, format);
+
+            aqlTranslator.compileAndExecute(hcc, hds, asyncResults);
+
+        } catch (ParseException pe) {
+            GlobalConfig.ASTERIX_LOGGER.log(Level.INFO, pe.getMessage(), pe);
+            StringBuilder errorMessage = new StringBuilder();
+            String message = pe.getMessage();
+            message = message.replace("<", "&lt");
+            message = message.replace(">", "&gt");
+            errorMessage.append("SyntaxError:" + message + "\n");
+            int pos = message.indexOf("line");
+            if (pos > 0) {
+                int columnPos = message.indexOf(",", pos + 1 + "line".length());
+                int lineNo = Integer.parseInt(message.substring(pos + "line".length() + 1, columnPos));
+                String line = query.split("\n")[lineNo - 1];
+                errorMessage.append("==> " + line + "\n");
+            }
+            JSONObject errorResp = ResultUtils.getErrorResponse(2, errorMessage.toString());
+            out.write(errorResp.toString());
+        } catch (Exception e) {
+            GlobalConfig.ASTERIX_LOGGER.log(Level.INFO, e.getMessage(), e);
+            StringBuilder errorMessage = new StringBuilder();
+            errorMessage.append(e.getMessage());
+            JSONObject errorResp = ResultUtils.getErrorResponse(99, errorMessage.toString());
+            out.write(errorResp.toString());
+        }
+    }
+
+    private boolean checkForbiddenStatements(List<Statement> aqlStatements, PrintWriter out) {
+        for (Statement st : aqlStatements) {
+            if (!getAllowedStatements().contains(st.getKind())) {
+                JSONObject errorResp = ResultUtils.getErrorResponse(1, String.format(getErrorMessage(), st.getKind()));
+                out.write(errorResp.toString());
+                return true;
+            }
+        }
+        return false;
+    }
+
+    protected boolean isAsync(HttpServletRequest request) {
+        String mode = request.getParameter("mode");
+        boolean asyncResults = false;
+        if (mode != null && mode.equals("asynchronous")) {
+            asyncResults = true;
+        }
+        return asyncResults;
+    }
+
+    protected abstract String getQueryParameter(HttpServletRequest request);
+
+    protected abstract List<Kind> getAllowedStatements();
+
+    protected abstract String getErrorMessage();
+}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/UpdateAPIServlet.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java b/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/api/java/AsterixJavaClient.java
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java b/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
new file mode 100644
index 0000000..428781f
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
@@ -0,0 +1,1557 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.aql.translator;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.nio.ByteBuffer;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import edu.uci.ics.asterix.api.common.APIFramework;
+import edu.uci.ics.asterix.api.common.APIFramework.DisplayFormat;
+import edu.uci.ics.asterix.api.common.Job;
+import edu.uci.ics.asterix.api.common.SessionConfig;
+import edu.uci.ics.asterix.aql.base.Statement;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.ExternalDetailsDecl;
+import edu.uci.ics.asterix.aql.expression.FeedDetailsDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.Identifier;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.InternalDetailsDecl;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.file.DatasetOperations;
+import edu.uci.ics.asterix.file.FeedOperations;
+import edu.uci.ics.asterix.file.IndexOperations;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.metadata.IDatasetDetails;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
+import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.ExternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.FeedDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.types.TypeSignature;
+import edu.uci.ics.asterix.result.ResultReader;
+import edu.uci.ics.asterix.result.ResultUtils;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetIdFactory;
+import edu.uci.ics.asterix.translator.AbstractAqlTranslator;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledBeginFeedStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledControlFeedStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledCreateIndexStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledDatasetDropStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledDeleteStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledIndexDropStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledInsertStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledWriteFromQueryResultStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.ICompiledDmlStatement;
+import edu.uci.ics.asterix.translator.TypeTranslator;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
+import edu.uci.ics.hyracks.algebricks.data.IAWriterFactory;
+import edu.uci.ics.hyracks.algebricks.data.IResultSerializerFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.runtime.serializer.ResultSerializerFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.runtime.writers.PrinterBasedWriterFactory;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+import edu.uci.ics.hyracks.api.dataset.IHyracksDataset;
+import edu.uci.ics.hyracks.api.dataset.ResultSetId;
+import edu.uci.ics.hyracks.api.io.FileReference;
+import edu.uci.ics.hyracks.api.job.JobId;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
+
+/*
+ * Provides functionality for executing a batch of AQL statements (queries included)
+ * sequentially.
+ */
+public class AqlTranslator extends AbstractAqlTranslator {
+
+    private enum ProgressState {
+        NO_PROGRESS,
+        ADDED_PENDINGOP_RECORD_TO_METADATA
+    }
+
+    private final List<Statement> aqlStatements;
+    private final PrintWriter out;
+    private final SessionConfig sessionConfig;
+    private final DisplayFormat pdf;
+    private Dataverse activeDefaultDataverse;
+    private List<FunctionDecl> declaredFunctions;
+
+    public AqlTranslator(List<Statement> aqlStatements, PrintWriter out, SessionConfig pc, DisplayFormat pdf)
+            throws MetadataException, AsterixException {
+        this.aqlStatements = aqlStatements;
+        this.out = out;
+        this.sessionConfig = pc;
+        this.pdf = pdf;
+        declaredFunctions = getDeclaredFunctions(aqlStatements);
+    }
+
+    private List<FunctionDecl> getDeclaredFunctions(List<Statement> statements) {
+        List<FunctionDecl> functionDecls = new ArrayList<FunctionDecl>();
+        for (Statement st : statements) {
+            if (st.getKind().equals(Statement.Kind.FUNCTION_DECL)) {
+                functionDecls.add((FunctionDecl) st);
+            }
+        }
+        return functionDecls;
+    }
+
+    /**
+     * Compiles and submits for execution a list of AQL statements.
+     * 
+     * @param hcc
+     *            A Hyracks client connection that is used to submit a jobspec to Hyracks.
+     * @param hdc
+     *            A Hyracks dataset client object that is used to read the results.
+     * @param asyncResults
+     *            True if the results should be read asynchronously or false if we should wait for results to be read.
+     * @return A List<QueryResult> containing a QueryResult instance corresponding to each submitted query.
+     * @throws Exception
+     */
+    public List<QueryResult> compileAndExecute(IHyracksClientConnection hcc, IHyracksDataset hdc, boolean asyncResults)
+            throws Exception {
+        int resultSetIdCounter = 0;
+        List<QueryResult> executionResult = new ArrayList<QueryResult>();
+        FileSplit outputFile = null;
+        IAWriterFactory writerFactory = PrinterBasedWriterFactory.INSTANCE;
+        IResultSerializerFactoryProvider resultSerializerFactoryProvider = ResultSerializerFactoryProvider.INSTANCE;
+        Map<String, String> config = new HashMap<String, String>();
+        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
+
+        for (Statement stmt : aqlStatements) {
+            validateOperation(activeDefaultDataverse, stmt);
+            AqlMetadataProvider metadataProvider = new AqlMetadataProvider(activeDefaultDataverse);
+            metadataProvider.setWriterFactory(writerFactory);
+            metadataProvider.setResultSerializerFactoryProvider(resultSerializerFactoryProvider);
+            metadataProvider.setOutputFile(outputFile);
+            metadataProvider.setConfig(config);
+            jobsToExecute.clear();
+            try {
+                switch (stmt.getKind()) {
+                    case SET: {
+                        handleSetStatement(metadataProvider, stmt, config);
+                        break;
+                    }
+                    case DATAVERSE_DECL: {
+                        activeDefaultDataverse = handleUseDataverseStatement(metadataProvider, stmt);
+                        break;
+                    }
+                    case CREATE_DATAVERSE: {
+                        handleCreateDataverseStatement(metadataProvider, stmt);
+                        break;
+                    }
+                    case DATASET_DECL: {
+                        handleCreateDatasetStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case CREATE_INDEX: {
+                        handleCreateIndexStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case TYPE_DECL: {
+                        handleCreateTypeStatement(metadataProvider, stmt);
+                        break;
+                    }
+                    case NODEGROUP_DECL: {
+                        handleCreateNodeGroupStatement(metadataProvider, stmt);
+                        break;
+                    }
+                    case DATAVERSE_DROP: {
+                        handleDataverseDropStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case DATASET_DROP: {
+                        handleDatasetDropStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case INDEX_DROP: {
+                        handleIndexDropStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case TYPE_DROP: {
+                        handleTypeDropStatement(metadataProvider, stmt);
+                        break;
+                    }
+                    case NODEGROUP_DROP: {
+                        handleNodegroupDropStatement(metadataProvider, stmt);
+                        break;
+                    }
+
+                    case CREATE_FUNCTION: {
+                        handleCreateFunctionStatement(metadataProvider, stmt);
+                        break;
+                    }
+
+                    case FUNCTION_DROP: {
+                        handleFunctionDropStatement(metadataProvider, stmt);
+                        break;
+                    }
+
+                    case LOAD_FROM_FILE: {
+                        handleLoadFromFileStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case WRITE_FROM_QUERY_RESULT: {
+                        handleWriteFromQueryResultStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case INSERT: {
+                        handleInsertStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+                    case DELETE: {
+                        handleDeleteStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+
+                    case BEGIN_FEED: {
+                        handleBeginFeedStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+
+                    case CONTROL_FEED: {
+                        handleControlFeedStatement(metadataProvider, stmt, hcc);
+                        break;
+                    }
+
+                    case QUERY: {
+                        metadataProvider.setResultSetId(new ResultSetId(resultSetIdCounter++));
+                        executionResult.add(handleQuery(metadataProvider, (Query) stmt, hcc, hdc, asyncResults));
+                        break;
+                    }
+
+                    case WRITE: {
+                        Pair<IAWriterFactory, FileSplit> result = handleWriteStatement(metadataProvider, stmt);
+                        if (result.first != null) {
+                            writerFactory = result.first;
+                        }
+                        outputFile = result.second;
+                        break;
+                    }
+
+                }
+            } catch (Exception e) {
+                throw new AlgebricksException(e);
+            }
+        }
+        return executionResult;
+    }
+
+    private void handleSetStatement(AqlMetadataProvider metadataProvider, Statement stmt, Map<String, String> config)
+            throws RemoteException, ACIDException {
+        SetStatement ss = (SetStatement) stmt;
+        String pname = ss.getPropName();
+        String pvalue = ss.getPropValue();
+        config.put(pname, pvalue);
+    }
+
+    private Pair<IAWriterFactory, FileSplit> handleWriteStatement(AqlMetadataProvider metadataProvider, Statement stmt)
+            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
+        WriteStatement ws = (WriteStatement) stmt;
+        File f = new File(ws.getFileName());
+        FileSplit outputFile = new FileSplit(ws.getNcName().getValue(), new FileReference(f));
+        IAWriterFactory writerFactory = null;
+        if (ws.getWriterClassName() != null) {
+            writerFactory = (IAWriterFactory) Class.forName(ws.getWriterClassName()).newInstance();
+        }
+        return new Pair<IAWriterFactory, FileSplit>(writerFactory, outputFile);
+    }
+
+    private Dataverse handleUseDataverseStatement(AqlMetadataProvider metadataProvider, Statement stmt)
+            throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            DataverseDecl dvd = (DataverseDecl) stmt;
+            String dvName = dvd.getDataverseName().getValue();
+            Dataverse dv = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), dvName);
+            if (dv == null) {
+                throw new MetadataException("Unknown dataverse " + dvName);
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            return dv;
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new MetadataException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private void handleCreateDataverseStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            CreateDataverseStatement stmtCreateDataverse = (CreateDataverseStatement) stmt;
+            String dvName = stmtCreateDataverse.getDataverseName().getValue();
+            Dataverse dv = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), dvName);
+            if (dv != null) {
+                if (stmtCreateDataverse.getIfNotExists()) {
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    return;
+                } else {
+                    throw new AlgebricksException("A dataverse with this name " + dvName + " already exists.");
+                }
+            }
+            MetadataManager.INSTANCE.addDataverse(metadataProvider.getMetadataTxnContext(), new Dataverse(dvName,
+                    stmtCreateDataverse.getFormat(), IMetadataEntity.PENDING_NO_OP));
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleCreateDatasetStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws AsterixException, Exception {
+
+        ProgressState progress = ProgressState.NO_PROGRESS;
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        String dataverseName = null;
+        String datasetName = null;
+        Dataset dataset = null;
+        try {
+            DatasetDecl dd = (DatasetDecl) stmt;
+            dataverseName = dd.getDataverse() != null ? dd.getDataverse().getValue()
+                    : activeDefaultDataverse != null ? activeDefaultDataverse.getDataverseName() : null;
+            if (dataverseName == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+            datasetName = dd.getName().getValue();
+
+            DatasetType dsType = dd.getDatasetType();
+            String itemTypeName = dd.getItemTypeName().getValue();
+
+            IDatasetDetails datasetDetails = null;
+            Dataset ds = MetadataManager.INSTANCE.getDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
+                    datasetName);
+            if (ds != null) {
+                if (dd.getIfNotExists()) {
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    return;
+                } else {
+                    throw new AlgebricksException("A dataset with this name " + datasetName + " already exists.");
+                }
+            }
+            Datatype dt = MetadataManager.INSTANCE.getDatatype(metadataProvider.getMetadataTxnContext(), dataverseName,
+                    itemTypeName);
+            if (dt == null) {
+                throw new AlgebricksException(": type " + itemTypeName + " could not be found.");
+            }
+            switch (dd.getDatasetType()) {
+                case INTERNAL: {
+                    IAType itemType = dt.getDatatype();
+                    if (itemType.getTypeTag() != ATypeTag.RECORD) {
+                        throw new AlgebricksException("Can only partition ARecord's.");
+                    }
+                    List<String> partitioningExprs = ((InternalDetailsDecl) dd.getDatasetDetailsDecl())
+                            .getPartitioningExprs();
+                    ARecordType aRecordType = (ARecordType) itemType;
+                    aRecordType.validatePartitioningExpressions(partitioningExprs);
+                    String ngName = ((InternalDetailsDecl) dd.getDatasetDetailsDecl()).getNodegroupName().getValue();
+                    datasetDetails = new InternalDatasetDetails(InternalDatasetDetails.FileStructure.BTREE,
+                            InternalDatasetDetails.PartitioningStrategy.HASH, partitioningExprs, partitioningExprs,
+                            ngName);
+                    break;
+                }
+                case EXTERNAL: {
+                    String adapter = ((ExternalDetailsDecl) dd.getDatasetDetailsDecl()).getAdapter();
+                    Map<String, String> properties = ((ExternalDetailsDecl) dd.getDatasetDetailsDecl()).getProperties();
+                    datasetDetails = new ExternalDatasetDetails(adapter, properties);
+                    break;
+                }
+                case FEED: {
+                    IAType itemType = dt.getDatatype();
+                    if (itemType.getTypeTag() != ATypeTag.RECORD) {
+                        throw new AlgebricksException("Can only partition ARecord's.");
+                    }
+                    List<String> partitioningExprs = ((FeedDetailsDecl) dd.getDatasetDetailsDecl())
+                            .getPartitioningExprs();
+                    ARecordType aRecordType = (ARecordType) itemType;
+                    aRecordType.validatePartitioningExpressions(partitioningExprs);
+                    String ngName = ((FeedDetailsDecl) dd.getDatasetDetailsDecl()).getNodegroupName().getValue();
+                    String adapter = ((FeedDetailsDecl) dd.getDatasetDetailsDecl()).getAdapterFactoryClassname();
+                    Map<String, String> configuration = ((FeedDetailsDecl) dd.getDatasetDetailsDecl())
+                            .getConfiguration();
+                    FunctionSignature signature = ((FeedDetailsDecl) dd.getDatasetDetailsDecl()).getFunctionSignature();
+                    datasetDetails = new FeedDatasetDetails(InternalDatasetDetails.FileStructure.BTREE,
+                            InternalDatasetDetails.PartitioningStrategy.HASH, partitioningExprs, partitioningExprs,
+                            ngName, adapter, configuration, signature, FeedDatasetDetails.FeedState.INACTIVE.toString());
+                    break;
+                }
+            }
+
+            //#. initialize DatasetIdFactory if it is not initialized.
+            if (!DatasetIdFactory.isInitialized()) {
+                DatasetIdFactory.initialize(MetadataManager.INSTANCE.getMostRecentDatasetId());
+            }
+
+            //#. add a new dataset with PendingAddOp
+            dataset = new Dataset(dataverseName, datasetName, itemTypeName, datasetDetails, dd.getHints(), dsType,
+                    DatasetIdFactory.generateDatasetId(), IMetadataEntity.PENDING_ADD_OP);
+            MetadataManager.INSTANCE.addDataset(metadataProvider.getMetadataTxnContext(), dataset);
+
+            if (dd.getDatasetType() == DatasetType.INTERNAL || dd.getDatasetType() == DatasetType.FEED) {
+                Dataverse dataverse = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(),
+                        dataverseName);
+                JobSpecification jobSpec = DatasetOperations.createDatasetJobSpec(dataverse, datasetName,
+                        metadataProvider);
+
+                //#. make metadataTxn commit before calling runJob.
+                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                bActiveTxn = false;
+                progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
+
+                //#. runJob
+                runJob(hcc, jobSpec, true);
+
+                //#. begin new metadataTxn
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                bActiveTxn = true;
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+            }
+
+            //#. add a new dataset with PendingNoOp after deleting the dataset with PendingAddOp
+            MetadataManager.INSTANCE.dropDataset(metadataProvider.getMetadataTxnContext(), dataverseName, datasetName);
+            dataset.setPendingOp(IMetadataEntity.PENDING_NO_OP);
+            MetadataManager.INSTANCE.addDataset(metadataProvider.getMetadataTxnContext(), dataset);
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+
+            if (progress == ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA) {
+
+                //#. execute compensation operations
+                //   remove the index in NC
+                //   [Notice]
+                //   As long as we updated(and committed) metadata, we should remove any effect of the job 
+                //   because an exception occurs during runJob.
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                bActiveTxn = true;
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+                CompiledDatasetDropStatement cds = new CompiledDatasetDropStatement(dataverseName, datasetName);
+                try {
+                    JobSpecification jobSpec = DatasetOperations.createDropDatasetJobSpec(cds, metadataProvider);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    bActiveTxn = false;
+
+                    runJob(hcc, jobSpec, true);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    if (bActiveTxn) {
+                        abort(e, e2, mdTxnCtx);
+                    }
+                }
+
+                //   remove the record from the metadata.
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+                try {
+                    MetadataManager.INSTANCE.dropDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
+                            datasetName);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    abort(e, e2, mdTxnCtx);
+                    throw new IllegalStateException("System is inconsistent state: pending dataset(" + dataverseName
+                            + "." + datasetName + ") couldn't be removed from the metadata", e);
+                }
+            }
+
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleCreateIndexStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        ProgressState progress = ProgressState.NO_PROGRESS;
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        String dataverseName = null;
+        String datasetName = null;
+        String indexName = null;
+        JobSpecification spec = null;
+        try {
+            CreateIndexStatement stmtCreateIndex = (CreateIndexStatement) stmt;
+            dataverseName = stmtCreateIndex.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : stmtCreateIndex.getDataverseName().getValue();
+            if (dataverseName == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+            datasetName = stmtCreateIndex.getDatasetName().getValue();
+
+            Dataset ds = MetadataManager.INSTANCE.getDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
+                    datasetName);
+            if (ds == null) {
+                throw new AlgebricksException("There is no dataset with this name " + datasetName + " in dataverse "
+                        + dataverseName);
+            }
+
+            indexName = stmtCreateIndex.getIndexName().getValue();
+            Index idx = MetadataManager.INSTANCE.getIndex(metadataProvider.getMetadataTxnContext(), dataverseName,
+                    datasetName, indexName);
+
+            String itemTypeName = ds.getItemTypeName();
+            Datatype dt = MetadataManager.INSTANCE.getDatatype(metadataProvider.getMetadataTxnContext(), dataverseName,
+                    itemTypeName);
+            IAType itemType = dt.getDatatype();
+            ARecordType aRecordType = (ARecordType) itemType;
+            aRecordType.validateKeyFields(stmtCreateIndex.getFieldExprs(), stmtCreateIndex.getIndexType());
+
+            if (idx != null) {
+                if (stmtCreateIndex.getIfNotExists()) {
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    return;
+                } else {
+                    throw new AlgebricksException("An index with this name " + indexName + " already exists.");
+                }
+            }
+
+            //#. add a new index with PendingAddOp
+            Index index = new Index(dataverseName, datasetName, indexName, stmtCreateIndex.getIndexType(),
+                    stmtCreateIndex.getFieldExprs(), stmtCreateIndex.getGramLength(), false,
+                    IMetadataEntity.PENDING_ADD_OP);
+            MetadataManager.INSTANCE.addIndex(metadataProvider.getMetadataTxnContext(), index);
+
+            //#. prepare to create the index artifact in NC.
+            CompiledCreateIndexStatement cis = new CompiledCreateIndexStatement(index.getIndexName(), dataverseName,
+                    index.getDatasetName(), index.getKeyFieldNames(), index.getGramLength(), index.getIndexType());
+            spec = IndexOperations.buildSecondaryIndexCreationJobSpec(cis, metadataProvider);
+            if (spec == null) {
+                throw new AsterixException("Failed to create job spec for creating index '"
+                        + stmtCreateIndex.getDatasetName() + "." + stmtCreateIndex.getIndexName() + "'");
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+            progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
+
+            //#. create the index artifact in NC.
+            runJob(hcc, spec, true);
+
+            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+            bActiveTxn = true;
+            metadataProvider.setMetadataTxnContext(mdTxnCtx);
+
+            //#. load data into the index in NC.
+            cis = new CompiledCreateIndexStatement(index.getIndexName(), dataverseName, index.getDatasetName(),
+                    index.getKeyFieldNames(), index.getGramLength(), index.getIndexType());
+            spec = IndexOperations.buildSecondaryIndexLoadingJobSpec(cis, metadataProvider);
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            runJob(hcc, spec, true);
+
+            //#. begin new metadataTxn
+            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+            bActiveTxn = true;
+            metadataProvider.setMetadataTxnContext(mdTxnCtx);
+
+            //#. add another new index with PendingNoOp after deleting the index with PendingAddOp
+            MetadataManager.INSTANCE.dropIndex(metadataProvider.getMetadataTxnContext(), dataverseName, datasetName,
+                    indexName);
+            index.setPendingOp(IMetadataEntity.PENDING_NO_OP);
+            MetadataManager.INSTANCE.addIndex(metadataProvider.getMetadataTxnContext(), index);
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+
+            if (progress == ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA) {
+                //#. execute compensation operations
+                //   remove the index in NC
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                bActiveTxn = true;
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+                CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName, indexName);
+                try {
+                    JobSpecification jobSpec = IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    bActiveTxn = false;
+
+                    runJob(hcc, jobSpec, true);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    if (bActiveTxn) {
+                        abort(e, e2, mdTxnCtx);
+                    }
+                }
+
+                //   remove the record from the metadata.
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+                try {
+                    MetadataManager.INSTANCE.dropIndex(metadataProvider.getMetadataTxnContext(), dataverseName,
+                            datasetName, indexName);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    abort(e, e2, mdTxnCtx);
+                    throw new IllegalStateException("System is inconsistent state: pending index(" + dataverseName
+                            + "." + datasetName + "." + indexName + ") couldn't be removed from the metadata", e);
+                }
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleCreateTypeStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            TypeDecl stmtCreateType = (TypeDecl) stmt;
+            String dataverseName = stmtCreateType.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : stmtCreateType.getDataverseName().getValue();
+            if (dataverseName == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+            String typeName = stmtCreateType.getIdent().getValue();
+            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverseName);
+            if (dv == null) {
+                throw new AlgebricksException("Unknonw dataverse " + dataverseName);
+            }
+            Datatype dt = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, typeName);
+            if (dt != null) {
+                if (!stmtCreateType.getIfNotExists()) {
+                    throw new AlgebricksException("A datatype with this name " + typeName + " already exists.");
+                }
+            } else {
+                if (builtinTypeMap.get(typeName) != null) {
+                    throw new AlgebricksException("Cannot redefine builtin type " + typeName + ".");
+                } else {
+                    Map<TypeSignature, IAType> typeMap = TypeTranslator.computeTypes(mdTxnCtx, (TypeDecl) stmt,
+                            dataverseName);
+                    TypeSignature typeSignature = new TypeSignature(dataverseName, typeName);
+                    IAType type = typeMap.get(typeSignature);
+                    MetadataManager.INSTANCE.addDatatype(mdTxnCtx, new Datatype(dataverseName, typeName, type, false));
+                }
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleDataverseDropStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        ProgressState progress = ProgressState.NO_PROGRESS;
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        String dataverseName = null;
+        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
+        try {
+            DataverseDropStatement stmtDelete = (DataverseDropStatement) stmt;
+            dataverseName = stmtDelete.getDataverseName().getValue();
+
+            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverseName);
+            if (dv == null) {
+                if (stmtDelete.getIfExists()) {
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    return;
+                } else {
+                    throw new AlgebricksException("There is no dataverse with this name " + dataverseName + ".");
+                }
+            }
+
+            //#. prepare jobs which will drop corresponding datasets with indexes. 
+            List<Dataset> datasets = MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverseName);
+            for (int j = 0; j < datasets.size(); j++) {
+                String datasetName = datasets.get(j).getDatasetName();
+                DatasetType dsType = datasets.get(j).getDatasetType();
+                if (dsType == DatasetType.INTERNAL || dsType == DatasetType.FEED) {
+
+                    List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName,
+                            datasetName);
+                    for (int k = 0; k < indexes.size(); k++) {
+                        if (indexes.get(k).isSecondaryIndex()) {
+                            CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName,
+                                    indexes.get(k).getIndexName());
+                            jobsToExecute.add(IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider));
+                        }
+                    }
+
+                    CompiledDatasetDropStatement cds = new CompiledDatasetDropStatement(dataverseName, datasetName);
+                    jobsToExecute.add(DatasetOperations.createDropDatasetJobSpec(cds, metadataProvider));
+                }
+            }
+
+            //#. mark PendingDropOp on the dataverse record by 
+            //   first, deleting the dataverse record from the DATAVERSE_DATASET
+            //   second, inserting the dataverse record with the PendingDropOp value into the DATAVERSE_DATASET
+            MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dataverseName);
+            MetadataManager.INSTANCE.addDataverse(mdTxnCtx, new Dataverse(dataverseName, dv.getDataFormat(),
+                    IMetadataEntity.PENDING_DROP_OP));
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+            progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
+
+            for (JobSpecification jobSpec : jobsToExecute) {
+                runJob(hcc, jobSpec, true);
+            }
+
+            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+            bActiveTxn = true;
+            metadataProvider.setMetadataTxnContext(mdTxnCtx);
+
+            //#. finally, delete the dataverse.
+            MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dataverseName);
+            if (activeDefaultDataverse != null && activeDefaultDataverse.getDataverseName() == dataverseName) {
+                activeDefaultDataverse = null;
+            }
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+
+            if (progress == ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA) {
+                if (activeDefaultDataverse != null && activeDefaultDataverse.getDataverseName() == dataverseName) {
+                    activeDefaultDataverse = null;
+                }
+
+                //#. execute compensation operations
+                //   remove the all indexes in NC
+                try {
+                    for (JobSpecification jobSpec : jobsToExecute) {
+                        runJob(hcc, jobSpec, true);
+                    }
+                } catch (Exception e2) {
+                    //do no throw exception since still the metadata needs to be compensated. 
+                    e.addSuppressed(e2);
+                }
+
+                //   remove the record from the metadata.
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                try {
+                    MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dataverseName);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    abort(e, e2, mdTxnCtx);
+                    throw new IllegalStateException("System is inconsistent state: pending dataverse(" + dataverseName
+                            + ") couldn't be removed from the metadata", e);
+                }
+            }
+
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleDatasetDropStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        ProgressState progress = ProgressState.NO_PROGRESS;
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        String dataverseName = null;
+        String datasetName = null;
+        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
+        try {
+            DropStatement stmtDelete = (DropStatement) stmt;
+            dataverseName = stmtDelete.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : stmtDelete.getDataverseName().getValue();
+            if (dataverseName == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+            datasetName = stmtDelete.getDatasetName().getValue();
+
+            Dataset ds = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
+            if (ds == null) {
+                if (stmtDelete.getIfExists()) {
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                    return;
+                } else {
+                    throw new AlgebricksException("There is no dataset with this name " + datasetName
+                            + " in dataverse " + dataverseName + ".");
+                }
+            }
+
+            if (ds.getDatasetType() == DatasetType.INTERNAL || ds.getDatasetType() == DatasetType.FEED) {
+
+                //#. prepare jobs to drop the datatset and the indexes in NC
+                List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
+                for (int j = 0; j < indexes.size(); j++) {
+                    if (indexes.get(j).isSecondaryIndex()) {
+                        CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName,
+                                indexes.get(j).getIndexName());
+                        jobsToExecute.add(IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider));
+                    }
+                }
+                CompiledDatasetDropStatement cds = new CompiledDatasetDropStatement(dataverseName, datasetName);
+                jobsToExecute.add(DatasetOperations.createDropDatasetJobSpec(cds, metadataProvider));
+
+                //#. mark the existing dataset as PendingDropOp
+                MetadataManager.INSTANCE.dropDataset(mdTxnCtx, dataverseName, datasetName);
+                MetadataManager.INSTANCE.addDataset(
+                        mdTxnCtx,
+                        new Dataset(dataverseName, datasetName, ds.getItemTypeName(), ds.getDatasetDetails(), ds
+                                .getHints(), ds.getDatasetType(), ds.getDatasetId(), IMetadataEntity.PENDING_DROP_OP));
+
+                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                bActiveTxn = false;
+                progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
+
+                //#. run the jobs
+                for (JobSpecification jobSpec : jobsToExecute) {
+                    runJob(hcc, jobSpec, true);
+                }
+
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                bActiveTxn = true;
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+            }
+
+            //#. finally, delete the dataset.
+            MetadataManager.INSTANCE.dropDataset(mdTxnCtx, dataverseName, datasetName);
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+
+            if (progress == ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA) {
+                //#. execute compensation operations
+                //   remove the all indexes in NC
+                try {
+                    for (JobSpecification jobSpec : jobsToExecute) {
+                        runJob(hcc, jobSpec, true);
+                    }
+                } catch (Exception e2) {
+                    //do no throw exception since still the metadata needs to be compensated. 
+                    e.addSuppressed(e2);
+                }
+
+                //   remove the record from the metadata.
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+                try {
+                    MetadataManager.INSTANCE.dropDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
+                            datasetName);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    abort(e, e2, mdTxnCtx);
+                    throw new IllegalStateException("System is inconsistent state: pending dataset(" + dataverseName
+                            + "." + datasetName + ") couldn't be removed from the metadata", e);
+                }
+            }
+
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleIndexDropStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        ProgressState progress = ProgressState.NO_PROGRESS;
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        String dataverseName = null;
+        String datasetName = null;
+        String indexName = null;
+        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
+        try {
+            IndexDropStatement stmtIndexDrop = (IndexDropStatement) stmt;
+            datasetName = stmtIndexDrop.getDatasetName().getValue();
+            dataverseName = stmtIndexDrop.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : stmtIndexDrop.getDataverseName().getValue();
+            if (dataverseName == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+
+            Dataset ds = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
+            if (ds == null) {
+                throw new AlgebricksException("There is no dataset with this name " + datasetName + " in dataverse "
+                        + dataverseName);
+            }
+
+            if (ds.getDatasetType() == DatasetType.INTERNAL || ds.getDatasetType() == DatasetType.FEED) {
+                indexName = stmtIndexDrop.getIndexName().getValue();
+                Index index = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataverseName, datasetName, indexName);
+                if (index == null) {
+                    if (stmtIndexDrop.getIfExists()) {
+                        MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                        return;
+                    } else {
+                        throw new AlgebricksException("There is no index with this name " + indexName + ".");
+                    }
+                }
+                //#. prepare a job to drop the index in NC.
+                CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName, indexName);
+                jobsToExecute.add(IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider));
+
+                //#. mark PendingDropOp on the existing index
+                MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
+                MetadataManager.INSTANCE.addIndex(mdTxnCtx,
+                        new Index(dataverseName, datasetName, indexName, index.getIndexType(),
+                                index.getKeyFieldNames(), index.isPrimaryIndex(), IMetadataEntity.PENDING_DROP_OP));
+
+                //#. commit the existing transaction before calling runJob. 
+                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                bActiveTxn = false;
+                progress = ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA;
+
+                for (JobSpecification jobSpec : jobsToExecute) {
+                    runJob(hcc, jobSpec, true);
+                }
+
+                //#. begin a new transaction
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                bActiveTxn = true;
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+
+                //#. finally, delete the existing index
+                MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
+            } else {
+                throw new AlgebricksException(datasetName
+                        + " is an external dataset. Indexes are not maintained for external datasets.");
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+
+            if (progress == ProgressState.ADDED_PENDINGOP_RECORD_TO_METADATA) {
+                //#. execute compensation operations
+                //   remove the all indexes in NC
+                try {
+                    for (JobSpecification jobSpec : jobsToExecute) {
+                        runJob(hcc, jobSpec, true);
+                    }
+                } catch (Exception e2) {
+                    //do no throw exception since still the metadata needs to be compensated.
+                    e.addSuppressed(e2);
+                }
+
+                //   remove the record from the metadata.
+                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+                metadataProvider.setMetadataTxnContext(mdTxnCtx);
+                try {
+                    MetadataManager.INSTANCE.dropIndex(metadataProvider.getMetadataTxnContext(), dataverseName,
+                            datasetName, indexName);
+                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+                } catch (Exception e2) {
+                    e.addSuppressed(e2);
+                    abort(e, e2, mdTxnCtx);
+                    throw new IllegalStateException("System is inconsistent state: pending index(" + dataverseName
+                            + "." + datasetName + "." + indexName + ") couldn't be removed from the metadata", e);
+                }
+            }
+
+            throw new AlgebricksException(e);
+
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleTypeDropStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            TypeDropStatement stmtTypeDrop = (TypeDropStatement) stmt;
+            String dataverseName = stmtTypeDrop.getDataverseName() == null ? (activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName()) : stmtTypeDrop.getDataverseName().getValue();
+            if (dataverseName == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+            String typeName = stmtTypeDrop.getTypeName().getValue();
+            Datatype dt = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, typeName);
+            if (dt == null) {
+                if (!stmtTypeDrop.getIfExists())
+                    throw new AlgebricksException("There is no datatype with this name " + typeName + ".");
+            } else {
+                MetadataManager.INSTANCE.dropDatatype(mdTxnCtx, dataverseName, typeName);
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleNodegroupDropStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            NodeGroupDropStatement stmtDelete = (NodeGroupDropStatement) stmt;
+            String nodegroupName = stmtDelete.getNodeGroupName().getValue();
+            NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodegroupName);
+            if (ng == null) {
+                if (!stmtDelete.getIfExists())
+                    throw new AlgebricksException("There is no nodegroup with this name " + nodegroupName + ".");
+            } else {
+                MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, nodegroupName);
+            }
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleCreateFunctionStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            CreateFunctionStatement cfs = (CreateFunctionStatement) stmt;
+            String dataverse = cfs.getSignature().getNamespace() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : cfs.getSignature().getNamespace();
+            if (dataverse == null) {
+                throw new AlgebricksException(" dataverse not specified ");
+            }
+            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverse);
+            if (dv == null) {
+                throw new AlgebricksException("There is no dataverse with this name " + dataverse + ".");
+            }
+            Function function = new Function(dataverse, cfs.getaAterixFunction().getName(), cfs.getaAterixFunction()
+                    .getArity(), cfs.getParamList(), Function.RETURNTYPE_VOID, cfs.getFunctionBody(),
+                    Function.LANGUAGE_AQL, FunctionKind.SCALAR.toString());
+            MetadataManager.INSTANCE.addFunction(mdTxnCtx, function);
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleFunctionDropStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            FunctionDropStatement stmtDropFunction = (FunctionDropStatement) stmt;
+            FunctionSignature signature = stmtDropFunction.getFunctionSignature();
+            Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
+            if (function == null) {
+                if (!stmtDropFunction.getIfExists())
+                    throw new AlgebricksException("Unknonw function " + signature);
+            } else {
+                MetadataManager.INSTANCE.dropFunction(mdTxnCtx, signature);
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private void handleLoadFromFileStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
+        try {
+            LoadFromFileStatement loadStmt = (LoadFromFileStatement) stmt;
+            String dataverseName = loadStmt.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : loadStmt.getDataverseName().getValue();
+            CompiledLoadFromFileStatement cls = new CompiledLoadFromFileStatement(dataverseName, loadStmt
+                    .getDatasetName().getValue(), loadStmt.getAdapter(), loadStmt.getProperties(),
+                    loadStmt.dataIsAlreadySorted());
+
+            IDataFormat format = getDataFormat(metadataProvider.getMetadataTxnContext(), dataverseName);
+            Job job = DatasetOperations.createLoadDatasetJobSpec(metadataProvider, cls, format);
+            jobsToExecute.add(job.getJobSpec());
+            // Also load the dataset's secondary indexes.
+            List<Index> datasetIndexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, loadStmt
+                    .getDatasetName().getValue());
+            for (Index index : datasetIndexes) {
+                if (!index.isSecondaryIndex()) {
+                    continue;
+                }
+                // Create CompiledCreateIndexStatement from metadata entity 'index'.
+                CompiledCreateIndexStatement cis = new CompiledCreateIndexStatement(index.getIndexName(),
+                        dataverseName, index.getDatasetName(), index.getKeyFieldNames(), index.getGramLength(),
+                        index.getIndexType());
+                jobsToExecute.add(IndexOperations.buildSecondaryIndexLoadingJobSpec(cis, metadataProvider));
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            for (JobSpecification jobspec : jobsToExecute) {
+                runJob(hcc, jobspec, true);
+            }
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private void handleWriteFromQueryResultStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            metadataProvider.setWriteTransaction(true);
+            WriteFromQueryResultStatement st1 = (WriteFromQueryResultStatement) stmt;
+            String dataverseName = st1.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : st1.getDataverseName().getValue();
+            CompiledWriteFromQueryResultStatement clfrqs = new CompiledWriteFromQueryResultStatement(dataverseName, st1
+                    .getDatasetName().getValue(), st1.getQuery(), st1.getVarCounter());
+
+            JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+            if (compiled != null) {
+                runJob(hcc, compiled, true);
+            }
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private void handleInsertStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            metadataProvider.setWriteTransaction(true);
+            InsertStatement stmtInsert = (InsertStatement) stmt;
+            String dataverseName = stmtInsert.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : stmtInsert.getDataverseName().getValue();
+            CompiledInsertStatement clfrqs = new CompiledInsertStatement(dataverseName, stmtInsert.getDatasetName()
+                    .getValue(), stmtInsert.getQuery(), stmtInsert.getVarCounter());
+            JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            if (compiled != null) {
+                runJob(hcc, compiled, true);
+            }
+
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private void handleDeleteStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            metadataProvider.setWriteTransaction(true);
+            DeleteStatement stmtDelete = (DeleteStatement) stmt;
+            String dataverseName = stmtDelete.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : stmtDelete.getDataverseName().getValue();
+            CompiledDeleteStatement clfrqs = new CompiledDeleteStatement(stmtDelete.getVariableExpr(), dataverseName,
+                    stmtDelete.getDatasetName().getValue(), stmtDelete.getCondition(), stmtDelete.getVarCounter(),
+                    metadataProvider);
+            JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            if (compiled != null) {
+                runJob(hcc, compiled, true);
+            }
+
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private JobSpecification rewriteCompileQuery(AqlMetadataProvider metadataProvider, Query query,
+            ICompiledDmlStatement stmt) throws AsterixException, RemoteException, AlgebricksException, JSONException,
+            ACIDException {
+
+        // Query Rewriting (happens under the same ongoing metadata transaction)
+        Pair<Query, Integer> reWrittenQuery = APIFramework.reWriteQuery(declaredFunctions, metadataProvider, query,
+                sessionConfig, out, pdf);
+
+        // Query Compilation (happens under the same ongoing metadata
+        // transaction)
+        JobSpecification spec = APIFramework.compileQuery(declaredFunctions, metadataProvider, query,
+                reWrittenQuery.second, stmt == null ? null : stmt.getDatasetName(), sessionConfig, out, pdf, stmt);
+
+        return spec;
+
+    }
+
+    private void handleBeginFeedStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            BeginFeedStatement bfs = (BeginFeedStatement) stmt;
+            String dataverseName = bfs.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : bfs.getDataverseName().getValue();
+
+            CompiledBeginFeedStatement cbfs = new CompiledBeginFeedStatement(dataverseName, bfs.getDatasetName()
+                    .getValue(), bfs.getQuery(), bfs.getVarCounter());
+
+            Dataset dataset;
+            dataset = MetadataManager.INSTANCE.getDataset(metadataProvider.getMetadataTxnContext(), dataverseName, bfs
+                    .getDatasetName().getValue());
+            if (dataset == null) {
+                throw new AsterixException("Unknown dataset :" + bfs.getDatasetName().getValue());
+            }
+            IDatasetDetails datasetDetails = dataset.getDatasetDetails();
+            if (datasetDetails.getDatasetType() != DatasetType.FEED) {
+                throw new IllegalArgumentException("Dataset " + bfs.getDatasetName().getValue()
+                        + " is not a feed dataset");
+            }
+            bfs.initialize(metadataProvider.getMetadataTxnContext(), dataset);
+            cbfs.setQuery(bfs.getQuery());
+            JobSpecification compiled = rewriteCompileQuery(metadataProvider, bfs.getQuery(), cbfs);
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            if (compiled != null) {
+                runJob(hcc, compiled, true);
+            }
+
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private void handleControlFeedStatement(AqlMetadataProvider metadataProvider, Statement stmt,
+            IHyracksClientConnection hcc) throws Exception {
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            ControlFeedStatement cfs = (ControlFeedStatement) stmt;
+            String dataverseName = cfs.getDataverseName() == null ? activeDefaultDataverse == null ? null
+                    : activeDefaultDataverse.getDataverseName() : cfs.getDatasetName().getValue();
+            CompiledControlFeedStatement clcfs = new CompiledControlFeedStatement(cfs.getOperationType(),
+                    dataverseName, cfs.getDatasetName().getValue(), cfs.getAlterAdapterConfParams());
+            JobSpecification jobSpec = FeedOperations.buildControlFeedJobSpec(clcfs, metadataProvider);
+
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            runJob(hcc, jobSpec, true);
+
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private QueryResult handleQuery(AqlMetadataProvider metadataProvider, Query query, IHyracksClientConnection hcc,
+            IHyracksDataset hdc, boolean asyncResults) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        boolean bActiveTxn = true;
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireReadLatch();
+
+        try {
+            JobSpecification compiled = rewriteCompileQuery(metadataProvider, query, null);
+
+            QueryResult queryResult = new QueryResult(query, metadataProvider.getResultSetId());
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+            bActiveTxn = false;
+
+            if (compiled != null) {
+                GlobalConfig.ASTERIX_LOGGER.info(compiled.toJSON().toString(1));
+                JobId jobId = runJob(hcc, compiled, false);
+
+                JSONObject response = new JSONObject();
+                if (asyncResults) {
+                    JSONArray handle = new JSONArray();
+                    handle.put(jobId.getId());
+                    handle.put(metadataProvider.getResultSetId().getId());
+                    response.put("handle", handle);
+                } else {
+                    ByteBuffer buffer = ByteBuffer.allocate(ResultReader.FRAME_SIZE);
+                    ResultReader resultReader = new ResultReader(hcc, hdc);
+                    resultReader.open(jobId, metadataProvider.getResultSetId());
+                    buffer.clear();
+                    JSONArray results = new JSONArray();
+                    while (resultReader.read(buffer) > 0) {
+                        results.put(ResultUtils.getJSONFromBuffer(buffer, resultReader.getFrameTupleAccessor()));
+                        buffer.clear();
+                    }
+                    response.put("results", results);
+                }
+                switch (pdf) {
+                    case HTML:
+                        out.println("<pre>");
+                        ResultUtils.prettyPrintHTML(out, response);
+                        out.println("</pre>");
+                        break;
+                    case TEXT:
+                    case JSON:
+                        out.print(response);
+                        break;
+                }
+                hcc.waitForCompletion(jobId);
+            }
+
+            return queryResult;
+        } catch (Exception e) {
+            if (bActiveTxn) {
+                abort(e, e, mdTxnCtx);
+            }
+            throw new AlgebricksException(e);
+        } finally {
+            releaseReadLatch();
+        }
+    }
+
+    private void handleCreateNodeGroupStatement(AqlMetadataProvider metadataProvider, Statement stmt) throws Exception {
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        metadataProvider.setMetadataTxnContext(mdTxnCtx);
+        acquireWriteLatch();
+
+        try {
+            NodegroupDecl stmtCreateNodegroup = (NodegroupDecl) stmt;
+            String ngName = stmtCreateNodegroup.getNodegroupName().getValue();
+            NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, ngName);
+            if (ng != null) {
+                if (!stmtCreateNodegroup.getIfNotExists())
+                    throw new AlgebricksException("A nodegroup with this name " + ngName + " already exists.");
+            } else {
+                List<Identifier> ncIdentifiers = stmtCreateNodegroup.getNodeControllerNames();
+                List<String> ncNames = new ArrayList<String>(ncIdentifiers.size());
+                for (Identifier id : ncIdentifiers) {
+                    ncNames.add(id.getValue());
+                }
+                MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, new NodeGroup(ngName, ncNames));
+            }
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            abort(e, e, mdTxnCtx);
+            throw new AlgebricksException(e);
+        } finally {
+            releaseWriteLatch();
+        }
+    }
+
+    private JobId runJob(IHyracksClientConnection hcc, JobSpecification spec, boolean waitForCompletion)
+            throws Exception {
+        JobId[] jobIds = executeJobArray(hcc, new Job[] { new Job(spec) }, out, pdf, waitForCompletion);
+        return jobIds[0];
+    }
+
+    public JobId[] executeJobArray(IHyracksClientConnection hcc, Job[] jobs, PrintWriter out, DisplayFormat pdf,
+            boolean waitForCompletion) throws Exception {
+        JobId[] startedJobIds = new JobId[jobs.length];
+        for (int i = 0; i < jobs.length; i++) {
+            JobSpecification spec = jobs[i].getJobSpec();
+            spec.setMaxReattempts(0);
+            JobId jobId = hcc.startJob(spec);
+            startedJobIds[i] = jobId;
+            if (waitForCompletion) {
+                hcc.waitForCompletion(jobId);
+            }
+        }
+        return startedJobIds;
+    }
+
+    private static IDataFormat getDataFormat(MetadataTransactionContext mdTxnCtx, String dataverseName)
+            throws AsterixException {
+        Dataverse dataverse = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverseName);
+        IDataFormat format;
+        try {
+            format = (IDataFormat) Class.forName(dataverse.getDataFormat()).newInstance();
+        } catch (Exception e) {
+            throw new AsterixException(e);
+        }
+        return format;
+    }
+
+    private void acquireWriteLatch() {
+        MetadataManager.INSTANCE.acquireWriteLatch();
+    }
+
+    private void releaseWriteLatch() {
+        MetadataManager.INSTANCE.releaseWriteLatch();
+    }
+
+    private void acquireReadLatch() {
+        MetadataManager.INSTANCE.acquireReadLatch();
+    }
+
+    private void releaseReadLatch() {
+        MetadataManager.INSTANCE.releaseReadLatch();
+    }
+
+    private void abort(Exception rootE, Exception parentE, MetadataTransactionContext mdTxnCtx) {
+        try {
+            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
+        } catch (Exception e2) {
+            parentE.addSuppressed(e2);
+            throw new IllegalStateException(rootE);
+        }
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/QueryResult.java b/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/QueryResult.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/QueryResult.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/QueryResult.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java b/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixCLI.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java b/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixClientDriver.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixWebServer.java b/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixWebServer.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixWebServer.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/drivers/AsterixWebServer.java
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/file/DatasetOperations.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/DatasetOperations.java
new file mode 100644
index 0000000..b9b9524
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/file/DatasetOperations.java
@@ -0,0 +1,345 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.file;
+
+import java.io.File;
+import java.io.IOException;
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.api.common.Job;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.common.config.OptimizationConfUtil;
+import edu.uci.ics.asterix.common.context.AsterixRuntimeComponentsProvider;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.dataset.hints.DatasetHints.DatasetCardinalityHint;
+import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.ExternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.resource.ILocalResourceMetadata;
+import edu.uci.ics.asterix.transaction.management.resource.LSMBTreeLocalResourceMetadata;
+import edu.uci.ics.asterix.transaction.management.resource.PersistentLocalResourceFactoryProvider;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledDatasetDropStatement;
+import edu.uci.ics.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraintHelper;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.LogicalExpressionJobGenToExpressionRuntimeProviderAdapter;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.jobgen.impl.ConnectorPolicyAssignmentPolicy;
+import edu.uci.ics.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.operators.meta.AlgebricksMetaOperatorDescriptor;
+import edu.uci.ics.hyracks.algebricks.runtime.operators.std.AssignRuntimeFactory;
+import edu.uci.ics.hyracks.api.dataflow.IConnectorDescriptor;
+import edu.uci.ics.hyracks.api.dataflow.IOperatorDescriptor;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunctionFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.dataflow.common.data.partition.FieldHashPartitionComputerFactory;
+import edu.uci.ics.hyracks.dataflow.std.connectors.MToNPartitioningConnectorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.connectors.MToNPartitioningMergingConnectorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
+import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
+import edu.uci.ics.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.common.dataflow.TreeIndexCreateOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallbackFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.dataflow.LSMBTreeDataflowHelperFactory;
+import edu.uci.ics.hyracks.storage.common.file.ILocalResourceFactoryProvider;
+import edu.uci.ics.hyracks.storage.common.file.LocalResource;
+
+public class DatasetOperations {
+
+    private static final PhysicalOptimizationConfig physicalOptimizationConfig = OptimizationConfUtil
+            .getPhysicalOptimizationConfig();
+
+    private static Logger LOGGER = Logger.getLogger(DatasetOperations.class.getName());
+
+    public static JobSpecification createDropDatasetJobSpec(CompiledDatasetDropStatement datasetDropStmt,
+            AqlMetadataProvider metadataProvider) throws AlgebricksException, HyracksDataException, RemoteException,
+            ACIDException, AsterixException {
+
+        String dataverseName = null;
+        if (datasetDropStmt.getDataverseName() != null) {
+            dataverseName = datasetDropStmt.getDataverseName();
+        } else if (metadataProvider.getDefaultDataverse() != null) {
+            dataverseName = metadataProvider.getDefaultDataverse().getDataverseName();
+        }
+
+        String datasetName = datasetDropStmt.getDatasetName();
+        String datasetPath = dataverseName + File.separator + datasetName;
+
+        LOGGER.info("DROP DATASETPATH: " + datasetPath);
+
+        Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("DROP DATASET: No metadata for dataset " + datasetName);
+        }
+        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
+            return new JobSpecification();
+        }
+
+        JobSpecification specPrimary = new JobSpecification();
+
+        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = metadataProvider
+                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataset.getDataverseName(), datasetName,
+                        datasetName);
+        IndexDropOperatorDescriptor primaryBtreeDrop = new IndexDropOperatorDescriptor(specPrimary,
+                AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER, AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER,
+                splitsAndConstraint.first, new LSMBTreeDataflowHelperFactory(
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
+                        GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES));
+        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(specPrimary, primaryBtreeDrop,
+                splitsAndConstraint.second);
+
+        specPrimary.addRoot(primaryBtreeDrop);
+
+        return specPrimary;
+    }
+
+    public static JobSpecification createDatasetJobSpec(Dataverse dataverse, String datasetName,
+            AqlMetadataProvider metadata) throws AsterixException, AlgebricksException {
+        String dataverseName = dataverse.getDataverseName();
+        IDataFormat format;
+        try {
+            format = (IDataFormat) Class.forName(dataverse.getDataFormat()).newInstance();
+        } catch (Exception e) {
+            throw new AsterixException(e);
+        }
+        Dataset dataset = metadata.findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AsterixException("Could not find dataset " + datasetName + " in datavetse " + dataverseName);
+        }
+        ARecordType itemType = (ARecordType) metadata.findType(dataverseName, dataset.getItemTypeName());
+        JobSpecification spec = new JobSpecification();
+        IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
+                itemType, format.getBinaryComparatorFactoryProvider());
+        ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
+        int[] blooFilterKeyFields = DatasetUtils.createBloomFilterKeyFields(dataset);
+
+        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = metadata
+                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataverseName, datasetName, datasetName);
+        FileSplit[] fs = splitsAndConstraint.first.getFileSplits();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < fs.length; i++) {
+            sb.append(stringOf(fs[i]) + " ");
+        }
+        LOGGER.info("CREATING File Splits: " + sb.toString());
+
+        //prepare a LocalResourceMetadata which will be stored in NC's local resource repository
+        ILocalResourceMetadata localResourceMetadata = new LSMBTreeLocalResourceMetadata(typeTraits,
+                comparatorFactories, blooFilterKeyFields, true, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
+                GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES);
+        ILocalResourceFactoryProvider localResourceFactoryProvider = new PersistentLocalResourceFactoryProvider(
+                localResourceMetadata, LocalResource.LSMBTreeResource);
+
+        TreeIndexCreateOperatorDescriptor indexCreateOp = new TreeIndexCreateOperatorDescriptor(spec,
+                AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER, AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER,
+                splitsAndConstraint.first, typeTraits, comparatorFactories, blooFilterKeyFields,
+                new LSMBTreeDataflowHelperFactory(AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
+                        GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES), localResourceFactoryProvider,
+                NoOpOperationCallbackFactory.INSTANCE);
+        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, indexCreateOp,
+                splitsAndConstraint.second);
+        spec.addRoot(indexCreateOp);
+        return spec;
+    }
+
+    @SuppressWarnings("rawtypes")
+    public static Job createLoadDatasetJobSpec(AqlMetadataProvider metadataProvider,
+            CompiledLoadFromFileStatement loadStmt, IDataFormat format) throws AsterixException, AlgebricksException {
+        MetadataTransactionContext mdTxnCtx = metadataProvider.getMetadataTxnContext();
+        String dataverseName = loadStmt.getDataverseName();
+        String datasetName = loadStmt.getDatasetName();
+        Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AsterixException("Could not find dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+        if (dataset.getDatasetType() != DatasetType.INTERNAL && dataset.getDatasetType() != DatasetType.FEED) {
+            throw new AsterixException("Cannot load data into dataset  (" + datasetName + ")" + "of type "
+                    + dataset.getDatasetType());
+        }
+        JobSpecification spec = new JobSpecification();
+
+        ARecordType itemType = (ARecordType) MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName,
+                dataset.getItemTypeName()).getDatatype();
+        ISerializerDeserializer payloadSerde = format.getSerdeProvider().getSerializerDeserializer(itemType);
+
+        IBinaryHashFunctionFactory[] hashFactories = DatasetUtils.computeKeysBinaryHashFunFactories(dataset, itemType,
+                format.getBinaryHashFunctionFactoryProvider());
+        IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
+                itemType, format.getBinaryComparatorFactoryProvider());
+        ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
+        int[] blooFilterKeyFields = DatasetUtils.createBloomFilterKeyFields(dataset);
+
+        ExternalDatasetDetails externalDatasetDetails = new ExternalDatasetDetails(loadStmt.getAdapter(),
+                loadStmt.getProperties());
+
+        Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> p = metadataProvider.buildExternalDataScannerRuntime(
+                spec, itemType, externalDatasetDetails, format);
+        IOperatorDescriptor scanner = p.first;
+        AlgebricksPartitionConstraint scannerPc = p.second;
+        RecordDescriptor recDesc = computePayloadKeyRecordDescriptor(dataset, itemType, payloadSerde, format);
+        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, scanner, scannerPc);
+
+        AssignRuntimeFactory assign = makeAssignRuntimeFactory(dataset, itemType, format);
+        AlgebricksMetaOperatorDescriptor asterixOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
+                new IPushRuntimeFactory[] { assign }, new RecordDescriptor[] { recDesc });
+
+        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, asterixOp, scannerPc);
+
+        int numKeys = DatasetUtils.getPartitioningKeys(dataset).size();
+        int[] keys = new int[numKeys];
+        for (int i = 0; i < numKeys; i++) {
+            keys[i] = i + 1;
+        }
+        // Move key fields to front.
+        int[] fieldPermutation = new int[numKeys + 1];
+        for (int i = 0; i < numKeys; i++) {
+            fieldPermutation[i] = i + 1;
+        }
+        fieldPermutation[numKeys] = 0;
+
+        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = metadataProvider
+                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataverseName, datasetName, datasetName);
+
+        FileSplit[] fs = splitsAndConstraint.first.getFileSplits();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < fs.length; i++) {
+            sb.append(stringOf(fs[i]) + " ");
+        }
+        LOGGER.info("LOAD into File Splits: " + sb.toString());
+
+        String numElementsHintString = dataset.getHints().get("CARDINALITY");
+        long numElementsHint;
+        if (numElementsHintString == null) {
+            numElementsHint = DatasetCardinalityHint.DEFAULT;
+        } else {
+            numElementsHint = Long.parseLong(dataset.getHints().get("CARDINALITY"));
+        }
+
+        TreeIndexBulkLoadOperatorDescriptor btreeBulkLoad = new TreeIndexBulkLoadOperatorDescriptor(spec,
+                AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER, AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER,
+                splitsAndConstraint.first, typeTraits, comparatorFactories, blooFilterKeyFields, fieldPermutation,
+                GlobalConfig.DEFAULT_BTREE_FILL_FACTOR, false, numElementsHint, new LSMBTreeDataflowHelperFactory(
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
+                        GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES), NoOpOperationCallbackFactory.INSTANCE);
+        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, btreeBulkLoad,
+                splitsAndConstraint.second);
+
+        spec.connect(new OneToOneConnectorDescriptor(spec), scanner, 0, asterixOp, 0);
+
+        if (!loadStmt.alreadySorted()) {
+            int framesLimit = physicalOptimizationConfig.getMaxFramesExternalSort();
+            ExternalSortOperatorDescriptor sorter = new ExternalSortOperatorDescriptor(spec, framesLimit, keys,
+                    comparatorFactories, recDesc);
+            AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, sorter,
+                    splitsAndConstraint.second);
+            IConnectorDescriptor hashConn = new MToNPartitioningConnectorDescriptor(spec,
+                    new FieldHashPartitionComputerFactory(keys, hashFactories));
+            spec.connect(hashConn, asterixOp, 0, sorter, 0);
+            spec.connect(new OneToOneConnectorDescriptor(spec), sorter, 0, btreeBulkLoad, 0);
+        } else {
+            IConnectorDescriptor sortMergeConn = new MToNPartitioningMergingConnectorDescriptor(spec,
+                    new FieldHashPartitionComputerFactory(keys, hashFactories), keys, comparatorFactories);
+            spec.connect(sortMergeConn, asterixOp, 0, btreeBulkLoad, 0);
+        }
+        spec.addRoot(btreeBulkLoad);
+        spec.setConnectorPolicyAssignmentPolicy(new ConnectorPolicyAssignmentPolicy());
+
+        return new Job(spec);
+    }
+
+    private static String stringOf(FileSplit fs) {
+        return fs.getNodeName() + ":" + fs.getLocalFile().toString();
+    }
+
+    private static AssignRuntimeFactory makeAssignRuntimeFactory(Dataset dataset, ARecordType itemType,
+            IDataFormat format) throws AlgebricksException {
+        List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
+        int numKeys = partitioningKeys.size();
+        ICopyEvaluatorFactory[] evalFactories = new ICopyEvaluatorFactory[numKeys];
+        for (int i = 0; i < numKeys; i++) {
+            Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> evalFactoryAndType = format
+                    .partitioningEvaluatorFactory(itemType, partitioningKeys.get(i));
+            evalFactories[i] = evalFactoryAndType.first;
+        }
+        int[] outColumns = new int[numKeys];
+        int[] projectionList = new int[numKeys + 1];
+        projectionList[0] = 0;
+
+        for (int i = 0; i < numKeys; i++) {
+            outColumns[i] = i + 1;
+            projectionList[i + 1] = i + 1;
+        }
+        IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[evalFactories.length];
+        for (int i = 0; i < evalFactories.length; ++i) {
+            sefs[i] = new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter.ScalarEvaluatorFactoryAdapter(
+                    evalFactories[i]);
+        }
+        return new AssignRuntimeFactory(outColumns, sefs, projectionList);
+    }
+
+    @SuppressWarnings("rawtypes")
+    private static RecordDescriptor computePayloadKeyRecordDescriptor(Dataset dataset, ARecordType itemType,
+            ISerializerDeserializer payloadSerde, IDataFormat dataFormat) throws AlgebricksException {
+        List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
+        int numKeys = partitioningKeys.size();
+        ISerializerDeserializer[] recordFields = new ISerializerDeserializer[1 + numKeys];
+        recordFields[0] = payloadSerde;
+        for (int i = 0; i < numKeys; i++) {
+            IAType keyType;
+            try {
+                keyType = itemType.getFieldType(partitioningKeys.get(i));
+            } catch (IOException e) {
+                throw new AlgebricksException(e);
+            }
+            ISerializerDeserializer keySerde = dataFormat.getSerdeProvider().getSerializerDeserializer(keyType);
+            recordFields[i + 1] = keySerde;
+        }
+        return new RecordDescriptor(recordFields);
+    }
+}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/FeedOperations.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/FeedOperations.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/FeedOperations.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/file/FeedOperations.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/IndexOperations.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/IndexOperations.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/IndexOperations.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/file/IndexOperations.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryBTreeCreator.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryBTreeCreator.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryBTreeCreator.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryBTreeCreator.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryIndexCreator.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryIndexCreator.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryIndexCreator.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryIndexCreator.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryInvertedIndexCreator.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryInvertedIndexCreator.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryInvertedIndexCreator.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryInvertedIndexCreator.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryRTreeCreator.java b/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryRTreeCreator.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryRTreeCreator.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/file/SecondaryRTreeCreator.java
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java b/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
new file mode 100644
index 0000000..1b8990b
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
@@ -0,0 +1,117 @@
+package edu.uci.ics.asterix.hyracks.bootstrap;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.servlet.ServletContextHandler;
+import org.eclipse.jetty.servlet.ServletHolder;
+
+import edu.uci.ics.asterix.api.http.servlet.APIServlet;
+import edu.uci.ics.asterix.api.http.servlet.DDLAPIServlet;
+import edu.uci.ics.asterix.api.http.servlet.QueryAPIServlet;
+import edu.uci.ics.asterix.api.http.servlet.QueryResultAPIServlet;
+import edu.uci.ics.asterix.api.http.servlet.QueryStatusAPIServlet;
+import edu.uci.ics.asterix.api.http.servlet.UpdateAPIServlet;
+import edu.uci.ics.asterix.common.api.AsterixAppContextInfoImpl;
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
+import edu.uci.ics.asterix.metadata.bootstrap.AsterixStateProxy;
+import edu.uci.ics.hyracks.api.application.ICCApplicationContext;
+import edu.uci.ics.hyracks.api.application.ICCApplicationEntryPoint;
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+
+public class CCApplicationEntryPoint implements ICCApplicationEntryPoint {
+    private static final Logger LOGGER = Logger.getLogger(CCApplicationEntryPoint.class.getName());
+
+    private static final String HYRACKS_CONNECTION_ATTR = "edu.uci.ics.asterix.HYRACKS_CONNECTION";
+
+    private static final int DEFAULT_WEB_SERVER_PORT = 19001;
+
+    private static final int DEFAULT_JSON_API_SERVER_PORT = 19101;
+
+    private Server webServer;
+    private Server jsonAPIServer;
+    private static IAsterixStateProxy proxy;
+    private ICCApplicationContext appCtx;
+
+    @Override
+    public void start(ICCApplicationContext ccAppCtx, String[] args) throws Exception {
+        this.appCtx = ccAppCtx;
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Starting Asterix cluster controller");
+        }
+
+        proxy = AsterixStateProxy.registerRemoteObject();
+        proxy.setAsterixProperties(AsterixProperties.INSTANCE);
+        appCtx.setDistributedState(proxy);
+
+        MetadataManager.INSTANCE = new MetadataManager(proxy);
+
+        setupWebServer();
+        webServer.start();
+
+        // Setup and start the web interface
+        setupJSONAPIServer();
+        jsonAPIServer.start();
+
+        AsterixAppContextInfoImpl.initialize(appCtx);
+    }
+
+    @Override
+    public void stop() throws Exception {
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Stopping Asterix cluster controller");
+        }
+        AsterixStateProxy.unregisterRemoteObject();
+
+        webServer.stop();
+        jsonAPIServer.stop();
+    }
+
+    private IHyracksClientConnection getNewHyracksClientConnection() throws Exception {
+        String strIP = appCtx.getCCContext().getClusterControllerInfo().getClientNetAddress();
+        int port = appCtx.getCCContext().getClusterControllerInfo().getClientNetPort();
+        return new HyracksConnection(strIP, port);
+    }
+
+    private void setupWebServer() throws Exception {
+        int port = Integer.parseInt((String) AsterixProperties.INSTANCE
+                .getProperty(AsterixProperties.AsterixConfigurationKeys.WEB_INTERFACE_PORT));
+        webServer = new Server(port);
+
+        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
+        context.setContextPath("/");
+
+        IHyracksClientConnection hcc = getNewHyracksClientConnection();
+        context.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
+
+        webServer.setHandler(context);
+        context.addServlet(new ServletHolder(new APIServlet()), "/*");
+    }
+
+    private void setupJSONAPIServer() throws Exception {
+        String portStr = System.getProperty(GlobalConfig.JSON_API_SERVER_PORT_PROPERTY);
+        int port = DEFAULT_JSON_API_SERVER_PORT;
+        if (portStr != null) {
+            port = Integer.parseInt(portStr);
+        }
+        jsonAPIServer = new Server(port);
+
+        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
+        context.setContextPath("/");
+
+        IHyracksClientConnection hcc = getNewHyracksClientConnection();
+        context.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
+
+        jsonAPIServer.setHandler(context);
+        context.addServlet(new ServletHolder(new QueryAPIServlet()), "/query");
+        context.addServlet(new ServletHolder(new QueryStatusAPIServlet()), "/query/status");
+        context.addServlet(new ServletHolder(new QueryResultAPIServlet()), "/query/result");
+        context.addServlet(new ServletHolder(new UpdateAPIServlet()), "/update");
+        context.addServlet(new ServletHolder(new DDLAPIServlet()), "/ddl");
+    }
+}
\ No newline at end of file
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java b/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
new file mode 100644
index 0000000..8ad8c67
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
@@ -0,0 +1,162 @@
+package edu.uci.ics.asterix.hyracks.bootstrap;
+
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.common.context.AsterixAppRuntimeContext;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataNode;
+import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
+import edu.uci.ics.asterix.metadata.api.IMetadataNode;
+import edu.uci.ics.asterix.metadata.bootstrap.MetadataBootstrap;
+import edu.uci.ics.asterix.transaction.management.resource.PersistentLocalResourceRepository;
+import edu.uci.ics.asterix.transaction.management.service.recovery.IRecoveryManager;
+import edu.uci.ics.asterix.transaction.management.service.recovery.IRecoveryManager.SystemState;
+import edu.uci.ics.hyracks.api.application.INCApplicationContext;
+import edu.uci.ics.hyracks.api.application.INCApplicationEntryPoint;
+
+public class NCApplicationEntryPoint implements INCApplicationEntryPoint {
+    private static final Logger LOGGER = Logger.getLogger(NCApplicationEntryPoint.class.getName());
+
+    private INCApplicationContext ncApplicationContext = null;
+    private AsterixAppRuntimeContext runtimeContext;
+    private String nodeId;
+    private boolean isMetadataNode = false;
+    private boolean stopInitiated = false;
+    private SystemState systemState = SystemState.NEW_UNIVERSE;
+
+    @Override
+    public void start(INCApplicationContext ncAppCtx, String[] args) throws Exception {
+        ncApplicationContext = ncAppCtx;
+        nodeId = ncApplicationContext.getNodeId();
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Starting Asterix node controller: " + nodeId);
+        }
+
+        runtimeContext = new AsterixAppRuntimeContext(ncApplicationContext);
+        runtimeContext.initialize();
+        ncApplicationContext.setApplicationObject(runtimeContext);
+        JVMShutdownHook sHook = new JVMShutdownHook(this);
+        Runtime.getRuntime().addShutdownHook(sHook);
+
+        // #. recover if the system is corrupted by checking system state.
+        IRecoveryManager recoveryMgr = runtimeContext.getTransactionSubsystem().getRecoveryManager();
+        systemState = recoveryMgr.getSystemState();
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("System is in a state: " + systemState);
+        }
+
+        if (systemState != SystemState.NEW_UNIVERSE) {
+            PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) runtimeContext
+                    .getLocalResourceRepository();
+            localResourceRepository.initialize(nodeId, null, false, runtimeContext.getResourceIdFactory());
+        }
+        if (systemState == SystemState.CORRUPTED) {
+            recoveryMgr.startRecovery(true);
+        } else if (systemState == SystemState.NEW_UNIVERSE) {
+            recoveryMgr.checkpoint(true);
+        }
+    }
+
+    @Override
+    public void stop() throws Exception {
+        if (!stopInitiated) {
+            runtimeContext.setShuttingdown(true);
+            stopInitiated = true;
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("Stopping Asterix node controller: " + nodeId);
+            }
+
+            IRecoveryManager recoveryMgr = runtimeContext.getTransactionSubsystem().getRecoveryManager();
+            recoveryMgr.checkpoint(true);
+
+            if (isMetadataNode) {
+                MetadataBootstrap.stopUniverse();
+            }
+            runtimeContext.deinitialize();
+        } else {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("Duplicate attempt to stop ignored: " + nodeId);
+            }
+        }
+    }
+
+    @Override
+    public void notifyStartupComplete() throws Exception {
+        IAsterixStateProxy proxy = (IAsterixStateProxy) ncApplicationContext.getDistributedState();
+
+        if (systemState == SystemState.NEW_UNIVERSE) {
+            PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) runtimeContext
+                    .getLocalResourceRepository();
+
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("nodeid" + nodeId);
+                LOGGER.info("proxy" + proxy);
+                LOGGER.info("stores" + proxy.getAsterixProperties().getStores());
+                LOGGER.info("store" + proxy.getAsterixProperties().getStores().get(nodeId)[0]);
+            }
+
+            localResourceRepository.initialize(nodeId, proxy.getAsterixProperties().getStores().get(nodeId)[0], true,
+                    null);
+        }
+
+        isMetadataNode = nodeId.equals(proxy.getAsterixProperties().getMetadataNodeName());
+        if (isMetadataNode) {
+            registerRemoteMetadataNode(proxy);
+
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("Bootstrapping metadata");
+            }
+            MetadataManager.INSTANCE = new MetadataManager(proxy);
+            MetadataManager.INSTANCE.init();
+            MetadataBootstrap.startUniverse(proxy.getAsterixProperties(), ncApplicationContext,
+                    systemState == SystemState.NEW_UNIVERSE);
+            MetadataBootstrap.startDDLRecovery();
+        }
+
+        IRecoveryManager recoveryMgr = runtimeContext.getTransactionSubsystem().getRecoveryManager();
+        recoveryMgr.checkpoint(true);
+
+        // TODO
+        // reclaim storage for orphaned index artifacts in NCs.
+    }
+
+    public void registerRemoteMetadataNode(IAsterixStateProxy proxy) throws RemoteException {
+        IMetadataNode stub = null;
+        MetadataNode.INSTANCE.initialize(runtimeContext);
+        stub = (IMetadataNode) UnicastRemoteObject.exportObject(MetadataNode.INSTANCE, 0);
+        proxy.setMetadataNode(stub);
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Metadata node bound");
+        }
+    }
+
+    /**
+     * Shutdown hook that invokes {@link NCApplicationEntryPoint#stop() stop} method.
+     */
+    private static class JVMShutdownHook extends Thread {
+
+        private final NCApplicationEntryPoint ncAppEntryPoint;
+
+        public JVMShutdownHook(NCApplicationEntryPoint ncAppEntryPoint) {
+            this.ncAppEntryPoint = ncAppEntryPoint;
+        }
+
+        public void run() {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("Shutdown hook in progress");
+            }
+            try {
+                ncAppEntryPoint.stop();
+            } catch (Exception e) {
+                if (LOGGER.isLoggable(Level.WARNING)) {
+                    LOGGER.warning("Exception in executing shutdown hook" + e);
+                }
+            }
+        }
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultReader.java b/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultReader.java
new file mode 100644
index 0000000..48ba0b1
--- /dev/null
+++ b/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultReader.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.result;
+
+import java.nio.ByteBuffer;
+
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
+import edu.uci.ics.hyracks.api.dataset.DatasetJobRecord.Status;
+import edu.uci.ics.hyracks.api.dataset.IHyracksDataset;
+import edu.uci.ics.hyracks.api.dataset.IHyracksDatasetReader;
+import edu.uci.ics.hyracks.api.dataset.ResultSetId;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.job.JobId;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ResultFrameTupleAccessor;
+
+public class ResultReader {
+    private final IHyracksDataset hyracksDataset;
+
+    private IHyracksDatasetReader reader;
+
+    private IFrameTupleAccessor frameTupleAccessor;
+
+    // Number of parallel result reader buffers
+    public static final int NUM_READERS = 1;
+
+    public static final int FRAME_SIZE = GlobalConfig.getFrameSize();
+
+    public ResultReader(IHyracksClientConnection hcc, IHyracksDataset hdc) throws Exception {
+        hyracksDataset = hdc;
+    }
+
+    public void open(JobId jobId, ResultSetId resultSetId) throws HyracksDataException {
+        reader = hyracksDataset.createReader(jobId, resultSetId);
+
+        frameTupleAccessor = new ResultFrameTupleAccessor(FRAME_SIZE);
+    }
+
+    public Status getStatus() {
+        return reader.getResultStatus();
+    }
+
+    public int read(ByteBuffer buffer) throws HyracksDataException {
+        return reader.read(buffer);
+    }
+
+    public IFrameTupleAccessor getFrameTupleAccessor() {
+        return frameTupleAccessor;
+    }
+}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java b/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java
rename to asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultUtils.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorDescriptor.java b/asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorDescriptor.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorDescriptor.java
rename to asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorDescriptor.java
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorNodePushable.java b/asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorNodePushable.java
similarity index 100%
rename from asterix/asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorNodePushable.java
rename to asterix-app/src/main/java/edu/uci/ics/hyracks/dataflow/std/misc/ConstantTupleSourceOperatorNodePushable.java
diff --git a/asterix-app/src/main/resources/asterix-build-configuration.xml b/asterix-app/src/main/resources/asterix-build-configuration.xml
new file mode 100644
index 0000000..bd984f0
--- /dev/null
+++ b/asterix-app/src/main/resources/asterix-build-configuration.xml
@@ -0,0 +1,16 @@
+<asterixConfiguration xmlns="asterixconf">
+  <metadataNode>nc1</metadataNode>
+  <store>
+     <ncId>nc1</ncId>
+     <storeDirs>nc1data</storeDirs> 
+  </store>
+  <store>
+     <ncId>nc2</ncId>
+     <storeDirs>nc2data</storeDirs> 
+  </store>
+  <property>
+     <name>log_level</name>
+     <value>WARNING</value>
+     <description></description>
+  </property>
+</asterixConfiguration>
diff --git a/asterix/asterix-app/src/main/resources/hyracks-deployment.properties b/asterix-app/src/main/resources/hyracks-deployment.properties
similarity index 100%
rename from asterix/asterix-app/src/main/resources/hyracks-deployment.properties
rename to asterix-app/src/main/resources/hyracks-deployment.properties
diff --git a/asterix-app/src/main/resources/log.properties b/asterix-app/src/main/resources/log.properties
new file mode 100644
index 0000000..ee8040a
--- /dev/null
+++ b/asterix-app/src/main/resources/log.properties
@@ -0,0 +1 @@
+group_commit_wait_period=1
\ No newline at end of file
diff --git a/asterix/asterix-app/src/main/resources/test.properties b/asterix-app/src/main/resources/test.properties
similarity index 100%
rename from asterix/asterix-app/src/main/resources/test.properties
rename to asterix-app/src/main/resources/test.properties
diff --git a/asterix/asterix-app/src/main/resources/webui/querytemplate.html b/asterix-app/src/main/resources/webui/querytemplate.html
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/querytemplate.html
rename to asterix-app/src/main/resources/webui/querytemplate.html
diff --git a/asterix/asterix-app/src/main/resources/webui/static/css/bootstrap-responsive.min.css b/asterix-app/src/main/resources/webui/static/css/bootstrap-responsive.min.css
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/css/bootstrap-responsive.min.css
rename to asterix-app/src/main/resources/webui/static/css/bootstrap-responsive.min.css
diff --git a/asterix/asterix-app/src/main/resources/webui/static/css/bootstrap.min.css b/asterix-app/src/main/resources/webui/static/css/bootstrap.min.css
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/css/bootstrap.min.css
rename to asterix-app/src/main/resources/webui/static/css/bootstrap.min.css
diff --git a/asterix/asterix-app/src/main/resources/webui/static/css/style.css b/asterix-app/src/main/resources/webui/static/css/style.css
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/css/style.css
rename to asterix-app/src/main/resources/webui/static/css/style.css
diff --git a/asterix/asterix-app/src/main/resources/webui/static/img/glyphicons-halflings-white.png b/asterix-app/src/main/resources/webui/static/img/glyphicons-halflings-white.png
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/img/glyphicons-halflings-white.png
rename to asterix-app/src/main/resources/webui/static/img/glyphicons-halflings-white.png
Binary files differ
diff --git a/asterix/asterix-app/src/main/resources/webui/static/img/glyphicons-halflings.png b/asterix-app/src/main/resources/webui/static/img/glyphicons-halflings.png
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/img/glyphicons-halflings.png
rename to asterix-app/src/main/resources/webui/static/img/glyphicons-halflings.png
Binary files differ
diff --git a/asterix/asterix-app/src/main/resources/webui/static/js/bootstrap.min.js b/asterix-app/src/main/resources/webui/static/js/bootstrap.min.js
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/js/bootstrap.min.js
rename to asterix-app/src/main/resources/webui/static/js/bootstrap.min.js
diff --git a/asterix/asterix-app/src/main/resources/webui/static/js/jquery.autosize-min.js b/asterix-app/src/main/resources/webui/static/js/jquery.autosize-min.js
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/js/jquery.autosize-min.js
rename to asterix-app/src/main/resources/webui/static/js/jquery.autosize-min.js
diff --git a/asterix/asterix-app/src/main/resources/webui/static/js/jquery.min.js b/asterix-app/src/main/resources/webui/static/js/jquery.min.js
similarity index 100%
rename from asterix/asterix-app/src/main/resources/webui/static/js/jquery.min.js
rename to asterix-app/src/main/resources/webui/static/js/jquery.min.js
diff --git a/asterix/asterix-app/src/main/scripts/run.cmd b/asterix-app/src/main/scripts/run.cmd
similarity index 100%
rename from asterix/asterix-app/src/main/scripts/run.cmd
rename to asterix-app/src/main/scripts/run.cmd
diff --git a/asterix/asterix-app/src/main/scripts/run.sh b/asterix-app/src/main/scripts/run.sh
similarity index 100%
rename from asterix/asterix-app/src/main/scripts/run.sh
rename to asterix-app/src/main/scripts/run.sh
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestCase.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestCase.java
similarity index 100%
rename from asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestCase.java
rename to asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestCase.java
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestSuite.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestSuite.java
similarity index 100%
rename from asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestSuite.java
rename to asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/AQLTestSuite.java
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/common/TestHelper.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/common/TestHelper.java
similarity index 100%
rename from asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/common/TestHelper.java
rename to asterix-app/src/test/java/edu/uci/ics/asterix/test/common/TestHelper.java
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
similarity index 100%
rename from asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
rename to asterix-app/src/test/java/edu/uci/ics/asterix/test/dml/DmlTest.java
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
new file mode 100644
index 0000000..dfbd305
--- /dev/null
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.test.metadata;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.test.aql.TestsUtils;
+import edu.uci.ics.asterix.testframework.context.TestCaseContext;
+
+/**
+ * Executes the Metadata tests.
+ */
+@RunWith(Parameterized.class)
+public class MetadataTest {
+
+    private TestCaseContext tcCtx;
+
+    private static final String PATH_ACTUAL = "mdtest/";
+    private static final String PATH_BASE = "src/test/resources/metadata/";
+    private static final String TEST_CONFIG_FILE_NAME = "asterix-build-configuration.xml";
+    private static final String WEB_SERVER_PORT = "19002";
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
+        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, WEB_SERVER_PORT);
+        File outdir = new File(PATH_ACTUAL);
+        outdir.mkdirs();
+
+        File log = new File("asterix_logs");
+        if (log.exists()) {
+            FileUtils.deleteDirectory(log);
+        }
+
+        AsterixHyracksIntegrationUtil.init();
+
+    }
+
+    @AfterClass
+    public static void tearDown() throws Exception {
+        AsterixHyracksIntegrationUtil.deinit();
+        File outdir = new File(PATH_ACTUAL);
+        File[] files = outdir.listFiles();
+        if (files == null || files.length == 0) {
+            outdir.delete();
+        }
+
+        // clean up the files written by the ASTERIX storage manager
+        for (String d : AsterixHyracksIntegrationUtil.ASTERIX_DATA_DIRS) {
+            TestsUtils.deleteRec(new File(d));
+        }
+
+        File log = new File("asterix_logs");
+        if (log.exists()) {
+            FileUtils.deleteDirectory(log);
+        }
+    }
+
+    @Parameters
+    public static Collection<Object[]> tests() throws Exception {
+        Collection<Object[]> testArgs = new ArrayList<Object[]>();
+        TestCaseContext.Builder b = new TestCaseContext.Builder();
+        for (TestCaseContext ctx : b.build(new File(PATH_BASE))) {
+            testArgs.add(new Object[] { ctx });
+        }
+        return testArgs;
+    }
+
+    public MetadataTest(TestCaseContext tcCtx) {
+        this.tcCtx = tcCtx;
+    }
+
+    @Test
+    public void test() throws Exception {
+        TestsUtils.executeTest(PATH_ACTUAL, tcCtx);
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
new file mode 100644
index 0000000..0f1f8b5
--- /dev/null
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
@@ -0,0 +1,198 @@
+package edu.uci.ics.asterix.test.optimizer;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.logging.Logger;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.Assume;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.internal.AssumptionViolatedException;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
+import edu.uci.ics.asterix.api.java.AsterixJavaClient;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.external.dataset.adapter.FileSystemBasedAdapter;
+import edu.uci.ics.asterix.external.util.IdentitiyResolverFactory;
+import edu.uci.ics.asterix.test.base.AsterixTestHelper;
+import edu.uci.ics.asterix.test.common.TestHelper;
+
+@RunWith(Parameterized.class)
+public class OptimizerTest {
+
+    private static final Logger LOGGER = Logger.getLogger(OptimizerTest.class.getName());
+
+    private static final String SEPARATOR = File.separator;
+    private static final String EXTENSION_QUERY = "aql";
+    private static final String EXTENSION_RESULT = "plan";
+    private static final String FILENAME_IGNORE = "ignore.txt";
+    private static final String FILENAME_ONLY = "only.txt";
+    private static final String PATH_BASE = "src" + SEPARATOR + "test" + SEPARATOR + "resources" + SEPARATOR
+            + "optimizerts" + SEPARATOR;
+    private static final String PATH_QUERIES = PATH_BASE + "queries" + SEPARATOR;
+    private static final String PATH_EXPECTED = PATH_BASE + "results" + SEPARATOR;
+    private static final String PATH_ACTUAL = "opttest" + SEPARATOR;
+
+    private static final ArrayList<String> ignore = AsterixTestHelper.readFile(FILENAME_IGNORE, PATH_BASE);
+    private static final ArrayList<String> only = AsterixTestHelper.readFile(FILENAME_ONLY, PATH_BASE);
+    private static final String TEST_CONFIG_FILE_NAME = "asterix-build-configuration.xml";
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+        // File outdir = new File(PATH_ACTUAL);
+        // outdir.mkdirs();
+
+        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
+        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, "19002");
+        File outdir = new File(PATH_ACTUAL);
+        outdir.mkdirs();
+
+        File log = new File("asterix_logs");
+        if (log.exists()) {
+            FileUtils.deleteDirectory(log);
+        }
+
+        AsterixHyracksIntegrationUtil.init();
+        // Set the node resolver to be the identity resolver that expects node names 
+        // to be node controller ids; a valid assumption in test environment. 
+        System.setProperty(FileSystemBasedAdapter.NODE_RESOLVER_FACTORY_PROPERTY,
+                IdentitiyResolverFactory.class.getName());
+    }
+
+    @AfterClass
+    public static void tearDown() throws Exception {
+        // _bootstrap.stop();
+        File outdir = new File(PATH_ACTUAL);
+        File[] files = outdir.listFiles();
+        if (files == null || files.length == 0) {
+            outdir.delete();
+        }
+
+        File log = new File("asterix_logs");
+        if (log.exists()) {
+            FileUtils.deleteDirectory(log);
+        }
+    }
+
+    private static void suiteBuild(File dir, Collection<Object[]> testArgs, String path) {
+        for (File file : dir.listFiles()) {
+            if (file.isDirectory() && !file.getName().startsWith(".")) {
+                suiteBuild(file, testArgs, path + file.getName() + SEPARATOR);
+            }
+            if (file.isFile() && file.getName().endsWith(EXTENSION_QUERY)
+            // && !ignore.contains(path + file.getName())
+            ) {
+                String resultFileName = AsterixTestHelper.extToResExt(file.getName(), EXTENSION_RESULT);
+                File expectedFile = new File(PATH_EXPECTED + path + resultFileName);
+                File actualFile = new File(PATH_ACTUAL + SEPARATOR + path.replace(SEPARATOR, "_") + resultFileName);
+                testArgs.add(new Object[] { file, expectedFile, actualFile });
+            }
+        }
+    }
+
+    @Parameters
+    public static Collection<Object[]> tests() {
+        Collection<Object[]> testArgs = new ArrayList<Object[]>();
+        suiteBuild(new File(PATH_QUERIES), testArgs, "");
+        return testArgs;
+    }
+
+    private File actualFile;
+    private File expectedFile;
+    private File queryFile;
+
+    public OptimizerTest(File queryFile, File expectedFile, File actualFile) {
+        this.queryFile = queryFile;
+        this.expectedFile = expectedFile;
+        this.actualFile = actualFile;
+    }
+
+    @Test
+    public void test() throws Exception {
+        try {
+            String queryFileShort = queryFile.getPath().substring(PATH_QUERIES.length())
+                    .replace(SEPARATOR.charAt(0), '/');
+            if (!only.isEmpty()) {
+                boolean toRun = TestHelper.isInPrefixList(only, queryFileShort);
+                if (!toRun) {
+                    LOGGER.info("SKIP TEST: \"" + queryFile.getPath()
+                            + "\" \"only.txt\" not empty and not in \"only.txt\".");
+                }
+                Assume.assumeTrue(toRun);
+            }
+            boolean skipped = TestHelper.isInPrefixList(ignore, queryFileShort);
+            if (skipped) {
+                LOGGER.info("SKIP TEST: \"" + queryFile.getPath() + "\" in \"ignore.txt\".");
+            }
+            Assume.assumeTrue(!skipped);
+
+            LOGGER.info("RUN TEST: \"" + queryFile.getPath() + "\"");
+            Reader query = new BufferedReader(new InputStreamReader(new FileInputStream(queryFile), "UTF-8"));
+            PrintWriter plan = new PrintWriter(actualFile);
+            AsterixJavaClient asterix = new AsterixJavaClient(
+                    AsterixHyracksIntegrationUtil.getHyracksClientConnection(), query, plan);
+            try {
+                asterix.compile(true, false, false, true, true, false, false);
+            } catch (AsterixException e) {
+                plan.close();
+                query.close();
+                throw new Exception("Compile ERROR for " + queryFile + ": " + e.getMessage(), e);
+            }
+            plan.close();
+            query.close();
+
+            BufferedReader readerExpected = new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile),
+                    "UTF-8"));
+            BufferedReader readerActual = new BufferedReader(new InputStreamReader(new FileInputStream(actualFile),
+                    "UTF-8"));
+
+            String lineExpected, lineActual;
+            int num = 1;
+            try {
+                while ((lineExpected = readerExpected.readLine()) != null) {
+                    lineActual = readerActual.readLine();
+                    // Assert.assertEquals(lineExpected, lineActual);
+                    if (lineActual == null) {
+                        throw new Exception("Result for " + queryFile + " changed at line " + num + ":\n< "
+                                + lineExpected + "\n> ");
+                    }
+                    if (!lineExpected.equals(lineActual)) {
+                        throw new Exception("Result for " + queryFile + " changed at line " + num + ":\n< "
+                                + lineExpected + "\n> " + lineActual);
+                    }
+                    ++num;
+                }
+                lineActual = readerActual.readLine();
+                // Assert.assertEquals(null, lineActual);
+                if (lineActual != null) {
+                    throw new Exception("Result for " + queryFile + " changed at line " + num + ":\n< \n> "
+                            + lineActual);
+                }
+                LOGGER.info("Test \"" + queryFile.getPath() + "\" PASSED!");
+                actualFile.delete();
+            } finally {
+                readerExpected.close();
+                readerActual.close();
+            }
+        } catch (Exception e) {
+            if (!(e instanceof AssumptionViolatedException)) {
+                LOGGER.severe("Test \"" + queryFile.getPath() + "\" FAILED!");
+                throw new Exception("Test \"" + queryFile.getPath() + "\" FAILED!", e);
+            } else {
+                throw e;
+            }
+        }
+    }
+}
diff --git a/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/ExecutionTest.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/ExecutionTest.java
new file mode 100644
index 0000000..2289484
--- /dev/null
+++ b/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/ExecutionTest.java
@@ -0,0 +1,97 @@
+package edu.uci.ics.asterix.test.runtime;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+
+import org.apache.commons.io.FileUtils;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.external.dataset.adapter.FileSystemBasedAdapter;
+import edu.uci.ics.asterix.external.util.IdentitiyResolverFactory;
+import edu.uci.ics.asterix.test.aql.TestsUtils;
+import edu.uci.ics.asterix.testframework.context.TestCaseContext;
+
+/**
+ * Runs the runtime test cases under 'asterix-app/src/test/resources/runtimets'.
+ */
+@RunWith(Parameterized.class)
+public class ExecutionTest {
+    private static final String PATH_ACTUAL = "rttest/";
+    private static final String PATH_BASE = "src/test/resources/runtimets/";
+
+    private static final String TEST_CONFIG_FILE_NAME = "asterix-build-configuration.xml";
+    private static final String[] ASTERIX_DATA_DIRS = new String[] { "nc1data", "nc2data" };
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
+        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, "19002");
+        File outdir = new File(PATH_ACTUAL);
+        outdir.mkdirs();
+
+        File log = new File("asterix_logs");
+        if (log.exists()) {
+            FileUtils.deleteDirectory(log);
+        }
+
+        AsterixHyracksIntegrationUtil.init();
+
+        // TODO: Uncomment when hadoop version is upgraded and adapters are
+        // ported. 
+        HDFSCluster.getInstance().setup();
+
+        // Set the node resolver to be the identity resolver that expects node names 
+        // to be node controller ids; a valid assumption in test environment. 
+        System.setProperty(FileSystemBasedAdapter.NODE_RESOLVER_FACTORY_PROPERTY,
+                IdentitiyResolverFactory.class.getName());
+    }
+
+    @AfterClass
+    public static void tearDown() throws Exception {
+        AsterixHyracksIntegrationUtil.deinit();
+        File outdir = new File(PATH_ACTUAL);
+        File[] files = outdir.listFiles();
+        if (files == null || files.length == 0) {
+            outdir.delete();
+        }
+        // clean up the files written by the ASTERIX storage manager
+        for (String d : ASTERIX_DATA_DIRS) {
+            TestsUtils.deleteRec(new File(d));
+        }
+
+        File log = new File("asterix_logs");
+        if (log.exists()) {
+            FileUtils.deleteDirectory(log);
+        }
+        HDFSCluster.getInstance().cleanup();
+    }
+
+    @Parameters
+    public static Collection<Object[]> tests() throws Exception {
+        Collection<Object[]> testArgs = new ArrayList<Object[]>();
+        TestCaseContext.Builder b = new TestCaseContext.Builder();
+        for (TestCaseContext ctx : b.build(new File(PATH_BASE))) {
+            testArgs.add(new Object[] { ctx });
+        }
+        return testArgs;
+    }
+
+    private TestCaseContext tcCtx;
+
+    public ExecutionTest(TestCaseContext tcCtx) {
+        this.tcCtx = tcCtx;
+    }
+
+    @Test
+    public void test() throws Exception {
+        TestsUtils.executeTest(PATH_ACTUAL, tcCtx);
+    }
+}
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/HDFSCluster.java b/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/HDFSCluster.java
similarity index 100%
rename from asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/HDFSCluster.java
rename to asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/HDFSCluster.java
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/1.aql b/asterix-app/src/test/resources/AQLTS/queries/1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/1.aql
rename to asterix-app/src/test/resources/AQLTS/queries/1.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/2.aql b/asterix-app/src/test/resources/AQLTS/queries/2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/2.aql
rename to asterix-app/src/test/resources/AQLTS/queries/2.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/3.aql b/asterix-app/src/test/resources/AQLTS/queries/3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/3.aql
rename to asterix-app/src/test/resources/AQLTS/queries/3.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/4.aql b/asterix-app/src/test/resources/AQLTS/queries/4.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/4.aql
rename to asterix-app/src/test/resources/AQLTS/queries/4.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/5.aql b/asterix-app/src/test/resources/AQLTS/queries/5.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/5.aql
rename to asterix-app/src/test/resources/AQLTS/queries/5.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/6.aql b/asterix-app/src/test/resources/AQLTS/queries/6.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/6.aql
rename to asterix-app/src/test/resources/AQLTS/queries/6.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/ANYInFieldAccessor.aql b/asterix-app/src/test/resources/AQLTS/queries/ANYInFieldAccessor.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/ANYInFieldAccessor.aql
rename to asterix-app/src/test/resources/AQLTS/queries/ANYInFieldAccessor.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/IfInFLOWGR.aql b/asterix-app/src/test/resources/AQLTS/queries/IfInFLOWGR.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/IfInFLOWGR.aql
rename to asterix-app/src/test/resources/AQLTS/queries/IfInFLOWGR.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/IfThenElse.aql b/asterix-app/src/test/resources/AQLTS/queries/IfThenElse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/IfThenElse.aql
rename to asterix-app/src/test/resources/AQLTS/queries/IfThenElse.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/LetFor.aql b/asterix-app/src/test/resources/AQLTS/queries/LetFor.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/LetFor.aql
rename to asterix-app/src/test/resources/AQLTS/queries/LetFor.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/ListConstructor.aql b/asterix-app/src/test/resources/AQLTS/queries/ListConstructor.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/ListConstructor.aql
rename to asterix-app/src/test/resources/AQLTS/queries/ListConstructor.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/addOperator.aql b/asterix-app/src/test/resources/AQLTS/queries/addOperator.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/addOperator.aql
rename to asterix-app/src/test/resources/AQLTS/queries/addOperator.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/constant.aql b/asterix-app/src/test/resources/AQLTS/queries/constant.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/constant.aql
rename to asterix-app/src/test/resources/AQLTS/queries/constant.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/del-dataset.aql b/asterix-app/src/test/resources/AQLTS/queries/del-dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/del-dataset.aql
rename to asterix-app/src/test/resources/AQLTS/queries/del-dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/functionDecl.aql b/asterix-app/src/test/resources/AQLTS/queries/functionDecl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/functionDecl.aql
rename to asterix-app/src/test/resources/AQLTS/queries/functionDecl.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/functionDecl1.aql b/asterix-app/src/test/resources/AQLTS/queries/functionDecl1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/functionDecl1.aql
rename to asterix-app/src/test/resources/AQLTS/queries/functionDecl1.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/functionDecl2.aql b/asterix-app/src/test/resources/AQLTS/queries/functionDecl2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/functionDecl2.aql
rename to asterix-app/src/test/resources/AQLTS/queries/functionDecl2.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/load-del-dataset.aql b/asterix-app/src/test/resources/AQLTS/queries/load-del-dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/load-del-dataset.aql
rename to asterix-app/src/test/resources/AQLTS/queries/load-del-dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/mulOperator.aql b/asterix-app/src/test/resources/AQLTS/queries/mulOperator.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/mulOperator.aql
rename to asterix-app/src/test/resources/AQLTS/queries/mulOperator.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR.aql b/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR.aql
rename to asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR1.aql b/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR1.aql
rename to asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR1.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR2.aql b/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR2.aql
rename to asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR2.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR3.aql b/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR3.aql
rename to asterix-app/src/test/resources/AQLTS/queries/nestedFLWOGR3.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFor.aql b/asterix-app/src/test/resources/AQLTS/queries/nestedFor.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/nestedFor.aql
rename to asterix-app/src/test/resources/AQLTS/queries/nestedFor.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/numberInFieldAccessor.aql b/asterix-app/src/test/resources/AQLTS/queries/numberInFieldAccessor.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/numberInFieldAccessor.aql
rename to asterix-app/src/test/resources/AQLTS/queries/numberInFieldAccessor.aql
diff --git a/asterix/asterix-app/src/test/resources/AQLTS/queries/union.aql b/asterix-app/src/test/resources/AQLTS/queries/union.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/AQLTS/queries/union.aql
rename to asterix-app/src/test/resources/AQLTS/queries/union.aql
diff --git a/asterix/asterix-app/src/test/resources/dapd/denorm_user_event.aql b/asterix-app/src/test/resources/dapd/denorm_user_event.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/dapd/denorm_user_event.aql
rename to asterix-app/src/test/resources/dapd/denorm_user_event.aql
diff --git a/asterix/asterix-app/src/test/resources/dapd/q1.aql b/asterix-app/src/test/resources/dapd/q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/dapd/q1.aql
rename to asterix-app/src/test/resources/dapd/q1.aql
diff --git a/asterix/asterix-app/src/test/resources/dapd/q2.aql b/asterix-app/src/test/resources/dapd/q2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/dapd/q2.aql
rename to asterix-app/src/test/resources/dapd/q2.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0216/01-load-dblp-large.aql b/asterix-app/src/test/resources/demo0216/01-load-dblp-large.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0216/01-load-dblp-large.aql
rename to asterix-app/src/test/resources/demo0216/01-load-dblp-large.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0216/02-fuzzy-select b/asterix-app/src/test/resources/demo0216/02-fuzzy-select
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0216/02-fuzzy-select
rename to asterix-app/src/test/resources/demo0216/02-fuzzy-select
diff --git a/asterix/asterix-app/src/test/resources/demo0216/03-load-dblp-small.aql b/asterix-app/src/test/resources/demo0216/03-load-dblp-small.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0216/03-load-dblp-small.aql
rename to asterix-app/src/test/resources/demo0216/03-load-dblp-small.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0216/110-self-join-dblp.aql b/asterix-app/src/test/resources/demo0216/110-self-join-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0216/110-self-join-dblp.aql
rename to asterix-app/src/test/resources/demo0216/110-self-join-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0216/120-self-join-dblp-small.aql b/asterix-app/src/test/resources/demo0216/120-self-join-dblp-small.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0216/120-self-join-dblp-small.aql
rename to asterix-app/src/test/resources/demo0216/120-self-join-dblp-small.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/create-index.aql b/asterix-app/src/test/resources/demo0927/local/create-index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/create-index.aql
rename to asterix-app/src/test/resources/demo0927/local/create-index.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/dataset-filter-int.aql b/asterix-app/src/test/resources/demo0927/local/dataset-filter-int.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/dataset-filter-int.aql
rename to asterix-app/src/test/resources/demo0927/local/dataset-filter-int.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/dataset-filter-str.aql b/asterix-app/src/test/resources/demo0927/local/dataset-filter-str.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/dataset-filter-str.aql
rename to asterix-app/src/test/resources/demo0927/local/dataset-filter-str.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/dataset-scan.aql b/asterix-app/src/test/resources/demo0927/local/dataset-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/dataset-scan.aql
rename to asterix-app/src/test/resources/demo0927/local/dataset-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/declare-index.aql b/asterix-app/src/test/resources/demo0927/local/declare-index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/declare-index.aql
rename to asterix-app/src/test/resources/demo0927/local/declare-index.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/join-cust-ord.aql b/asterix-app/src/test/resources/demo0927/local/join-cust-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/join-cust-ord.aql
rename to asterix-app/src/test/resources/demo0927/local/join-cust-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/load-cust.aql b/asterix-app/src/test/resources/demo0927/local/load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/load-cust.aql
rename to asterix-app/src/test/resources/demo0927/local/load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/local/load-ord.aql b/asterix-app/src/test/resources/demo0927/local/load-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/local/load-ord.aql
rename to asterix-app/src/test/resources/demo0927/local/load-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/rainbow/01-load-cust.aql b/asterix-app/src/test/resources/demo0927/rainbow/01-load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/rainbow/01-load-cust.aql
rename to asterix-app/src/test/resources/demo0927/rainbow/01-load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/rainbow/02-filter-cust.aql b/asterix-app/src/test/resources/demo0927/rainbow/02-filter-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/rainbow/02-filter-cust.aql
rename to asterix-app/src/test/resources/demo0927/rainbow/02-filter-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/rainbow/03-load-ord.aql b/asterix-app/src/test/resources/demo0927/rainbow/03-load-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/rainbow/03-load-ord.aql
rename to asterix-app/src/test/resources/demo0927/rainbow/03-load-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo0927/rainbow/04-join-custord.aql b/asterix-app/src/test/resources/demo0927/rainbow/04-join-custord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo0927/rainbow/04-join-custord.aql
rename to asterix-app/src/test/resources/demo0927/rainbow/04-join-custord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/local/01-load-cust.aql b/asterix-app/src/test/resources/demo1112/local/01-load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/local/01-load-cust.aql
rename to asterix-app/src/test/resources/demo1112/local/01-load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/local/02-filter-cust.aql b/asterix-app/src/test/resources/demo1112/local/02-filter-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/local/02-filter-cust.aql
rename to asterix-app/src/test/resources/demo1112/local/02-filter-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/local/03-load-ord.aql b/asterix-app/src/test/resources/demo1112/local/03-load-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/local/03-load-ord.aql
rename to asterix-app/src/test/resources/demo1112/local/03-load-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/local/04-join-custord.aql b/asterix-app/src/test/resources/demo1112/local/04-join-custord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/local/04-join-custord.aql
rename to asterix-app/src/test/resources/demo1112/local/04-join-custord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/rainbow/01-load-cust.aql b/asterix-app/src/test/resources/demo1112/rainbow/01-load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/rainbow/01-load-cust.aql
rename to asterix-app/src/test/resources/demo1112/rainbow/01-load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/rainbow/02-filter-cust.aql b/asterix-app/src/test/resources/demo1112/rainbow/02-filter-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/rainbow/02-filter-cust.aql
rename to asterix-app/src/test/resources/demo1112/rainbow/02-filter-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/rainbow/03-load-ord.aql b/asterix-app/src/test/resources/demo1112/rainbow/03-load-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/rainbow/03-load-ord.aql
rename to asterix-app/src/test/resources/demo1112/rainbow/03-load-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/rainbow/04-join-custord.aql b/asterix-app/src/test/resources/demo1112/rainbow/04-join-custord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/rainbow/04-join-custord.aql
rename to asterix-app/src/test/resources/demo1112/rainbow/04-join-custord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo1112/rainbow/05-count-custord.aql b/asterix-app/src/test/resources/demo1112/rainbow/05-count-custord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo1112/rainbow/05-count-custord.aql
rename to asterix-app/src/test/resources/demo1112/rainbow/05-count-custord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/01-load-cust.aql b/asterix-app/src/test/resources/demo_aql/local/01-load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/01-load-cust.aql
rename to asterix-app/src/test/resources/demo_aql/local/01-load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/02-filter-cust.aql b/asterix-app/src/test/resources/demo_aql/local/02-filter-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/02-filter-cust.aql
rename to asterix-app/src/test/resources/demo_aql/local/02-filter-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/03-count-cust-age.aql b/asterix-app/src/test/resources/demo_aql/local/03-count-cust-age.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/03-count-cust-age.aql
rename to asterix-app/src/test/resources/demo_aql/local/03-count-cust-age.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/04-load-ord.aql b/asterix-app/src/test/resources/demo_aql/local/04-load-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/04-load-ord.aql
rename to asterix-app/src/test/resources/demo_aql/local/04-load-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/05-count-param1.aql b/asterix-app/src/test/resources/demo_aql/local/05-count-param1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/05-count-param1.aql
rename to asterix-app/src/test/resources/demo_aql/local/05-count-param1.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/06-count-custord.aql b/asterix-app/src/test/resources/demo_aql/local/06-count-custord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/06-count-custord.aql
rename to asterix-app/src/test/resources/demo_aql/local/06-count-custord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/101-load-dblp.aql b/asterix-app/src/test/resources/demo_aql/local/101-load-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/101-load-dblp.aql
rename to asterix-app/src/test/resources/demo_aql/local/101-load-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/102-fuzzy-select.aql b/asterix-app/src/test/resources/demo_aql/local/102-fuzzy-select.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/102-fuzzy-select.aql
rename to asterix-app/src/test/resources/demo_aql/local/102-fuzzy-select.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/local/110-self-join-dblp.aql b/asterix-app/src/test/resources/demo_aql/local/110-self-join-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/local/110-self-join-dblp.aql
rename to asterix-app/src/test/resources/demo_aql/local/110-self-join-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/01-load-cust.aql b/asterix-app/src/test/resources/demo_aql/rainbow/01-load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/01-load-cust.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/01-load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/02-filter-cust.aql b/asterix-app/src/test/resources/demo_aql/rainbow/02-filter-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/02-filter-cust.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/02-filter-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/03-count-cust-age.aql b/asterix-app/src/test/resources/demo_aql/rainbow/03-count-cust-age.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/03-count-cust-age.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/03-count-cust-age.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/04-load-ord.aql b/asterix-app/src/test/resources/demo_aql/rainbow/04-load-ord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/04-load-ord.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/04-load-ord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/05-count-param1.aql b/asterix-app/src/test/resources/demo_aql/rainbow/05-count-param1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/05-count-param1.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/05-count-param1.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/06-count-custord.aql b/asterix-app/src/test/resources/demo_aql/rainbow/06-count-custord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/06-count-custord.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/06-count-custord.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/101-load-dblp.aql b/asterix-app/src/test/resources/demo_aql/rainbow/101-load-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/101-load-dblp.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/101-load-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/102-fuzzy-select.aql b/asterix-app/src/test/resources/demo_aql/rainbow/102-fuzzy-select.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/102-fuzzy-select.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/102-fuzzy-select.aql
diff --git a/asterix/asterix-app/src/test/resources/demo_aql/rainbow/110-self-join-dblp.aql b/asterix-app/src/test/resources/demo_aql/rainbow/110-self-join-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/demo_aql/rainbow/110-self-join-dblp.aql
rename to asterix-app/src/test/resources/demo_aql/rainbow/110-self-join-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/dmlts/results/enlist-scan-cust.adm b/asterix-app/src/test/resources/dmlts/results/enlist-scan-cust.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/dmlts/results/enlist-scan-cust.adm
rename to asterix-app/src/test/resources/dmlts/results/enlist-scan-cust.adm
diff --git a/asterix/asterix-app/src/test/resources/dmlts/scripts/enlist-scan-cust.aql b/asterix-app/src/test/resources/dmlts/scripts/enlist-scan-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/dmlts/scripts/enlist-scan-cust.aql
rename to asterix-app/src/test/resources/dmlts/scripts/enlist-scan-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/dmlts/scripts/load-cust.aql b/asterix-app/src/test/resources/dmlts/scripts/load-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/dmlts/scripts/load-cust.aql
rename to asterix-app/src/test/resources/dmlts/scripts/load-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx-small.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-csx.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/10-load-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/20-drop-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/30-filter-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/40-self-join-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/50-self-join-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/line.py b/asterix-app/src/test/resources/fuzzyjoin/amerix/line.py
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/amerix/line.py
rename to asterix-app/src/test/resources/fuzzyjoin/amerix/line.py
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql
rename to asterix-app/src/test/resources/fuzzyjoin/dblp/000-1-char-at.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql
rename to asterix-app/src/test/resources/fuzzyjoin/dblp/010-load.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql
rename to asterix-app/src/test/resources/fuzzyjoin/dblp/020-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql
rename to asterix-app/src/test/resources/fuzzyjoin/dblp/030-filter.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql
rename to asterix-app/src/test/resources/fuzzyjoin/dblp/040-self-join-aql.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql b/asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql
rename to asterix-app/src/test/resources/fuzzyjoin/dblp/050-self-join-op.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V b/asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V
rename to asterix-app/src/test/resources/fuzzyjoin/pub/.goutputstream-YQMB2V
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/010-load-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/020-drop-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/030-filter-dblp.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/040-load-csx.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/050-drop-csx.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/060-filter-csx.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/070-join-aql.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql b/asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql
rename to asterix-app/src/test/resources/fuzzyjoin/pub/080-join-op.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.dot
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.json
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.png
Binary files differ
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql-plus.ps
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.dot
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.json
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.png
Binary files differ
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps b/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps
rename to asterix-app/src/test/resources/fuzzyjoin/pub/fuzzy-join-aql.ps
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/010-load-users.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/020-drop-users.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/030-filter-users.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/040-load-visitors.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/050-drop-visitors.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/060-fililter-visitors.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/070-join-aql-lottery_numbers.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/080-join-op-lottery_numbers.aql
diff --git a/asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql b/asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql
rename to asterix-app/src/test/resources/fuzzyjoin/users-visitors/090-join-op-interests.aql
diff --git a/asterix/asterix-app/src/test/resources/hadoop/conf/core-site.xml b/asterix-app/src/test/resources/hadoop/conf/core-site.xml
similarity index 100%
rename from asterix/asterix-app/src/test/resources/hadoop/conf/core-site.xml
rename to asterix-app/src/test/resources/hadoop/conf/core-site.xml
diff --git a/asterix/asterix-app/src/test/resources/hadoop/conf/hdfs-site.xml b/asterix-app/src/test/resources/hadoop/conf/hdfs-site.xml
similarity index 100%
rename from asterix/asterix-app/src/test/resources/hadoop/conf/hdfs-site.xml
rename to asterix-app/src/test/resources/hadoop/conf/hdfs-site.xml
diff --git a/asterix/asterix-app/src/test/resources/hadoop/conf/log4j.properties b/asterix-app/src/test/resources/hadoop/conf/log4j.properties
similarity index 100%
rename from asterix/asterix-app/src/test/resources/hadoop/conf/log4j.properties
rename to asterix-app/src/test/resources/hadoop/conf/log4j.properties
diff --git a/asterix/asterix-app/src/test/resources/hadoop/conf/mapred-site.xml b/asterix-app/src/test/resources/hadoop/conf/mapred-site.xml
similarity index 100%
rename from asterix/asterix-app/src/test/resources/hadoop/conf/mapred-site.xml
rename to asterix-app/src/test/resources/hadoop/conf/mapred-site.xml
diff --git a/asterix/asterix-app/src/test/resources/hyracks-deployment.properties b/asterix-app/src/test/resources/hyracks-deployment.properties
similarity index 100%
rename from asterix/asterix-app/src/test/resources/hyracks-deployment.properties
rename to asterix-app/src/test/resources/hyracks-deployment.properties
diff --git a/asterix/asterix-app/src/test/resources/integration/queries/dataset-scan.aql b/asterix-app/src/test/resources/integration/queries/dataset-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/integration/queries/dataset-scan.aql
rename to asterix-app/src/test/resources/integration/queries/dataset-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/integration/queries/retrecord.aql b/asterix-app/src/test/resources/integration/queries/retrecord.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/integration/queries/retrecord.aql
rename to asterix-app/src/test/resources/integration/queries/retrecord.aql
diff --git a/asterix/asterix-app/src/test/resources/integration/queries/underpayment1-recordset.aql b/asterix-app/src/test/resources/integration/queries/underpayment1-recordset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/integration/queries/underpayment1-recordset.aql
rename to asterix-app/src/test/resources/integration/queries/underpayment1-recordset.aql
diff --git a/asterix/asterix-app/src/test/resources/integration/updates/load-dataset.aql b/asterix-app/src/test/resources/integration/updates/load-dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/integration/updates/load-dataset.aql
rename to asterix-app/src/test/resources/integration/updates/load-dataset.aql
diff --git a/asterix-app/src/test/resources/logging.properties b/asterix-app/src/test/resources/logging.properties
new file mode 100644
index 0000000..f04eb3de
--- /dev/null
+++ b/asterix-app/src/test/resources/logging.properties
@@ -0,0 +1,67 @@
+############################################################
+#  	Default Logging Configuration File
+#
+# You can use a different file by specifying a filename
+# with the java.util.logging.config.file system property.  
+# For example java -Djava.util.logging.config.file=myfile
+############################################################
+
+############################################################
+#  	Global properties
+############################################################
+
+# "handlers" specifies a comma separated list of log Handler 
+# classes.  These handlers will be installed during VM startup.
+# Note that these classes must be on the system classpath.
+# By default we only configure a ConsoleHandler, which will only
+# show messages at the INFO and above levels.
+
+handlers= java.util.logging.ConsoleHandler
+
+# To also add the FileHandler, use the following line instead.
+
+# handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
+
+# Default global logging level.
+# This specifies which kinds of events are logged across
+# all loggers.  For any given facility this global level
+# can be overriden by a facility specific level
+# Note that the ConsoleHandler also has a separate level
+# setting to limit messages printed to the console.
+
+.level= WARNING
+# .level= INFO
+# .level= FINE
+# .level = FINEST
+
+############################################################
+# Handler specific properties.
+# Describes specific configuration info for Handlers.
+############################################################
+
+# default file output is in user's home directory.
+
+# java.util.logging.FileHandler.pattern = %h/java%u.log
+# java.util.logging.FileHandler.limit = 50000
+# java.util.logging.FileHandler.count = 1
+# java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
+
+# Limit the message that are printed on the console to FINE and above.
+
+java.util.logging.ConsoleHandler.level = FINE
+java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
+
+
+############################################################
+# Facility specific properties.
+# Provides extra control for each logger.
+############################################################
+
+# For example, set the com.xyz.foo logger to only log SEVERE
+# messages:
+
+
+edu.uci.ics.asterix.test.level = INFO
+#edu.uci.ics.asterix.level = FINE
+#edu.uci.ics.hyracks.algebricks.level = FINE
+#edu.uci.ics.hyracks.level = INFO
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries.txt b/asterix-app/src/test/resources/metadata-transactions/check-state-queries.txt
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries.txt
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries.txt
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataset.aql b/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataset.aql
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_datatype.aql b/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_datatype.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_datatype.aql
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_datatype.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataverse.aql b/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataverse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataverse.aql
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_dataverse.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_index.aql b/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_index.aql
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_index.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_node.aql b/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_node.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_node.aql
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_node.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_nodegroup.aql b/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_nodegroup.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_nodegroup.aql
rename to asterix-app/src/test/resources/metadata-transactions/check-state-queries/check_nodegroup.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataset.adm b/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataset.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataset.adm
rename to asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataset.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_datatype.adm b/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_datatype.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_datatype.adm
rename to asterix-app/src/test/resources/metadata-transactions/check-state-results/check_datatype.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataverse.adm b/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataverse.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataverse.adm
rename to asterix-app/src/test/resources/metadata-transactions/check-state-results/check_dataverse.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_index.adm b/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_index.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_index.adm
rename to asterix-app/src/test/resources/metadata-transactions/check-state-results/check_index.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_node.adm b/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_node.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_node.adm
rename to asterix-app/src/test/resources/metadata-transactions/check-state-results/check_node.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_nodegroup.adm b/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_nodegroup.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/check-state-results/check_nodegroup.adm
rename to asterix-app/src/test/resources/metadata-transactions/check-state-results/check_nodegroup.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/init-state-queries.txt b/asterix-app/src/test/resources/metadata-transactions/init-state-queries.txt
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/init-state-queries.txt
rename to asterix-app/src/test/resources/metadata-transactions/init-state-queries.txt
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/init-state-queries/customers_orders.aql b/asterix-app/src/test/resources/metadata-transactions/init-state-queries/customers_orders.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/init-state-queries/customers_orders.aql
rename to asterix-app/src/test/resources/metadata-transactions/init-state-queries/customers_orders.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries.txt b/asterix-app/src/test/resources/metadata-transactions/queries.txt
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries.txt
rename to asterix-app/src/test/resources/metadata-transactions/queries.txt
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataset.aql b/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataset.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataverse.aql b/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataverse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataverse.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_dataverse.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_index.aql b/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_index.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_index.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_nodegroup.aql b/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_nodegroup.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_nodegroup.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_nodegroup.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_type.aql b/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_type.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_type.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/create_duplicate_type.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataset.aql b/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataset.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_datatype.aql b/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_datatype.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_datatype.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_datatype.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataverse.aql b/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataverse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataverse.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_dataverse.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_index.aql b/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_index.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_index.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_nodegroup.aql b/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_nodegroup.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_nodegroup.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/drop_nonexistent_nodegroup.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataset.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataset.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_datatype.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_datatype.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_datatype.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_datatype.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataverse.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataverse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataverse.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_dataverse.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_index.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_index.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_index.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_nodegroup.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_nodegroup.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_nodegroup.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_drop_nodegroup.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataset.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataset.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_datatype.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_datatype.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_datatype.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_datatype.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataverse.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataverse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataverse.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_dataverse.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_index.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_index.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_index.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_nodegroup.aql b/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_nodegroup.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_nodegroup.aql
rename to asterix-app/src/test/resources/metadata-transactions/queries/rollback_new_nodegroup.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta01/meta01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta02/meta02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta03/meta03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta04/meta04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta05/meta05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta06/meta06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta07/meta07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta08/meta08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta09/meta09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta10/meta10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta11/meta11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta12/meta12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta13/meta13.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta14/meta14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta15/meta15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta16/meta16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta17/meta17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta18/meta18.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta19/meta19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_dataset/metadata_dataset.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_datatype/metadata_datatype.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_dataverse/metadata_dataverse.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_index/metadata_index.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_node/metadata_node.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.2.update.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.2.update.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.3.query.aql b/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/basic/metadata_nodegroup/metadata_nodegroup.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset/exception_drop_dataset.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset/exception_drop_dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset/exception_drop_dataset.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataset/exception_drop_dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse/exception_drop_dataverse.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse/exception_drop_dataverse.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse/exception_drop_dataverse.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_dataverse/exception_drop_dataverse.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index/exception_drop_index.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index/exception_drop_index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index/exception_drop_index.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_index/exception_drop_index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup/exception_drop_nodegroup.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup/exception_drop_nodegroup.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup/exception_drop_nodegroup.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_nodegroup/exception_drop_nodegroup.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1/exception_drop_type1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1/exception_drop_type1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1/exception_drop_type1.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type1/exception_drop_type1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2/exception_drop_type2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2/exception_drop_type2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2/exception_drop_type2.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type2/exception_drop_type2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3/exception_drop_type3.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3/exception_drop_type3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3/exception_drop_type3.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/exception_drop_type3/exception_drop_type3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1/issue_239_drop_system_dataset_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1/issue_239_drop_system_dataset_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1/issue_239_drop_system_dataset_1.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_1/issue_239_drop_system_dataset_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2/issue_239_drop_system_dataset_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2/issue_239_drop_system_dataset_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2/issue_239_drop_system_dataset_2.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_2/issue_239_drop_system_dataset_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3/issue_239_drop_system_dataset_3.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3/issue_239_drop_system_dataset_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3/issue_239_drop_system_dataset_3.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_3/issue_239_drop_system_dataset_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4/issue_239_drop_system_dataset_4.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4/issue_239_drop_system_dataset_4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4/issue_239_drop_system_dataset_4.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_4/issue_239_drop_system_dataset_4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5/issue_239_drop_system_dataset_5.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5/issue_239_drop_system_dataset_5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5/issue_239_drop_system_dataset_5.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_5/issue_239_drop_system_dataset_5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6/issue_239_drop_system_dataset_6.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6/issue_239_drop_system_dataset_6.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6/issue_239_drop_system_dataset_6.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_6/issue_239_drop_system_dataset_6.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7/issue_239_drop_system_dataset_7.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7/issue_239_drop_system_dataset_7.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7/issue_239_drop_system_dataset_7.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_7/issue_239_drop_system_dataset_7.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8/issue_239_drop_system_dataset_8.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8/issue_239_drop_system_dataset_8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8/issue_239_drop_system_dataset_8.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_239_drop_system_dataset_8/issue_239_drop_system_dataset_8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1/issue_251_dataset_hint_error_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1/issue_251_dataset_hint_error_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1/issue_251_dataset_hint_error_1.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_1/issue_251_dataset_hint_error_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.2.query.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.2.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.2.query.aql
rename to asterix-app/src/test/resources/metadata/queries/exception/issue_251_dataset_hint_error_2/issue_251_dataset_hint_error_2.2.query.aql
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_dataset_error_1/issue_255_create_dataset_error_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_dataset_error_1/issue_255_create_dataset_error_1.1.ddl.aql
new file mode 100644
index 0000000..132d63e
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_dataset_error_1/issue_255_create_dataset_error_1.1.ddl.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : create a dataset partitioned on non-existent field
+ * Expected Res : Failure
+ * Date         : 14 April 2013
+ * Issue        : 255
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type opentype as open {
+id:int32
+}
+
+create dataset testds(opentype) primary key name;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_dataset_error_2/issue_255_create_dataset_error_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_dataset_error_2/issue_255_create_dataset_error_2.1.ddl.aql
new file mode 100644
index 0000000..e900e6d
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_dataset_error_2/issue_255_create_dataset_error_2.1.ddl.aql
@@ -0,0 +1,21 @@
+/*
+ * Description  : create a dataset partitioned on ARecord type
+ * Expected Res : Failure
+ * Date         : 14 April 2013
+ * Issue        : 255
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type opentype1 as open {
+id:int32
+}
+
+create type opentype2 as open {
+id:int32,
+open-type:opentype1
+}
+
+create dataset testds(opentype2) primary key open-type;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_feed_error/issue_255_create_feed_error.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_feed_error/issue_255_create_feed_error.1.ddl.aql
new file mode 100644
index 0000000..7576da7
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_255_create_feed_error/issue_255_create_feed_error.1.ddl.aql
@@ -0,0 +1,23 @@
+/*
+ * Description  : create a dataset partitioned on non-existent field
+ * Expected Res : Failure
+ * Date         : 14 April 2013
+ * Issue        : 255
+ */
+
+drop dataverse feeds if exists;
+create dataverse feeds;
+use dataverse feeds;
+
+create type TweetType as closed {
+  id: string,
+  username : string,
+  location : string,
+  text : string,
+  timestamp : string
+}      
+
+create feed dataset TweetFeed(TweetType)
+using "edu.uci.ics.asterix.tools.external.data.RateControlledFileSystemBasedAdapterFactory"
+(("output-type-name"="TweetType"),("fs"="localfs"),("path"="nc1://data/twitter/obamatweets.adm"),("format"="adm"),("tuple-interval"="10"))
+primary key name;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_266_create_dataset_error_1/issue_266_create_dataset_error_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_266_create_dataset_error_1/issue_266_create_dataset_error_1.1.ddl.aql
new file mode 100644
index 0000000..717ba21
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_266_create_dataset_error_1/issue_266_create_dataset_error_1.1.ddl.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : create a dataset partitioned on unallowed key type
+ * Expected Res : Failure
+ * Date         : 22 April 2013
+ * Issue        : 266
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type opentype as open {
+loc:point
+}
+
+create dataset testds(opentype) primary key point;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_266_create_dataset_error_2/issue_266_create_dataset_error_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_266_create_dataset_error_2/issue_266_create_dataset_error_2.1.ddl.aql
new file mode 100644
index 0000000..cda7ae9
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_266_create_dataset_error_2/issue_266_create_dataset_error_2.1.ddl.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : create a dataset partitioned on nullable key type
+ * Expected Res : Failure
+ * Date         : 22 April 2013
+ * Issue        : 266
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type opentype as open {
+id:int32?
+}
+
+create dataset testds(opentype) primary key id;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_272_create_index_error_1/issue_272_create_index_error_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_272_create_index_error_1/issue_272_create_index_error_1.1.ddl.aql
new file mode 100644
index 0000000..6ba4d86
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_272_create_index_error_1/issue_272_create_index_error_1.1.ddl.aql
@@ -0,0 +1,13 @@
+/*
+ * Description  : create an index on a non-existent dataset
+ * Expected Res : Failure
+ * Date         : 14 April 2013
+ * Issue        : 272
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+create index loc_index on Foo(name);
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_272_create_index_error_2/issue_272_create_index_error_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_272_create_index_error_2/issue_272_create_index_error_2.1.ddl.aql
new file mode 100644
index 0000000..a1f9771
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_272_create_index_error_2/issue_272_create_index_error_2.1.ddl.aql
@@ -0,0 +1,14 @@
+/*
+ * Description  : create an index on a non-existent dataset
+ * Expected Res : Failure
+ * Date         : 14 April 2013
+ * Issue        : 272
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create index loc_index if not exists on Foo(name);
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_1/issue_384_create_index_error_1.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_1/issue_384_create_index_error_1.1.ddl.aql
new file mode 100644
index 0000000..acc89db
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_1/issue_384_create_index_error_1.1.ddl.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : create a btree index on unallowed key type.
+ * Expected Res : Failure
+ * Date         : 23 April 2013
+ * Issue        : 384
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type opentype as open {
+id:int32,
+loc:point
+}
+
+create dataset testds(opentype) primary key id;
+create index loc_index on testds(loc);
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_2/issue_384_create_index_error_2.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_2/issue_384_create_index_error_2.1.ddl.aql
new file mode 100644
index 0000000..f3ec8b2
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_2/issue_384_create_index_error_2.1.ddl.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : create an rtree index on unallowed key type.
+ * Expected Res : Failure
+ * Date         : 23 April 2013
+ * Issue        : 384
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type opentype as open {
+id:int32,
+age:int32
+}
+
+create dataset testds(opentype) primary key id;
+create index loc_index on testds(age) type rtree;
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_3/issue_384_create_index_error_3.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_3/issue_384_create_index_error_3.1.ddl.aql
new file mode 100644
index 0000000..4d8c488
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_3/issue_384_create_index_error_3.1.ddl.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : create a keyword index on unallowed key type.
+ * Expected Res : Failure
+ * Date         : 23 April 2013
+ * Issue        : 384
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type opentype as open {
+id:int32,
+loc:point
+}
+
+create dataset testds(opentype) primary key id;
+create index loc_index on testds(loc) type keyword;
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_4/issue_384_create_index_error_4.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_4/issue_384_create_index_error_4.1.ddl.aql
new file mode 100644
index 0000000..938f137
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_4/issue_384_create_index_error_4.1.ddl.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : create a fuzzy keyword index on unallowed key type.
+ * Expected Res : Failure
+ * Date         : 23 April 2013
+ * Issue        : 384
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type opentype as open {
+id:int32,
+loc:point
+}
+
+create dataset testds(opentype) primary key id;
+create index loc_index on testds(loc) type fuzzy keyword;
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_5/issue_384_create_index_error_5.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_5/issue_384_create_index_error_5.1.ddl.aql
new file mode 100644
index 0000000..d9baf04
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_5/issue_384_create_index_error_5.1.ddl.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : create an ngram index on unallowed key type.
+ * Expected Res : Failure
+ * Date         : 23 April 2013
+ * Issue        : 384
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type opentype as open {
+id:int32,
+loc:point
+}
+
+create dataset testds(opentype) primary key id;
+create index loc_index on testds(loc) type ngram(2);
+
diff --git a/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_6/issue_384_create_index_error_6.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_6/issue_384_create_index_error_6.1.ddl.aql
new file mode 100644
index 0000000..dee287d
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/queries/exception/issue_384_create_index_error_6/issue_384_create_index_error_6.1.ddl.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : create a fuzzy ngram index on unallowed key type.
+ * Expected Res : Failure
+ * Date         : 23 April 2013
+ * Issue        : 384
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create type opentype as open {
+id:int32,
+loc:point
+}
+
+create dataset testds(opentype) primary key id;
+create index loc_index on testds(loc) type fuzzy ngram(2);
+
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success.aql b/asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success/failure_previous_success.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success/failure_previous_success.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success/failure_previous_success.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/failure_previous_success/failure_previous_success.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution.aql b/asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution/failure_subsequent_no_execution.1.ddl.aql b/asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution/failure_subsequent_no_execution.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution/failure_subsequent_no_execution.1.ddl.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/failure_subsequent_no_execution/failure_subsequent_no_execution.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success.aql b/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success/verify_failure_previous_success.3.query.aql b/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success/verify_failure_previous_success.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success/verify_failure_previous_success.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_previous_success/verify_failure_previous_success.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution.aql b/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.3.query.aql b/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.3.query.aql
rename to asterix-app/src/test/resources/metadata/queries/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_1/issue_251_dataset_hint_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_2/issue_251_dataset_hint_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_3/issue_251_dataset_hint_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm b/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/issue_251_dataset_hint_4/issue_251_dataset_hint_4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta01.adm b/asterix-app/src/test/resources/metadata/results/basic/meta01.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta01.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta01.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta01/meta01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta02.adm b/asterix-app/src/test/resources/metadata/results/basic/meta02.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta02.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta02.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta02/meta02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta03.adm b/asterix-app/src/test/resources/metadata/results/basic/meta03.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta03.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta03.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta03/meta03.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta03/meta03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta03/meta03.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta03/meta03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta04.adm b/asterix-app/src/test/resources/metadata/results/basic/meta04.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta04.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta04.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta04/meta04.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta04/meta04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta04/meta04.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta04/meta04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta05.adm b/asterix-app/src/test/resources/metadata/results/basic/meta05.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta05.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta05.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta05/meta05.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta05/meta05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta05/meta05.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta05/meta05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta06.adm b/asterix-app/src/test/resources/metadata/results/basic/meta06.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta06.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta06.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta06/meta06.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta06/meta06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta06/meta06.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta06/meta06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta07.adm b/asterix-app/src/test/resources/metadata/results/basic/meta07.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta07.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta07.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta07/meta07.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta07/meta07.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta07/meta07.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta07/meta07.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta08.adm b/asterix-app/src/test/resources/metadata/results/basic/meta08.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta08.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta08.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta08/meta08.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta09.adm b/asterix-app/src/test/resources/metadata/results/basic/meta09.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta09.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta09.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta09/meta09.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta10.adm b/asterix-app/src/test/resources/metadata/results/basic/meta10.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta10.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta10.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta10/meta10.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta10/meta10.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta10/meta10.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta10/meta10.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta11.adm b/asterix-app/src/test/resources/metadata/results/basic/meta11.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta11.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta11.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta11/meta11.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta11/meta11.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta11/meta11.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta11/meta11.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta12.adm b/asterix-app/src/test/resources/metadata/results/basic/meta12.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta12.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta12.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta12/meta12.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta12/meta12.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta12/meta12.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta12/meta12.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta13.adm b/asterix-app/src/test/resources/metadata/results/basic/meta13.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta13.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta13.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta13/meta13.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta13/meta13.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta13/meta13.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta13/meta13.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta14.adm b/asterix-app/src/test/resources/metadata/results/basic/meta14.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta14.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta14.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta14/meta14.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta14/meta14.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta14/meta14.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta14/meta14.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta15.adm b/asterix-app/src/test/resources/metadata/results/basic/meta15.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta15.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta15.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta15/meta15.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta15/meta15.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta15/meta15.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta15/meta15.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta16.adm b/asterix-app/src/test/resources/metadata/results/basic/meta16.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta16.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta16.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta16/meta16.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta16/meta16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta16/meta16.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta16/meta16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta17.adm b/asterix-app/src/test/resources/metadata/results/basic/meta17.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta17.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta17.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta17/meta17.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta17/meta17.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta17/meta17.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta17/meta17.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta18.adm b/asterix-app/src/test/resources/metadata/results/basic/meta18.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta18.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta18.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta18/meta18.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta18/meta18.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta18/meta18.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta18/meta18.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta19.adm b/asterix-app/src/test/resources/metadata/results/basic/meta19.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta19.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta19.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta19/meta19.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta19/meta19.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta19/meta19.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta19/meta19.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta20.adm b/asterix-app/src/test/resources/metadata/results/basic/meta20.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta20.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta20.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta20/meta20.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta20/meta20.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta20/meta20.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta20/meta20.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta21.adm b/asterix-app/src/test/resources/metadata/results/basic/meta21.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta21.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta21.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/meta21/meta21.1.adm b/asterix-app/src/test/resources/metadata/results/basic/meta21/meta21.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/meta21/meta21.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/meta21/meta21.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataset.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_dataset.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataset.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_dataset.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataset/metadata_dataset.1.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_dataset/metadata_dataset.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataset/metadata_dataset.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_dataset/metadata_dataset.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_datatype.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_datatype/metadata_datatype.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_dataverse/metadata_dataverse.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_index.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_index.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_index.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_index.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_index/metadata_index.1.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_index/metadata_index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_index/metadata_index.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_index/metadata_index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_node.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_node.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_node.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_node.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_node/metadata_node.1.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_node/metadata_node.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_node/metadata_node.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_node/metadata_node.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm b/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
rename to asterix-app/src/test/resources/metadata/results/basic/metadata_nodegroup/metadata_nodegroup.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_dataset.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_dataset.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_dataset.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_dataset.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_datatype.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_datatype.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_datatype.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_datatype.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_dataverse.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_dataverse.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_dataverse.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_dataverse.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_index.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_index.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_index.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_index.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_nodegroup.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_nodegroup.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_nodegroup.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_nodegroup.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q10.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_q10.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q10.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_q10.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q2.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_q2.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q2.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_q2.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q3.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_q3.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q3.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_q3.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q4.adm b/asterix-app/src/test/resources/metadata/results/custord/custord_q4.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/custord/custord_q4.adm
rename to asterix-app/src/test/resources/metadata/results/custord/custord_q4.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success.adm b/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success.adm
rename to asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm b/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm
rename to asterix-app/src/test/resources/metadata/results/transaction/verify_failure_previous_success/verify_failure_previous_success.1.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution.adm b/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution.adm
rename to asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution.adm
diff --git a/asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.1.adm b/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.1.adm
rename to asterix-app/src/test/resources/metadata/results/transaction/verify_failure_subsequent_no_execution/verify_failure_subsequent_no_execution.1.adm
diff --git a/asterix-app/src/test/resources/metadata/testsuite.xml b/asterix-app/src/test/resources/metadata/testsuite.xml
new file mode 100644
index 0000000..47bcafa
--- /dev/null
+++ b/asterix-app/src/test/resources/metadata/testsuite.xml
@@ -0,0 +1,314 @@
+<test-suite xmlns="urn:xml.testframework.asterix.ics.uci.edu" ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql">
+  <test-group name="basic">
+    <test-case FilePath="basic">
+      <compilation-unit name="meta01">
+        <output-dir compare="Text">meta01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta02">
+        <output-dir compare="Text">meta02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta03">
+        <output-dir compare="Text">meta03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta04">
+        <output-dir compare="Text">meta04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta05">
+        <output-dir compare="Text">meta05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta06">
+        <output-dir compare="Text">meta06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta07">
+        <output-dir compare="Text">meta07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta08">
+        <output-dir compare="Text">meta08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta09">
+        <output-dir compare="Text">meta09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta10">
+        <output-dir compare="Text">meta10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta11">
+        <output-dir compare="Text">meta11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta12">
+        <output-dir compare="Text">meta12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta13">
+        <output-dir compare="Text">meta13</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta14">
+        <output-dir compare="Text">meta14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta15">
+        <output-dir compare="Text">meta15</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta16">
+        <output-dir compare="Text">meta16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta17">
+        <output-dir compare="Text">meta17</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta18">
+        <output-dir compare="Text">meta18</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta19">
+        <output-dir compare="Text">meta19</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta20">
+        <output-dir compare="Text">meta20</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="meta21">
+        <output-dir compare="Text">meta21</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="metadata_dataset">
+        <output-dir compare="Text">metadata_dataset</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="metadata_dataverse">
+        <output-dir compare="Text">metadata_dataverse</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="metadata_datatype">
+        <output-dir compare="Text">metadata_datatype</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="metadata_index">
+        <output-dir compare="Text">metadata_index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="metadata_node">
+        <output-dir compare="Text">metadata_node</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="metadata_nodegroup">
+        <output-dir compare="Text">metadata_nodegroup</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="issue_251_dataset_hint_2">
+        <output-dir compare="Text">issue_251_dataset_hint_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="issue_251_dataset_hint_3">
+        <output-dir compare="Text">issue_251_dataset_hint_3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="basic">
+      <compilation-unit name="issue_251_dataset_hint_4">
+        <output-dir compare="Text">issue_251_dataset_hint_4</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="exception">
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_2">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_3">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_4">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_5">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_6">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_7">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_239_drop_system_dataset_8">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_251_dataset_hint_error_1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_251_dataset_hint_error_2">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_272_create_index_error_1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_272_create_index_error_2">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_255_create_dataset_error_1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_255_create_dataset_error_2">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_255_create_feed_error">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_266_create_dataset_error_1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_266_create_dataset_error_2">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_384_create_index_error_1">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_384_create_index_error_2">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_384_create_index_error_3">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_384_create_index_error_4">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_384_create_index_error_5">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="exception">
+      <compilation-unit name="issue_384_create_index_error_6">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="transaction">
+    <test-case FilePath="transaction">
+      <compilation-unit name="failure_previous_success">
+        <output-dir compare="Text">failure_previous_success</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+      <compilation-unit name="verify_failure_previous_success">
+        <output-dir compare="Text">verify_failure_previous_success</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="transaction">
+      <compilation-unit name="failure_subsequent_no_execution">
+        <output-dir compare="Text">failure_subsequent_no_execution</output-dir>
+        <expected-error>MetadataException</expected-error>
+      </compilation-unit>
+      <compilation-unit name="verify_failure_subsequent_no_execution">
+        <output-dir compare="Text">verify_failure_subsequent_no_execution</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+</test-suite>
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/misc/split01.aql b/asterix-app/src/test/resources/misc/split01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/misc/split01.aql
rename to asterix-app/src/test/resources/misc/split01.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/all-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/all-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/all-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/all-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/all-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/all-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/all-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/all-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/all-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/all-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/all-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/all-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/cust-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/cust-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/cust-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/cust-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-q1.aql b/asterix-app/src/test/resources/nontagged/custord/local/cust-q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-q1.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/cust-q1.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/cust-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/cust-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/cust-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/emp-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/emp-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/emp-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/emp-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-q1.aql b/asterix-app/src/test/resources/nontagged/custord/local/emp-q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-q1.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/emp-q1.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/emp-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/emp-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/emp-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/join-01.aql b/asterix-app/src/test/resources/nontagged/custord/local/join-01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/join-01.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/join-01.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/join-02.aql b/asterix-app/src/test/resources/nontagged/custord/local/join-02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/join-02.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/join-02.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/join-03.aql b/asterix-app/src/test/resources/nontagged/custord/local/join-03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/join-03.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/join-03.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/numeric-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/numeric-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/numeric-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/numeric-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/numeric-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/numeric-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/numeric-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/numeric-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/numeric-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/numeric-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/numeric-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/numeric-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/ord-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/ord-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/ord-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/ord-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-q1.aql b/asterix-app/src/test/resources/nontagged/custord/local/ord-q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-q1.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/ord-q1.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/ord-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/ord-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/ord-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/spatial-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/spatial-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/spatial-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/spatial-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/spatial-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/spatial-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/spatial-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/spatial-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/spatial-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/spatial-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/spatial-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/spatial-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/temp-drop.aql b/asterix-app/src/test/resources/nontagged/custord/local/temp-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/temp-drop.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/temp-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/temp-load.aql b/asterix-app/src/test/resources/nontagged/custord/local/temp-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/temp-load.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/temp-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/custord/local/temp-scan.aql b/asterix-app/src/test/resources/nontagged/custord/local/temp-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/custord/local/temp-scan.aql
rename to asterix-app/src/test/resources/nontagged/custord/local/temp-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/alltables-loadAsOpen.aql b/asterix-app/src/test/resources/nontagged/tpch/local/alltables-loadAsOpen.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/alltables-loadAsOpen.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/alltables-loadAsOpen.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/alltablesAsopen-scan.aql b/asterix-app/src/test/resources/nontagged/tpch/local/alltablesAsopen-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/alltablesAsopen-scan.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/alltablesAsopen-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-drop.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-drop.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-load.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-load.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q1.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q1.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q1.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q3.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q3.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q3.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q5.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q5.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q5.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q5.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q9.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q9.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q9.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-q9.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-scan.aql b/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-scan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/closedtables-scan.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/closedtables-scan.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-drop.aql b/asterix-app/src/test/resources/nontagged/tpch/local/opentables-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-drop.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/opentables-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-load.aql b/asterix-app/src/test/resources/nontagged/tpch/local/opentables-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-load.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/opentables-load.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q1.aql b/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q1.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/opentables-q1.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q3.aql b/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q3.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/opentables-q3.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q5.aql b/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q5.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q5.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/opentables-q5.aql
diff --git a/asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q9.aql b/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q9.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/nontagged/tpch/local/opentables-q9.aql
rename to asterix-app/src/test/resources/nontagged/tpch/local/opentables-q9.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/aggreg-test01.aql b/asterix-app/src/test/resources/old-optimizerts/queries/aggreg-test01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/aggreg-test01.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/aggreg-test01.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/j-cust-subplan.aql b/asterix-app/src/test/resources/old-optimizerts/queries/j-cust-subplan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/j-cust-subplan.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/j-cust-subplan.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/redundant-orderby.aql b/asterix-app/src/test/resources/old-optimizerts/queries/redundant-orderby.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/redundant-orderby.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/redundant-orderby.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01-limit01.aql b/asterix-app/src/test/resources/old-optimizerts/queries/spj01-limit01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01-limit01.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/spj01-limit01.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01-recordset.aql b/asterix-app/src/test/resources/old-optimizerts/queries/spj01-recordset.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01-recordset.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/spj01-recordset.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01-somesat.aql b/asterix-app/src/test/resources/old-optimizerts/queries/spj01-somesat.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01-somesat.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/spj01-somesat.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01.aql b/asterix-app/src/test/resources/old-optimizerts/queries/spj01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/queries/spj01.aql
rename to asterix-app/src/test/resources/old-optimizerts/queries/spj01.aql
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/aggreg-test01.plan b/asterix-app/src/test/resources/old-optimizerts/results/aggreg-test01.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/aggreg-test01.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/aggreg-test01.plan
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/j-cust-subplan.plan b/asterix-app/src/test/resources/old-optimizerts/results/j-cust-subplan.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/j-cust-subplan.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/j-cust-subplan.plan
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/redundant-orderby.plan b/asterix-app/src/test/resources/old-optimizerts/results/redundant-orderby.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/redundant-orderby.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/redundant-orderby.plan
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01-limit01.plan b/asterix-app/src/test/resources/old-optimizerts/results/spj01-limit01.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01-limit01.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/spj01-limit01.plan
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01-recordset.plan b/asterix-app/src/test/resources/old-optimizerts/results/spj01-recordset.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01-recordset.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/spj01-recordset.plan
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01-somesat.plan b/asterix-app/src/test/resources/old-optimizerts/results/spj01-somesat.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01-somesat.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/spj01-somesat.plan
diff --git a/asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01.plan b/asterix-app/src/test/resources/old-optimizerts/results/spj01.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/old-optimizerts/results/spj01.plan
rename to asterix-app/src/test/resources/old-optimizerts/results/spj01.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/ignore.txt b/asterix-app/src/test/resources/optimizerts/ignore.txt
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/ignore.txt
rename to asterix-app/src/test/resources/optimizerts/ignore.txt
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/only.txt b/asterix-app/src/test/resources/optimizerts/only.txt
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/only.txt
rename to asterix-app/src/test/resources/optimizerts/only.txt
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-multipred.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-multipred.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-multipred.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-multipred.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join-neg_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_03.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_04.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_05.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_05.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_05.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-equi-join_05.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-ge-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-gt-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-le-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/primary-lt-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multiindex.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multiindex.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multiindex.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multiindex.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multipred.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multipred.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multipred.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join-multipred.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_03.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index-join/secondary-equi-join_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-01.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-02.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-03.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-04.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-05.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-05.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-05.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-05.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-06.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-06.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-06.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-06.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-07.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-07.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-07.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-07.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-08.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-08.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-08.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-08.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-09.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-09.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-09.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-09.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-10.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-10.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-10.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-10.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-11.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-11.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-11.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-11.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-12.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-12.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-12.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-12.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-13.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-13.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-13.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-13.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-14.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-14.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-14.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-14.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-15.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-15.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-15.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-15.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-16.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-16.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-16.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-16.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-17.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-17.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-17.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-17.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-18.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-18.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-18.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-18.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-19.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-19.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-19.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-19.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-20.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-20.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-20.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-20.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-21.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-21.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-21.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-21.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-22.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-22.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-22.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-22.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-23.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-23.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-23.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-23.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-24.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-24.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-24.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-24.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-25.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-25.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-25.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-25.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-26.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-26.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-26.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-26.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-27.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-27.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-27.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-27.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-28.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-28.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-28.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-28.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-29.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-29.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-29.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-29.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-30.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-30.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-30.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-primary-30.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-31.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-31.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-31.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-31.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-32.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-32.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-32.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-32.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-33.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-33.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-33.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-33.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-34.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-34.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-34.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-34.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-35.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-35.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-35.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-35.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-36.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-36.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-36.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-36.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-37.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-37.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-37.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-37.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-38.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-38.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-38.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-38.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-39.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-39.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-39.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-39.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-40.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-40.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-40.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-40.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-41.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-41.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-41.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-41.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-42.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-42.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-42.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-42.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-43.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-43.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-43.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-43.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-44.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-44.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-44.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-44.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-45.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-45.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-45.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-45.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-46.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-46.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-46.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-46.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-47.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-47.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-47.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-47.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-48.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-48.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-48.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-48.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-49.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-49.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-49.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-49.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-50.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-50.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-50.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-50.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-51.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-51.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-51.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-51.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-52.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-52.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-52.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-52.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-53.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-53.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-53.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-53.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-54.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-54.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-54.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-54.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-55.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-55.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-55.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-55.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-56.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-56.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-56.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-56.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-57.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-57.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-57.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-57.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-58.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-58.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-58.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-58.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-59.aql b/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-59.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-59.aql
rename to asterix-app/src/test/resources/optimizerts/queries/btree-index/btree-secondary-59.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-complex.aql b/asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-complex.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-complex.aql
rename to asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-complex.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-simple.aql b/asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-simple.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-simple.aql
rename to asterix-app/src/test/resources/optimizerts/queries/consolidate-selects-simple.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/const-folding.aql b/asterix-app/src/test/resources/optimizerts/queries/const-folding.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/const-folding.aql
rename to asterix-app/src/test/resources/optimizerts/queries/const-folding.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/count-tweets.aql b/asterix-app/src/test/resources/optimizerts/queries/count-tweets.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/count-tweets.aql
rename to asterix-app/src/test/resources/optimizerts/queries/count-tweets.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/cust_group_no_agg.aql b/asterix-app/src/test/resources/optimizerts/queries/cust_group_no_agg.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/cust_group_no_agg.aql
rename to asterix-app/src/test/resources/optimizerts/queries/cust_group_no_agg.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/denorm-cust-order.aql b/asterix-app/src/test/resources/optimizerts/queries/denorm-cust-order.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/denorm-cust-order.aql
rename to asterix-app/src/test/resources/optimizerts/queries/denorm-cust-order.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/distinct_aggregate.aql b/asterix-app/src/test/resources/optimizerts/queries/distinct_aggregate.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/distinct_aggregate.aql
rename to asterix-app/src/test/resources/optimizerts/queries/distinct_aggregate.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/fj-dblp-csx.aql b/asterix-app/src/test/resources/optimizerts/queries/fj-dblp-csx.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/fj-dblp-csx.aql
rename to asterix-app/src/test/resources/optimizerts/queries/fj-dblp-csx.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/fj-phase1.aql b/asterix-app/src/test/resources/optimizerts/queries/fj-phase1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/fj-phase1.aql
rename to asterix-app/src/test/resources/optimizerts/queries/fj-phase1.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/fj-phase2-with-hints.aql b/asterix-app/src/test/resources/optimizerts/queries/fj-phase2-with-hints.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/fj-phase2-with-hints.aql
rename to asterix-app/src/test/resources/optimizerts/queries/fj-phase2-with-hints.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inline-funs.aql b/asterix-app/src/test/resources/optimizerts/queries/inline-funs.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inline-funs.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inline-funs.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inlined_q18_large_volume_customer.aql b/asterix-app/src/test/resources/optimizerts/queries/inlined_q18_large_volume_customer.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inlined_q18_large_volume_customer.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inlined_q18_large_volume_customer.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/introhashpartitionmerge.aql b/asterix-app/src/test/resources/optimizerts/queries/introhashpartitionmerge.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/introhashpartitionmerge.aql
rename to asterix-app/src/test/resources/optimizerts/queries/introhashpartitionmerge.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-contains.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard-check.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ngram-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard-check.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/olist-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard-check.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/ulist-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-contains.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-contains.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-contains.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-contains.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard-check.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/word-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-edit-distance-check-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-multi-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-multi-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-multi-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ngram-jaccard-check-multi-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let-panic.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let-panic.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let-panic.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let-panic.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-edit-distance-check-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-jaccard-check-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-jaccard-check-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-jaccard-check-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/olist-jaccard-check-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ulist-jaccard-check-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ulist-jaccard-check-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ulist-jaccard-check-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/ulist-jaccard-check-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-multi-let.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-multi-let.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-multi-let.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-complex/word-jaccard-check-multi-let.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ngram-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard-inline.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard-inline.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard-inline.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard-inline.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/olist-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/ulist-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard-inline.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard-inline.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard-inline.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard-inline.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join-noeqjoin/word-jaccard.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-edit-distance_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-edit-distance_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-fuzzyeq-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ngram-jaccard_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-edit-distance_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-edit-distance_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-fuzzyeq-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/olist-jaccard_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-fuzzyeq-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/ulist-jaccard_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-fuzzyeq-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_01.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_02.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_03.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_04.aql b/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/inverted-index-join/word-jaccard_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/join-super-key_01.aql b/asterix-app/src/test/resources/optimizerts/queries/join-super-key_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/join-super-key_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/join-super-key_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/join-super-key_02.aql b/asterix-app/src/test/resources/optimizerts/queries/join-super-key_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/join-super-key_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/join-super-key_02.aql
diff --git a/asterix-app/src/test/resources/optimizerts/queries/limit-issue353.aql b/asterix-app/src/test/resources/optimizerts/queries/limit-issue353.aql
new file mode 100644
index 0000000..f1b2678
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/queries/limit-issue353.aql
@@ -0,0 +1,44 @@
+/*
+ * Description  : This test case is to verify the fix for issue353
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=353
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+drop dataverse tpch if exists;
+create dataverse tpch;
+
+use dataverse tpch;
+
+create type LineItemType as closed {
+  l_orderkey: int32, 
+  l_partkey: int32, 
+  l_suppkey: int32, 
+  l_linenumber: int32, 
+  l_quantity: double, 
+  l_extendedprice: double,
+  l_discount: double, 
+  l_tax: double,
+  l_returnflag: string, 
+  l_linestatus: string, 
+  l_shipdate: string,
+  l_commitdate: string, 
+  l_receiptdate: string, 
+  l_shipinstruct: string, 
+  l_shipmode: string, 
+  l_comment: string
+}
+
+create dataset LineItem(LineItemType)
+  primary key l_orderkey, l_linenumber;
+  
+write output to nc1:"/tmp/push_limit.adm";
+
+for $l in dataset('LineItem')
+limit 2
+return {
+"l_returnflag": $l.l_returnflag,
+"l_linestatus": $l.l_linestatus,
+"l_shipmode": $l.l_shipmode
+}
+
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/loj-super-key_01.aql b/asterix-app/src/test/resources/optimizerts/queries/loj-super-key_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/loj-super-key_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/loj-super-key_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/loj-super-key_02.aql b/asterix-app/src/test/resources/optimizerts/queries/loj-super-key_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/loj-super-key_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/loj-super-key_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/nested_loj2.aql b/asterix-app/src/test/resources/optimizerts/queries/nested_loj2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/nested_loj2.aql
rename to asterix-app/src/test/resources/optimizerts/queries/nested_loj2.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/nested_loj3.aql b/asterix-app/src/test/resources/optimizerts/queries/nested_loj3.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/nested_loj3.aql
rename to asterix-app/src/test/resources/optimizerts/queries/nested_loj3.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/noncollocated.aql b/asterix-app/src/test/resources/optimizerts/queries/noncollocated.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/noncollocated.aql
rename to asterix-app/src/test/resources/optimizerts/queries/noncollocated.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orderby-desc-using-gby.aql b/asterix-app/src/test/resources/optimizerts/queries/orderby-desc-using-gby.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orderby-desc-using-gby.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orderby-desc-using-gby.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-aggreg.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-aggreg.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-aggreg.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-aggreg.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-composite-index-search.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_01.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_02.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive-open_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_01.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_02.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-index-search-conjunctive_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-index-search-open.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql b/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
rename to asterix-app/src/test/resources/optimizerts/queries/orders-index-search.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/prim-idx-search-open.aql b/asterix-app/src/test/resources/optimizerts/queries/prim-idx-search-open.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/prim-idx-search-open.aql
rename to asterix-app/src/test/resources/optimizerts/queries/prim-idx-search-open.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/prim-idx-search.aql b/asterix-app/src/test/resources/optimizerts/queries/prim-idx-search.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/prim-idx-search.aql
rename to asterix-app/src/test/resources/optimizerts/queries/prim-idx-search.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/pull_select_above_eq_join.aql b/asterix-app/src/test/resources/optimizerts/queries/pull_select_above_eq_join.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/pull_select_above_eq_join.aql
rename to asterix-app/src/test/resources/optimizerts/queries/pull_select_above_eq_join.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/push-project-through-group.aql b/asterix-app/src/test/resources/optimizerts/queries/push-project-through-group.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/push-project-through-group.aql
rename to asterix-app/src/test/resources/optimizerts/queries/push-project-through-group.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/push_limit.aql b/asterix-app/src/test/resources/optimizerts/queries/push_limit.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/push_limit.aql
rename to asterix-app/src/test/resources/optimizerts/queries/push_limit.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/q1.aql b/asterix-app/src/test/resources/optimizerts/queries/q1.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/q1.aql
rename to asterix-app/src/test/resources/optimizerts/queries/q1.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/q1_pricing_summary_report_nt.aql b/asterix-app/src/test/resources/optimizerts/queries/q1_pricing_summary_report_nt.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/q1_pricing_summary_report_nt.aql
rename to asterix-app/src/test/resources/optimizerts/queries/q1_pricing_summary_report_nt.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/q2.aql b/asterix-app/src/test/resources/optimizerts/queries/q2.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/q2.aql
rename to asterix-app/src/test/resources/optimizerts/queries/q2.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/q3_shipping_priority.aql b/asterix-app/src/test/resources/optimizerts/queries/q3_shipping_priority.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/q3_shipping_priority.aql
rename to asterix-app/src/test/resources/optimizerts/queries/q3_shipping_priority.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/q5_local_supplier_volume.aql b/asterix-app/src/test/resources/optimizerts/queries/q5_local_supplier_volume.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/q5_local_supplier_volume.aql
rename to asterix-app/src/test/resources/optimizerts/queries/q5_local_supplier_volume.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/record_access.aql b/asterix-app/src/test/resources/optimizerts/queries/record_access.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/record_access.aql
rename to asterix-app/src/test/resources/optimizerts/queries/record_access.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_01.aql b/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_02.aql b/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_03.aql b/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/rtree-index-join/spatial-intersect-point_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql b/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
rename to asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index-open.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql b/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
rename to asterix-app/src/test/resources/optimizerts/queries/rtree-secondary-index.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/scan-delete-all.aql b/asterix-app/src/test/resources/optimizerts/queries/scan-delete-all.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/scan-delete-all.aql
rename to asterix-app/src/test/resources/optimizerts/queries/scan-delete-all.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/scan-delete-rtree-secondary-index.aql b/asterix-app/src/test/resources/optimizerts/queries/scan-delete-rtree-secondary-index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/scan-delete-rtree-secondary-index.aql
rename to asterix-app/src/test/resources/optimizerts/queries/scan-delete-rtree-secondary-index.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/scan-delete.aql b/asterix-app/src/test/resources/optimizerts/queries/scan-delete.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/scan-delete.aql
rename to asterix-app/src/test/resources/optimizerts/queries/scan-delete.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/scan-insert-secondary-index.aql b/asterix-app/src/test/resources/optimizerts/queries/scan-insert-secondary-index.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/scan-insert-secondary-index.aql
rename to asterix-app/src/test/resources/optimizerts/queries/scan-insert-secondary-index.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/scan-insert.aql b/asterix-app/src/test/resources/optimizerts/queries/scan-insert.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/scan-insert.aql
rename to asterix-app/src/test/resources/optimizerts/queries/scan-insert.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_05.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_05.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_05.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_05.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_06.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_06.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_06.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_06.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_07.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_07.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_07.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_07.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_08.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_08.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_08.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-let-to-edit-distance-check_08.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_05.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_05.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_05.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_05.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_06.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_06.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_06.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_06.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_07.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_07.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_07.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_07.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_08.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_08.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_08.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/edit-distance-to-edit-distance-check_08.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-edit-distance-check.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-edit-distance-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-edit-distance-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-edit-distance-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-jaccard-check.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-jaccard-check.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-jaccard-check.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/fuzzyeq-to-jaccard-check.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_05.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_05.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_05.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_05.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_06.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_06.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_06.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_06.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_07.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_07.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_07.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_07.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_08.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_08.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_08.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-let-to-jaccard-check_08.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_01.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_02.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_03.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_03.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_03.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_03.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_04.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_04.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_04.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_04.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_05.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_05.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_05.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_05.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_06.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_06.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_06.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_06.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_07.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_07.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_07.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_07.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_08.aql b/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_08.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_08.aql
rename to asterix-app/src/test/resources/optimizerts/queries/similarity/jaccard-to-jaccard-check_08.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/sort-cust.aql b/asterix-app/src/test/resources/optimizerts/queries/sort-cust.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/sort-cust.aql
rename to asterix-app/src/test/resources/optimizerts/queries/sort-cust.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_01.aql b/asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_01.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_01.aql
rename to asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_01.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_02.aql b/asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_02.aql
rename to asterix-app/src/test/resources/optimizerts/queries/unnest-to-join_02.aql
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/queries/unnest_list_in_subplan.aql b/asterix-app/src/test/resources/optimizerts/queries/unnest_list_in_subplan.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/queries/unnest_list_in_subplan.aql
rename to asterix-app/src/test/resources/optimizerts/queries/unnest_list_in_subplan.aql
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-multipred.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-multipred.plan
new file mode 100644
index 0000000..e87dd88
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-multipred.plan
@@ -0,0 +1,18 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$15(ASC)]  |PARTITIONED|
+                      -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                        -- ASSIGN  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_01.plan
new file mode 100644
index 0000000..8315f2b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_01.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- HYBRID_HASH_JOIN [$$7][$$10]  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+          -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_02.plan
new file mode 100644
index 0000000..6269a2b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_02.plan
@@ -0,0 +1,18 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- HYBRID_HASH_JOIN [$$9][$$8]  |PARTITIONED|
+          -- HASH_PARTITION_EXCHANGE [$$9]  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_01.plan
new file mode 100644
index 0000000..c8fd4cb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_01.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- DATASOURCE_SCAN  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_02.plan
new file mode 100644
index 0000000..be25081
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_02.plan
@@ -0,0 +1,14 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$9]  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- DATASOURCE_SCAN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_03.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_03.plan
new file mode 100644
index 0000000..f847790
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_03.plan
@@ -0,0 +1,16 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$11]  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
new file mode 100644
index 0000000..8e1be33
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
@@ -0,0 +1,16 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_05.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_05.plan
new file mode 100644
index 0000000..d3134f2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_05.plan
@@ -0,0 +1,11 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_01.plan
new file mode 100644
index 0000000..66ec32d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_01.plan
@@ -0,0 +1,13 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_02.plan
new file mode 100644
index 0000000..28645d5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_02.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_01.plan
new file mode 100644
index 0000000..66ec32d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_01.plan
@@ -0,0 +1,13 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_02.plan
new file mode 100644
index 0000000..28645d5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_02.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_01.plan
new file mode 100644
index 0000000..66ec32d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_01.plan
@@ -0,0 +1,13 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_02.plan
new file mode 100644
index 0000000..28645d5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_02.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_01.plan
new file mode 100644
index 0000000..66ec32d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_01.plan
@@ -0,0 +1,13 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_02.plan
new file mode 100644
index 0000000..28645d5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_02.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- BROADCAST_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
new file mode 100644
index 0000000..a22212e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$29(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- BROADCAST_EXCHANGE  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- BTREE_SEARCH  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multipred.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multipred.plan
new file mode 100644
index 0000000..0438a5d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multipred.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_01.plan
new file mode 100644
index 0000000..77aba01
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_01.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
new file mode 100644
index 0000000..77aba01
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
new file mode 100644
index 0000000..77aba01
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-01.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-01.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-01.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-02.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-02.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-02.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-03.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-03.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-03.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-04.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-04.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-04.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-05.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-05.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-05.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-06.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-06.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-06.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-07.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-07.plan
new file mode 100644
index 0000000..3d9e18f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-07.plan
@@ -0,0 +1,9 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- DATASOURCE_SCAN  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-08.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-08.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-08.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-09.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-09.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-09.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-10.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-10.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-10.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-11.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-11.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-11.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-12.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-12.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-12.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-13.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-13.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-13.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-14.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-14.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-14.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-15.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-15.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-15.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-16.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-16.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-16.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-17.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-17.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-17.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-18.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-18.plan
new file mode 100644
index 0000000..011cf66
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-18.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-19.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-19.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-19.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-20.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-20.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-20.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-21.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-21.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-21.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-22.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-22.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-22.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-23.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-23.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-23.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-24.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-24.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-24.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-25.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-25.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-25.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-26.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-26.plan
new file mode 100644
index 0000000..6f13ebb
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-26.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- BTREE_SEARCH  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-27.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-27.plan
new file mode 100644
index 0000000..632a813
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-27.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-28.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-28.plan
new file mode 100644
index 0000000..d85d357
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-28.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-29.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-29.plan
new file mode 100644
index 0000000..d85d357
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-29.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-30.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-30.plan
new file mode 100644
index 0000000..d85d357
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-30.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-31.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-31.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-31.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-32.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-32.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-32.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-37.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-37.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-37.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-38.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-38.plan
new file mode 100644
index 0000000..ef8a923
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-38.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-39.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-39.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-39.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-41.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-41.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-41.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
new file mode 100644
index 0000000..4b4412e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
new file mode 100644
index 0000000..4b4412e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
new file mode 100644
index 0000000..4b4412e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-50.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-50.plan
new file mode 100644
index 0000000..4b4412e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-50.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
new file mode 100644
index 0000000..4b4412e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
new file mode 100644
index 0000000..001e10b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
new file mode 100644
index 0000000..001e10b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
new file mode 100644
index 0000000..001e10b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
new file mode 100644
index 0000000..001e10b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
new file mode 100644
index 0000000..e12cdd8
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$12(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
new file mode 100644
index 0000000..e12cdd8
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$12(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
new file mode 100644
index 0000000..d7667d6
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
new file mode 100644
index 0000000..4b4412e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-complex.plan b/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-complex.plan
new file mode 100644
index 0000000..10b5853
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-complex.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-simple.plan b/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-simple.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-simple.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/const-folding.plan b/asterix-app/src/test/resources/optimizerts/results/const-folding.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/const-folding.plan
rename to asterix-app/src/test/resources/optimizerts/results/const-folding.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/count-tweets.plan b/asterix-app/src/test/resources/optimizerts/results/count-tweets.plan
new file mode 100644
index 0000000..600795f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/count-tweets.plan
@@ -0,0 +1,27 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$14]  |PARTITIONED|
+                  {
+                    -- AGGREGATE  |LOCAL|
+                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$14(ASC)] HASH:[$$14]  |PARTITIONED|
+              -- PRE_CLUSTERED_GROUP_BY[$$4]  |PARTITIONED|
+                      {
+                        -- AGGREGATE  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                      }
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$4(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- UNNEST  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan b/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
new file mode 100644
index 0000000..ab9747f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- PRE_CLUSTERED_GROUP_BY[$$6]  |PARTITIONED|
+            {
+              -- AGGREGATE  |LOCAL|
+                -- NESTED_TUPLE_SOURCE  |LOCAL|
+            }
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STABLE_SORT [$$6(ASC)]  |PARTITIONED|
+          -- HASH_PARTITION_EXCHANGE [$$6]  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- DATASOURCE_SCAN  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan b/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
new file mode 100644
index 0000000..86bafc3
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
@@ -0,0 +1,27 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$16]  |PARTITIONED|
+                  {
+                    -- AGGREGATE  |LOCAL|
+                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- HYBRID_HASH_JOIN [$$16][$$19]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$19]  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx.plan b/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx.plan
rename to asterix-app/src/test/resources/optimizerts/results/fj-dblp-csx.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/fj-phase1.plan b/asterix-app/src/test/resources/optimizerts/results/fj-phase1.plan
new file mode 100644
index 0000000..494b208
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/fj-phase1.plan
@@ -0,0 +1,56 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$23]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- STREAM_SELECT  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$23(ASC), $$6(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$23]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$1][$$6]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$1]  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- UNNEST  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$6]  |PARTITIONED|
+                            -- RUNNING_AGGREGATE  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- SORT_MERGE_EXCHANGE [$$24(DESC) ]  |PARTITIONED|
+                                  -- STABLE_SORT [$$24(DESC)]  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- PRE_CLUSTERED_GROUP_BY[$$30]  |PARTITIONED|
+                                              {
+                                                -- AGGREGATE  |LOCAL|
+                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                              }
+                                        -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$30(ASC)] HASH:[$$30]  |PARTITIONED|
+                                          -- PRE_CLUSTERED_GROUP_BY[$$5]  |PARTITIONED|
+                                                  {
+                                                    -- AGGREGATE  |LOCAL|
+                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                                  }
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- STABLE_SORT [$$5(ASC)]  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- STREAM_PROJECT  |PARTITIONED|
+                                                    -- UNNEST  |PARTITIONED|
+                                                      -- STREAM_PROJECT  |PARTITIONED|
+                                                        -- ASSIGN  |PARTITIONED|
+                                                          -- STREAM_PROJECT  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/fj-phase2-with-hints.plan b/asterix-app/src/test/resources/optimizerts/results/fj-phase2-with-hints.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/fj-phase2-with-hints.plan
rename to asterix-app/src/test/resources/optimizerts/results/fj-phase2-with-hints.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inline-funs.plan b/asterix-app/src/test/resources/optimizerts/results/inline-funs.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inline-funs.plan
rename to asterix-app/src/test/resources/optimizerts/results/inline-funs.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inlined_q18_large_volume_customer.plan b/asterix-app/src/test/resources/optimizerts/results/inlined_q18_large_volume_customer.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inlined_q18_large_volume_customer.plan
rename to asterix-app/src/test/resources/optimizerts/results/inlined_q18_large_volume_customer.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan b/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan
rename to asterix-app/src/test/resources/optimizerts/results/introhashpartitionmerge.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains-panic.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-contains.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check-panic.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check-panic.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
new file mode 100644
index 0000000..d7a4c06
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-panic.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-panic.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
new file mode 100644
index 0000000..d7a4c06
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
new file mode 100644
index 0000000..021f810
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$7(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
new file mode 100644
index 0000000..2a2ccc4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
new file mode 100644
index 0000000..2a2ccc4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check-panic.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-check.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance-panic.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-edit-distance.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-edit-distance.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..d7a4c06
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..d7a4c06
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-contains.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
new file mode 100644
index 0000000..2a2ccc4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
new file mode 100644
index 0000000..2a2ccc4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
new file mode 100644
index 0000000..3028f9a
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$14(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
new file mode 100644
index 0000000..3028f9a
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
@@ -0,0 +1,17 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- STREAM_SELECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- BTREE_SEARCH  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$14(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
new file mode 100644
index 0000000..aec97d2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
new file mode 100644
index 0000000..78e761f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
new file mode 100644
index 0000000..57730fe
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
@@ -0,0 +1,19 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- BTREE_SEARCH  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let-panic.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan
rename to asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-edit-distance-check-let.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
new file mode 100644
index 0000000..2a2ccc4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
new file mode 100644
index 0000000..2a2ccc4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
new file mode 100644
index 0000000..78e761f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
@@ -0,0 +1,15 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- BTREE_SEARCH  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
new file mode 100644
index 0000000..57730fe
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
@@ -0,0 +1,19 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- BTREE_SEARCH  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
new file mode 100644
index 0000000..0fab288
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- UNION_ALL  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- STREAM_SELECT  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                    -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                      -- STREAM_SELECT  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- SPLIT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                -- ASSIGN  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_SELECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- NESTED_LOOP  |PARTITIONED|
+                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_SELECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- SPLIT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance.plan
new file mode 100644
index 0000000..f7d3cb4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance.plan
@@ -0,0 +1,52 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- UNION_ALL  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- STREAM_SELECT  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- NESTED_LOOP  |PARTITIONED|
+                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_SELECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- SPLIT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
new file mode 100644
index 0000000..1be3fb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
@@ -0,0 +1,52 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- UNION_ALL  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- STREAM_SELECT  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- NESTED_LOOP  |PARTITIONED|
+                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_SELECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- SPLIT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..7c74f83
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
new file mode 100644
index 0000000..c5534d6
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard.plan
new file mode 100644
index 0000000..fdbf50f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
new file mode 100644
index 0000000..0fab288
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- UNION_ALL  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- STREAM_SELECT  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ASSIGN  |PARTITIONED|
+                      -- STREAM_PROJECT  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- BTREE_SEARCH  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                    -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                      -- STREAM_SELECT  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- SPLIT  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- STREAM_PROJECT  |PARTITIONED|
+                                                -- ASSIGN  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_SELECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- NESTED_LOOP  |PARTITIONED|
+                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_SELECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- SPLIT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance.plan
new file mode 100644
index 0000000..f7d3cb4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance.plan
@@ -0,0 +1,52 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- UNION_ALL  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- STREAM_SELECT  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- NESTED_LOOP  |PARTITIONED|
+                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_SELECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- SPLIT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.plan
new file mode 100644
index 0000000..1be3fb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.plan
@@ -0,0 +1,52 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- UNION_ALL  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- STREAM_SELECT  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ASSIGN  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- NESTED_LOOP  |PARTITIONED|
+                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_SELECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- SPLIT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..88c4469
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
new file mode 100644
index 0000000..8b6b08b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard.plan
new file mode 100644
index 0000000..ba9879d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..88c4469
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
new file mode 100644
index 0000000..8b6b08b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard.plan
new file mode 100644
index 0000000..ba9879d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.plan
new file mode 100644
index 0000000..7c74f83
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
new file mode 100644
index 0000000..c5534d6
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- BTREE_SEARCH  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                  -- STREAM_PROJECT  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard.plan
new file mode 100644
index 0000000..fdbf50f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ASSIGN  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- BTREE_SEARCH  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_01.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_01.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
new file mode 100644
index 0000000..1800e75
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
new file mode 100644
index 0000000..abd2c39
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
@@ -0,0 +1,59 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- BTREE_SEARCH  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_SELECT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- SPLIT  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- NESTED_LOOP  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_01.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_01.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
new file mode 100644
index 0000000..1800e75
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
new file mode 100644
index 0000000..dffe718
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
@@ -0,0 +1,59 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- BTREE_SEARCH  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_SELECT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- SPLIT  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- NESTED_LOOP  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
new file mode 100644
index 0000000..65be14f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_02.plan
new file mode 100644
index 0000000..bfee1a5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_02.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
new file mode 100644
index 0000000..bfee1a5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
new file mode 100644
index 0000000..ab5cf83
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
new file mode 100644
index 0000000..7877b30
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$22][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
new file mode 100644
index 0000000..ab5cf83
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_01.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
new file mode 100644
index 0000000..4b767ab
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
new file mode 100644
index 0000000..77b00ff
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$28][$$18]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_01.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
new file mode 100644
index 0000000..4b767ab
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
new file mode 100644
index 0000000..32d7e09
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$28][$$17]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_01.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_01.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
new file mode 100644
index 0000000..1800e75
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
new file mode 100644
index 0000000..abd2c39
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
@@ -0,0 +1,59 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- BTREE_SEARCH  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_SELECT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- SPLIT  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- NESTED_LOOP  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_01.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_01.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
new file mode 100644
index 0000000..1800e75
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
new file mode 100644
index 0000000..a04e378
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
new file mode 100644
index 0000000..dffe718
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
@@ -0,0 +1,59 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- BTREE_SEARCH  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_SELECT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- SPLIT  |PARTITIONED|
+                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                    -- STREAM_PROJECT  |PARTITIONED|
+                                                      -- ASSIGN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ASSIGN  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- NESTED_LOOP  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_SELECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- SPLIT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- STREAM_PROJECT  |PARTITIONED|
+                                              -- ASSIGN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_01.plan
new file mode 100644
index 0000000..bfee1a5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_01.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
new file mode 100644
index 0000000..65be14f
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
new file mode 100644
index 0000000..bfee1a5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
@@ -0,0 +1,55 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- UNION_ALL  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- STREAM_SELECT  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_SELECT  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- SPLIT  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- STREAM_PROJECT  |PARTITIONED|
+                                                  -- ASSIGN  |PARTITIONED|
+                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                      -- DATASOURCE_SCAN  |PARTITIONED|
+                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- NESTED_LOOP  |PARTITIONED|
+                          -- BROADCAST_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- SPLIT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_01.plan
new file mode 100644
index 0000000..2a4e9de
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
new file mode 100644
index 0000000..06826c1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
new file mode 100644
index 0000000..2a4e9de
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_01.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
new file mode 100644
index 0000000..3d0f3f1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
new file mode 100644
index 0000000..156dd43
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_01.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
new file mode 100644
index 0000000..3d0f3f1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
new file mode 100644
index 0000000..47f5c91
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_01.plan
new file mode 100644
index 0000000..2a4e9de
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
new file mode 100644
index 0000000..06826c1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
new file mode 100644
index 0000000..2a4e9de
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_01.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
new file mode 100644
index 0000000..3d0f3f1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
new file mode 100644
index 0000000..156dd43
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_01.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
new file mode 100644
index 0000000..3d0f3f1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
new file mode 100644
index 0000000..7c16cef
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
new file mode 100644
index 0000000..47f5c91
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_01.plan
new file mode 100644
index 0000000..ab5cf83
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
new file mode 100644
index 0000000..7877b30
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$22][$$14]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
new file mode 100644
index 0000000..ab5cf83
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_01.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
new file mode 100644
index 0000000..0fced26
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
new file mode 100644
index 0000000..77b00ff
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$28][$$18]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_01.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_01.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_01.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
new file mode 100644
index 0000000..4b767ab
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
new file mode 100644
index 0000000..3f7ecb1
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
@@ -0,0 +1,28 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- BTREE_SEARCH  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ASSIGN  |PARTITIONED|
+                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                          -- DATASOURCE_SCAN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
new file mode 100644
index 0000000..32d7e09
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$28][$$17]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- DATASOURCE_SCAN  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- STREAM_SELECT  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- BTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
+                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                        -- STREAM_PROJECT  |PARTITIONED|
+                                          -- ASSIGN  |PARTITIONED|
+                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                              -- DATASOURCE_SCAN  |PARTITIONED|
+                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan b/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
new file mode 100644
index 0000000..8149181
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$17, $$22, $$24][$$19, $$23, $$20]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$17, $$22, $$24]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- DATASOURCE_SCAN  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$19, $$23, $$20]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- DATASOURCE_SCAN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan b/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
new file mode 100644
index 0000000..92adb3d
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
@@ -0,0 +1,22 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$17, $$23, $$18][$$19, $$22, $$24]  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- DATASOURCE_SCAN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$19, $$24]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- DATASOURCE_SCAN  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/limit-issue353.plan b/asterix-app/src/test/resources/optimizerts/results/limit-issue353.plan
new file mode 100644
index 0000000..829a245
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/limit-issue353.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |UNPARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |UNPARTITIONED|
+    -- STREAM_PROJECT  |UNPARTITIONED|
+      -- ASSIGN  |UNPARTITIONED|
+        -- STREAM_LIMIT  |UNPARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- SORT_MERGE_EXCHANGE [$$6(ASC), $$7(ASC) ]  |PARTITIONED|
+              -- STREAM_LIMIT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan b/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
new file mode 100644
index 0000000..60e9899
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
@@ -0,0 +1,30 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$22, $$23]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- STREAM_SELECT  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$22(ASC), $$23(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$22, $$23]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$24, $$22, $$28][$$25, $$19, $$20]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$24, $$22, $$28]  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$25, $$19, $$20]  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan b/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
new file mode 100644
index 0000000..78159b2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
@@ -0,0 +1,31 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$22, $$23]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- STREAM_SELECT  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$22(ASC), $$23(ASC)]  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$25, $$22, $$23][$$24, $$19, $$28]  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$19, $$28]  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan b/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
new file mode 100644
index 0000000..41ae699
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
@@ -0,0 +1,45 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$25]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- MICRO_PRE_CLUSTERED_GROUP_BY[$$23]  |LOCAL|
+                                {
+                                  -- AGGREGATE  |LOCAL|
+                                    -- STREAM_SELECT  |LOCAL|
+                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                }
+                          -- STREAM_SELECT  |LOCAL|
+                            -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$25(ASC), $$23(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$25]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$23][$$20]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$23]  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- HYBRID_HASH_JOIN [$$25][$$26]  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$26]  |PARTITIONED|
+                                    -- ASSIGN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$20]  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/nested_loj3.plan b/asterix-app/src/test/resources/optimizerts/results/nested_loj3.plan
new file mode 100644
index 0000000..6d0e32e
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/nested_loj3.plan
@@ -0,0 +1,60 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$42]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- MICRO_PRE_CLUSTERED_GROUP_BY[$$40]  |LOCAL|
+                                {
+                                  -- AGGREGATE  |LOCAL|
+                                    -- MICRO_PRE_CLUSTERED_GROUP_BY[$$37, $$38]  |LOCAL|
+                                            {
+                                              -- AGGREGATE  |LOCAL|
+                                                -- STREAM_SELECT  |LOCAL|
+                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                            }
+                                      -- IN_MEMORY_STABLE_SORT [$$37(ASC), $$38(ASC)]  |LOCAL|
+                                        -- STREAM_SELECT  |LOCAL|
+                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                }
+                          -- IN_MEMORY_STABLE_SORT [$$40(ASC), $$38(ASC)]  |LOCAL|
+                            -- STREAM_SELECT  |LOCAL|
+                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$42(ASC), $$40(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$42]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$48, $$50][$$34, $$35]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$48, $$50]  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$40][$$37]  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$40]  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- HYBRID_HASH_JOIN [$$42][$$43]  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                                      -- HASH_PARTITION_EXCHANGE [$$43]  |PARTITIONED|
+                                        -- ASSIGN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- DATASOURCE_SCAN  |PARTITIONED|
+                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$37]  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/noncollocated.plan b/asterix-app/src/test/resources/optimizerts/results/noncollocated.plan
new file mode 100644
index 0000000..e92a84c
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/noncollocated.plan
@@ -0,0 +1,21 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$10][$$11]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- DATASOURCE_SCAN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$11]  |PARTITIONED|
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- DATASOURCE_SCAN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan b/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan
rename to asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/orders-aggreg.plan b/asterix-app/src/test/resources/optimizerts/results/orders-aggreg.plan
new file mode 100644
index 0000000..08ad861
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/orders-aggreg.plan
@@ -0,0 +1,25 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$24]  |PARTITIONED|
+                  {
+                    -- AGGREGATE  |LOCAL|
+                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$24(ASC)] HASH:[$$24]  |PARTITIONED|
+              -- PRE_CLUSTERED_GROUP_BY[$$16]  |PARTITIONED|
+                      {
+                        -- AGGREGATE  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                      }
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- DATASOURCE_SCAN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/orders-composite-index-search.plan b/asterix-app/src/test/resources/optimizerts/results/orders-composite-index-search.plan
new file mode 100644
index 0000000..39a9eda
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/orders-composite-index-search.plan
@@ -0,0 +1,19 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- BTREE_SEARCH  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STABLE_SORT [$$21(ASC)]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- BTREE_SEARCH  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan b/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan
rename to asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_01.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan b/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan
rename to asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive-open_02.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan b/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan
rename to asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_01.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan b/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan
rename to asterix-app/src/test/resources/optimizerts/results/orders-index-search-conjunctive_02.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/orders-index-search-open.plan b/asterix-app/src/test/resources/optimizerts/results/orders-index-search-open.plan
new file mode 100644
index 0000000..b78849b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/orders-index-search-open.plan
@@ -0,0 +1,19 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- BTREE_SEARCH  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- BTREE_SEARCH  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/orders-index-search.plan b/asterix-app/src/test/resources/optimizerts/results/orders-index-search.plan
new file mode 100644
index 0000000..b78849b
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/orders-index-search.plan
@@ -0,0 +1,19 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- BTREE_SEARCH  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- BTREE_SEARCH  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/prim-idx-search-open.plan b/asterix-app/src/test/resources/optimizerts/results/prim-idx-search-open.plan
new file mode 100644
index 0000000..2a91fc5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/prim-idx-search-open.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/prim-idx-search.plan b/asterix-app/src/test/resources/optimizerts/results/prim-idx-search.plan
new file mode 100644
index 0000000..2a91fc5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/prim-idx-search.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- BTREE_SEARCH  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- ASSIGN  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan b/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
new file mode 100644
index 0000000..b0d8e64
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- HYBRID_HASH_JOIN [$$18][$$19]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$19]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ASSIGN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- DATASOURCE_SCAN  |PARTITIONED|
+                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan b/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
new file mode 100644
index 0000000..86bcdac
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
@@ -0,0 +1,33 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+            -- PRE_CLUSTERED_GROUP_BY[$$15]  |PARTITIONED|
+                    {
+                      -- AGGREGATE  |LOCAL|
+                        -- STREAM_SELECT  |LOCAL|
+                          -- NESTED_TUPLE_SOURCE  |LOCAL|
+                    }
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- STABLE_SORT [$$15(ASC)]  |PARTITIONED|
+                  -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
+                    -- STREAM_PROJECT  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$17][$$16]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                  -- DATASOURCE_SCAN  |PARTITIONED|
+                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/push_limit.plan b/asterix-app/src/test/resources/optimizerts/results/push_limit.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/push_limit.plan
rename to asterix-app/src/test/resources/optimizerts/results/push_limit.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/q1.plan b/asterix-app/src/test/resources/optimizerts/results/q1.plan
new file mode 100644
index 0000000..aa5daa2
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/q1.plan
@@ -0,0 +1,20 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- SUBPLAN  |PARTITIONED|
+                      {
+                        -- AGGREGATE  |LOCAL|
+                          -- STREAM_SELECT  |LOCAL|
+                            -- UNNEST  |LOCAL|
+                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+                      }
+                -- STREAM_PROJECT  |PARTITIONED|
+                  -- ASSIGN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- DATASOURCE_SCAN  |PARTITIONED|
+                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/q1_pricing_summary_report_nt.plan b/asterix-app/src/test/resources/optimizerts/results/q1_pricing_summary_report_nt.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/q1_pricing_summary_report_nt.plan
rename to asterix-app/src/test/resources/optimizerts/results/q1_pricing_summary_report_nt.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/q2.plan b/asterix-app/src/test/resources/optimizerts/results/q2.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/q2.plan
rename to asterix-app/src/test/resources/optimizerts/results/q2.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/q3_shipping_priority.plan b/asterix-app/src/test/resources/optimizerts/results/q3_shipping_priority.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/q3_shipping_priority.plan
rename to asterix-app/src/test/resources/optimizerts/results/q3_shipping_priority.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/q5_local_supplier_volume.plan b/asterix-app/src/test/resources/optimizerts/results/q5_local_supplier_volume.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/q5_local_supplier_volume.plan
rename to asterix-app/src/test/resources/optimizerts/results/q5_local_supplier_volume.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/record_access.plan b/asterix-app/src/test/resources/optimizerts/results/record_access.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/record_access.plan
rename to asterix-app/src/test/resources/optimizerts/results/record_access.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_01.plan b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_01.plan
new file mode 100644
index 0000000..64fdc8c
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_01.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- RTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
new file mode 100644
index 0000000..64fdc8c
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- RTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
new file mode 100644
index 0000000..64fdc8c
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
@@ -0,0 +1,23 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- RTREE_SEARCH  |PARTITIONED|
+                              -- BROADCAST_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- ASSIGN  |PARTITIONED|
+                                    -- STREAM_PROJECT  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- DATASOURCE_SCAN  |PARTITIONED|
+                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index-open.plan b/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index-open.plan
new file mode 100644
index 0000000..1845ed7
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index-open.plan
@@ -0,0 +1,18 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- RTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index.plan b/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index.plan
new file mode 100644
index 0000000..1845ed7
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index.plan
@@ -0,0 +1,18 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_PROJECT  |PARTITIONED|
+          -- STREAM_SELECT  |PARTITIONED|
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                -- BTREE_SEARCH  |PARTITIONED|
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STREAM_PROJECT  |PARTITIONED|
+                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                            -- RTREE_SEARCH  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/scan-delete-all.plan b/asterix-app/src/test/resources/optimizerts/results/scan-delete-all.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/scan-delete-all.plan
rename to asterix-app/src/test/resources/optimizerts/results/scan-delete-all.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/scan-delete-rtree-secondary-index.plan b/asterix-app/src/test/resources/optimizerts/results/scan-delete-rtree-secondary-index.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/scan-delete-rtree-secondary-index.plan
rename to asterix-app/src/test/resources/optimizerts/results/scan-delete-rtree-secondary-index.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/scan-delete.plan b/asterix-app/src/test/resources/optimizerts/results/scan-delete.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/scan-delete.plan
rename to asterix-app/src/test/resources/optimizerts/results/scan-delete.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/scan-insert-secondary-index.plan b/asterix-app/src/test/resources/optimizerts/results/scan-insert-secondary-index.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/scan-insert-secondary-index.plan
rename to asterix-app/src/test/resources/optimizerts/results/scan-insert-secondary-index.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/scan-insert.plan b/asterix-app/src/test/resources/optimizerts/results/scan-insert.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/scan-insert.plan
rename to asterix-app/src/test/resources/optimizerts/results/scan-insert.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_01.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_01.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_02.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_02.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_03.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_03.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_04.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_04.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_05.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_05.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_05.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_06.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_06.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_06.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_07.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_07.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_07.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_08.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_08.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_08.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_01.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_01.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_02.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_02.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_03.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_03.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_04.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_04.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_05.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_05.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_05.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_06.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_06.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_06.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_07.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_07.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_07.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_08.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_08.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_08.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-edit-distance-check.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-edit-distance-check.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-edit-distance-check.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-jaccard-check.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-jaccard-check.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-jaccard-check.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_01.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_01.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_02.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_02.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_03.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_03.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_04.plan
new file mode 100644
index 0000000..fcd1fd5
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_04.plan
@@ -0,0 +1,12 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- STREAM_SELECT  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ASSIGN  |PARTITIONED|
+              -- STREAM_PROJECT  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- DATASOURCE_SCAN  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_05.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_05.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_05.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_06.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_06.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_06.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_07.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_07.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_07.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_08.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_08.plan
new file mode 100644
index 0000000..7ec3440
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_08.plan
@@ -0,0 +1,10 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ASSIGN  |PARTITIONED|
+          -- STREAM_PROJECT  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- DATASOURCE_SCAN  |PARTITIONED|
+                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_01.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_01.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_01.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_02.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_02.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_02.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_03.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_03.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_03.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_04.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_04.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_04.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_05.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_05.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_05.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_06.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_06.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_06.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_07.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_07.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_07.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_08.plan b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_08.plan
new file mode 100644
index 0000000..06194e4
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_08.plan
@@ -0,0 +1,8 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_SELECT  |PARTITIONED|
+      -- STREAM_PROJECT  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- DATASOURCE_SCAN  |PARTITIONED|
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/sort-cust.plan b/asterix-app/src/test/resources/optimizerts/results/sort-cust.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/sort-cust.plan
rename to asterix-app/src/test/resources/optimizerts/results/sort-cust.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/unnest-to-join_01.plan b/asterix-app/src/test/resources/optimizerts/results/unnest-to-join_01.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/unnest-to-join_01.plan
rename to asterix-app/src/test/resources/optimizerts/results/unnest-to-join_01.plan
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/unnest-to-join_02.plan b/asterix-app/src/test/resources/optimizerts/results/unnest-to-join_02.plan
similarity index 100%
rename from asterix/asterix-app/src/test/resources/optimizerts/results/unnest-to-join_02.plan
rename to asterix-app/src/test/resources/optimizerts/results/unnest-to-join_02.plan
diff --git a/asterix-app/src/test/resources/optimizerts/results/unnest_list_in_subplan.plan b/asterix-app/src/test/resources/optimizerts/results/unnest_list_in_subplan.plan
new file mode 100644
index 0000000..e9fafd7
--- /dev/null
+++ b/asterix-app/src/test/resources/optimizerts/results/unnest_list_in_subplan.plan
@@ -0,0 +1,33 @@
+-- DISTRIBUTE_RESULT  |PARTITIONED|
+  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+    -- STREAM_PROJECT  |PARTITIONED|
+      -- ASSIGN  |PARTITIONED|
+        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$20]  |PARTITIONED|
+                  {
+                    -- AGGREGATE  |LOCAL|
+                      -- STREAM_SELECT  |LOCAL|
+                        -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+              -- STABLE_SORT [$$20(ASC), $$18(ASC)]  |PARTITIONED|
+                -- HASH_PARTITION_EXCHANGE [$$20]  |PARTITIONED|
+                  -- STREAM_PROJECT  |PARTITIONED|
+                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                      -- HYBRID_HASH_JOIN [$$3][$$22]  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$3]  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- UNNEST  |PARTITIONED|
+                              -- STREAM_PROJECT  |PARTITIONED|
+                                -- ASSIGN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$22]  |PARTITIONED|
+                          -- STREAM_PROJECT  |PARTITIONED|
+                            -- ASSIGN  |PARTITIONED|
+                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                -- DATASOURCE_SCAN  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/ignore.txt b/asterix-app/src/test/resources/runtimets/ignore.txt
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/ignore.txt
rename to asterix-app/src/test/resources/runtimets/ignore.txt
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double/avg_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_double_null/avg_double_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_01/avg_empty_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_empty_02/avg_empty_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float/avg_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_float_null/avg_float_nu.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16/avg_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32/avg_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int32_null/avg_int32_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64/avg_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int64_null/avg_int64_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8/avg_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int8_null/avg_int8_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_01/count_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_01/count_empty_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_empty_02/count_empty_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/count_null/count_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/droptype/droptype.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_01/global-avg_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/global-avg_null/global-avg_null.3.query.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.1.ddl.aql
new file mode 100644
index 0000000..c0bbb1f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.1.ddl.aql
@@ -0,0 +1,10 @@
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type Emp as open {
+id:int32,
+name:string ?
+}
+
+create dataset Employee(Emp) primary key id;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.2.update.aql
new file mode 100644
index 0000000..fa8fb09
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.2.update.aql
@@ -0,0 +1,6 @@
+use dataverse test;
+
+insert into dataset Employee({"id":12,"name":"John Doe"});
+insert into dataset Employee({"id":42});
+insert into dataset Employee({"id":22,"name":"John Smith"});
+insert into dataset Employee({"id":19});
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.3.query.aql
new file mode 100644
index 0000000..8104319
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue395/issue395.3.query.aql
@@ -0,0 +1,4 @@
+use dataverse test;
+
+count(for $l in dataset Employee
+return $l.name)
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.1.ddl.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.1.ddl.aql
copy to asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.2.update.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta20/meta20.2.update.aql
copy to asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.3.query.aql
new file mode 100644
index 0000000..9b0ed8a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_0/issue412_0.3.query.aql
@@ -0,0 +1,2 @@
+let $l := ["ASTERIX", "Hyracks", null]
+return count($l)
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.1.ddl.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.1.ddl.aql
copy to asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.2.update.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/metadata/queries/basic/meta21/meta21.2.update.aql
copy to asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.3.query.aql
new file mode 100644
index 0000000..f9bc64e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/aggregate/issue412_1/issue412_1.3.query.aql
@@ -0,0 +1,2 @@
+let $l := [1, 60, null]
+return { "count": count($l), "average": avg($l), "sum": sum($l), "min": min($l), "max": max($l) } 
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double/local-avg_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_double_null/local-avg_double_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float/local-avg_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_float_null/local-avg_float_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16/local-avg_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int16_null/local-avg_int16_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32/local-avg_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int32_null/local-avg_int32_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64/local-avg_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int64_null/local-avg_int64_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8/local-avg_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/local-avg_int8_null/local-avg_int8_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_01/max_empty_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/max_empty_02/max_empty_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_01/min_empty_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/min_empty_02/min_empty_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg/scalar_avg.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_empty/scalar_avg_empty.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_avg_null/scalar_avg_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count/scalar_count.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_empty/scalar_count_empty.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_count_null/scalar_count_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max/scalar_max.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_empty/scalar_max_empty.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_max_null/scalar_max_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min/scalar_min.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_empty/scalar_min_empty.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_min_null/scalar_min_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum/scalar_sum.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_empty/scalar_sum_empty.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/scalar_sum_null/scalar_sum_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double/sum_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_double_null/sum_double_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_01/sum_empty_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_empty_02/sum_empty_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float/sum_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_float_null/sum_float_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16/sum_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int16_null/sum_int16_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32/sum_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int32_null/sum_int32_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64/sum_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int64_null/sum_int64_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8/sum_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_int8_null/sum_int8_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_null-with-pred/sum_null-with-pred.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/aggregate/sum_numeric_null/sum_numeric_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_01/and_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_null/and_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/and_null_false/and_null_false.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/boolean/not_01/not_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/date_order/date_order.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_order/datetime_order.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_range/datetime_range.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/datetime_tzeq/datetime_tzeq.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double/double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double/double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double/double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double/double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double_gte_01/double_gte_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/double_null/double_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/eq_01/eq_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/float/float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/float/float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float/float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/float/float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/float_null/float_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/gt_01/gt_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/gte_01/gte_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int16/int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int16_null/int16_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int32/int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int32_null/int32_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int64/int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int64_null/int64_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int8/int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/int8_null/int8_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/lt_01/lt_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/lte_01/lte_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/neq_01/neq_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/numeric-comparison_01/numeric-comparison_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/string/string.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/string/string.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string/string.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/string/string.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/string_null/string_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/comparison/time_order/time_order.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/add-null/add-null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/boolean_01/boolean_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/circle_01/circle_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/date_01/date_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/datetime_01/datetime_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/double_01/double_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/duration_01/duration_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/float_01/float_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/int_01/int_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
new file mode 100644
index 0000000..f30fdd7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
@@ -0,0 +1,41 @@
+use dataverse test;
+
+let $itv11 := interval-from-date(date("2010-10-30"), date("2012-10-21"))
+let $itv12 := interval-from-date("2010-10-30", date("2012-10-21"))
+let $itv13 := interval-from-date(date("2010-10-30"), "2012-10-21")
+let $itv14 := interval-from-date("2010-10-30", "2012-10-21")
+let $itv15 := interval-from-date(null, "2012-10-21")
+let $itv16 := interval-from-date("2010-10-30", null)
+let $itv21 := interval-from-time(time("03:04:05.678-11:00"), time("232425267+0200"))
+let $itv22 := interval-from-time("03:04:05.678-11:00", time("232425267+0200"))
+let $itv23 := interval-from-time(time("03:04:05.678-11:00"), "232425267+0200")
+let $itv24 := interval-from-time("03:04:05.678-11:00", "232425267+0200")
+let $itv25 := interval-from-time(null, time("232425267+0200"))
+let $itv26 := interval-from-time(time("03:04:05.678-11:00"), null)
+let $itv31 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), datetime("19991112T124935948-0700"))
+let $itv32 := interval-from-datetime("-1987-11-19T02:43:57.938+08:00", datetime("19991112T124935948-0700"))
+let $itv33 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), "19991112T124935948-0700")
+let $itv34 := interval-from-datetime("-1987-11-19T02:43:57.938+08:00", "19991112T124935948-0700")
+let $itv35 := interval-from-datetime(null, datetime("19991112T124935948-0700"))
+let $itv36 := interval-from-datetime(datetime("-1987-11-19T02:43:57.938+08:00"), null)
+let $itv41 := interval-start-from-date(date("0001-12-27"), duration("P3Y394DT48H398.483S"))
+let $itv42 := interval-start-from-date("0001-12-27", duration("P3Y394DT48H398.483S"))
+let $itv43 := interval-start-from-date(date("0001-12-27"), "P3Y394DT48H398.483S")
+let $itv44 := interval-start-from-date("0001-12-27", "P3Y394DT48H398.483S")
+let $itv45 := interval-start-from-date(null, duration("P3Y394DT48H398.483S"))
+let $itv46 := interval-start-from-date(date("0001-12-27"), null)
+let $itv51 := interval-start-from-time(time("20:03:20.948"), duration("P60DT48M389.938S"))
+let $itv52 := interval-start-from-time("20:03:20.948", duration("P60DT48M389.938S"))
+let $itv53 := interval-start-from-time(time("20:03:20.948"), "P60DT48M389.938S")
+let $itv54 := interval-start-from-time("20:03:20.948", "P60DT48M389.938S")
+let $itv55 := interval-start-from-time(null, duration("P60DT48M389.938S"))
+let $itv56 := interval-start-from-time(time("20:03:20.948"), null)
+let $itv61 := interval-start-from-datetime(datetime("-2043-11-19T15:32:39.293"), duration("P439Y3M20DT20H39M58.949S"))
+let $itv62 := interval-start-from-datetime("-2043-11-19T15:32:39.293", duration("P439Y3M20DT20H39M58.949S"))
+let $itv63 := interval-start-from-datetime(datetime("-2043-11-19T15:32:39.293"), "P439Y3M20DT20H39M58.949S")
+let $itv64 := interval-start-from-datetime("-2043-11-19T15:32:39.293", "P439Y3M20DT20H39M58.949S")
+let $itv65 := interval-start-from-datetime(null, duration("P439Y3M20DT20H39M58.949S"))
+let $itv66 := interval-start-from-datetime(datetime("-2043-11-19T15:32:39.293"), null)
+
+return {"interval11": $itv11, "interval12": $itv12, "interval13": $itv13, "interval14": $itv14, "interval15": $itv15, "interval16": $itv16, "interval21": $itv21, "interval22": $itv22, "interval23": $itv23, "interval24": $itv24, "interval25": $itv25, "interval26": $itv26, "interval31": $itv31, "interval32": $itv32, "interval33": $itv33, "interval34": $itv34, "interval35": $itv35, "interval36": $itv36, "interval41": $itv41, "interval42": $itv42, "interval43": $itv43, "interval44": $itv44, "interval45": $itv45, "interval46": $itv46, "interval51": $itv51, "interval52": $itv52, "interval53": $itv53, "interval54": $itv54, "interval55": $itv55, "interval56": $itv56, "interval61": $itv61, "interval62": $itv62, "interval63": $itv63, "interval64": $itv64, "interval65": $itv65, "interval66": $itv66}
+
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/line_01/line_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/point_01/point_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/polygon_01/polygon_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-01/primitive-01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-02/primitive-02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-03/primitive-03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/primitive-04/primitive-04.3.query.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.1.ddl.aql
new file mode 100644
index 0000000..efde712
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.1.ddl.aql
@@ -0,0 +1,10 @@
+/*
+ * Description  : create a rectangle constructor
+ * Expected Res : Success
+ * Date         : 18 April 2013
+ * Issue        : 272
+ */
+ 
+drop dataverse test if exists;
+create dataverse test;
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.2.update.aql
new file mode 100644
index 0000000..f7e538e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.2.update.aql
@@ -0,0 +1,7 @@
+/*
+ * Description  : create a rectangle constructor
+ * Expected Res : Success
+ * Date         : 18 April 2013
+ * Issue        : 272
+ */
+ 
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.3.query.aql
new file mode 100644
index 0000000..696746f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/constructor/rectangle_01/rectangle_01.3.query.aql
@@ -0,0 +1,12 @@
+/*
+ * Description  : create a rectangle constructor
+ * Expected Res : Success
+ * Date         : 18 April 2013
+ * Issue        : 272
+ */
+ 
+use dataverse test;
+
+let $r1 := rectangle("5.1,11.8 87.6,15.6548")
+let $r2 := rectangle("0.1234,-1.00e-10 5.5487,0.48765")
+return {"rectangle1": $r1,"rectangle2": $r2}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/string_01/string_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/constructor/time_01/time_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv01/cross-dv01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv02/cross-dv02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv03/cross-dv03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv04/cross-dv04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv07/cross-dv07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv08/cross-dv08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv09/cross-dv09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv11/cross-dv11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv12/cross-dv12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv13/cross-dv13.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv14/cross-dv14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv15/cross-dv15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv16/cross-dv16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv17/cross-dv17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv18/cross-dv18.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv19/cross-dv19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/cross-dv20/cross-dv20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/drop_dataset/drop_dataset.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_across_dataverses/insert_across_dataverses.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/join_across_dataverses/join_across_dataverses.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/cross-dataverse/metadata_dataset/metadata_dataset.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/co/co.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/co/co.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/co/co.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/co/co.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/co/co.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/co/co.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/co/co.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/co/co.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/co/co.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/co/co.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/co/co.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/co/co.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_01/customer_q_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_02/customer_q_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_03/customer_q_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_04/customer_q_04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_05/customer_q_05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_06/customer_q_06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_07/customer_q_07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/customer_q_08/customer_q_08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.3.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.3.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.3.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_01/denorm-cust-order_01.3.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_02/denorm-cust-order_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.3.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.3.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.3.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.3.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/denorm-cust-order_03/denorm-cust-order_03.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/freq-clerk/freq-clerk.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_01/join_q_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_02/join_q_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_03/join_q_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/join_q_04/join_q_04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.3.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.3.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.3.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.3.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/load-test/load-test.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_01/order_q_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_02/order_q_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_03/order_q_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_04/order_q_04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_05/order_q_05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/custord/order_q_06/order_q_06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q1/q1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q2/q2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dapd/q3/q3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/create-drop-cltype/create-drop-cltype.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/create-drop-opntype/create-drop-opntype.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/delete-syntax-change/delete-syntax-change.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/drop-index/drop-index.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/empty-load-with-index/empty-load-with-index.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/empty-load/empty-load.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-empty-dataset/insert-into-empty-dataset.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-src-dst-01/insert-src-dst-01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert-syntax/insert-syntax.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert/insert.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/insert_less_nc/insert_less_nc.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/load-from-hdfs/load-from-hdfs.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/load-with-index/load-with-index.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive/opentype-c2o-recursive.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o/opentype-c2o.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-closed-optional/opentype-closed-optional.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert/opentype-insert.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-insert2/opentype-insert2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-noexpand/opentype-noexpand.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive/opentype-o2c-recursive.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c/opentype-o2c.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2o/opentype-o2o.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue205/query-issue205.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/query-issue288/query-issue288.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.4.update.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.4.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.4.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.4.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.5.query.aql b/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.5.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.5.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.5.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/employee/q_01/q_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/employee/q_02/q_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_01/feeds_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_02/feeds_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_03/feeds_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/feeds_04/feeds_04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/feeds/issue_230_feeds/issue_230_feeds.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for01/for01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for02/for02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for03/for03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for04/for04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for05/for05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for06/for06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for07/for07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for08/for08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for09/for09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for10/for10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for11/for11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for12/for12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for13/for13.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for14/for14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for15/for15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for16/for16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for17/for17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for18/for18.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/for19/for19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/grpby01/grpby01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/grpby02/grpby02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let01/let01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let02/let02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let03/let03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let04/let04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let05/let05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let06/let06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let07/let07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let08/let08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let09/let09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let10/let10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let11/let11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let12/let12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let13/let13.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let14/let14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let15/let15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let16/let16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let17/let17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let18/let18.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let19/let19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let20/let20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let21/let21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let22/let22.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let23/let23.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let24/let24.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let25/let25.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let26/let26.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let27/let27.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let28/let28.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let29/let29.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let30/let30.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let31/let31.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/let32/let32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-01/order-by-01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-02/order-by-02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-03/order-by-03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-04/order-by-04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-05/order-by-05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-06/order-by-06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-07/order-by-07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-08/order-by-08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-09/order-by-09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-10/order-by-10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-11/order-by-11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/order-by-12/order-by-12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-01/ret-01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-02/ret-02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-03/ret-03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-04/ret-04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-05/ret-05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-06/ret-06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-07/ret-07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-08/ret-08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-09/ret-09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-10/ret-10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-11/ret-11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-12/ret-12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-13/ret-13.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-14/ret-14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-15/ret-15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-16/ret-16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-17/ret-17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-18/ret-18.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/flwor/ret-19/ret-19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_1/dblp-1_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-1_2/dblp-1_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2.2/dblp-2.2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_1/dblp-2_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_2/dblp-2_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_3/dblp-2_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_4/dblp-2_4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-2_5/dblp-2_5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-3_1/dblp-3_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/dblp-splits-3_1/dblp-splits-3_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_02/hdfs_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/hdfs_03/hdfs_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/hdfs/issue_245_hdfs/issue_245_hdfs.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-primary-equi-join/btree-primary-equi-join.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/btree-secondary-equi-join/btree-secondary-equi-join.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-composite-key/btree-index-composite-key.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/cust-index-age-nullable/cust-index-age-nullable.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-contains/inverted-index-word-contains.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey-open/orders-index-custkey-open.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/orders-index-custkey/orders-index-custkey.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search-open/range-search-open.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/range-search/range-search.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/index-selection/rtree-secondary-index/rtree-secondary-index.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-edit-distance/ngram-edit-distance.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ngram-jaccard/ngram-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-edit-distance/olist-edit-distance.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/olist-jaccard/olist-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/ulist-jaccard/ulist-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard-inline/word-jaccard-inline.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.3.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.3.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.3.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.3.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.4.query.aql b/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.4.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.4.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/inverted-index-join/word-jaccard/word-jaccard.4.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285-2/query_issue285-2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/leftouterjoin/query_issue285/query_issue285.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/any-collection-member_01/any-collection-member_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/get-item_01/get-item_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/len_01/len_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/len_null_01/len_null_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_01/listify_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_02/listify_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/listify_03/listify_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_01/ordered-list-constructor_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_02/ordered-list-constructor_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/ordered-list-constructor_03/ordered-list-constructor_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/scan-collection_01/scan-collection_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/union_01/union_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/union_02/union_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_01/unordered-list-constructor_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_02/unordered-list-constructor_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/list/unordered-list-constructor_03/unordered-list-constructor_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue14_query/issue14_query.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue289_query/issue289_query.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/load/issue315_query/issue315_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/float_01/float_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/groupby-orderby-count/groupby-orderby-count.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.1.ddl.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql
copy to asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/is-null_01/is-null_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/nested-loop-join_01/nested-loop-join_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/partition-by-nonexistent-field/partition-by-nonexistent-field.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/range_01/range_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/tid_01/tid_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/misc/year_01/year_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord/nestrecord.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs0/abs0.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs1/abs1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs2/abs2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs3/abs3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/abs4/abs4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_double/add_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_float/add_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int16/add_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int32/add_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int64/add_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/add_int8/add_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling0/ceiling0.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling1/ceiling1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling2/ceiling2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling3/ceiling3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/ceiling4/ceiling4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_double/divide_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_float/divide_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int16/divide_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int32/divide_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int64/divide_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/divide_int8/divide_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor0/floor0.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor1/floor1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor2/floor2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor3/floor3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/floor4/floor4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_double/multiply_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_float/multiply_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int16/multiply_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int32/multiply_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int64/multiply_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/multiply_int8/multiply_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even0/round-half-to-even0.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even1/round-half-to-even1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even2/round-half-to-even2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even20/round-half-to-even20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even21/round-half-to-even21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even22/round-half-to-even22.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even23/round-half-to-even23.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even24/round-half-to-even24.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even3/round-half-to-even3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even4/round-half-to-even4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round-half-to-even5/round-half-to-even5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round0/round0.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round1/round1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round2/round2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round3/round3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/round4/round4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_double/subtract_double.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_float/subtract_float.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int16/subtract_int16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int32/subtract_int32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int64/subtract_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/subtract_int8/subtract_int8.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_01/unary-minus_double_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_double_02/unary-minus_double_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_01/unary-minus_float_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_float_02/unary-minus_float_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_01/unary-minus_int_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_int_02/unary-minus_int_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/numeric/unary-minus_null/unary-minus_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-w-optional/c2c-w-option.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c-wo-optional/c2c-wo-optional.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/c2c/c2c.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01/heterog-list-ordered01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01/heterog-list01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02/heterog-list02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03/heterog-list03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01/open-closed-01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12/open-closed-12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14/open-closed-14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15/open-closed-15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16/open-closed-16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17/open-closed-17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19/open-closed-19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20/open-closed-20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21/open-closed-21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22/open-closed-22.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24/open-closed-24.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25/open-closed-25.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26/open-closed-26.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28/open-closed-28.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29/open-closed-29.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30/open-closed-30.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31/open-closed-31.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32/open-closed-32.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33/open-closed-33.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue134/query-issue134.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue166/query-issue166.3.query.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.1.ddl.aql
new file mode 100644
index 0000000..59e814a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.1.ddl.aql
@@ -0,0 +1,22 @@
+/*
+ * Description  : This test case is to verify the fix for issue196
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=196
+ * Expected Res : Success
+ * Date         : 5th May 2013
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type testtype1 as open {
+id : int32
+}
+
+create type testtype2 as open {
+id : int32
+}
+
+create dataset t1(testtype1) primary key id;
+create dataset t2(testtype2) primary key id;
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.2.update.aql
new file mode 100644
index 0000000..18756f9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.2.update.aql
@@ -0,0 +1,20 @@
+/*
+ * Description  : This test case is to verify the fix for issue196
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=196
+ * Expected Res : Success
+ * Date         : 5th May 2013
+ */
+
+use dataverse test;
+
+insert into dataset t1({"id":24});
+insert into dataset t1({"id":23});
+insert into dataset t1({"id":21});
+insert into dataset t1({"id":44});
+insert into dataset t1({"id":64});
+
+insert into dataset t2({"id":24});
+insert into dataset t2({"id":23});
+insert into dataset t2({"id":21});
+insert into dataset t2({"id":44});
+insert into dataset t2({"id":64});
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.3.query.aql
new file mode 100644
index 0000000..43d1980
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue196/query-issue196.3.query.aql
@@ -0,0 +1,12 @@
+/*
+ * Description  : This test case is to verify the fix for issue196
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=196
+ * Expected Res : Success
+ * Date         : 5th May 2013
+ */
+
+use dataverse test;
+
+let $a := (for $l in dataset('t1') order by $l.id return $l)
+let $b := (for $m in dataset('t2') order by $m.id return $m)
+return {"a":$a,"b":$b}
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue208/query-issue208.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue236/query-issue236.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue29/query-issue29.3.query.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.1.ddl.aql
new file mode 100644
index 0000000..a49658e
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.1.ddl.aql
@@ -0,0 +1,47 @@
+/*
+ * Description  : This test case is to verify the fix for issue343.  It is a more general case.
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=343
+ * Expected Res : Success
+ * Date         : 30th April 2013
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type AddressType as open {
+  number: int32,
+  street: string,
+  city: string
+}
+
+create type AllType as open {
+  id: int32,
+  name: string,
+  age: float,
+  salary: double,
+  married: boolean,
+  interests: {{string}},
+  children: [string],
+  address: AddressType,
+  dob: date,
+  time: time,
+  datetime: datetime,
+  duration: duration,
+  location2d: point,
+  location3d: point3d,
+  line: line,
+  polygon: polygon,
+  circle: circle
+}
+
+create type MyListType as open{
+	id: int32,
+	mylist: [string]
+}
+
+create dataset All(AllType)
+  primary key id;
+  
+create dataset MyList(MyListType)
+  primary key id;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.2.update.aql
new file mode 100644
index 0000000..39b85f3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.2.update.aql
@@ -0,0 +1,21 @@
+/*
+ * Description  : This test case is to verify the fix for issue343.  It is a more general case.
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=343
+ * Expected Res : Success
+ * Date         : 30th April 2013
+ */
+
+use dataverse test;
+
+insert into dataset MyList (
+ {
+   "id" : 1,
+   "mylist": ["blah"]
+ }
+);
+
+insert into dataset All (
+for $m in dataset MyList
+let $record:= { "id": 13, "name": string("Nancy"), "age": 32.5f, "salary": 12.000 ,"married": boolean("true"), "interests": {{"reading", "writing"}}, "children": ["Brad", "Scott"],  "address": {  "number": 8389,  "street": "Hill St.",  "city": "Mountain View" }, "dob": date("-2011-01-27"), "time": time("12:20:30Z"), "datetime": datetime("-1951-12-27T12:20:30"),  "duration": duration("P10Y11M12DT10H50M30S"),  "location2d": point("41.00,44.00"),  "location3d": point3d("44.00,13.00,41.00"), "line" : line("10.1,11.1 10.2,11.2"), "polygon" : polygon("1.2,1.3 2.1,2.5 3.5,3.6 4.6,4.8"), "circle" : circle("10.1,11.1 10.2"), "mylist" : $m.mylist }
+return $record
+);
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.3.query.aql
new file mode 100644
index 0000000..e17a6e02
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343-2/query-issue343-2.3.query.aql
@@ -0,0 +1,11 @@
+/*
+ * Description  : This test case is to verify the fix for issue343.  It is a more general case.
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=343
+ * Expected Res : Success
+ * Date         : 30th April 2013
+ */
+
+use dataverse test;
+
+for $x in dataset All
+return $x
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.1.ddl.aql
new file mode 100644
index 0000000..bd2ab1a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.1.ddl.aql
@@ -0,0 +1,41 @@
+/*
+ * Description  : This test case is to verify the fix for issue343
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=343
+ * Expected Res : Success
+ * Date         : 30th April 2013
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type AddressType as open {
+  number: int32,
+  street: string,
+  city: string
+}
+
+create type AllType as open {
+  id: int32,
+  name: string,
+  age: float,
+  salary: double,
+  married: boolean,
+  interests: {{string}},
+  children: [string],
+  address: AddressType,
+  dob: date,
+  time: time,
+  datetime: datetime,
+  duration: duration,
+  location2d: point,
+  location3d: point3d,
+  line: line,
+  polygon: polygon,
+  circle: circle
+}
+
+create dataset All(AllType)
+  primary key id;
+  
+ 
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.2.update.aql
new file mode 100644
index 0000000..eaafddd
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.2.update.aql
@@ -0,0 +1,14 @@
+/*
+ * Description  : This test case is to verify the fix for issue343
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=343
+ * Expected Res : Success
+ * Date         : 30th April 2013
+ */
+
+use dataverse test;
+
+insert into dataset All (
+let $addedList := ["blah"]
+let $record:= { "id": 13, "name": string("Nancy"), "age": 32.5f, "salary": 12.000 ,"married": boolean("true"), "interests": {{"reading", "writing"}}, "children": ["Brad", "Scott"],  "address": {  "number": 8389,  "street": "Hill St.",  "city": "Mountain View" }, "dob": date("-2011-01-27"), "time": time("12:20:30Z"), "datetime": datetime("-1951-12-27T12:20:30"),  "duration": duration("P10Y11M12DT10H50M30S"),  "location2d": point("41.00,44.00"),  "location3d": point3d("44.00,13.00,41.00"), "line" : line("10.1,11.1 10.2,11.2"), "polygon" : polygon("1.2,1.3 2.1,2.5 3.5,3.6 4.6,4.8"), "circle" : circle("10.1,11.1 10.2"), "mylist" : $addedList }
+return $record
+)
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.3.query.aql
new file mode 100644
index 0000000..9dfde51
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue343/query-issue343.3.query.aql
@@ -0,0 +1,11 @@
+/*
+ * Description  : This test case is to verify the fix for issue343
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=343
+ * Expected Res : Success
+ * Date         : 30th April 2013
+ */
+
+use dataverse test;
+
+for $x in dataset All
+return $x
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.1.ddl.aql
new file mode 100644
index 0000000..85f2160
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.1.ddl.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : This test case is to verify the fix for issue350
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=350
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+drop dataverse TinySocial if exists;
+create dataverse TinySocial;
+use dataverse TinySocial;
+
+create type TweetMessageType as open {
+tweetid: string
+};
+
+create dataset TweetMessages(TweetMessageType)
+primary key tweetid; 
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.2.update.aql
new file mode 100644
index 0000000..372d7ca
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.2.update.aql
@@ -0,0 +1,50 @@
+/*
+ * Description  : This test case is to verify the fix for issue350
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=350
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+use dataverse TinySocial;
+
+load dataset TweetMessages
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/tw_messages.adm"),("format"="adm"));
+
+insert into dataset TweetMessages
+(
+   {"tweetid":"13",
+    "user":
+        {"screen-name":"NathanGiesen@211",
+         "lang":"en",
+         "friends_count":39345,
+         "statuses_count":479,
+         "name":"Nathan Giesen",
+         "followers_count":49420,
+         "hobbies":["basket weaving","mud wrestling"]
+        },
+    "sender-location":point("47.44,80.65"),
+    "send-time":datetime("2008-04-26T10:10:35"),
+    "referred-topics":{{"tweeting"}},
+    "message-text":"tweety tweet, my fellow tweeters!"
+   }
+);
+
+insert into dataset TweetMessages
+(
+   {"tweetid":"15",
+    "user":
+        {"screen-name":"Jason17",
+         "lang":"en",
+         "friends_count":393,
+         "statuses_count":47,
+         "name":"Nathan Giesen",
+         "followers_count":420,
+         "hobbies":["swimming"]
+        },
+    "sender-location":point("49.44,80.65"),
+    "send-time":datetime("2009-04-26T10:10:35"),
+    "referred-topics":{{"nothing"}},
+    "message-text":"Nothing to say!"
+   }
+);
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.3.query.aql
new file mode 100644
index 0000000..298940a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350-2/query-issue350-2.3.query.aql
@@ -0,0 +1,13 @@
+/*
+ * Description  : This test case is to verify the fix for issue350
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=350
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+use dataverse TinySocial;
+
+for $tm  in dataset TweetMessages
+where (every $h in $tm.user.hobbies satisfies $h = "basket weaving")
+order by $tm.tweetid
+return $tm;
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.1.ddl.aql
new file mode 100644
index 0000000..85f2160
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.1.ddl.aql
@@ -0,0 +1,17 @@
+/*
+ * Description  : This test case is to verify the fix for issue350
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=350
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+drop dataverse TinySocial if exists;
+create dataverse TinySocial;
+use dataverse TinySocial;
+
+create type TweetMessageType as open {
+tweetid: string
+};
+
+create dataset TweetMessages(TweetMessageType)
+primary key tweetid; 
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.2.update.aql
new file mode 100644
index 0000000..372d7ca
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.2.update.aql
@@ -0,0 +1,50 @@
+/*
+ * Description  : This test case is to verify the fix for issue350
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=350
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+use dataverse TinySocial;
+
+load dataset TweetMessages
+using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
+(("path"="nc1://data/twitter/tw_messages.adm"),("format"="adm"));
+
+insert into dataset TweetMessages
+(
+   {"tweetid":"13",
+    "user":
+        {"screen-name":"NathanGiesen@211",
+         "lang":"en",
+         "friends_count":39345,
+         "statuses_count":479,
+         "name":"Nathan Giesen",
+         "followers_count":49420,
+         "hobbies":["basket weaving","mud wrestling"]
+        },
+    "sender-location":point("47.44,80.65"),
+    "send-time":datetime("2008-04-26T10:10:35"),
+    "referred-topics":{{"tweeting"}},
+    "message-text":"tweety tweet, my fellow tweeters!"
+   }
+);
+
+insert into dataset TweetMessages
+(
+   {"tweetid":"15",
+    "user":
+        {"screen-name":"Jason17",
+         "lang":"en",
+         "friends_count":393,
+         "statuses_count":47,
+         "name":"Nathan Giesen",
+         "followers_count":420,
+         "hobbies":["swimming"]
+        },
+    "sender-location":point("49.44,80.65"),
+    "send-time":datetime("2009-04-26T10:10:35"),
+    "referred-topics":{{"nothing"}},
+    "message-text":"Nothing to say!"
+   }
+);
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.3.query.aql
new file mode 100644
index 0000000..79a620b
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue350/query-issue350.3.query.aql
@@ -0,0 +1,12 @@
+/*
+ * Description  : This test case is to verify the fix for issue350
+ 				: https://code.google.com/p/asterixdb/issues/detail?id=350
+ * Expected Res : Success
+ * Date         : 28th April 2013
+ */
+
+use dataverse TinySocial;
+
+for $tm  in dataset TweetMessages
+where (some $h in $tm.user.hobbies satisfies $h = "basket weaving")
+return $tm;
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55-1/query-issue55-1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-issue55/query-issue55.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal/query-proposal.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/open-closed/query-proposal02/query-proposal02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_01/everysat_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_02/everysat_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_03/everysat_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/everysat_04/everysat_04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_01/somesat_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_02/somesat_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_03/somesat_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_04/somesat_04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_05/somesat_05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/quantifiers/somesat_06/somesat_06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-closed-fieldname-conflict_issue173/closed-closed-fieldname-conflict_issue173.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_01/closed-record-constructor_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_02/closed-record-constructor_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/closed-record-constructor_03/closed-record-constructor_03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/expFieldName/expFieldName.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/field-access-by-index_01/field-access-by-index_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/field-access-on-open-field/field-access-on-open-field.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-closed-fieldname-conflict_issue173/open-closed-fieldname-conflict_issue173.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-open-fieldname-conflict_issue173/open-open-fieldname-conflict_issue173.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_01/open-record-constructor_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/records/open-record-constructor_02/open-record-constructor_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/10/10.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/10/10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/10/10.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/10/10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/10/10.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/10/10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/10/10.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/10/10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/10/10.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/10/10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/10/10.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/10/10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/20/20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/20/20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/20/20.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/20/20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/20/20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/20/20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/20/20.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/20/20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/20/20.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/20/20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/20/20.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/20/20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/30/30.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/30/30.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/30/30.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/30/30.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/30/30.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/30/30.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/30/30.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/30/30.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/30/30.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/30/30.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/30/30.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/30/30.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_01/alltypes_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/alltypes_02/alltypes_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql b/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/invalid-scan-syntax/invalid-scan-syntax.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_1/issue238_query_1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/issue238_query_2/issue238_query_2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/numeric_types_01/numeric_types_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_01/spatial_types_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/spatial_types_02/spatial_types_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/temp_types_01/temp_types_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/scan/temp_types_02/temp_types_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/count-nullable/count-nullable.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/cust-filter/cust-filter.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/semistructured/has-param1/has-param1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_ints/edit-distance-check_ints.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-check_strings/edit-distance-check_strings.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_ints/edit-distance_ints.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/edit-distance_strings/edit-distance_strings.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/prefix-len-jaccard/prefix-len-jaccard.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_ints/similarity-jaccard_ints.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_query/similarity-jaccard_query.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/similarity/similarity-jaccard_strings/similarity-jaccard_strings.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/cell-aggregation/cell-aggregation.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/circle-intersect-circle/circle-intersect-circle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/circle_accessor/circle_accessor.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/create-rtree-index/create-rtree-index.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/distance-between-points/distance-between-points.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-circle/line-intersect-circle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-line/line-intersect-line.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-polygon/line-intersect-polygon.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line-intersect-rectangle/line-intersect-rectangle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/line_accessor/line_accessor.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-equals-point/point-equals-point.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-circle/point-in-circle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-polygon/point-in-polygon.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-in-rectangle/point-in-rectangle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point-on-line/point-on-line.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/point_accessor/point_accessor.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-circle/polygon-intersect-circle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-polygon/polygon-intersect-polygon.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/polygon_accessor/polygon_accessor.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-circle/rectangle-intersect-circle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/rectangle_accessor/rectangle_accessor.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/spatial/spatial-area/spatial-area.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string1/codepoint-to-string1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/codepoint-to-string2/codepoint-to-string2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/concat_01/concat_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/concat_02/concat_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/contains_01/contains_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr01/cpttostr01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr02/cpttostr02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/cpttostr04/cpttostr04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with1/end-with1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with2/end-with2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with3/end-with3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with4/end-with4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/end-with5/end-with5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/ends-with_01/ends-with_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/endwith02/endwith02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/endwith03/endwith03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/length_01/length_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/length_02/length_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/like_01/like_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/like_null/like_null.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/lowercase/lowercase.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches02/matches02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches03/matches03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches04/matches04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches05/matches05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches06/matches06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches1/matches1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches11/matches11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches2/matches2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches21/matches21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches22/matches22.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches23/matches23.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matches3/matches3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/matchesnull/matchesnull.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace1/replace1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace2/replace2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace21/replace21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace22/replace22.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/replace3/replace3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with1/start-with1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with2/start-with2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with3/start-with3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with4/start-with4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/start-with5/start-with5.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/starts-with_01/starts-with_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/startwith02/startwith02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/startwith03/startwith03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strconcat01/strconcat01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strconcat02/strconcat02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-concat1/string-concat1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal1/string-equal1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal2/string-equal2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal3/string-equal3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-equal4/string-equal4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-join1/string-join1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint/string-to-codepoint.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/string-to-codepoint1/string-to-codepoint1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strlen02/strlen02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strlen03/strlen03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt01/strtocpt01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt02/strtocpt02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/strtocpt03/strtocpt03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr01/substr01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr04/substr04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr05/substr05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substr06/substr06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-1/substring-after-1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-2/substring-after-2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-3/substring-after-3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-after-4/substring-after-4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-1/substring-before-1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-2/substring-before-2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring-before-3/substring-before-3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-1/substring2-1.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-2/substring2-2.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-3/substring2-3.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring2-4/substring2-4.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/substring_01/substring_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase02/toLowerCase02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase03/toLowerCase03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/string/toLowerCase04/toLowerCase04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/01/01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/02/02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/03/03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/04/04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/05/05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/06/06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/subset-collection/07/07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.3.query.aql
new file mode 100644
index 0000000..c41d37d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.3.query.aql
@@ -0,0 +1,12 @@
+use dataverse test;
+
+let $c1 := date("2010-10-30")
+let $c2 := datetime("1987-11-19T23:49:23.938")
+let $c3 := date("-1987-11-19")
+let $c4 := date("09280329")
+let $c5 := datetime("19371229T20030628")
+let $c6 := time("12:23:34.930+07:00")
+let $c7 := string("-0003-01-09T23:12:12.39-07:00")
+let $c8 := duration("P3Y73M632DT49H743M3948.94S")
+
+return {"year1": year($c1), "year2": year($c2), "year3": year($c3), "year4": year($c4), "year5": year($c5), "year6": year($c7), "year7": year($c8), "year-null": year(null), "month1": month($c1), "month2": month($c2), "month3": month($c3), "month4": month($c4), "month5": month($c5), "month6": month($c8), "month-null": month(null), "day1": day($c1), "day2": day($c2), "day3": day($c3), "day4": day($c4), "day5": day($c5), "day6": day($c8), "day-null": day(null), "hour1": hour($c2), "hour2": hour($c5), "hour3": hour($c6), "hour4": hour($c8), "hour-null": hour(null), "min1": minute($c2), "min2": minute($c5), "min3": minute($c6), "min4": minute($c8), "min-null": minute(null), "second1": second($c2), "second2": second($c5), "second3": second($c6), "second4": second($c8), "second-null": second(null), "ms1": millisecond($c2), "ms2": millisecond($c5), "ms3": millisecond($c6), "ms4": millisecond($c8), "ms-null": millisecond(null) }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.1.ddl.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql
copy to asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.2.update.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.2.update.aql
copy to asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
new file mode 100644
index 0000000..b703377
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval/accessors_interval.3.query.aql
@@ -0,0 +1,7 @@
+use dataverse test;
+
+let $interval1 := interval-from-date(date("2010-10-30"), "2013-04-01")
+let $interval2 := interval-from-time("08:09:10.234Z", time("203040567+0800"))
+let $interval3 := interval-from-datetime("2009-09-01T00:00:00.000+08:00", datetime-from-date-time(date("2013-04-04"), time("00:00:00.000+08:00")))
+
+return {"start1": get-interval-start($interval1), "end1": get-interval-end($interval1), "start2": get-interval-start($interval2), "end2": get-interval-end($interval2), "start3": get-interval-start($interval3), "end3": get-interval-end($interval3) }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.1.ddl.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.1.ddl.aql
copy to asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.2.update.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/queries/aggregate/avg_int16_null/avg_int16_null.2.update.aql
copy to asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.3.query.aql
new file mode 100644
index 0000000..98bead8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/accessors_interval_null/accessors_interval_null.3.query.aql
@@ -0,0 +1,3 @@
+use dataverse test;
+
+{"start-null-interval": get-interval-start(null), "end-null-interval": get-interval-end(null) }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.3.query.aql
new file mode 100644
index 0000000..c099d14
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.3.query.aql
@@ -0,0 +1,7 @@
+use dataverse test;
+
+let $t1 := time("20:15:10.327")
+let $dt1 := datetime("2010-10-23T01:12:13.329Z")
+let $s1 := adjust-time-for-timezone($t1, "+0800")
+let $s2 := adjust-datetime-for-timezone($dt1, "-0615")
+return { "time" : $s1, "datetime" : $s2, "null1": adjust-time-for-timezone(null, "+0800"), "null2": adjust-time-for-timezone($t1, null), "null3": adjust-datetime-for-timezone(null, "-0800"), "null4": adjust-datetime-for-timezone($dt1, null) }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.3.query.aql
new file mode 100644
index 0000000..291d296
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.3.query.aql
@@ -0,0 +1,42 @@
+use dataverse test;
+
+let $t1 := datetime("1987-11-19T23:49:23.938")
+let $t2 := date("-1328-10-23")
+let $dr1 := duration("P7382DT39283M3921.329S")
+let $dr2 := duration("-PT63H398212M3219.328S")
+let $dr3 := duration("P1Y90M")
+let $dr4 := duration("-P3Y89M4089DT47382.983S")
+let $cdr1 := calendar-duration-from-datetime($t1, $dr1)
+let $dt1 := add-datetime-duration($t1, $dr1)
+let $dtt1 := add-datetime-duration($t1, $cdr1)
+let $c1 := $dt1 = $dtt1
+let $cdr2 := calendar-duration-from-datetime($t1, $dr2)
+let $dt2 := add-datetime-duration($t1, $dr2)
+let $dtt2 := add-datetime-duration($t1, $cdr2)
+let $c2 := $dt2 = $dtt2
+let $cdr3 := calendar-duration-from-datetime($t1, $dr3)
+let $dt3 := add-datetime-duration($t1, $dr3)
+let $dtt3 := add-datetime-duration($t1, $cdr3)
+let $c3 := $dt3 = $dtt3
+let $cdr4 := calendar-duration-from-datetime($t1, $dr4)
+let $dt4 := add-datetime-duration($t1, $dr4)
+let $dtt4 := add-datetime-duration($t1, $cdr4)
+let $c4 := $dt4 = $dtt4
+let $cdr5 := calendar-duration-from-date($t2, $dr1)
+let $dt5 := add-date-duration($t2, $dr1)
+let $dtt5 := add-date-duration($t2, $cdr5)
+let $c5 := $dt5 = $dtt5
+let $cdr6 := calendar-duration-from-date($t2, $dr2)
+let $dt6 := add-date-duration($t2, $dr2)
+let $dtt6 := add-date-duration($t2, $cdr6)
+let $c6 := $dt6 = $dtt6
+let $cdr7 := calendar-duration-from-date($t2, $dr3)
+let $dt7 := add-date-duration($t2, $dr3)
+let $dtt7 := add-date-duration($t2, $cdr7)
+let $c7 := $dt7 = $dtt7
+let $cdr8 := calendar-duration-from-date($t2, $dr4)
+let $dt8 := add-date-duration($t2, $dr4)
+let $dtt8 := add-date-duration($t2, $cdr8)
+let $c8 := $dt8 = $dtt8
+
+return { "cduration1":$cdr1, "c1":$c1, "cduration2":$cdr2, "c2":$c2, "cduration3":$cdr3, "c3":$c3, "cduration4":$cdr4, "c4":$c4, "cduration5":$cdr5, "c5":$c5, "cduration6":$cdr6, "c6":$c6, "cduration7":$cdr7, "c7":$c7, "cduration8":$cdr8, "c8":$c8, "cduration-null-1": calendar-duration-from-datetime(null, $dr1), "cduration-null-2": calendar-duration-from-datetime($t1, null), "cduration-null-3": calendar-duration-from-date(null, $dr1), "cduration-null-4": calendar-duration-from-date($t2, null) }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.3.query.aql
new file mode 100644
index 0000000..b748429
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.3.query.aql
@@ -0,0 +1,23 @@
+use dataverse test;
+
+let $d1 := date-from-unix-time-in-days(15600)
+let $null1 := date-from-unix-time-in-days(null)
+let $dt1 := datetime("1327-12-02T23:35:49.938Z")
+let $d2 := date-from-datetime($dt1)
+let $null2 := date-from-datetime(null)
+let $dt2 := datetime("2012-10-11T02:30:23+03:00")
+let $d3 := date-from-datetime($dt2)
+let $dr1 := duration("-P2Y1M90DT30H")
+let $d4 := add-date-duration($d1, $dr1)
+let $null3 := add-date-duration(null, $dr1)
+let $null4 := add-date-duration($d1, null)
+let $c1 := $d1 = add-date-duration($d4, subtract-date($d1, $d4))
+let $dr2 := duration("P300Y900MT360000M")
+let $d5 := add-date-duration($d2, $dr2)
+let $c2 := $d2 = add-date-duration($d5, subtract-date($d2, $d5))
+let $dr3 := subtract-date($d5, $d2)
+let $dr4 := subtract-date($d4, $d1)
+let $null5 := subtract-date(null, $d2)
+let $null6 := subtract-date($d5, null)
+
+return { "date1": $d1, "date2": $d2, "date3": $d3, "date4": $d4, "date5": $d5, "duration1": $dr3, "duration2": $dr4, "c1": $c1, "c2": $c2, "null1": $null1, "null2": $null2, "null3": $null3, "null4": $null4, "null5": $null5, "null6": $null6 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.3.query.aql
new file mode 100644
index 0000000..ea6c2a8
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.3.query.aql
@@ -0,0 +1,18 @@
+use dataverse test;
+
+let $dt1 := datetime-from-unix-time-in-ms(956007429)
+let $null1 := datetime-from-unix-time-in-ms(null)
+let $d1 := date("1327-12-02")
+let $t1 := time("15:35:49.938-0800")
+let $dt2 := datetime-from-date-time($d1, $t1)
+let $null2 := datetime-from-date-time(null, $t1)
+let $null3 := datetime-from-date-time($d1, null)
+let $dr1 := subtract-datetime($dt2, $dt1)
+let $null4 := subtract-datetime(null, $dt1)
+let $null5 := subtract-datetime($dt2, null)
+let $dt3 := add-datetime-duration($dt1, $dr1)
+let $null6 := add-datetime-duration(null, $dr1)
+let $null7 := add-datetime-duration($dt1, null)
+let $c1 := $dt1 = add-datetime-duration($dt3, subtract-datetime($dt1, $dt3))
+
+return { "datetime1" : $dt1, "datetime2" : $dt2, "datetime3" : $dt3, "duration1" : $dr1, "c1" : $c1, "null1" : $null1, "null2" : $null2, "null3" : $null3, "null4" : $null4, "null5" : $null5, "null6" : $null6, "null7" : $null7 }
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.1.ddl.aql
new file mode 100644
index 0000000..cb55dad
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.1.ddl.aql
@@ -0,0 +1,8 @@
+/*
+ * Description      :   Test cases for duration comparison functions
+ * Expected Result  :   Success
+ * Date             :   19 Apr, 2013
+ */
+
+drop dataverse test if exists;
+create dataverse test;
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.2.update.aql
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.2.update.aql
copy to asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.3.query.aql
new file mode 100644
index 0000000..77fcc4f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/duration_comps/duration_comps.3.query.aql
@@ -0,0 +1,11 @@
+use dataverse test;
+
+let $dr1 := duration("-P3D")
+let $dr2 := duration("P1D")
+let $dr3 := duration("P1Y")
+let $dr4 := duration("P13M")
+let $dr5 := duration("PT24H")
+let $dr6 := duration-from-months(months-of-year-month-duration($dr3))
+let $dr7 := duration-from-ms(ms-of-day-time-duration($dr1))
+
+return { "yearMonthGreaterComp" : year-month-duration-greater-than($dr4, $dr3), "dayTimeGreaterComp" : day-time-duration-greater-than($dr2, $dr1), "yearMonthLessComp" : year-month-duration-less-than($dr4, $dr3), "dayTimeLessComp" : day-time-duration-less-than($dr2, $dr1), "equal1": duration-equal($dr2, $dr5), "equal2": duration-equal($dr1, $dr5), "equal3": duration-equal($dr6, $dr3), "equal4": duration-equal($dr7, $dr1) }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_delimited_ds/insert_from_delimited_ds.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/insert_from_ext_ds/insert_from_ext_ds.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
new file mode 100644
index 0000000..1eb5f53
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
@@ -0,0 +1,53 @@
+use dataverse test;
+
+let $itv1 := interval-from-date("2010-10-30", "2010-12-21")
+let $itv2 := interval-from-date("2011-10-30", "2012-10-21")
+let $itv3 := interval-from-date("2010-12-21", "2013-01-01")
+let $blnBefore1 := interval-before($itv1, $itv2)
+let $blnAfter1 := interval-after($itv2, $itv1)
+let $blnBefore2 := interval-before($itv1, $itv3)
+let $blnAfter2 := interval-after($itv3, $itv1)
+
+let $itv4 := interval-from-datetime("2012-06-26T01:01:01.111", "2012-07-27T02:02:02.222")
+let $itv5 := interval-from-datetime("20120727T020202222", "2013-08-08T03:03:03.333")
+let $itv6 := interval-from-datetime("19000707T020202222", "2013-08-07T03:03:03.333")
+let $blnMeet1 := interval-meets($itv4, $itv5)
+let $blnMetBy1 := interval-met-by($itv5, $itv4)
+let $blnMeet2 := interval-meets($itv6, $itv4)
+let $blnMetBy2 := interval-met-by($itv6, $itv4)
+
+let $itv7 := interval-from-time("12:32:38", "20:29:20")
+let $itv8 := interval-from-time("17:48:19", "22:19:49")
+let $itv9 := interval-from-time("01:32:49", "17:48:19")
+let $blnOverlaps1 := interval-overlaps($itv7, $itv8)
+let $blnOverlapped1 := interval-overlapped-by($itv8, $itv7)
+let $blnOverlaps2 := interval-overlaps($itv9, $itv8)
+let $blnOverlapped2 := interval-overlapped-by($itv8, $itv9)
+let $blnOverlap1 := overlap($itv9, $itv7)
+let $blnOverlap2 := overlap($itv9, $itv8)
+
+let $itv10 := interval-from-date("2010-10-30", "2010-11-30")
+let $blnStarts1 := interval-starts($itv10, $itv1)
+let $blnStarts2 := interval-starts($itv10, $itv2)
+let $blnStartedBy1 := interval-started-by($itv1, $itv10)
+let $blnStartedBy2 := interval-started-by($itv10, $itv2)
+
+let $itv10 := interval-from-datetime("19000707T020202222", "2013-08-07T03:03:03.333")
+let $itv11 := interval-from-datetime("19990707T020202222", "2013-08-07T03:03:03.333")
+let $itv12 := interval-from-datetime("-19990707T020202222", "2013-08-07T03:03:03.333")
+let $blnCovers1 := interval-covers($itv10, $itv11)
+let $blnCovers2 := interval-covers($itv10, $itv12)
+let $blnCoveredBy1 := interval-covered-by($itv11, $itv10)
+let $blnCoveredBy2 := interval-covered-by($itv12, $itv10)
+
+let $itv11 := interval-from-time("19:00:00.009", "20:29:20.000")
+let $blnEnds1 := interval-ends($itv11, $itv7)
+let $blnEnds2 := interval-ends($itv11, $itv8)
+let $blnEndedBy1 := interval-ended-by($itv7, $itv11)
+let $blnEndedBy2 := interval-ended-by($itv8, $itv11)
+
+let $null1 := interval-before(null, $itv2)
+let $null2 := interval-covered-by($itv11, null)
+let $null3 := overlap(null, null)
+
+return { "before1" : $blnBefore1, "before2" : $blnBefore2, "after1" : $blnAfter1, "after2" : $blnAfter2, "meet1" : $blnMeet1, "meet2" : $blnMeet2, "metby1" : $blnMetBy1, "metby2" : $blnMetBy2, "overlaps1" : $blnOverlaps1, "overlaps2" : $blnOverlaps2, "overlapped1" : $blnOverlapped1, "overlapped2" : $blnOverlapped2, "overlap1" : $blnOverlap1, "overlap2" : $blnOverlap2, "starts1" : $blnStarts1, "starts2" : $blnStarts2, "startedby1" : $blnStartedBy1, "startedby2" : $blnStartedBy2, "covers1" : $blnCovers1, "covers2" : $blnCovers2, "coveredby1" : $blnCoveredBy1, "coveredby2" : $blnCoveredBy2, "ends1" : $blnEnds1, "ends2" : $blnEnds2, "endedby1" : $blnEndedBy1, "endedby2" : $blnEndedBy2, "null1": $null1, "null2": $null2, "null3": $null3 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.2.update.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.3.query.aql
new file mode 100644
index 0000000..c042df0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.3.query.aql
@@ -0,0 +1,26 @@
+use dataverse test;
+
+let $t1 := time-from-unix-time-in-ms(1560074)
+let $null1 := time-from-unix-time-in-ms(null)
+let $dt1 := datetime("1327-12-02T23:35:49.938Z")
+let $t2 := time-from-datetime($dt1)
+let $null2 := time-from-datetime(null)
+let $dt2 := datetime("2012-10-11T02:30:23+03:00")
+let $t3 := time-from-datetime($dt2)
+let $dr1 := duration("-PT30H")
+let $t4 := add-time-duration($t1, $dr1)
+let $null3 := add-time-duration(null, $dr1)
+let $null4 := add-time-duration($t1, null)
+let $c1 := $t1 = add-time-duration($t4, subtract-time($t1, $t4))
+let $dr2 := duration("PT36M")
+let $t5 := add-time-duration($t2, $dr2)
+let $c2 := $t2 = add-time-duration($t5, subtract-time($t2, $t5))
+let $dr3 := subtract-time($t5, $t2)
+let $dr4 := subtract-time($t4, $t1)
+let $null5 := subtract-time(null, $t1)
+let $null6 := subtract-time($t4, null)
+let $ct := current-time()
+let $cd := current-date()
+let $cdt := current-datetime()
+
+return { "time1" : $t1, "time2" : $t2, "time3" : $t3, "time4" : $t4, "time5" : $t5, "duration1" : $dr3, "duration2" : $dr4, "c1" : $c1, "c2" : $c2, "null1": $null1, "null2": $null2, "null3": $null3, "null4": $null4, "null5": $null5, "null6": $null6 }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_01/gram-tokens_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/gram-tokens_02/gram-tokens_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_01/word-tokens_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tokenizers/word-tokens_02/word-tokens_02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/distinct_by/distinct_by.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/group_no_agg/group_no_agg.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item/q10_returned_item.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q10_returned_item_int64/q10_returned_item_int64.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q11_important_stock/q11_important_stock.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q12_shipping/q12_shipping.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q13_customer_distribution/q13_customer_distribution.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q14_promotion_effect/q14_promotion_effect.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q15_top_supplier/q15_top_supplier.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q18_large_volume_customer/q18_large_volume_customer.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q19_discounted_revenue/q19_discounted_revenue.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q20_potential_part_promotion/q20_potential_part_promotion.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q4_order_priority/q4_order_priority.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q5_local_supplier_volume/q5_local_supplier_volume.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q7_volume_shipping/q7_volume_shipping.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q8_national_market_share/q8_national_market_share.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/f01/f01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/query-issue201/query-issue201.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf01/udf01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf02/udf02.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf03/udf03.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf04/udf04.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf05/udf05.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf06/udf06.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf07/udf07.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf08/udf08.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf09/udf09.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf10/udf10.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf11/udf11.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf12/udf12.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf13/udf13.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf14/udf14.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf15/udf15.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf16/udf16.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf17/udf17.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf18/udf18.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf19/udf19.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf20/udf20.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf21/udf21.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf22/udf22.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf23/udf23.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf24/udf24.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf25/udf25.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf26/udf26.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf27/udf27.3.query.aql
diff --git a/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf28/udf28.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf28/udf28.1.ddl.aql
new file mode 100644
index 0000000..62bbd54
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf28/udf28.1.ddl.aql
@@ -0,0 +1,18 @@
+/*
+ * Description  : Create UDF and terminate the statement with a ';'
+ * Expected Res : Success
+ * Date         : Sep 6th 2012
+ */
+
+// this test is not giving expected results.
+// issue 194 reported to track this
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+create function test.f1(){
+100
+};
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf28/udf28.2.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf28/udf28.2.query.aql
new file mode 100644
index 0000000..2e2e27c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf28/udf28.2.query.aql
@@ -0,0 +1,10 @@
+/*
+ * Description  : Create a UDF but use ';' for terminating the create function statement. Look up metadata
+ * Expected Res : Success
+ * Date         : Apr 5th 2013
+ */
+
+use dataverse test;
+for $x in dataset Metadata.Function
+where $x.DataverseName='test'
+return $x
diff --git a/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf29/udf29.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf29/udf29.1.ddl.aql
new file mode 100644
index 0000000..edede00
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf29/udf29.1.ddl.aql
@@ -0,0 +1,16 @@
+/*
+ * Description  : Declare UDF and terminate the statement with a ';'
+ * Expected Res : Success
+ * Date         : Apr 10th 2013
+ */
+
+
+drop dataverse test if exists;
+create dataverse test;
+
+use dataverse test;
+
+declare function test.f1(){
+100
+};
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf29/udf29.2.query.aql b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf29/udf29.2.query.aql
new file mode 100644
index 0000000..2f9e763
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/user-defined-functions/udf29/udf29.2.query.aql
@@ -0,0 +1,9 @@
+/*
+ * Description  : Declare a UDF but use ';' for terminating the declare function statement. Invoke the function
+ * Expected Res : Success
+ * Date         : Apr 10th 2013
+ */
+
+use dataverse test;
+let $x:=f1()
+return $x
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/writers/print_01/print_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.1.ddl.aql b/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.1.ddl.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.1.ddl.aql
rename to asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.1.ddl.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.2.update.aql b/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.2.update.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.2.update.aql
rename to asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.2.update.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.3.query.aql b/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.3.query.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.3.query.aql
rename to asterix-app/src/test/resources/runtimets/queries/writers/serialized_01/serialized_01.3.query.aql
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_double/avg_double.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_double/avg_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_double/avg_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_double/avg_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_double_null/avg_double_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_double_null/avg_double_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_double_null/avg_double_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_double_null/avg_double_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_01/avg_empty_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_01/avg_empty_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_01/avg_empty_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_01/avg_empty_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_02/avg_empty_02.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_02/avg_empty_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_02/avg_empty_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_empty_02/avg_empty_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_float/avg_float.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_float/avg_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_float/avg_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_float/avg_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_float_null/avg_float_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_float_null/avg_float_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_float_null/avg_float_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_float_null/avg_float_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16/avg_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16/avg_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16/avg_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16/avg_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16_null/avg_int16_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16_null/avg_int16_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16_null/avg_int16_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int16_null/avg_int16_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32/avg_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32/avg_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32/avg_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32/avg_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32_null/avg_int32_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32_null/avg_int32_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32_null/avg_int32_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int32_null/avg_int32_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64/avg_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64/avg_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64/avg_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64/avg_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64_null/avg_int64_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64_null/avg_int64_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64_null/avg_int64_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int64_null/avg_int64_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8/avg_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8/avg_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8/avg_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8/avg_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8_null/avg_int8_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8_null/avg_int8_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8_null/avg_int8_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/avg_int8_null/avg_int8_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_01/count_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/count_01/count_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_01/count_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/count_01/count_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_01/count_empty_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_01/count_empty_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_01/count_empty_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_01/count_empty_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_02/count_empty_02.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_02/count_empty_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_02/count_empty_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/count_empty_02/count_empty_02.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/aggregate/count_null/count_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/count_null/count_null.1.adm
new file mode 100644
index 0000000..df462fe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/aggregate/count_null/count_null.1.adm
@@ -0,0 +1 @@
+{ "count": 2 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_01/global-avg_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_01/global-avg_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_01/global-avg_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_01/global-avg_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_null/global-avg_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_null/global-avg_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_null/global-avg_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/global-avg_null/global-avg_null.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/aggregate/issue395/issue395.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/issue395/issue395.1.adm
new file mode 100644
index 0000000..bf0d87a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/aggregate/issue395/issue395.1.adm
@@ -0,0 +1 @@
+4
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_01/count_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/issue412_0/issue412_0.1.adm
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_01/count_01.1.adm
copy to asterix-app/src/test/resources/runtimets/results/aggregate/issue412_0/issue412_0.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/aggregate/issue412_1/issue412_1.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/issue412_1/issue412_1.1.adm
new file mode 100644
index 0000000..7c1107a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/aggregate/issue412_1/issue412_1.1.adm
@@ -0,0 +1 @@
+{ "count": 3, "average": null, "sum": null, "min": null, "max": null }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double/local-avg_double.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double/local-avg_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double/local-avg_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double/local-avg_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double_null/local-avg_double_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double_null/local-avg_double_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double_null/local-avg_double_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_double_null/local-avg_double_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float/local-avg_float.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float/local-avg_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float/local-avg_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float/local-avg_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float_null/local-avg_float_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float_null/local-avg_float_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float_null/local-avg_float_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_float_null/local-avg_float_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16/local-avg_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16/local-avg_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16/local-avg_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16/local-avg_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16_null/local-avg_int16_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16_null/local-avg_int16_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16_null/local-avg_int16_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int16_null/local-avg_int16_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32/local-avg_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32/local-avg_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32/local-avg_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32/local-avg_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32_null/local-avg_int32_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32_null/local-avg_int32_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32_null/local-avg_int32_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int32_null/local-avg_int32_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64/local-avg_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64/local-avg_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64/local-avg_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64/local-avg_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64_null/local-avg_int64_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64_null/local-avg_int64_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64_null/local-avg_int64_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int64_null/local-avg_int64_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8/local-avg_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8/local-avg_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8/local-avg_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8/local-avg_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8_null/local-avg_int8_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8_null/local-avg_int8_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8_null/local-avg_int8_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/local-avg_int8_null/local-avg_int8_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_01/max_empty_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_01/max_empty_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_01/max_empty_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_01/max_empty_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_02/max_empty_02.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_02/max_empty_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_02/max_empty_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/max_empty_02/max_empty_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_01/min_empty_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_01/min_empty_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_01/min_empty_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_01/min_empty_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_02/min_empty_02.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_02/min_empty_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_02/min_empty_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/min_empty_02/min_empty_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg/scalar_avg.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg/scalar_avg.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg/scalar_avg.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg/scalar_avg.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_empty/scalar_avg_empty.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_empty/scalar_avg_empty.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_empty/scalar_avg_empty.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_empty/scalar_avg_empty.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_null/scalar_avg_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_null/scalar_avg_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_null/scalar_avg_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_avg_null/scalar_avg_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count/scalar_count.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count/scalar_count.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count/scalar_count.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count/scalar_count.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_empty/scalar_count_empty.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_empty/scalar_count_empty.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_empty/scalar_count_empty.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_empty/scalar_count_empty.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_null/scalar_count_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_null/scalar_count_null.1.adm
new file mode 100644
index 0000000..4ff1111
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_null/scalar_count_null.1.adm
@@ -0,0 +1,7 @@
+4
+4
+4
+4
+4
+4
+4
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max/scalar_max.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max/scalar_max.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max/scalar_max.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max/scalar_max.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_empty/scalar_max_empty.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_empty/scalar_max_empty.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_empty/scalar_max_empty.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_empty/scalar_max_empty.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_null/scalar_max_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_null/scalar_max_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_null/scalar_max_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_max_null/scalar_max_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min/scalar_min.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min/scalar_min.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min/scalar_min.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min/scalar_min.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_empty/scalar_min_empty.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_empty/scalar_min_empty.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_empty/scalar_min_empty.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_empty/scalar_min_empty.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_null/scalar_min_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_null/scalar_min_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_null/scalar_min_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_min_null/scalar_min_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum/scalar_sum.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum/scalar_sum.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum/scalar_sum.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum/scalar_sum.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_empty/scalar_sum_empty.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_empty/scalar_sum_empty.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_empty/scalar_sum_empty.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_empty/scalar_sum_empty.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_null/scalar_sum_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_null/scalar_sum_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_null/scalar_sum_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/scalar_sum_null/scalar_sum_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_double/sum_double.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_double/sum_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_double/sum_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_double/sum_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_double_null/sum_double_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_double_null/sum_double_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_double_null/sum_double_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_double_null/sum_double_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_01/sum_empty_01.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_01/sum_empty_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_01/sum_empty_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_01/sum_empty_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_02/sum_empty_02.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_02/sum_empty_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_02/sum_empty_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_empty_02/sum_empty_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_float/sum_float.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_float/sum_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_float/sum_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_float/sum_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_float_null/sum_float_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_float_null/sum_float_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_float_null/sum_float_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_float_null/sum_float_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16/sum_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16/sum_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16/sum_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16/sum_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16_null/sum_int16_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16_null/sum_int16_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16_null/sum_int16_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int16_null/sum_int16_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32/sum_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32/sum_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32/sum_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32/sum_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32_null/sum_int32_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32_null/sum_int32_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32_null/sum_int32_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int32_null/sum_int32_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64/sum_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64/sum_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64/sum_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64/sum_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64_null/sum_int64_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64_null/sum_int64_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64_null/sum_int64_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int64_null/sum_int64_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8/sum_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8/sum_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8/sum_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8/sum_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8_null/sum_int8_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8_null/sum_int8_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8_null/sum_int8_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_int8_null/sum_int8_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_null-with-pred/sum_null-with-pred.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_null-with-pred/sum_null-with-pred.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_null-with-pred/sum_null-with-pred.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_null-with-pred/sum_null-with-pred.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_numeric_null/sum_numeric_null.1.adm b/asterix-app/src/test/resources/runtimets/results/aggregate/sum_numeric_null/sum_numeric_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/aggregate/sum_numeric_null/sum_numeric_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/aggregate/sum_numeric_null/sum_numeric_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/boolean/and_01/and_01.1.adm b/asterix-app/src/test/resources/runtimets/results/boolean/and_01/and_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/boolean/and_01/and_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/boolean/and_01/and_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/boolean/and_null/and_null.1.adm b/asterix-app/src/test/resources/runtimets/results/boolean/and_null/and_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/boolean/and_null/and_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/boolean/and_null/and_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/boolean/and_null_false/and_null_false.1.adm b/asterix-app/src/test/resources/runtimets/results/boolean/and_null_false/and_null_false.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/boolean/and_null_false/and_null_false.1.adm
rename to asterix-app/src/test/resources/runtimets/results/boolean/and_null_false/and_null_false.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/boolean/not_01/not_01.1.adm b/asterix-app/src/test/resources/runtimets/results/boolean/not_01/not_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/boolean/not_01/not_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/boolean/not_01/not_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/date_order/date_order.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/date_order/date_order.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/date_order/date_order.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/date_order/date_order.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/datetime_order/datetime_order.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/datetime_order/datetime_order.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/datetime_order/datetime_order.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/datetime_order/datetime_order.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/datetime_range/datetime_range.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/datetime_range/datetime_range.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/datetime_range/datetime_range.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/datetime_range/datetime_range.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/datetime_tzeq/datetime_tzeq.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/datetime_tzeq/datetime_tzeq.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/datetime_tzeq/datetime_tzeq.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/datetime_tzeq/datetime_tzeq.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/double/double.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/double/double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/double/double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/double/double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/double_gte_01/double_gte_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/double_gte_01/double_gte_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/double_gte_01/double_gte_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/double_gte_01/double_gte_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/double_null/double_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/double_null/double_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/double_null/double_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/double_null/double_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/eq_01/eq_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/eq_01/eq_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/eq_01/eq_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/eq_01/eq_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/float/float.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/float/float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/float/float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/float/float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/float_null/float_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/float_null/float_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/float_null/float_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/float_null/float_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/gt_01/gt_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/gt_01/gt_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/gt_01/gt_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/gt_01/gt_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/gte_01/gte_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/gte_01/gte_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/gte_01/gte_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/gte_01/gte_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int16/int16.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int16/int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int16/int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int16/int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int16_null/int16_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int16_null/int16_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int16_null/int16_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int16_null/int16_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int32/int32.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int32/int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int32/int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int32/int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int32_null/int32_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int32_null/int32_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int32_null/int32_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int32_null/int32_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int64/int64.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int64/int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int64/int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int64/int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int64_null/int64_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int64_null/int64_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int64_null/int64_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int64_null/int64_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int8/int8.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int8/int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int8/int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int8/int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/int8_null/int8_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/int8_null/int8_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/int8_null/int8_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/int8_null/int8_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/lt_01/lt_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/lt_01/lt_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/lt_01/lt_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/lt_01/lt_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/lte_01/lte_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/lte_01/lte_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/lte_01/lte_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/lte_01/lte_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/neq_01/neq_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/neq_01/neq_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/neq_01/neq_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/neq_01/neq_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/numeric-comparison_01/numeric-comparison_01.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/numeric-comparison_01/numeric-comparison_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/numeric-comparison_01/numeric-comparison_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/numeric-comparison_01/numeric-comparison_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/string/string.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/string/string.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/string/string.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/string/string.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/string_null/string_null.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/string_null/string_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/string_null/string_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/string_null/string_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/comparison/time_order/time_order.1.adm b/asterix-app/src/test/resources/runtimets/results/comparison/time_order/time_order.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/comparison/time_order/time_order.1.adm
rename to asterix-app/src/test/resources/runtimets/results/comparison/time_order/time_order.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/add-null/add-null.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/add-null/add-null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/add-null/add-null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/add-null/add-null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/boolean_01/boolean_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/boolean_01/boolean_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/boolean_01/boolean_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/boolean_01/boolean_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/circle_01/circle_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/circle_01/circle_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/circle_01/circle_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/circle_01/circle_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/date_01/date_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/date_01/date_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/date_01/date_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/date_01/date_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/datetime_01/datetime_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/double_01/double_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/duration_01/duration_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/duration_01/duration_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/duration_01/duration_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/duration_01/duration_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/float_01/float_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/int_01/int_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/int_01/int_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/int_01/int_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/int_01/int_01.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
new file mode 100644
index 0000000..c99ade9
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
@@ -0,0 +1 @@
+{ "interval11": interval-date("2010-10-30, 2012-10-21"), "interval12": interval-date("2010-10-30, 2012-10-21"), "interval13": interval-date("2010-10-30, 2012-10-21"), "interval14": interval-date("2010-10-30, 2012-10-21"), "interval15": null, "interval16": null, "interval21": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval22": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval23": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval24": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval25": null, "interval26": null, "interval31": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval32": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval33": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval34": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval35": null, "interval36": null, "interval41": interval-date("0001-12-27, 0006-01-27"), "interval42": interval-date("0001-12-27, 0006-01-27"), "interval43": interval-date("0001-12-27, 0006-01-27"), "interval44": interval-date("0001-12-27, 0006-01-27"), "interval45": null, "interval46": null, "interval51": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval52": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval53": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval54": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval55": null, "interval56": null, "interval61": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval62": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval63": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval64": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z"), "interval65": null, "interval66": null }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/line_01/line_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/line_01/line_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/line_01/line_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/line_01/line_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/point_01/point_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/point_01/point_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/point_01/point_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/point_01/point_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/polygon_01/polygon_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/polygon_01/polygon_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/polygon_01/polygon_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/polygon_01/polygon_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-01/primitive-01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/primitive-01/primitive-01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-01/primitive-01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/primitive-01/primitive-01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-02/primitive-02.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/primitive-02/primitive-02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-02/primitive-02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/primitive-02/primitive-02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-03/primitive-03.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/primitive-03/primitive-03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-03/primitive-03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/primitive-03/primitive-03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-04/primitive-04.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/primitive-04/primitive-04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/primitive-04/primitive-04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/primitive-04/primitive-04.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/constructor/rectangle_01/rectangle_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/rectangle_01/rectangle_01.1.adm
new file mode 100644
index 0000000..32f14b3
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/constructor/rectangle_01/rectangle_01.1.adm
@@ -0,0 +1 @@
+{ "rectangle1": rectangle("5.1,11.8 87.6,15.6548"), "rectangle2": rectangle("0.1234,-1.0E-10 5.5487,0.48765") }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/string_01/string_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/string_01/string_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/string_01/string_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/string_01/string_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/time_01/time_01.1.adm b/asterix-app/src/test/resources/runtimets/results/constructor/time_01/time_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/constructor/time_01/time_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/constructor/time_01/time_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv01/cross-dv01.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv01/cross-dv01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv01/cross-dv01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv01/cross-dv01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv02/cross-dv02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv03/cross-dv03.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv03/cross-dv03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv03/cross-dv03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv03/cross-dv03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv04/cross-dv04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv07/cross-dv07.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv07/cross-dv07.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv07/cross-dv07.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv07/cross-dv07.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv09/cross-dv09.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv09/cross-dv09.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv09/cross-dv09.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv09/cross-dv09.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv11/cross-dv11.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv11/cross-dv11.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv11/cross-dv11.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv11/cross-dv11.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv12/cross-dv12.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv12/cross-dv12.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv12/cross-dv12.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv12/cross-dv12.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv14/cross-dv14.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv14/cross-dv14.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv14/cross-dv14.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv14/cross-dv14.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv15/cross-dv15.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv15/cross-dv15.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv15/cross-dv15.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv15/cross-dv15.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv17/cross-dv17.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv17/cross-dv17.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv17/cross-dv17.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv17/cross-dv17.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv19/cross-dv19.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20/cross-dv20.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20/cross-dv20.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20/cross-dv20.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv20/cross-dv20.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/drop_dataset/drop_dataset.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/drop_dataset/drop_dataset.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/drop_dataset/drop_dataset.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/drop_dataset/drop_dataset.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_across_dataverses/insert_across_dataverses.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/insert_from_source_dataset/insert_from_source_dataset.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/join_across_dataverses/join_across_dataverses.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/join_across_dataverses/join_across_dataverses.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/join_across_dataverses/join_across_dataverses.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/join_across_dataverses/join_across_dataverses.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/metadata_dataset/metadata_dataset.1.adm b/asterix-app/src/test/resources/runtimets/results/cross-dataverse/metadata_dataset/metadata_dataset.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/metadata_dataset/metadata_dataset.1.adm
rename to asterix-app/src/test/resources/runtimets/results/cross-dataverse/metadata_dataset/metadata_dataset.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_01/customer_q_01.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_01/customer_q_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_01/customer_q_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_01/customer_q_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_02/customer_q_02.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_02/customer_q_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_02/customer_q_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_02/customer_q_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_03/customer_q_03.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_03/customer_q_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_03/customer_q_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_03/customer_q_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_04/customer_q_04.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_04/customer_q_04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_04/customer_q_04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_04/customer_q_04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_05/customer_q_05.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_05/customer_q_05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_05/customer_q_05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_05/customer_q_05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_06/customer_q_06.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_06/customer_q_06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_06/customer_q_06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_06/customer_q_06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_07/customer_q_07.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_07/customer_q_07.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_07/customer_q_07.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_07/customer_q_07.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_08/customer_q_08.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/customer_q_08/customer_q_08.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/customer_q_08/customer_q_08.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/customer_q_08/customer_q_08.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/denorm-cust-order_02/denorm-cust-order_02.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/denorm-cust-order_02/denorm-cust-order_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/denorm-cust-order_02/denorm-cust-order_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/denorm-cust-order_02/denorm-cust-order_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_01/join_q_01.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/join_q_01/join_q_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_01/join_q_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/join_q_01/join_q_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_02/join_q_02.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/join_q_02/join_q_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_02/join_q_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/join_q_02/join_q_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_03/join_q_03.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/join_q_03/join_q_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_03/join_q_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/join_q_03/join_q_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_04/join_q_04.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/join_q_04/join_q_04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/join_q_04/join_q_04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/join_q_04/join_q_04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/load-test/load-test.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/load-test/load-test.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/load-test/load-test.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/load-test/load-test.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_01/order_q_01.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/order_q_01/order_q_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_01/order_q_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/order_q_01/order_q_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_02/order_q_02.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/order_q_02/order_q_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_02/order_q_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/order_q_02/order_q_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_03/order_q_03.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/order_q_03/order_q_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_03/order_q_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/order_q_03/order_q_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_04/order_q_04.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/order_q_04/order_q_04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_04/order_q_04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/order_q_04/order_q_04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_05/order_q_05.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/order_q_05/order_q_05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_05/order_q_05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/order_q_05/order_q_05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_06/order_q_06.1.adm b/asterix-app/src/test/resources/runtimets/results/custord/order_q_06/order_q_06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/custord/order_q_06/order_q_06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/custord/order_q_06/order_q_06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dapd/q1/q1.1.adm b/asterix-app/src/test/resources/runtimets/results/dapd/q1/q1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dapd/q1/q1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dapd/q1/q1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dapd/q2/q2.1.adm b/asterix-app/src/test/resources/runtimets/results/dapd/q2/q2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dapd/q2/q2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dapd/q2/q2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/create-drop-cltype/create-drop-cltype.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/create-drop-opntype/create-drop-opntype.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset-with-index/delete-from-loaded-dataset-with-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/delete-from-loaded-dataset/delete-from-loaded-dataset.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change/delete-syntax-change.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change/delete-syntax-change.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change/delete-syntax-change.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/delete-syntax-change/delete-syntax-change.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/drop-empty-secondary-indexes/drop-empty-secondary-indexes.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/drop-index/drop-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/drop-index/drop-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/drop-index/drop-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/drop-index/drop-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/empty-load-with-index/empty-load-with-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/empty-load-with-index/empty-load-with-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/empty-load-with-index/empty-load-with-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/empty-load-with-index/empty-load-with-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/empty-load/empty-load.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/empty-load/empty-load.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/empty-load/empty-load.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/empty-load/empty-load.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset-with-index/insert-into-empty-dataset-with-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-into-empty-dataset/insert-into-empty-dataset.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_01/insert-into-loaded-dataset-with-index_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset-with-index_02/insert-into-loaded-dataset-with-index_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_01/insert-into-loaded-dataset_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-into-loaded-dataset_02/insert-into-loaded-dataset_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-src-dst-01/insert-src-dst-01.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-src-dst-01/insert-src-dst-01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-src-dst-01/insert-src-dst-01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-src-dst-01/insert-src-dst-01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-syntax/insert-syntax.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert-syntax/insert-syntax.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert-syntax/insert-syntax.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert-syntax/insert-syntax.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert/insert.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert/insert.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert/insert.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert/insert.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/insert_less_nc/insert_less_nc.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/insert_less_nc/insert_less_nc.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/insert_less_nc/insert_less_nc.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/insert_less_nc/insert_less_nc.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/load-from-hdfs/load-from-hdfs.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/load-from-hdfs/load-from-hdfs.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/load-from-hdfs/load-from-hdfs.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/load-from-hdfs/load-from-hdfs.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/load-with-index/load-with-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/load-with-index/load-with-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/load-with-index/load-with-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/load-with-index/load-with-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive/opentype-c2o-recursive.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o/opentype-c2o.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o/opentype-c2o.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o/opentype-c2o.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o/opentype-c2o.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-closed-optional/opentype-closed-optional.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-closed-optional/opentype-closed-optional.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-closed-optional/opentype-closed-optional.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-closed-optional/opentype-closed-optional.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-insert/opentype-insert.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-insert/opentype-insert.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-insert/opentype-insert.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-insert/opentype-insert.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-insert2/opentype-insert2.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-insert2/opentype-insert2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-insert2/opentype-insert2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-insert2/opentype-insert2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-noexpand/opentype-noexpand.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-noexpand/opentype-noexpand.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-noexpand/opentype-noexpand.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-noexpand/opentype-noexpand.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive/opentype-o2c-recursive.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c/opentype-o2c.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c/opentype-o2c.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c/opentype-o2c.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c/opentype-o2c.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2o/opentype-o2o.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2o/opentype-o2o.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2o/opentype-o2o.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/opentype-o2o/opentype-o2o.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/query-issue205/query-issue205.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/query-issue205/query-issue205.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/query-issue205/query-issue205.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/query-issue205/query-issue205.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/query-issue288/query-issue288.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/query-issue288/query-issue288.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/query-issue288/query-issue288.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/query-issue288/query-issue288.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-btree-secondary-index-nullable/scan-delete-btree-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-ngram-secondary-index/scan-delete-inverted-index-fuzzy-ngram-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable/scan-delete-inverted-index-fuzzy-word-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-fuzzy-word-secondary-index/scan-delete-inverted-index-fuzzy-word-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index-nullable/scan-delete-inverted-index-ngram-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-ngram-secondary-index/scan-delete-inverted-index-ngram-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index-nullable/scan-delete-inverted-index-word-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-inverted-index-word-secondary-index/scan-delete-inverted-index-word-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index-nullable/scan-delete-rtree-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-delete-rtree-secondary-index/scan-delete-rtree-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-btree-secondary-index-nullable/scan-insert-btree-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable/scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-ngram-secondary-index/scan-insert-inverted-index-fuzzy-ngram-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable/scan-insert-inverted-index-fuzzy-word-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-fuzzy-word-secondary-index/scan-insert-inverted-index-fuzzy-word-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index-nullable/scan-insert-inverted-index-ngram-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-ngram-secondary-index/scan-insert-inverted-index-ngram-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index-nullable/scan-insert-inverted-index-word-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-inverted-index-word-secondary-index/scan-insert-inverted-index-word-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index-nullable/scan-insert-rtree-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/dml/scan-insert-rtree-secondary-index/scan-insert-rtree-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/employee/q_01/q_01.1.adm b/asterix-app/src/test/resources/runtimets/results/employee/q_01/q_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/employee/q_01/q_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/employee/q_01/q_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/employee/q_02/q_02.1.adm b/asterix-app/src/test/resources/runtimets/results/employee/q_02/q_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/employee/q_02/q_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/employee/q_02/q_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/failure/delete-rtree/delete-rtree.1.adm b/asterix-app/src/test/resources/runtimets/results/failure/delete-rtree/delete-rtree.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/failure/delete-rtree/delete-rtree.1.adm
rename to asterix-app/src/test/resources/runtimets/results/failure/delete-rtree/delete-rtree.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/failure/delete/delete.1.adm b/asterix-app/src/test/resources/runtimets/results/failure/delete/delete.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/failure/delete/delete.1.adm
rename to asterix-app/src/test/resources/runtimets/results/failure/delete/delete.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/failure/insert-rtree/insert-rtree.1.adm b/asterix-app/src/test/resources/runtimets/results/failure/insert-rtree/insert-rtree.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/failure/insert-rtree/insert-rtree.1.adm
rename to asterix-app/src/test/resources/runtimets/results/failure/insert-rtree/insert-rtree.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/failure/insert/insert.1.adm b/asterix-app/src/test/resources/runtimets/results/failure/insert/insert.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/failure/insert/insert.1.adm
rename to asterix-app/src/test/resources/runtimets/results/failure/insert/insert.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.adm b/asterix-app/src/test/resources/runtimets/results/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.adm
rename to asterix-app/src/test/resources/runtimets/results/failure/q1_pricing_summary_report_failure/q1_pricing_summary_report_failure.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm b/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/feeds/feeds_01/feeds_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_02/feeds_02.1.adm b/asterix-app/src/test/resources/runtimets/results/feeds/feeds_02/feeds_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_02/feeds_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/feeds/feeds_02/feeds_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_03/feeds_03.1.adm b/asterix-app/src/test/resources/runtimets/results/feeds/feeds_03/feeds_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_03/feeds_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/feeds/feeds_03/feeds_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_04/feeds_04.1.adm b/asterix-app/src/test/resources/runtimets/results/feeds/feeds_04/feeds_04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/feeds/feeds_04/feeds_04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/feeds/feeds_04/feeds_04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/feeds/issue_230_feeds/issue_230_feeds.1.adm b/asterix-app/src/test/resources/runtimets/results/feeds/issue_230_feeds/issue_230_feeds.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/feeds/issue_230_feeds/issue_230_feeds.1.adm
rename to asterix-app/src/test/resources/runtimets/results/feeds/issue_230_feeds/issue_230_feeds.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-01/ret-01.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-01/ret-01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-01/ret-01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-01/ret-01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-02/ret-02.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-02/ret-02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-02/ret-02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-02/ret-02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-03/ret-03.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-03/ret-03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-03/ret-03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-03/ret-03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-04/ret-04.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-04/ret-04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-04/ret-04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-04/ret-04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-05/ret-05.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-05/ret-05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-05/ret-05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-05/ret-05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-06/ret-06.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-06/ret-06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-06/ret-06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-06/ret-06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-07/ret-07.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-07/ret-07.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-07/ret-07.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-07/ret-07.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-08/ret-08.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-08/ret-08.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-08/ret-08.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-08/ret-08.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-09/ret-09.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-09/ret-09.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-09/ret-09.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-09/ret-09.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-10/ret-10.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-10/ret-10.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-10/ret-10.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-10/ret-10.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-11/ret-11.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-11/ret-11.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-11/ret-11.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-11/ret-11.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-12/ret-12.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-12/ret-12.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-12/ret-12.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-12/ret-12.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-13/ret-13.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-13/ret-13.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-13/ret-13.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-13/ret-13.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-14/ret-14.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-14/ret-14.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-14/ret-14.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-14/ret-14.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-15/ret-15.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-15/ret-15.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-15/ret-15.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-15/ret-15.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-16/ret-16.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-16/ret-16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-16/ret-16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-16/ret-16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-17/ret-17.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-17/ret-17.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-17/ret-17.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-17/ret-17.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-18/ret-18.1.adm b/asterix-app/src/test/resources/runtimets/results/flwor/ret-18/ret-18.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/flwor/ret-18/ret-18.1.adm
rename to asterix-app/src/test/resources/runtimets/results/flwor/ret-18/ret-18.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_1/dblp-1_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_1/dblp-1_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_1/dblp-1_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_1/dblp-1_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.1.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2.1/dblp-1_2.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2/dblp-1_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2/dblp-1_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2/dblp-1_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-1_2/dblp-1_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.1_5.3.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.2/dblp-2.2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.2/dblp-2.2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.2/dblp-2.2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2.2/dblp-2.2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_1/dblp-2_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_1/dblp-2_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_1/dblp-2_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_1/dblp-2_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_2/dblp-2_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_2/dblp-2_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_2/dblp-2_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_2/dblp-2_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_3/dblp-2_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_3/dblp-2_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_3/dblp-2_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_3/dblp-2_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_4/dblp-2_4.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_4/dblp-2_4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_4/dblp-2_4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_4/dblp-2_4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.1/dblp-2_5.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.2/dblp-2_5.2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5/dblp-2_5.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5/dblp-2_5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5/dblp-2_5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-2_5/dblp-2_5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.1/dblp-3_1.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1.2/dblp-3_1.2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1/dblp-3_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1/dblp-3_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1/dblp-3_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-3_1/dblp-3_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_1/dblp-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-aqlplus_2/dblp-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_6.3.1/dblp-csx-2_6.3.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_6.3.1/dblp-csx-2_6.3.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_6.3.1/dblp-csx-2_6.3.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-2_6.3.1/dblp-csx-2_6.3.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.1/dblp-csx-3_1.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.1/dblp-csx-3_1.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.1/dblp-csx-3_1.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.1/dblp-csx-3_1.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.2/dblp-csx-3_1.2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.2/dblp-csx-3_1.2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.2/dblp-csx-3_1.2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1.2/dblp-csx-3_1.2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.4.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_1/dblp-csx-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_2/dblp-csx-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-aqlplus_3/dblp-csx-aqlplus_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-csx-dblp-aqlplus_1/dblp-csx-dblp-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/dblp-lookup_1/dblp-lookup_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/events-users-aqlplus_1/events-users-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/tmp-1/tmp-1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/tmp-1/tmp-1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/tmp-1/tmp-1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/tmp-1/tmp-1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_1/user-int-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_2/user-int-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-int-aqlplus_3/user-int-aqlplus_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1.1/user-lot-aqlplus_1.1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_1/user-lot-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_2/user-lot-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-lot-aqlplus_3/user-lot-aqlplus_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-3_1/user-vis-int-3_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_1/user-vis-int-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_2/user-vis-int-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-aqlplus_3/user-vis-int-aqlplus_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-int-vis-user-lot-aqlplus_1/user-vis-int-vis-user-lot-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-3_1/user-vis-lot-3_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_1/user-vis-lot-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_2/user-vis-lot-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_3/user-vis-lot-aqlplus_3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_4/user-vis-lot-aqlplus_4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-aqlplus_5/user-vis-lot-aqlplus_5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_1/user-vis-lot-int-aqlplus_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.adm b/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/fuzzyjoin/user-vis-lot-int-aqlplus_2/user-vis-lot-int-aqlplus_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_02/hdfs_02.1.adm b/asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_02/hdfs_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_02/hdfs_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_02/hdfs_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_03/hdfs_03.1.adm b/asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_03/hdfs_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_03/hdfs_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/hdfs/hdfs_03/hdfs_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/hdfs/issue_245_hdfs/issue_245_hdfs.1.adm b/asterix-app/src/test/resources/runtimets/results/hdfs/issue_245_hdfs/issue_245_hdfs.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/hdfs/issue_245_hdfs/issue_245_hdfs.1.adm
rename to asterix-app/src/test/resources/runtimets/results/hdfs/issue_245_hdfs/issue_245_hdfs.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.adm b/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_5/issue_251_dataset_hint_5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.adm b/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.adm
rename to asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.adm b/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.adm
rename to asterix-app/src/test/resources/runtimets/results/hints/issue_251_dataset_hint_7/issue_251_dataset_hint_7.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-join/btree-primary-equi-join/btree-primary-equi-join.1.adm b/asterix-app/src/test/resources/runtimets/results/index-join/btree-primary-equi-join/btree-primary-equi-join.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-join/btree-primary-equi-join/btree-primary-equi-join.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-join/btree-primary-equi-join/btree-primary-equi-join.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.adm b/asterix-app/src/test/resources/runtimets/results/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-join/btree-secondary-equi-join/btree-secondary-equi-join.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.adm b/asterix-app/src/test/resources/runtimets/results/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-join/rtree-spatial-intersect-point/rtree-spatial-intersect-point.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key-mixed-intervals/btree-index-composite-key-mixed-intervals.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key/btree-index-composite-key.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key/btree-index-composite-key.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key/btree-index-composite-key.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-composite-key/btree-index-composite-key.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/btree-index-rewrite-multiple/btree-index-rewrite-multiple.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/cust-index-age-nullable/cust-index-age-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-contains/fuzzy-inverted-index-ngram-contains.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance-panic/fuzzy-inverted-index-ngram-edit-distance-panic.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-edit-distance/fuzzy-inverted-index-ngram-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ngram-jaccard/fuzzy-inverted-index-ngram-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance-panic/fuzzy-inverted-index-olist-edit-distance-panic.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-edit-distance/fuzzy-inverted-index-olist-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-olist-jaccard/fuzzy-inverted-index-olist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-ulist-jaccard/fuzzy-inverted-index-ulist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-contains/fuzzy-inverted-index-word-contains.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/fuzzy-inverted-index-word-jaccard/fuzzy-inverted-index-word-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-contains/inverted-index-ngram-contains.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance-panic/inverted-index-ngram-edit-distance-panic.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-edit-distance/inverted-index-ngram-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ngram-jaccard/inverted-index-ngram-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance-panic/inverted-index-olist-edit-distance-panic.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-edit-distance/inverted-index-olist-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-olist-jaccard/inverted-index-olist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-ulist-jaccard/inverted-index-ulist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-contains/inverted-index-word-contains.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/inverted-index-word-jaccard/inverted-index-word-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive-open/orders-index-custkey-conjunctive-open.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-conjunctive/orders-index-custkey-conjunctive.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey-open/orders-index-custkey-open.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey/orders-index-custkey.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey/orders-index-custkey.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey/orders-index-custkey.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/orders-index-custkey/orders-index-custkey.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/range-search-open/range-search-open.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/range-search-open/range-search-open.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/range-search-open/range-search-open.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/range-search-open/range-search-open.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/range-search/range-search.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/range-search/range-search.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/range-search/range-search.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/range-search/range-search.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-nullable/rtree-secondary-index-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index-open/rtree-secondary-index-open.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index/rtree-secondary-index.1.adm b/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index/rtree-secondary-index.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index/rtree-secondary-index.1.adm
rename to asterix-app/src/test/resources/runtimets/results/index-selection/rtree-secondary-index/rtree-secondary-index.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-edit-distance/ngram-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard-inline/ngram-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ngram-jaccard/ngram-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance-inline/olist-edit-distance-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-edit-distance/olist-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard-inline/olist-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/olist-jaccard/olist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard-inline/ulist-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/ulist-jaccard/ulist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard-inline/word-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join-noeqjoin/word-jaccard/word-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance-inline/ngram-edit-distance-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-edit-distance/ngram-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard-inline/ngram-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard/ngram-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard/ngram-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard/ngram-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/ngram-jaccard/ngram-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance-inline/olist-edit-distance-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance/olist-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance/olist-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance/olist-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-edit-distance/olist-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard-inline/olist-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard/olist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard/olist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard/olist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/olist-jaccard/olist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard-inline/ulist-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard/ulist-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard/ulist-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard/ulist-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/ulist-jaccard/ulist-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard-inline/word-jaccard-inline.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard/word-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard/word-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard/word-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/inverted-index-join/word-jaccard/word-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285-2/query_issue285-2.1.adm b/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285-2/query_issue285-2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285-2/query_issue285-2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285-2/query_issue285-2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285/query_issue285.1.adm b/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285/query_issue285.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285/query_issue285.1.adm
rename to asterix-app/src/test/resources/runtimets/results/leftouterjoin/query_issue285/query_issue285.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/any-collection-member_01/any-collection-member_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/any-collection-member_01/any-collection-member_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/any-collection-member_01/any-collection-member_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/any-collection-member_01/any-collection-member_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/get-item_01/get-item_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/get-item_01/get-item_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/get-item_01/get-item_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/get-item_01/get-item_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/len_01/len_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/len_01/len_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/len_01/len_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/len_01/len_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/len_null_01/len_null_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/len_null_01/len_null_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/len_null_01/len_null_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/len_null_01/len_null_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/listify_01/listify_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/listify_01/listify_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/listify_01/listify_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/listify_01/listify_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/listify_02/listify_02.1.adm b/asterix-app/src/test/resources/runtimets/results/list/listify_02/listify_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/listify_02/listify_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/listify_02/listify_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/listify_03/listify_03.1.adm b/asterix-app/src/test/resources/runtimets/results/list/listify_03/listify_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/listify_03/listify_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/listify_03/listify_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_01/ordered-list-constructor_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_01/ordered-list-constructor_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_01/ordered-list-constructor_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_01/ordered-list-constructor_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_02/ordered-list-constructor_02.1.adm b/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_02/ordered-list-constructor_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_02/ordered-list-constructor_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_02/ordered-list-constructor_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_03/ordered-list-constructor_03.1.adm b/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_03/ordered-list-constructor_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_03/ordered-list-constructor_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/ordered-list-constructor_03/ordered-list-constructor_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/scan-collection_01/scan-collection_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/scan-collection_01/scan-collection_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/scan-collection_01/scan-collection_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/scan-collection_01/scan-collection_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/union_01/union_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/union_01/union_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/union_01/union_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/union_01/union_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/union_02/union_02.1.adm b/asterix-app/src/test/resources/runtimets/results/list/union_02/union_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/union_02/union_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/union_02/union_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_01/unordered-list-constructor_01.1.adm b/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_01/unordered-list-constructor_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_01/unordered-list-constructor_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_01/unordered-list-constructor_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_02/unordered-list-constructor_02.1.adm b/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_02/unordered-list-constructor_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_02/unordered-list-constructor_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_02/unordered-list-constructor_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_03/unordered-list-constructor_03.1.adm b/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_03/unordered-list-constructor_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_03/unordered-list-constructor_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/list/unordered-list-constructor_03/unordered-list-constructor_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/load/issue289_query/issue289_query.1.adm b/asterix-app/src/test/resources/runtimets/results/load/issue289_query/issue289_query.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/load/issue289_query/issue289_query.1.adm
rename to asterix-app/src/test/resources/runtimets/results/load/issue289_query/issue289_query.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/float_01/float_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/float_01/float_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/float_01/float_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/float_01/float_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/groupby-orderby-count/groupby-orderby-count.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/groupby-orderby-count/groupby-orderby-count.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/groupby-orderby-count/groupby-orderby-count.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/groupby-orderby-count/groupby-orderby-count.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/ifthenelse_01/ifthenelse_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/ifthenelse_01/ifthenelse_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/ifthenelse_01/ifthenelse_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/ifthenelse_01/ifthenelse_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/is-null_01/is-null_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/is-null_01/is-null_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/is-null_01/is-null_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/is-null_01/is-null_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/nested-loop-join_01/nested-loop-join_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/nested-loop-join_01/nested-loop-join_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/nested-loop-join_01/nested-loop-join_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/nested-loop-join_01/nested-loop-join_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/range_01/range_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/range_01/range_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/range_01/range_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/range_01/range_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/tid_01/tid_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/tid_01/tid_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/tid_01/tid_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/tid_01/tid_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/misc/year_01/year_01.1.adm b/asterix-app/src/test/resources/runtimets/results/misc/year_01/year_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/misc/year_01/year_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/misc/year_01/year_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord/nestrecord.1.adm b/asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord/nestrecord.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord/nestrecord.1.adm
rename to asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord/nestrecord.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs0/abs0.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/abs0/abs0.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs0/abs0.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/abs0/abs0.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs1/abs1.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/abs1/abs1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs1/abs1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/abs1/abs1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/abs2/abs2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/abs3/abs3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs4/abs4.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/abs4/abs4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/abs4/abs4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/abs4/abs4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_double/add_double.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/add_double/add_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_double/add_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/add_double/add_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_float/add_float.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/add_float/add_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_float/add_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/add_float/add_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int16/add_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/add_int16/add_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int16/add_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/add_int16/add_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int32/add_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/add_int32/add_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int32/add_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/add_int32/add_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int64/add_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/add_int64/add_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int64/add_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/add_int64/add_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int8/add_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/add_int8/add_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/add_int8/add_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/add_int8/add_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling0/ceiling0.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/ceiling0/ceiling0.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling0/ceiling0.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/ceiling0/ceiling0.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling1/ceiling1.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/ceiling1/ceiling1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling1/ceiling1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/ceiling1/ceiling1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/ceiling2/ceiling2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/ceiling3/ceiling3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling4/ceiling4.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/ceiling4/ceiling4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/ceiling4/ceiling4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/ceiling4/ceiling4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_double/divide_double.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/divide_double/divide_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_double/divide_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/divide_double/divide_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_float/divide_float.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/divide_float/divide_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_float/divide_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/divide_float/divide_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int16/divide_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/divide_int16/divide_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int16/divide_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/divide_int16/divide_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int32/divide_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/divide_int32/divide_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int32/divide_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/divide_int32/divide_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int64/divide_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/divide_int64/divide_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int64/divide_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/divide_int64/divide_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int8/divide_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/divide_int8/divide_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/divide_int8/divide_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/divide_int8/divide_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor0/floor0.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/floor0/floor0.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor0/floor0.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/floor0/floor0.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor1/floor1.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/floor1/floor1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor1/floor1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/floor1/floor1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/floor2/floor2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/floor3/floor3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor4/floor4.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/floor4/floor4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/floor4/floor4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/floor4/floor4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_double/multiply_double.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/multiply_double/multiply_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_double/multiply_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/multiply_double/multiply_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_float/multiply_float.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/multiply_float/multiply_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_float/multiply_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/multiply_float/multiply_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int16/multiply_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int16/multiply_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int16/multiply_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/multiply_int16/multiply_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int32/multiply_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int32/multiply_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int32/multiply_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/multiply_int32/multiply_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int64/multiply_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int64/multiply_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int64/multiply_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/multiply_int64/multiply_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int8/multiply_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int8/multiply_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/multiply_int8/multiply_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/multiply_int8/multiply_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even0/round-half-to-even0.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even0/round-half-to-even0.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even0/round-half-to-even0.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even0/round-half-to-even0.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even1/round-half-to-even1.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even1/round-half-to-even1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even1/round-half-to-even1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even1/round-half-to-even1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even2/round-half-to-even2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even20/round-half-to-even20.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even20/round-half-to-even20.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even20/round-half-to-even20.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even20/round-half-to-even20.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even21/round-half-to-even21.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even21/round-half-to-even21.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even21/round-half-to-even21.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even21/round-half-to-even21.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even22/round-half-to-even22.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even23/round-half-to-even23.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even24/round-half-to-even24.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even24/round-half-to-even24.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even24/round-half-to-even24.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even24/round-half-to-even24.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even3/round-half-to-even3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even4/round-half-to-even4.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even4/round-half-to-even4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even4/round-half-to-even4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even4/round-half-to-even4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even5/round-half-to-even5.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even5/round-half-to-even5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even5/round-half-to-even5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round-half-to-even5/round-half-to-even5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round0/round0.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round0/round0.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round0/round0.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round0/round0.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round1/round1.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round1/round1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round1/round1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round1/round1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round2/round2.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round2/round2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round2/round2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round2/round2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round3/round3.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round3/round3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round3/round3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round3/round3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/round4/round4.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/round4/round4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/round4/round4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/round4/round4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_double/subtract_double.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/subtract_double/subtract_double.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_double/subtract_double.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/subtract_double/subtract_double.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_float/subtract_float.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/subtract_float/subtract_float.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_float/subtract_float.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/subtract_float/subtract_float.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int16/subtract_int16.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int16/subtract_int16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int16/subtract_int16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/subtract_int16/subtract_int16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int32/subtract_int32.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int32/subtract_int32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int32/subtract_int32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/subtract_int32/subtract_int32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int64/subtract_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int64/subtract_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int64/subtract_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/subtract_int64/subtract_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int8/subtract_int8.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int8/subtract_int8.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/subtract_int8/subtract_int8.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/subtract_int8/subtract_int8.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_01/unary-minus_double_01.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_01/unary-minus_double_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_01/unary-minus_double_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_01/unary-minus_double_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_double_02/unary-minus_double_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_01/unary-minus_float_01.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_01/unary-minus_float_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_01/unary-minus_float_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_01/unary-minus_float_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_float_02/unary-minus_float_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_01/unary-minus_int_01.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_01/unary-minus_int_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_01/unary-minus_int_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_01/unary-minus_int_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_02/unary-minus_int_02.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_02/unary-minus_int_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_02/unary-minus_int_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_int_02/unary-minus_int_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_null/unary-minus_null.1.adm b/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_null/unary-minus_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_null/unary-minus_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/numeric/unary-minus_null/unary-minus_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01/heterog-list-ordered01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01/heterog-list01.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01/heterog-list01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01/heterog-list01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01/heterog-list01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01/open-closed-01.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01/open-closed-01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01/open-closed-01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01/open-closed-01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12/open-closed-12.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12/open-closed-12.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12/open-closed-12.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12/open-closed-12.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14/open-closed-14.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14/open-closed-14.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14/open-closed-14.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14/open-closed-14.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24/open-closed-24.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24/open-closed-24.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24/open-closed-24.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24/open-closed-24.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25/open-closed-25.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25/open-closed-25.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25/open-closed-25.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25/open-closed-25.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26/open-closed-26.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26/open-closed-26.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26/open-closed-26.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26/open-closed-26.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29/open-closed-29.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29/open-closed-29.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29/open-closed-29.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29/open-closed-29.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31/open-closed-31.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31/open-closed-31.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31/open-closed-31.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31/open-closed-31.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32/open-closed-32.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32/open-closed-32.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32/open-closed-32.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32/open-closed-32.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33/open-closed-33.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33/open-closed-33.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33/open-closed-33.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33/open-closed-33.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue134/query-issue134.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue134/query-issue134.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue134/query-issue134.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue134/query-issue134.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue166/query-issue166.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue166/query-issue166.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue166/query-issue166.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue166/query-issue166.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue196/query-issue196.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue196/query-issue196.1.adm
new file mode 100644
index 0000000..f93766f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue196/query-issue196.1.adm
@@ -0,0 +1 @@
+{ "a": [ { "id": 21 }, { "id": 23 }, { "id": 24 }, { "id": 44 }, { "id": 64 } ], "b": [ { "id": 21 }, { "id": 23 }, { "id": 24 }, { "id": 44 }, { "id": 64 } ] }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue208/query-issue208.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue208/query-issue208.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue208/query-issue208.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue208/query-issue208.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue236/query-issue236.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue236/query-issue236.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue236/query-issue236.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue236/query-issue236.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue29/query-issue29.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue29/query-issue29.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue29/query-issue29.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue29/query-issue29.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue343-2/query-issue343-2.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue343-2/query-issue343-2.1.adm
new file mode 100644
index 0000000..5196a0f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue343-2/query-issue343-2.1.adm
@@ -0,0 +1 @@
+{ "id": 13, "name": "Nancy", "age": 32.5f, "salary": 12.0d, "married": true, "interests": {{ "reading", "writing" }}, "children": [ "Brad", "Scott" ], "address": { "number": 8389, "street": "Hill St.", "city": "Mountain View" }, "dob": date("-2011-01-27"), "time": time("12:20:30.000Z"), "datetime": datetime("-1951-12-27T12:20:30.000Z"), "duration": duration("P10Y11M12DT10H50M30S"), "location2d": point("41.0,44.0"), "location3d": point3d("44.0,13.0,41.0"), "line": line("10.1,11.1 10.2,11.2"), "polygon": polygon("1.2,1.3 2.1,2.5 3.5,3.6 4.6,4.8"), "circle": circle("10.1,11.1 10.2"), "mylist": [ "blah" ] }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue343/query-issue343.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue343/query-issue343.1.adm
new file mode 100644
index 0000000..5196a0f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue343/query-issue343.1.adm
@@ -0,0 +1 @@
+{ "id": 13, "name": "Nancy", "age": 32.5f, "salary": 12.0d, "married": true, "interests": {{ "reading", "writing" }}, "children": [ "Brad", "Scott" ], "address": { "number": 8389, "street": "Hill St.", "city": "Mountain View" }, "dob": date("-2011-01-27"), "time": time("12:20:30.000Z"), "datetime": datetime("-1951-12-27T12:20:30.000Z"), "duration": duration("P10Y11M12DT10H50M30S"), "location2d": point("41.0,44.0"), "location3d": point3d("44.0,13.0,41.0"), "line": line("10.1,11.1 10.2,11.2"), "polygon": polygon("1.2,1.3 2.1,2.5 3.5,3.6 4.6,4.8"), "circle": circle("10.1,11.1 10.2"), "mylist": [ "blah" ] }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue350-2/query-issue350-2.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue350-2/query-issue350-2.1.adm
new file mode 100644
index 0000000..6466feb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue350-2/query-issue350-2.1.adm
@@ -0,0 +1,10 @@
+{ "tweetid": "1", "tweetid-copy": "1", "user": { "screen-name": "RollandEckhardstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland Eckhardstein", "followers_count": 3311368 }, "sender-location": point("42.13,80.43"), "send-time": datetime("2005-12-05T21:06:41.000Z"), "send-time-copy": datetime("2005-12-05T21:06:41.000Z"), "referred-topics": {{ "samsung", "plan" }}, "message-text": " love samsung the plan is amazing" }
+{ "tweetid": "10", "tweetid-copy": "10", "user": { "screen-name": "Rolldstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland Eckhardstful", "followers_count": 3311368 }, "sender-location": point("46.94,93.98"), "send-time": datetime("2011-04-07T14:08:46.000Z"), "send-time-copy": datetime("2011-04-07T14:08:46.000Z"), "referred-topics": {{ "t-mobile", "signal" }}, "message-text": " like t-mobile the signal is good" }
+{ "tweetid": "2", "tweetid-copy": "2", "user": { "screen-name": "RollandEckhardstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "David Eckhardstein", "followers_count": 3311368 }, "sender-location": point("28.86,70.44"), "send-time": datetime("2007-08-15T06:44:17.000Z"), "send-time-copy": datetime("2007-08-15T06:44:17.000Z"), "referred-topics": {{ "sprint", "voice-clarity" }}, "message-text": " like sprint its voice-clarity is mind-blowing" }
+{ "tweetid": "3", "tweetid-copy": "3", "user": { "screen-name": "RollandEckhard#500", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland Hetfield", "followers_count": 3311368 }, "sender-location": point("39.84,86.48"), "send-time": datetime("2008-12-24T00:07:04.000Z"), "send-time-copy": datetime("2008-12-24T00:07:04.000Z"), "referred-topics": {{ "verizon", "voice-command" }}, "message-text": " can't stand verizon its voice-command is terrible:(" }
+{ "tweetid": "4", "tweetid-copy": "4", "user": { "screen-name": "RollandEckhardstein#221", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland Eckhardstinz", "followers_count": 3311368 }, "sender-location": point("27.67,87.32"), "send-time": datetime("2007-02-05T16:39:13.000Z"), "send-time-copy": datetime("2007-02-05T16:39:13.000Z"), "referred-topics": {{ "t-mobile", "customer-service" }}, "message-text": " love t-mobile its customer-service is mind-blowing" }
+{ "tweetid": "5", "tweetid-copy": "5", "user": { "screen-name": "RollandEcstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland Eckhardst", "followers_count": 3311368 }, "sender-location": point("27.3,92.77"), "send-time": datetime("2010-09-12T06:15:28.000Z"), "send-time-copy": datetime("2010-09-12T06:15:28.000Z"), "referred-topics": {{ "t-mobile", "customization" }}, "message-text": " like t-mobile the customization is amazing:)" }
+{ "tweetid": "6", "tweetid-copy": "6", "user": { "screen-name": "Rollkhardstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Kirk Hammette ", "followers_count": 3311368 }, "sender-location": point("45.62,84.78"), "send-time": datetime("2012-01-23T06:23:13.000Z"), "send-time-copy": datetime("2012-01-23T06:23:13.000Z"), "referred-topics": {{ "iphone", "network" }}, "message-text": " like iphone its network is awesome:)" }
+{ "tweetid": "7", "tweetid-copy": "7", "user": { "screen-name": "andEckhardstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland khardstein", "followers_count": 3311368 }, "sender-location": point("44.12,81.46"), "send-time": datetime("2012-02-17T17:30:26.000Z"), "send-time-copy": datetime("2012-02-17T17:30:26.000Z"), "referred-topics": {{ "t-mobile", "network" }}, "message-text": " hate t-mobile the network is bad" }
+{ "tweetid": "8", "tweetid-copy": "8", "user": { "screen-name": "Rolltein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Ron Eckhardstein", "followers_count": 3311368 }, "sender-location": point("36.86,90.71"), "send-time": datetime("2009-03-12T13:18:04.000Z"), "send-time-copy": datetime("2009-03-12T13:18:04.000Z"), "referred-topics": {{ "at&t", "touch-screen" }}, "message-text": " dislike at&t its touch-screen is OMG" }
+{ "tweetid": "9", "tweetid-copy": "9", "user": { "screen-name": "Roldstein#211", "lang": "en", "friends_count": 3657079, "statuses_count": 268, "name": "Rolland Eckdstein", "followers_count": 3311368 }, "sender-location": point("29.07,97.05"), "send-time": datetime("2012-08-15T20:19:46.000Z"), "send-time-copy": datetime("2012-08-15T20:19:46.000Z"), "referred-topics": {{ "verizon", "speed" }}, "message-text": " hate verizon its speed is bad" }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue350/query-issue350.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue350/query-issue350.1.adm
new file mode 100644
index 0000000..e5ac8ab
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue350/query-issue350.1.adm
@@ -0,0 +1 @@
+{ "tweetid": "13", "user": { "screen-name": "NathanGiesen@211", "lang": "en", "friends_count": 39345, "statuses_count": 479, "name": "Nathan Giesen", "followers_count": 49420, "hobbies": [ "basket weaving", "mud wrestling" ] }, "sender-location": point("47.44,80.65"), "send-time": datetime("2008-04-26T10:10:35.000Z"), "referred-topics": {{ "tweeting" }}, "message-text": "tweety tweet, my fellow tweeters!" }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55-1/query-issue55-1.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55-1/query-issue55-1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55-1/query-issue55-1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55-1/query-issue55-1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55/query-issue55.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55/query-issue55.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55/query-issue55.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-issue55/query-issue55.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal/query-proposal.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal/query-proposal.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal/query-proposal.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal/query-proposal.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal02/query-proposal02.1.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal02/query-proposal02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal02/query-proposal02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/open-closed/query-proposal02/query-proposal02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_01/everysat_01.1.adm b/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_01/everysat_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_01/everysat_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_01/everysat_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_02/everysat_02.1.adm b/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_02/everysat_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_02/everysat_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_02/everysat_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_04/everysat_04.1.adm b/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_04/everysat_04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_04/everysat_04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/quantifiers/everysat_04/everysat_04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_01/somesat_01.1.adm b/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_01/somesat_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_01/somesat_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_01/somesat_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_02/somesat_02.1.adm b/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_02/somesat_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_02/somesat_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_02/somesat_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_06/somesat_06.1.adm b/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_06/somesat_06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_06/somesat_06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/quantifiers/somesat_06/somesat_06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_01/closed-record-constructor_01.1.adm b/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_01/closed-record-constructor_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_01/closed-record-constructor_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_01/closed-record-constructor_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_02/closed-record-constructor_02.1.adm b/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_02/closed-record-constructor_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_02/closed-record-constructor_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_02/closed-record-constructor_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_03/closed-record-constructor_03.1.adm b/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_03/closed-record-constructor_03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_03/closed-record-constructor_03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/closed-record-constructor_03/closed-record-constructor_03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/expFieldName/expFieldName.1.adm b/asterix-app/src/test/resources/runtimets/results/records/expFieldName/expFieldName.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/expFieldName/expFieldName.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/expFieldName/expFieldName.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/field-access-by-index_01/field-access-by-index_01.1.adm b/asterix-app/src/test/resources/runtimets/results/records/field-access-by-index_01/field-access-by-index_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/field-access-by-index_01/field-access-by-index_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/field-access-by-index_01/field-access-by-index_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/field-access-on-open-field/field-access-on-open-field.1.adm b/asterix-app/src/test/resources/runtimets/results/records/field-access-on-open-field/field-access-on-open-field.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/field-access-on-open-field/field-access-on-open-field.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/field-access-on-open-field/field-access-on-open-field.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_01/open-record-constructor_01.1.adm b/asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_01/open-record-constructor_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_01/open-record-constructor_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_01/open-record-constructor_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_02/open-record-constructor_02.1.adm b/asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_02/open-record-constructor_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_02/open-record-constructor_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/records/open-record-constructor_02/open-record-constructor_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/10/10.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/10/10.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/10/10.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/10/10.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/20/20.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/20/20.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/20/20.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/20/20.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/30/30.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/30/30.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/30/30.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/30/30.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/alltypes_01/alltypes_01.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/alltypes_01/alltypes_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/alltypes_01/alltypes_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/alltypes_01/alltypes_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/alltypes_02/alltypes_02.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/alltypes_02/alltypes_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/alltypes_02/alltypes_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/alltypes_02/alltypes_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/issue238_query_1/issue238_query_1.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/issue238_query_1/issue238_query_1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/issue238_query_1/issue238_query_1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/issue238_query_1/issue238_query_1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/issue238_query_2/issue238_query_2.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/issue238_query_2/issue238_query_2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/issue238_query_2/issue238_query_2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/issue238_query_2/issue238_query_2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/numeric_types_01/numeric_types_01.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/numeric_types_01/numeric_types_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/numeric_types_01/numeric_types_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/numeric_types_01/numeric_types_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/numeric_types_02/numeric_types_02.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/numeric_types_02/numeric_types_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/numeric_types_02/numeric_types_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/numeric_types_02/numeric_types_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/spatial_types_01/spatial_types_01.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/spatial_types_01/spatial_types_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/spatial_types_01/spatial_types_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/spatial_types_01/spatial_types_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/spatial_types_02/spatial_types_02.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/spatial_types_02/spatial_types_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/spatial_types_02/spatial_types_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/spatial_types_02/spatial_types_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/temp_types_01/temp_types_01.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/temp_types_01/temp_types_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/temp_types_01/temp_types_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/temp_types_01/temp_types_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/scan/temp_types_02/temp_types_02.1.adm b/asterix-app/src/test/resources/runtimets/results/scan/temp_types_02/temp_types_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/scan/temp_types_02/temp_types_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/scan/temp_types_02/temp_types_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/semistructured/count-nullable/count-nullable.1.adm b/asterix-app/src/test/resources/runtimets/results/semistructured/count-nullable/count-nullable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/semistructured/count-nullable/count-nullable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/semistructured/count-nullable/count-nullable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/semistructured/cust-filter/cust-filter.1.adm b/asterix-app/src/test/resources/runtimets/results/semistructured/cust-filter/cust-filter.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/semistructured/cust-filter/cust-filter.1.adm
rename to asterix-app/src/test/resources/runtimets/results/semistructured/cust-filter/cust-filter.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/semistructured/has-param1/has-param1.1.adm b/asterix-app/src/test/resources/runtimets/results/semistructured/has-param1/has-param1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/semistructured/has-param1/has-param1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/semistructured/has-param1/has-param1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_ints/edit-distance-check_ints.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_ints/edit-distance-check_ints.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_ints/edit-distance-check_ints.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_ints/edit-distance-check_ints.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_strings/edit-distance-check_strings.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_strings/edit-distance-check_strings.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_strings/edit-distance-check_strings.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-check_strings/edit-distance-check_strings.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-list-is-filterable/edit-distance-list-is-filterable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/edit-distance-string-is-filterable/edit-distance-string-is-filterable.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_ints/edit-distance_ints.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_ints/edit-distance_ints.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_ints/edit-distance_ints.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_ints/edit-distance_ints.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_strings/edit-distance_strings.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_strings/edit-distance_strings.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_strings/edit-distance_strings.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/edit-distance_strings/edit-distance_strings.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-edit-distance/fuzzyeq-edit-distance.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/fuzzyeq-similarity-jaccard/fuzzyeq-similarity-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/prefix-len-jaccard/prefix-len-jaccard.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/prefix-len-jaccard/prefix-len-jaccard.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/prefix-len-jaccard/prefix-len-jaccard.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/prefix-len-jaccard/prefix-len-jaccard.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_ints/similarity-jaccard-check_ints.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_query/similarity-jaccard-check_query.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-check_strings/similarity-jaccard-check_strings.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix-check/similarity-jaccard-prefix-check.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-prefix/similarity-jaccard-prefix.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_ints/similarity-jaccard-sorted-check_ints.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_query/similarity-jaccard-sorted-check_query.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted-check_strings/similarity-jaccard-sorted-check_strings.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_ints/similarity-jaccard-sorted_ints.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_query/similarity-jaccard-sorted_query.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard-sorted_strings/similarity-jaccard-sorted_strings.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_ints/similarity-jaccard_ints.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_query/similarity-jaccard_query.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_query/similarity-jaccard_query.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_query/similarity-jaccard_query.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_query/similarity-jaccard_query.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.adm b/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.adm
rename to asterix-app/src/test/resources/runtimets/results/similarity/similarity-jaccard_strings/similarity-jaccard_strings.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.adm
new file mode 100644
index 0000000..25859de
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.adm
@@ -0,0 +1,2 @@
+{ "cell": rectangle("33.5,-101.5 36.5,-98.5"), "count": 1 }
+{ "cell": rectangle("33.5,-98.5 36.5,-95.5"), "count": 2 }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation/cell-aggregation.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation/cell-aggregation.1.adm
new file mode 100644
index 0000000..0014d49
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation/cell-aggregation.1.adm
@@ -0,0 +1,3 @@
+{ "cell": rectangle("5.0,5.0 10.0,10.0"), "count": 1 }
+{ "cell": rectangle("5.0,0.0 10.0,5.0"), "count": 3 }
+{ "cell": rectangle("0.0,0.0 5.0,5.0"), "count": 12 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/circle-intersect-circle/circle-intersect-circle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/circle-intersect-circle/circle-intersect-circle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/circle-intersect-circle/circle-intersect-circle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/circle-intersect-circle/circle-intersect-circle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/circle_accessor/circle_accessor.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/circle_accessor/circle_accessor.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/circle_accessor/circle_accessor.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/circle_accessor/circle_accessor.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/spatial/create-rtree-index/create-rtree-index.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/create-rtree-index/create-rtree-index.1.adm
new file mode 100644
index 0000000..b9c6dc7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/spatial/create-rtree-index/create-rtree-index.1.adm
@@ -0,0 +1,21 @@
+2
+4
+6
+8
+10
+12
+14
+16
+18
+20
+1
+3
+5
+7
+9
+11
+13
+15
+17
+19
+21
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/distance-between-points/distance-between-points.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/distance-between-points/distance-between-points.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/distance-between-points/distance-between-points.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/distance-between-points/distance-between-points.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-circle/line-intersect-circle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-circle/line-intersect-circle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-circle/line-intersect-circle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-circle/line-intersect-circle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-line/line-intersect-line.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-line/line-intersect-line.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-line/line-intersect-line.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-line/line-intersect-line.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-polygon/line-intersect-polygon.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-polygon/line-intersect-polygon.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-polygon/line-intersect-polygon.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-polygon/line-intersect-polygon.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-rectangle/line-intersect-rectangle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-rectangle/line-intersect-rectangle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-rectangle/line-intersect-rectangle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/line-intersect-rectangle/line-intersect-rectangle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/line_accessor/line_accessor.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/line_accessor/line_accessor.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/line_accessor/line_accessor.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/line_accessor/line_accessor.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-equals-point/point-equals-point.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/point-equals-point/point-equals-point.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-equals-point/point-equals-point.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/point-equals-point/point-equals-point.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-in-circle/point-in-circle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/point-in-circle/point-in-circle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-in-circle/point-in-circle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/point-in-circle/point-in-circle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-in-polygon/point-in-polygon.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/point-in-polygon/point-in-polygon.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-in-polygon/point-in-polygon.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/point-in-polygon/point-in-polygon.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-in-rectangle/point-in-rectangle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/point-in-rectangle/point-in-rectangle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-in-rectangle/point-in-rectangle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/point-in-rectangle/point-in-rectangle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-on-line/point-on-line.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/point-on-line/point-on-line.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/point-on-line/point-on-line.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/point-on-line/point-on-line.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/point_accessor/point_accessor.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/point_accessor/point_accessor.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/point_accessor/point_accessor.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/point_accessor/point_accessor.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-circle/polygon-intersect-circle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-circle/polygon-intersect-circle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-circle/polygon-intersect-circle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-circle/polygon-intersect-circle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-polygon/polygon-intersect-polygon.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/polygon-intersect-rectangle/polygon-intersect-rectangle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon_accessor/polygon_accessor.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/polygon_accessor/polygon_accessor.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/polygon_accessor/polygon_accessor.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/polygon_accessor/polygon_accessor.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-circle/rectangle-intersect-circle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/rectangle-intersect-rectangle/rectangle-intersect-rectangle.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/rectangle_accessor/rectangle_accessor.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/rectangle_accessor/rectangle_accessor.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/rectangle_accessor/rectangle_accessor.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/rectangle_accessor/rectangle_accessor.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/spatial-area/spatial-area.1.adm b/asterix-app/src/test/resources/runtimets/results/spatial/spatial-area/spatial-area.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/spatial/spatial-area/spatial-area.1.adm
rename to asterix-app/src/test/resources/runtimets/results/spatial/spatial-area/spatial-area.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string1/codepoint-to-string1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string1/codepoint-to-string1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string1/codepoint-to-string1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string1/codepoint-to-string1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string2/codepoint-to-string2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string2/codepoint-to-string2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string2/codepoint-to-string2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/codepoint-to-string2/codepoint-to-string2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/concat_01/concat_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/concat_01/concat_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/concat_01/concat_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/concat_01/concat_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/concat_02/concat_02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/concat_02/concat_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/concat_02/concat_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/concat_02/concat_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/contains_01/contains_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/contains_01/contains_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/contains_01/contains_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/contains_01/contains_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/cpttostr01/cpttostr01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/cpttostr01/cpttostr01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/cpttostr01/cpttostr01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/cpttostr01/cpttostr01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/cpttostr02/cpttostr02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/cpttostr02/cpttostr02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/cpttostr02/cpttostr02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/cpttostr02/cpttostr02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/cpttostr04/cpttostr04.1.adm b/asterix-app/src/test/resources/runtimets/results/string/cpttostr04/cpttostr04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/cpttostr04/cpttostr04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/cpttostr04/cpttostr04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/end-with1/end-with1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/end-with1/end-with1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/end-with1/end-with1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/end-with1/end-with1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/end-with2/end-with2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/end-with2/end-with2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/end-with2/end-with2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/end-with2/end-with2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/end-with3/end-with3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/end-with3/end-with3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/end-with3/end-with3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/end-with3/end-with3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/end-with4/end-with4.1.adm b/asterix-app/src/test/resources/runtimets/results/string/end-with4/end-with4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/end-with4/end-with4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/end-with4/end-with4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/end-with5/end-with5.1.adm b/asterix-app/src/test/resources/runtimets/results/string/end-with5/end-with5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/end-with5/end-with5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/end-with5/end-with5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/ends-with_01/ends-with_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/ends-with_01/ends-with_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/ends-with_01/ends-with_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/ends-with_01/ends-with_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/endwith02/endwith02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/endwith02/endwith02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/endwith02/endwith02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/endwith02/endwith02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/endwith03/endwith03.1.adm b/asterix-app/src/test/resources/runtimets/results/string/endwith03/endwith03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/endwith03/endwith03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/endwith03/endwith03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/length_01/length_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/length_01/length_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/length_01/length_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/length_01/length_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/length_02/length_02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/length_02/length_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/length_02/length_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/length_02/length_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/like_01/like_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/like_01/like_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/like_01/like_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/like_01/like_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/like_null/like_null.1.adm b/asterix-app/src/test/resources/runtimets/results/string/like_null/like_null.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/like_null/like_null.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/like_null/like_null.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/lowercase/lowercase.1.adm b/asterix-app/src/test/resources/runtimets/results/string/lowercase/lowercase.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/lowercase/lowercase.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/lowercase/lowercase.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches02/matches02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches02/matches02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches02/matches02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches02/matches02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches03/matches03.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches03/matches03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches03/matches03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches03/matches03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches04/matches04.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches04/matches04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches04/matches04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches04/matches04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches05/matches05.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches05/matches05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches05/matches05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches05/matches05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches06/matches06.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches06/matches06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches06/matches06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches06/matches06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches1/matches1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches1/matches1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches1/matches1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches1/matches1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches11/matches11.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches11/matches11.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches11/matches11.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches11/matches11.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches2/matches2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches2/matches2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches2/matches2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches2/matches2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches21/matches21.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches21/matches21.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches21/matches21.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches21/matches21.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches22/matches22.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches22/matches22.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches22/matches22.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches22/matches22.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches23/matches23.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches23/matches23.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches23/matches23.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches23/matches23.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matches3/matches3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matches3/matches3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matches3/matches3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matches3/matches3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/matchesnull/matchesnull.1.adm b/asterix-app/src/test/resources/runtimets/results/string/matchesnull/matchesnull.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/matchesnull/matchesnull.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/matchesnull/matchesnull.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/replace1/replace1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/replace1/replace1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/replace1/replace1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/replace1/replace1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/replace2/replace2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/replace2/replace2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/replace2/replace2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/replace2/replace2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/replace21/replace21.1.adm b/asterix-app/src/test/resources/runtimets/results/string/replace21/replace21.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/replace21/replace21.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/replace21/replace21.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/replace22/replace22.1.adm b/asterix-app/src/test/resources/runtimets/results/string/replace22/replace22.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/replace22/replace22.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/replace22/replace22.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/replace3/replace3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/replace3/replace3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/replace3/replace3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/replace3/replace3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/start-with1/start-with1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/start-with1/start-with1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/start-with1/start-with1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/start-with1/start-with1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/start-with2/start-with2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/start-with2/start-with2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/start-with2/start-with2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/start-with2/start-with2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/start-with3/start-with3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/start-with3/start-with3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/start-with3/start-with3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/start-with3/start-with3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/start-with4/start-with4.1.adm b/asterix-app/src/test/resources/runtimets/results/string/start-with4/start-with4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/start-with4/start-with4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/start-with4/start-with4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/start-with5/start-with5.1.adm b/asterix-app/src/test/resources/runtimets/results/string/start-with5/start-with5.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/start-with5/start-with5.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/start-with5/start-with5.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/starts-with_01/starts-with_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/starts-with_01/starts-with_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/starts-with_01/starts-with_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/starts-with_01/starts-with_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/startwith02/startwith02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/startwith02/startwith02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/startwith02/startwith02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/startwith02/startwith02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/startwith03/startwith03.1.adm b/asterix-app/src/test/resources/runtimets/results/string/startwith03/startwith03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/startwith03/startwith03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/startwith03/startwith03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strconcat01/strconcat01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strconcat01/strconcat01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strconcat01/strconcat01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strconcat01/strconcat01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strconcat02/strconcat02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strconcat02/strconcat02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strconcat02/strconcat02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strconcat02/strconcat02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-concat1/string-concat1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-concat1/string-concat1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-concat1/string-concat1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-concat1/string-concat1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal-true1/string-equal-true1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-equal-true1/string-equal-true1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal-true1/string-equal-true1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-equal-true1/string-equal-true1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal1/string-equal1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-equal1/string-equal1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal1/string-equal1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-equal1/string-equal1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal2/string-equal2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-equal2/string-equal2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal2/string-equal2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-equal2/string-equal2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal3/string-equal3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-equal3/string-equal3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal3/string-equal3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-equal3/string-equal3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal4/string-equal4.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-equal4/string-equal4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-equal4/string-equal4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-equal4/string-equal4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-join1/string-join1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-join1/string-join1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-join1/string-join1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-join1/string-join1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint/string-to-codepoint.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint/string-to-codepoint.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint/string-to-codepoint.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint/string-to-codepoint.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint1/string-to-codepoint1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint1/string-to-codepoint1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint1/string-to-codepoint1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/string-to-codepoint1/string-to-codepoint1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strlen02/strlen02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strlen02/strlen02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strlen02/strlen02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strlen02/strlen02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strlen03/strlen03.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strlen03/strlen03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strlen03/strlen03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strlen03/strlen03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strtocpt01/strtocpt01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strtocpt01/strtocpt01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strtocpt01/strtocpt01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strtocpt01/strtocpt01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strtocpt02/strtocpt02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strtocpt02/strtocpt02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strtocpt02/strtocpt02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strtocpt02/strtocpt02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/strtocpt03/strtocpt03.1.adm b/asterix-app/src/test/resources/runtimets/results/string/strtocpt03/strtocpt03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/strtocpt03/strtocpt03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/strtocpt03/strtocpt03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substr01/substr01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substr01/substr01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substr01/substr01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substr01/substr01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substr04/substr04.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substr04/substr04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substr04/substr04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substr04/substr04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substr05/substr05.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substr05/substr05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substr05/substr05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substr05/substr05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substr06/substr06.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substr06/substr06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substr06/substr06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substr06/substr06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-1/substring-after-1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-after-1/substring-after-1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-1/substring-after-1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-after-1/substring-after-1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-2/substring-after-2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-after-2/substring-after-2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-2/substring-after-2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-after-2/substring-after-2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-3/substring-after-3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-after-3/substring-after-3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-3/substring-after-3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-after-3/substring-after-3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-before-1/substring-before-1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-before-1/substring-before-1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-before-1/substring-before-1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-before-1/substring-before-1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-before-2/substring-before-2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-before-2/substring-before-2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-before-2/substring-before-2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-before-2/substring-before-2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-1/substring2-1.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring2-1/substring2-1.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-1/substring2-1.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring2-1/substring2-1.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-2/substring2-2.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring2-2/substring2-2.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-2/substring2-2.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring2-2/substring2-2.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-3/substring2-3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring2-3/substring2-3.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-3/substring2-3.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring2-3/substring2-3.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-4/substring2-4.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring2-4/substring2-4.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring2-4/substring2-4.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring2-4/substring2-4.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/substring_01/substring_01.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring_01/substring_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/substring_01/substring_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/substring_01/substring_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/toLowerCase02/toLowerCase02.1.adm b/asterix-app/src/test/resources/runtimets/results/string/toLowerCase02/toLowerCase02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/toLowerCase02/toLowerCase02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/toLowerCase02/toLowerCase02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/toLowerCase03/toLowerCase03.1.adm b/asterix-app/src/test/resources/runtimets/results/string/toLowerCase03/toLowerCase03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/toLowerCase03/toLowerCase03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/toLowerCase03/toLowerCase03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/string/toLowerCase04/toLowerCase04.1.adm b/asterix-app/src/test/resources/runtimets/results/string/toLowerCase04/toLowerCase04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/string/toLowerCase04/toLowerCase04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/string/toLowerCase04/toLowerCase04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/01/01.1.adm b/asterix-app/src/test/resources/runtimets/results/subset-collection/01/01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/01/01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/subset-collection/01/01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/02/02.1.adm b/asterix-app/src/test/resources/runtimets/results/subset-collection/02/02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/02/02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/subset-collection/02/02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/03/03.1.adm b/asterix-app/src/test/resources/runtimets/results/subset-collection/03/03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/03/03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/subset-collection/03/03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/05/05.1.adm b/asterix-app/src/test/resources/runtimets/results/subset-collection/05/05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/05/05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/subset-collection/05/05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/06/06.1.adm b/asterix-app/src/test/resources/runtimets/results/subset-collection/06/06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/06/06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/subset-collection/06/06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/07/07.1.adm b/asterix-app/src/test/resources/runtimets/results/subset-collection/07/07.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/subset-collection/07/07.1.adm
rename to asterix-app/src/test/resources/runtimets/results/subset-collection/07/07.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/accessors/accessors.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/accessors/accessors.1.adm
new file mode 100644
index 0000000..89e471a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/accessors/accessors.1.adm
@@ -0,0 +1 @@
+{ "year1": 2010, "year2": 1987, "year3": -1987, "year4": 928, "year5": 1937, "year6": -3, "year7": 9, "year-null": null, "month1": 10, "month2": 11, "month3": 11, "month4": 3, "month5": 12, "month6": 1, "month-null": null, "day1": 30, "day2": 19, "day3": 19, "day4": 29, "day5": 29, "day6": 634, "day-null": null, "hour1": 23, "hour2": 20, "hour3": 5, "hour4": 14, "hour-null": null, "min1": 49, "min2": 3, "min3": 23, "min4": 28, "min-null": null, "second1": 23, "second2": 6, "second3": 34, "second4": 48, "second-null": null, "ms1": 938, "ms2": 280, "ms3": 930, "ms4": 94, "ms-null": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/accessors_interval/accessors_interval.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/accessors_interval/accessors_interval.1.adm
new file mode 100644
index 0000000..df34c86
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/accessors_interval/accessors_interval.1.adm
@@ -0,0 +1 @@
+{ "start1": date("2010-10-30"), "end1": date("2013-04-01"), "start2": time("08:09:10.234Z"), "end2": time("12:30:40.567Z"), "start3": datetime("2009-08-31T16:00:00.000Z"), "end3": datetime("2013-04-04T16:00:00.000Z") }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/accessors_interval_null/accessors_interval_null.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/accessors_interval_null/accessors_interval_null.1.adm
new file mode 100644
index 0000000..7a50c5f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/accessors_interval_null/accessors_interval_null.1.adm
@@ -0,0 +1 @@
+{ "start-null-interval": null, "end-null-interval": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone/adjust_timezone.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone/adjust_timezone.1.adm
new file mode 100644
index 0000000..c51cd50
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone/adjust_timezone.1.adm
@@ -0,0 +1 @@
+{ "time": "04:15:10.327+08:00", "datetime": "2010-10-22T18:57:13.329-06:15", "null1": null, "null2": null, "null3": null, "null4": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration/calendar_duration.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration/calendar_duration.1.adm
new file mode 100644
index 0000000..fd18463
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration/calendar_duration.1.adm
@@ -0,0 +1 @@
+{ "cduration1": duration("P20Y3M12DT7H48M21.329S"), "c1": true, "cduration2": duration("-P9M6DT4H45M39.328S"), "c2": true, "cduration3": duration("P8Y6M"), "c3": true, "cduration4": duration("-P21Y7M10DT13H9M42.983S"), "c4": true, "cduration5": duration("P20Y3M12DT7H48M21.329S"), "c5": true, "cduration6": duration("-P9M5DT4H45M39.328S"), "c6": true, "cduration7": duration("P8Y6M"), "c7": true, "cduration8": duration("-P21Y7M10DT13H9M42.983S"), "c8": true, "cduration-null-1": null, "cduration-null-2": null, "cduration-null-3": null, "cduration-null-4": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/date_functions/date_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/date_functions/date_functions.1.adm
new file mode 100644
index 0000000..811d5e5
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/date_functions/date_functions.1.adm
@@ -0,0 +1 @@
+{ "date1": date("2012-09-17"), "date2": date("1327-12-02"), "date3": date("2012-10-10"), "date4": date("2010-05-17"), "date5": date("1703-08-09"), "duration1": duration("P137216D"), "duration2": duration("-P854D"), "c1": true, "c2": true, "null1": null, "null2": null, "null3": null, "null4": null, "null5": null, "null6": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions/datetime_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions/datetime_functions.1.adm
new file mode 100644
index 0000000..4911179
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions/datetime_functions.1.adm
@@ -0,0 +1 @@
+{ "datetime1": datetime("1970-01-12T01:33:27.429Z"), "datetime2": datetime("1327-12-02T23:35:49.938Z"), "datetime3": datetime("1327-12-02T23:35:49.938Z"), "duration1": duration("-P234526DT1H57M37.491S"), "c1": true, "null1": null, "null2": null, "null3": null, "null4": null, "null5": null, "null6": null, "null7": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/duration_comps/duration_comps.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/duration_comps/duration_comps.1.adm
new file mode 100644
index 0000000..26b32fc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/duration_comps/duration_comps.1.adm
@@ -0,0 +1 @@
+{ "yearMonthGreaterComp": true, "dayTimeGreaterComp": true, "yearMonthLessComp": false, "dayTimeLessComp": false, "equal1": true, "equal2": false, "equal3": true, "equal4": true }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/insert_from_delimited_ds/insert_from_delimited_ds.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
rename to asterix-app/src/test/resources/runtimets/results/temporal/insert_from_ext_ds/insert_from_ext_ds.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions/interval_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions/interval_functions.1.adm
new file mode 100644
index 0000000..0d86592
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions/interval_functions.1.adm
@@ -0,0 +1 @@
+{ "before1": true, "before2": false, "after1": true, "after2": false, "meet1": true, "meet2": false, "metby1": true, "metby2": false, "overlaps1": true, "overlaps2": false, "overlapped1": true, "overlapped2": false, "overlap1": true, "overlap2": false, "starts1": true, "starts2": false, "startedby1": true, "startedby2": false, "covers1": true, "covers2": false, "coveredby1": true, "coveredby2": false, "ends1": true, "ends2": false, "endedby1": true, "endedby2": false, "null1": null, "null2": null, "null3": null }
\ No newline at end of file
diff --git a/asterix-app/src/test/resources/runtimets/results/temporal/time_functions/time_functions.1.adm b/asterix-app/src/test/resources/runtimets/results/temporal/time_functions/time_functions.1.adm
new file mode 100644
index 0000000..d98d702
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/temporal/time_functions/time_functions.1.adm
@@ -0,0 +1 @@
+{ "time1": time("00:26:00.074Z"), "time2": time("23:35:49.938Z"), "time3": time("23:30:23.000Z"), "time4": time("18:26:00.074Z"), "time5": time("00:11:49.938Z"), "duration1": duration("-PT23H24M"), "duration2": duration("PT18H"), "c1": true, "c2": true, "null1": null, "null2": null, "null3": null, "null4": null, "null5": null, "null6": null }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_01/counthashed-gram-tokens_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-gram-tokens_02/counthashed-gram-tokens_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/counthashed-word-tokens_01/counthashed-word-tokens_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_01/gram-tokens_01.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_01/gram-tokens_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_01/gram-tokens_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_01/gram-tokens_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_02/gram-tokens_02.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_02/gram-tokens_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_02/gram-tokens_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/gram-tokens_02/gram-tokens_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_01/hashed-gram-tokens_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-gram-tokens_02/hashed-gram-tokens_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/hashed-word-tokens_01/hashed-word-tokens_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_01/word-tokens_01.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_01/word-tokens_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_01/word-tokens_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_01/word-tokens_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_02/word-tokens_02.1.adm b/asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_02/word-tokens_02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_02/word-tokens_02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tokenizers/word-tokens_02/word-tokens_02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/distinct_by/distinct_by.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/distinct_by/distinct_by.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/distinct_by/distinct_by.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/distinct_by/distinct_by.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/group_no_agg/group_no_agg.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/group_no_agg/group_no_agg.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/group_no_agg/group_no_agg.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/group_no_agg/group_no_agg.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item/q10_returned_ite.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item/q10_returned_ite.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item/q10_returned_ite.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item/q10_returned_ite.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item_int64/q10_returned_item_int64.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item_int64/q10_returned_item_int64.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item_int64/q10_returned_item_int64.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q10_returned_item_int64/q10_returned_item_int64.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q11_important_stock/q11_important_stock.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q11_important_stock/q11_important_stock.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q11_important_stock/q11_important_stock.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q11_important_stock/q11_important_stock.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q12_shipping/q12_shipping.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q12_shipping/q12_shipping.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q12_shipping/q12_shipping.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q12_shipping/q12_shipping.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q13_customer_distribution/q13_customer_distribution.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q13_customer_distribution/q13_customer_distribution.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q13_customer_distribution/q13_customer_distribution.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q13_customer_distribution/q13_customer_distribution.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q14_promotion_effect/q14_promotion_effect.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q14_promotion_effect/q14_promotion_effect.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q14_promotion_effect/q14_promotion_effect.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q14_promotion_effect/q14_promotion_effect.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q15_top_supplier/q15_top_supplier.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q15_top_supplier/q15_top_supplier.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q15_top_supplier/q15_top_supplier.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q15_top_supplier/q15_top_supplier.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q16_parts_supplier_relationship/q16_parts_supplier_relationship.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q17_small_quantity_order_revenue/q17_small_quantity_order_revenue.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q18_large_volume_customer/q18_large_volume_customer.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q18_large_volume_customer/q18_large_volume_customer.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q18_large_volume_customer/q18_large_volume_customer.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q18_large_volume_customer/q18_large_volume_customer.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q19_discounted_revenue/q19_discounted_revenue.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q19_discounted_revenue/q19_discounted_revenue.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q19_discounted_revenue/q19_discounted_revenue.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q19_discounted_revenue/q19_discounted_revenue.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q1_pricing_summary_report_nt/q1_pricing_summary_report_nt.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q20_potential_part_promotion/q20_potential_part_promotion.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q2_minimum_cost_supplier/q2_minimum_cost_supplier.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q3_shipping_priority_nt/q3_shipping_priority_nt.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q4_order_priority/q4_order_priority.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q4_order_priority/q4_order_priority.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q4_order_priority/q4_order_priority.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q4_order_priority/q4_order_priority.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q5_local_supplier_volume/q5_local_supplier_volume.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q6_forecast_revenue_change/q6_forecast_revenue_change.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q7_volume_shipping/q7_volume_shipping.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q7_volume_shipping/q7_volume_shipping.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q7_volume_shipping/q7_volume_shipping.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q7_volume_shipping/q7_volume_shipping.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q8_national_market_share/q8_national_market_share.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q8_national_market_share/q8_national_market_share.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q8_national_market_share/q8_national_market_share.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q8_national_market_share/q8_national_market_share.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.adm b/asterix-app/src/test/resources/runtimets/results/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.adm
rename to asterix-app/src/test/resources/runtimets/results/tpch/q9_product_type_profit_nt/q9_product_type_profit_nt.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/query-issue201/query-issue201.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/query-issue201/query-issue201.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/query-issue201/query-issue201.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/query-issue201/query-issue201.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf01/udf01.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf01/udf01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf01/udf01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf01/udf01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf02/udf02.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf02/udf02.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf02/udf02.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf02/udf02.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf03/udf03.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf03/udf03.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf03/udf03.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf03/udf03.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf04/udf04.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf04/udf04.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf04/udf04.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf04/udf04.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf05/udf05.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf05/udf05.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf05/udf05.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf05/udf05.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf06/udf06.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf06/udf06.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf06/udf06.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf06/udf06.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf07/udf07.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf07/udf07.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf07/udf07.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf07/udf07.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf08/udf08.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf08/udf08.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf08/udf08.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf08/udf08.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf09/udf09.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf09/udf09.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf09/udf09.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf09/udf09.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf10/udf10.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf10/udf10.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf10/udf10.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf10/udf10.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf11/udf11.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf11/udf11.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf11/udf11.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf11/udf11.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf12/udf12.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf12/udf12.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf12/udf12.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf12/udf12.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf13/udf13.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf13/udf13.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf13/udf13.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf13/udf13.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf14/udf14.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf14/udf14.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf14/udf14.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf14/udf14.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf16/udf16.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf16/udf16.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf16/udf16.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf16/udf16.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf17/udf17.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf17/udf17.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf17/udf17.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf17/udf17.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf18/udf18.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf18/udf18.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf18/udf18.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf18/udf18.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf19/udf19.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf19/udf19.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf19/udf19.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf19/udf19.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf20/udf20.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf20/udf20.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf20/udf20.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf20/udf20.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf21/udf21.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf21/udf21.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf21/udf21.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf21/udf21.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf22/udf22.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf22/udf22.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf22/udf22.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf22/udf22.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf23/udf23.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf23/udf23.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf23/udf23.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf23/udf23.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf27/udf27.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf27/udf27.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf27/udf27.1.adm
rename to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf27/udf27.1.adm
diff --git a/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf28/udf28.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf28/udf28.1.adm
new file mode 100644
index 0000000..b106dbe
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf28/udf28.1.adm
@@ -0,0 +1 @@
+{ "DataverseName": "test", "Name": "f1", "Arity": "0", "Params": [  ], "ReturnType": "VOID", "Definition": "100", "Language": "AQL", "Kind": "SCALAR" }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv14/cross-dv14.1.adm b/asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf29/udf29.1.adm
similarity index 100%
copy from asterix/asterix-app/src/test/resources/runtimets/results/cross-dataverse/cross-dv14/cross-dv14.1.adm
copy to asterix-app/src/test/resources/runtimets/results/user-defined-functions/udf29/udf29.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/writers/print_01/print_01.1.adm b/asterix-app/src/test/resources/runtimets/results/writers/print_01/print_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/writers/print_01/print_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/writers/print_01/print_01.1.adm
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/writers/serialized_01/serialized_01.1.adm b/asterix-app/src/test/resources/runtimets/results/writers/serialized_01/serialized_01.1.adm
similarity index 100%
rename from asterix/asterix-app/src/test/resources/runtimets/results/writers/serialized_01/serialized_01.1.adm
rename to asterix-app/src/test/resources/runtimets/results/writers/serialized_01/serialized_01.1.adm
Binary files differ
diff --git a/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix-app/src/test/resources/runtimets/testsuite.xml
new file mode 100644
index 0000000..6cb0ecc
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -0,0 +1,4234 @@
+<test-suite xmlns="urn:xml.testframework.asterix.ics.uci.edu" ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql">
+  <test-group name="aggregate">
+    <test-case FilePath="aggregate">
+      <compilation-unit name="issue395">
+        <output-dir compare="Text">issue395</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="issue412_0">
+        <output-dir compare="Text">issue412_0</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="issue412_1">
+        <output-dir compare="Text">issue412_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_double">
+        <output-dir compare="Text">avg_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_double_null">
+        <output-dir compare="Text">avg_double_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_empty_01">
+        <output-dir compare="Text">avg_empty_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_empty_02">
+        <output-dir compare="Text">avg_empty_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_float">
+        <output-dir compare="Text">avg_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_float_null">
+        <output-dir compare="Text">avg_float_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int16">
+        <output-dir compare="Text">avg_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int16_null">
+        <output-dir compare="Text">avg_int16_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int32">
+        <output-dir compare="Text">avg_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int32_null">
+        <output-dir compare="Text">avg_int32_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int64">
+        <output-dir compare="Text">avg_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int64_null">
+        <output-dir compare="Text">avg_int64_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int8">
+        <output-dir compare="Text">avg_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="avg_int8_null">
+        <output-dir compare="Text">avg_int8_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="count_01">
+        <output-dir compare="Text">count_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="count_empty_01">
+        <output-dir compare="Text">count_empty_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="count_empty_02">
+        <output-dir compare="Text">count_empty_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="count_null">
+        <output-dir compare="Text">count_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="aggregate">
+      <compilation-unit name="droptype">
+        <output-dir compare="Text">droptype</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!-- TODO(madhusudancs): These tests that test for local_<agg>/global_<agg> functions should be removed, but
+    before that we should modify the code to make sure those built-in functions are still defined but not exposed
+    by AQL, so leaving these test cases commented.
+    <test-case FilePath="aggregate">
+      <compilation-unit name="global-avg_01">
+        <output-dir compare="Text">global-avg_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="global-avg_null">
+        <output-dir compare="Text">global-avg_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_double">
+        <output-dir compare="Text">local-avg_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_double_null">
+        <output-dir compare="Text">local-avg_double_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_float">
+        <output-dir compare="Text">local-avg_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_float_null">
+        <output-dir compare="Text">local-avg_float_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int16">
+        <output-dir compare="Text">local-avg_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int16_null">
+        <output-dir compare="Text">local-avg_int16_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int32">
+        <output-dir compare="Text">local-avg_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int32_null">
+        <output-dir compare="Text">local-avg_int32_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int64">
+        <output-dir compare="Text">local-avg_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int64_null">
+        <output-dir compare="Text">local-avg_int64_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int8">
+        <output-dir compare="Text">local-avg_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="local-avg_int8_null">
+        <output-dir compare="Text">local-avg_int8_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="aggregate">
+      <compilation-unit name="max_empty_01">
+        <output-dir compare="Text">max_empty_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="max_empty_02">
+        <output-dir compare="Text">max_empty_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="min_empty_01">
+        <output-dir compare="Text">min_empty_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="min_empty_02">
+        <output-dir compare="Text">min_empty_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_avg">
+        <output-dir compare="Text">scalar_avg</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_avg_empty">
+        <output-dir compare="Text">scalar_avg_empty</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_avg_null">
+        <output-dir compare="Text">scalar_avg_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_count">
+        <output-dir compare="Text">scalar_count</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_count_empty">
+        <output-dir compare="Text">scalar_count_empty</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_count_null">
+        <output-dir compare="Text">scalar_count_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_max">
+        <output-dir compare="Text">scalar_max</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_max_empty">
+        <output-dir compare="Text">scalar_max_empty</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_max_null">
+        <output-dir compare="Text">scalar_max_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_min">
+        <output-dir compare="Text">scalar_min</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_min_empty">
+        <output-dir compare="Text">scalar_min_empty</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_min_null">
+        <output-dir compare="Text">scalar_min_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_sum">
+        <output-dir compare="Text">scalar_sum</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_sum_empty">
+        <output-dir compare="Text">scalar_sum_empty</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="scalar_sum_null">
+        <output-dir compare="Text">scalar_sum_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_double">
+        <output-dir compare="Text">sum_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_double_null">
+        <output-dir compare="Text">sum_double_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_empty_01">
+        <output-dir compare="Text">sum_empty_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_empty_02">
+        <output-dir compare="Text">sum_empty_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_float">
+        <output-dir compare="Text">sum_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_float_null">
+        <output-dir compare="Text">sum_float_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int16">
+        <output-dir compare="Text">sum_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int16_null">
+        <output-dir compare="Text">sum_int16_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int32">
+        <output-dir compare="Text">sum_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int32_null">
+        <output-dir compare="Text">sum_int32_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int64">
+        <output-dir compare="Text">sum_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int64_null">
+        <output-dir compare="Text">sum_int64_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int8">
+        <output-dir compare="Text">sum_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_int8_null">
+        <output-dir compare="Text">sum_int8_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_null-with-pred">
+        <output-dir compare="Text">sum_null-with-pred</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="aggregate">
+      <compilation-unit name="sum_numeric_null">
+        <output-dir compare="Text">sum_numeric_null</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="boolean">
+    <test-case FilePath="boolean">
+      <compilation-unit name="and_01">
+        <output-dir compare="Text">and_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="boolean">
+      <compilation-unit name="and_null">
+        <output-dir compare="Text">and_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="boolean">
+      <compilation-unit name="and_null_false">
+        <output-dir compare="Text">and_null_false</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="boolean">
+      <compilation-unit name="not_01">
+        <output-dir compare="Text">not_01</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="comparison">
+    <test-case FilePath="comparison">
+      <compilation-unit name="datetime_order">
+        <output-dir compare="Text">datetime_order</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="datetime_range">
+        <output-dir compare="Text">datetime_range</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="datetime_tzeq">
+        <output-dir compare="Text">datetime_tzeq</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="double">
+        <output-dir compare="Text">double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="double_gte_01">
+        <output-dir compare="Text">double_gte_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="double_null">
+        <output-dir compare="Text">double_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="eq_01">
+        <output-dir compare="Text">eq_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="float">
+        <output-dir compare="Text">float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="float_null">
+        <output-dir compare="Text">float_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="gt_01">
+        <output-dir compare="Text">gt_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="gte_01">
+        <output-dir compare="Text">gte_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int16">
+        <output-dir compare="Text">int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int16_null">
+        <output-dir compare="Text">int16_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int32">
+        <output-dir compare="Text">int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int32_null">
+        <output-dir compare="Text">int32_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int64">
+        <output-dir compare="Text">int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int64_null">
+        <output-dir compare="Text">int64_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int8">
+        <output-dir compare="Text">int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="int8_null">
+        <output-dir compare="Text">int8_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="lt_01">
+        <output-dir compare="Text">lt_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="lte_01">
+        <output-dir compare="Text">lte_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="neq_01">
+        <output-dir compare="Text">neq_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="comparison">
+      <compilation-unit name="numeric-comparison_01">
+        <output-dir compare="Text">numeric-comparison_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="comparison">
+      <compilation-unit name="string">
+        <output-dir compare="Text">string</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="comparison">
+      <compilation-unit name="string_null">
+        <output-dir compare="Text">string_null</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="constructor">
+    <test-case FilePath="constructor">
+      <compilation-unit name="add-null">
+        <output-dir compare="Text">add-null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="boolean_01">
+        <output-dir compare="Text">boolean_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="circle_01">
+        <output-dir compare="Text">circle_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="date_01">
+        <output-dir compare="Text">date_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="datetime_01">
+        <output-dir compare="Text">datetime_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="double_01">
+        <output-dir compare="Text">double_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="duration_01">
+        <output-dir compare="Text">duration_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="float_01">
+        <output-dir compare="Text">float_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="int_01">
+        <output-dir compare="Text">int_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="interval">
+        <output-dir compare="Text">interval</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="line_01">
+        <output-dir compare="Text">line_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="rectangle_01">
+        <output-dir compare="Text">rectangle_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="point_01">
+        <output-dir compare="Text">point_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="polygon_01">
+        <output-dir compare="Text">polygon_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="primitive-01">
+        <output-dir compare="Text">primitive-01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="primitive-02">
+        <output-dir compare="Text">primitive-02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="primitive-03">
+        <output-dir compare="Text">primitive-03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="primitive-04">
+        <output-dir compare="Text">primitive-04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="string_01">
+        <output-dir compare="Text">string_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="constructor">
+      <compilation-unit name="time_01">
+        <output-dir compare="Text">time_01</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="custord">
+    <!--
+    <test-case FilePath="custord">
+      <compilation-unit name="co">
+        <output-dir compare="Text">co</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_01">
+        <output-dir compare="Text">customer_q_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_02">
+        <output-dir compare="Text">customer_q_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_03">
+        <output-dir compare="Text">customer_q_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_04">
+        <output-dir compare="Text">customer_q_04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_05">
+        <output-dir compare="Text">customer_q_05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_06">
+        <output-dir compare="Text">customer_q_06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_07">
+        <output-dir compare="Text">customer_q_07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="customer_q_08">
+        <output-dir compare="Text">customer_q_08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="custord">
+      <compilation-unit name="denorm-cust-order_01">
+        <output-dir compare="Text">denorm-cust-order_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="custord">
+      <compilation-unit name="denorm-cust-order_02">
+        <output-dir compare="Text">denorm-cust-order_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="custord">
+      <compilation-unit name="denorm-cust-order_03">
+        <output-dir compare="Text">denorm-cust-order_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="custord">
+      <compilation-unit name="freq-clerk">
+        <output-dir compare="Text">freq-clerk</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="custord">
+      <compilation-unit name="join_q_01">
+        <output-dir compare="Text">join_q_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="join_q_02">
+        <output-dir compare="Text">join_q_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="join_q_03">
+        <output-dir compare="Text">join_q_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="custord">
+      <compilation-unit name="join_q_04">
+        <output-dir compare="Text">join_q_04</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="custord">
+      <compilation-unit name="load-test">
+        <output-dir compare="Text">load-test</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="order_q_01">
+        <output-dir compare="Text">order_q_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="order_q_02">
+        <output-dir compare="Text">order_q_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="order_q_03">
+        <output-dir compare="Text">order_q_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="order_q_04">
+        <output-dir compare="Text">order_q_04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="order_q_05">
+        <output-dir compare="Text">order_q_05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="custord">
+      <compilation-unit name="order_q_06">
+        <output-dir compare="Text">order_q_06</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="dapd">
+    <test-case FilePath="dapd">
+      <compilation-unit name="q1">
+        <output-dir compare="Text">q1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2">
+        <output-dir compare="Text">q2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="dapd">
+      <compilation-unit name="q3">
+        <output-dir compare="Text">q3</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+  </test-group>
+  <test-group name="dml">
+     <test-case FilePath="dml">
+      <compilation-unit name="query-issue288">
+        <output-dir compare="Text">query-issue288</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="query-issue205">
+        <output-dir compare="Text">query-issue205</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="delete-from-loaded-dataset-with-index">
+        <output-dir compare="Text">delete-from-loaded-dataset-with-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="delete-from-loaded-dataset">
+        <output-dir compare="Text">delete-from-loaded-dataset</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="delete-syntax-change">
+        <output-dir compare="Text">delete-syntax-change</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="drop-empty-secondary-indexes">
+        <output-dir compare="Text">drop-empty-secondary-indexes</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="drop-index">
+        <output-dir compare="Text">drop-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="create-drop-cltype">
+        <output-dir compare="Text">create-drop-cltype</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="create-drop-opntype">
+        <output-dir compare="Text">create-drop-opntype</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="empty-load-with-index">
+        <output-dir compare="Text">empty-load-with-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="empty-load">
+        <output-dir compare="Text">empty-load</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-into-empty-dataset-with-index">
+        <output-dir compare="Text">insert-into-empty-dataset-with-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-into-empty-dataset-with-index">
+        <output-dir compare="Text">insert-into-empty-dataset-with-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-syntax">
+        <output-dir compare="Text">insert-syntax</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-into-loaded-dataset-with-index_01">
+        <output-dir compare="Text">insert-into-loaded-dataset-with-index_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-into-loaded-dataset-with-index_02">
+        <output-dir compare="Text">insert-into-loaded-dataset-with-index_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-into-loaded-dataset_01">
+        <output-dir compare="Text">insert-into-loaded-dataset_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-into-loaded-dataset_02">
+        <output-dir compare="Text">insert-into-loaded-dataset_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert-src-dst-01">
+        <output-dir compare="Text">insert-src-dst-01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert">
+        <output-dir compare="Text">insert</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="insert_less_nc">
+        <output-dir compare="Text">insert_less_nc</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="dml">
+      <compilation-unit name="load-from-hdfs">
+        <output-dir compare="Text">load-from-hdfs</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="dml">
+      <compilation-unit name="load-with-index">
+        <output-dir compare="Text">load-with-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-c2o-recursive">
+        <output-dir compare="Text">opentype-c2o-recursive</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-c2o">
+        <output-dir compare="Text">opentype-c2o</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-closed-optional">
+        <output-dir compare="Text">opentype-closed-optional</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-insert">
+        <output-dir compare="Text">opentype-insert</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-insert2">
+        <output-dir compare="Text">opentype-insert2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-noexpand">
+        <output-dir compare="Text">opentype-noexpand</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-o2c-recursive">
+        <output-dir compare="Text">opentype-o2c-recursive</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-o2c">
+        <output-dir compare="Text">opentype-o2c</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="opentype-o2o">
+        <output-dir compare="Text">opentype-o2o</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-btree-secondary-index-nullable">
+        <output-dir compare="Text">scan-delete-btree-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-rtree-secondary-index-nullable">
+        <output-dir compare="Text">scan-delete-rtree-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-rtree-secondary-index">
+        <output-dir compare="Text">scan-delete-rtree-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-btree-secondary-index-nullable">
+        <output-dir compare="Text">scan-insert-btree-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-rtree-secondary-index-nullable">
+        <output-dir compare="Text">scan-insert-rtree-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-rtree-secondary-index">
+        <output-dir compare="Text">scan-insert-rtree-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index">
+        <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-word-secondary-index">
+        <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-fuzzy-ngram-secondary-index">
+        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-ngram-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-fuzzy-word-secondary-index">
+        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-word-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index-nullable">
+        <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-word-secondary-index-nullable">
+        <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable">
+        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-insert-inverted-index-fuzzy-word-secondary-index-nullable">
+        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-word-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index">
+        <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-word-secondary-index">
+        <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-fuzzy-ngram-secondary-index">
+        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-ngram-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-fuzzy-word-secondary-index">
+        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-word-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index-nullable">
+        <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-word-secondary-index-nullable">
+        <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable">
+        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dml">
+      <compilation-unit name="scan-delete-inverted-index-fuzzy-word-secondary-index-nullable">
+        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-word-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="employee">
+    <test-case FilePath="employee">
+      <compilation-unit name="q_01">
+        <output-dir compare="Text">q_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="employee">
+      <compilation-unit name="q_02">
+        <output-dir compare="Text">q_02</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="failure">
+    <!--
+    <test-case FilePath="failure">
+      <compilation-unit name="q1_pricing_summary_report_failure">
+        <output-dir compare="Text">q1_pricing_summary_report_failure</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+  </test-group>
+  <!--
+  <test-group name="flwor">
+    <test-case FilePath="flwor">
+      <compilation-unit name="for01">
+        <output-dir compare="Text">for01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for02">
+        <output-dir compare="Text">for02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for03">
+        <output-dir compare="Text">for03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for04">
+        <output-dir compare="Text">for04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for05">
+        <output-dir compare="Text">for05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for06">
+        <output-dir compare="Text">for06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for07">
+        <output-dir compare="Text">for07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for08">
+        <output-dir compare="Text">for08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for09">
+        <output-dir compare="Text">for09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for10">
+        <output-dir compare="Text">for10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for11">
+        <output-dir compare="Text">for11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for12">
+        <output-dir compare="Text">for12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for13">
+        <output-dir compare="Text">for13</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for14">
+        <output-dir compare="Text">for14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for15">
+        <output-dir compare="Text">for15</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for16">
+        <output-dir compare="Text">for16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for17">
+        <output-dir compare="Text">for17</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for18">
+        <output-dir compare="Text">for18</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="for19">
+        <output-dir compare="Text">for19</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="grpby01">
+        <output-dir compare="Text">grpby01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="grpby02">
+        <output-dir compare="Text">grpby02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let01">
+        <output-dir compare="Text">let01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let02">
+        <output-dir compare="Text">let02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let03">
+        <output-dir compare="Text">let03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let04">
+        <output-dir compare="Text">let04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let05">
+        <output-dir compare="Text">let05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let06">
+        <output-dir compare="Text">let06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let07">
+        <output-dir compare="Text">let07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let08">
+        <output-dir compare="Text">let08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let09">
+        <output-dir compare="Text">let09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let10">
+        <output-dir compare="Text">let10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let11">
+        <output-dir compare="Text">let11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let12">
+        <output-dir compare="Text">let12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let13">
+        <output-dir compare="Text">let13</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let14">
+        <output-dir compare="Text">let14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let15">
+        <output-dir compare="Text">let15</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let16">
+        <output-dir compare="Text">let16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let17">
+        <output-dir compare="Text">let17</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let18">
+        <output-dir compare="Text">let18</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let19">
+        <output-dir compare="Text">let19</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let20">
+        <output-dir compare="Text">let20</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let21">
+        <output-dir compare="Text">let21</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let22">
+        <output-dir compare="Text">let22</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let23">
+        <output-dir compare="Text">let23</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let24">
+        <output-dir compare="Text">let24</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let25">
+        <output-dir compare="Text">let25</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let26">
+        <output-dir compare="Text">let26</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let27">
+        <output-dir compare="Text">let27</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let28">
+        <output-dir compare="Text">let28</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let29">
+        <output-dir compare="Text">let29</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let30">
+        <output-dir compare="Text">let30</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let31">
+        <output-dir compare="Text">let31</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="let32">
+        <output-dir compare="Text">let32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-01">
+        <output-dir compare="Text">order-by-01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-02">
+        <output-dir compare="Text">order-by-02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-03">
+        <output-dir compare="Text">order-by-03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-04">
+        <output-dir compare="Text">order-by-04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-05">
+        <output-dir compare="Text">order-by-05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-06">
+        <output-dir compare="Text">order-by-06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-07">
+        <output-dir compare="Text">order-by-07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-08">
+        <output-dir compare="Text">order-by-08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-09">
+        <output-dir compare="Text">order-by-09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-10">
+        <output-dir compare="Text">order-by-10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-11">
+        <output-dir compare="Text">order-by-11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="order-by-12">
+        <output-dir compare="Text">order-by-12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-01">
+        <output-dir compare="Text">ret-01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-02">
+        <output-dir compare="Text">ret-02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-03">
+        <output-dir compare="Text">ret-03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-04">
+        <output-dir compare="Text">ret-04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-05">
+        <output-dir compare="Text">ret-05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-06">
+        <output-dir compare="Text">ret-06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-07">
+        <output-dir compare="Text">ret-07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-08">
+        <output-dir compare="Text">ret-08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-09">
+        <output-dir compare="Text">ret-09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-10">
+        <output-dir compare="Text">ret-10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-11">
+        <output-dir compare="Text">ret-11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-12">
+        <output-dir compare="Text">ret-12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-13">
+        <output-dir compare="Text">ret-13</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-14">
+        <output-dir compare="Text">ret-14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-15">
+        <output-dir compare="Text">ret-15</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-16">
+        <output-dir compare="Text">ret-16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-17">
+        <output-dir compare="Text">ret-17</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-18">
+        <output-dir compare="Text">ret-18</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="flwor">
+      <compilation-unit name="ret-19">
+        <output-dir compare="Text">ret-19</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  -->
+  <test-group name="fuzzyjoin">
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-1_1">
+        <output-dir compare="Text">dblp-1_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-1_2.1.1">
+        <output-dir compare="Text">dblp-1_2.1.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-1_2.1">
+        <output-dir compare="Text">dblp-1_2.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-1_2">
+        <output-dir compare="Text">dblp-1_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2.1_5.3.1">
+        <output-dir compare="Text">dblp-2.1_5.3.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_1">
+        <output-dir compare="Text">dblp-2_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_2">
+        <output-dir compare="Text">dblp-2_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2.2">
+        <output-dir compare="Text">dblp-2.2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_3">
+        <output-dir compare="Text">dblp-2_3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_4">
+        <output-dir compare="Text">dblp-2_4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_5.1">
+        <output-dir compare="Text">dblp-2_5.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_5.2">
+        <output-dir compare="Text">dblp-2_5.2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_5.3.1">
+        <output-dir compare="Text">dblp-2_5.3.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_5.3">
+        <output-dir compare="Text">dblp-2_5.3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-2_5">
+        <output-dir compare="Text">dblp-2_5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-3_1.1">
+        <output-dir compare="Text">dblp-3_1.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-3_1.2">
+        <output-dir compare="Text">dblp-3_1.2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-3_1">
+        <output-dir compare="Text">dblp-3_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-aqlplus_1">
+        <output-dir compare="Text">dblp-aqlplus_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-aqlplus_2">
+        <output-dir compare="Text">dblp-aqlplus_2</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_1">
+        <output-dir compare="Text">dblp-csx-2_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_2">
+        <output-dir compare="Text">dblp-csx-2_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_3">
+        <output-dir compare="Text">dblp-csx-2_3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_4">
+        <output-dir compare="Text">dblp-csx-2_4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_5.1">
+        <output-dir compare="Text">dblp-csx-2_5.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_5.2">
+        <output-dir compare="Text">dblp-csx-2_5.2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_5.3.1">
+        <output-dir compare="Text">dblp-csx-2_5.3.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_5.3">
+        <output-dir compare="Text">dblp-csx-2_5.3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-2_5">
+        <output-dir compare="Text">dblp-csx-2_5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_1">
+        <output-dir compare="Text">dblp-csx-3_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_2">
+        <output-dir compare="Text">dblp-csx-3_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_3">
+        <output-dir compare="Text">dblp-csx-3_3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_4">
+        <output-dir compare="Text">dblp-csx-3_4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5.1">
+        <output-dir compare="Text">dblp-csx-3_5.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5.2">
+        <output-dir compare="Text">dblp-csx-3_5.2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5.3.1">
+        <output-dir compare="Text">dblp-csx-3_5.3.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5.3">
+        <output-dir compare="Text">dblp-csx-3_5.3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5.4.1">
+        <output-dir compare="Text">dblp-csx-3_5.4.1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5.4">
+        <output-dir compare="Text">dblp-csx-3_5.4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-3_5">
+        <output-dir compare="Text">dblp-csx-3_5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-aqlplus_1">
+        <output-dir compare="Text">dblp-csx-aqlplus_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-aqlplus_2">
+        <output-dir compare="Text">dblp-csx-aqlplus_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-aqlplus_3">
+        <output-dir compare="Text">dblp-csx-aqlplus_3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-csx-dblp-aqlplus_1">
+        <output-dir compare="Text">dblp-csx-dblp-aqlplus_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-lookup_1">
+        <output-dir compare="Text">dblp-lookup_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="fuzzyjoin">
+      <compilation-unit name="dblp-splits-3_1">
+        <output-dir compare="Text">dblp-splits-3_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+  </test-group>
+  <test-group name="index-join">
+    <test-case FilePath="index-join">
+      <compilation-unit name="btree-primary-equi-join">
+        <output-dir compare="Text">btree-primary-equi-join</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-join">
+      <compilation-unit name="btree-secondary-equi-join">
+        <output-dir compare="Text">btree-secondary-equi-join</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-join">
+      <compilation-unit name="rtree-spatial-intersect-point">
+        <output-dir compare="Text">rtree-spatial-intersect-point</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="index-selection">
+    <test-case FilePath="index-selection">
+      <compilation-unit name="btree-index-composite-key">
+        <output-dir compare="Text">btree-index-composite-key</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="btree-index-composite-key-mixed-intervals">
+        <output-dir compare="Text">btree-index-composite-key-mixed-intervals</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="btree-index-rewrite-multiple">
+        <output-dir compare="Text">btree-index-rewrite-multiple</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="cust-index-age-nullable">
+        <output-dir compare="Text">cust-index-age-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-ngram-contains">
+        <output-dir compare="Text">fuzzy-inverted-index-ngram-contains</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-ngram-edit-distance-panic">
+        <output-dir compare="Text">fuzzy-inverted-index-ngram-edit-distance-panic</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-ngram-edit-distance">
+        <output-dir compare="Text">fuzzy-inverted-index-ngram-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-ngram-jaccard">
+        <output-dir compare="Text">fuzzy-inverted-index-ngram-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-olist-edit-distance-panic">
+        <output-dir compare="Text">fuzzy-inverted-index-olist-edit-distance-panic</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-olist-edit-distance">
+        <output-dir compare="Text">fuzzy-inverted-index-olist-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-olist-jaccard">
+        <output-dir compare="Text">fuzzy-inverted-index-olist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-ulist-jaccard">
+        <output-dir compare="Text">fuzzy-inverted-index-ulist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-word-contains">
+        <output-dir compare="Text">fuzzy-inverted-index-word-contains</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="fuzzy-inverted-index-word-jaccard">
+        <output-dir compare="Text">fuzzy-inverted-index-word-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-ngram-contains">
+        <output-dir compare="Text">inverted-index-ngram-contains</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-ngram-edit-distance-panic">
+        <output-dir compare="Text">inverted-index-ngram-edit-distance-panic</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-ngram-edit-distance">
+        <output-dir compare="Text">inverted-index-ngram-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-ngram-jaccard">
+        <output-dir compare="Text">inverted-index-ngram-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-olist-edit-distance-panic">
+        <output-dir compare="Text">inverted-index-olist-edit-distance-panic</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-olist-edit-distance">
+        <output-dir compare="Text">inverted-index-olist-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-olist-jaccard">
+        <output-dir compare="Text">inverted-index-olist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-ulist-jaccard">
+        <output-dir compare="Text">inverted-index-ulist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-word-contains">
+        <output-dir compare="Text">inverted-index-word-contains</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="inverted-index-word-jaccard">
+        <output-dir compare="Text">inverted-index-word-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="orders-index-custkey-conjunctive-open">
+        <output-dir compare="Text">orders-index-custkey-conjunctive-open</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="orders-index-custkey-conjunctive">
+        <output-dir compare="Text">orders-index-custkey-conjunctive</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="orders-index-custkey-open">
+        <output-dir compare="Text">orders-index-custkey-open</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="orders-index-custkey">
+        <output-dir compare="Text">orders-index-custkey</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="range-search-open">
+        <output-dir compare="Text">range-search-open</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="range-search">
+        <output-dir compare="Text">range-search</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="rtree-secondary-index-nullable">
+        <output-dir compare="Text">rtree-secondary-index-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="rtree-secondary-index-open">
+        <output-dir compare="Text">rtree-secondary-index-open</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="index-selection">
+      <compilation-unit name="rtree-secondary-index">
+        <output-dir compare="Text">rtree-secondary-index</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="inverted-index-join">
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="ngram-edit-distance">
+        <output-dir compare="Text">ngram-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="ngram-edit-distance-inline">
+        <output-dir compare="Text">ngram-edit-distance-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="ngram-jaccard">
+        <output-dir compare="Text">ngram-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="ngram-jaccard-inline">
+        <output-dir compare="Text">ngram-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="olist-edit-distance">
+        <output-dir compare="Text">olist-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="olist-edit-distance-inline">
+        <output-dir compare="Text">olist-edit-distance-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="olist-jaccard">
+        <output-dir compare="Text">olist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="olist-jaccard-inline">
+        <output-dir compare="Text">olist-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="ulist-jaccard">
+        <output-dir compare="Text">ulist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="ulist-jaccard-inline">
+        <output-dir compare="Text">ulist-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="word-jaccard">
+        <output-dir compare="Text">word-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join">
+      <compilation-unit name="word-jaccard-inline">
+        <output-dir compare="Text">word-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="inverted-index-join-noeqjoin">
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="ngram-edit-distance">
+        <output-dir compare="Text">ngram-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="ngram-edit-distance-inline">
+        <output-dir compare="Text">ngram-edit-distance-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="ngram-jaccard">
+        <output-dir compare="Text">ngram-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="ngram-jaccard-inline">
+        <output-dir compare="Text">ngram-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="olist-edit-distance">
+        <output-dir compare="Text">olist-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="olist-edit-distance-inline">
+        <output-dir compare="Text">olist-edit-distance-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="olist-jaccard">
+        <output-dir compare="Text">olist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="olist-jaccard-inline">
+        <output-dir compare="Text">olist-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="ulist-jaccard">
+        <output-dir compare="Text">ulist-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="ulist-jaccard-inline">
+        <output-dir compare="Text">ulist-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="word-jaccard">
+        <output-dir compare="Text">word-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="inverted-index-join-noeqjoin">
+      <compilation-unit name="word-jaccard-inline">
+        <output-dir compare="Text">word-jaccard-inline</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="list">
+    <test-case FilePath="list">
+      <compilation-unit name="any-collection-member_01">
+        <output-dir compare="Text">any-collection-member_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="get-item_01">
+        <output-dir compare="Text">get-item_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="len_01">
+        <output-dir compare="Text">len_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="len_null_01">
+        <output-dir compare="Text">len_null_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="listify_01">
+        <output-dir compare="Text">listify_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="listify_02">
+        <output-dir compare="Text">listify_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="listify_03">
+        <output-dir compare="Text">listify_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="ordered-list-constructor_01">
+        <output-dir compare="Text">ordered-list-constructor_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="ordered-list-constructor_02">
+        <output-dir compare="Text">ordered-list-constructor_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="ordered-list-constructor_03">
+        <output-dir compare="Text">ordered-list-constructor_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="scan-collection_01">
+        <output-dir compare="Text">scan-collection_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="union_01">
+        <output-dir compare="Text">union_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="union_02">
+        <output-dir compare="Text">union_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="unordered-list-constructor_01">
+        <output-dir compare="Text">unordered-list-constructor_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="unordered-list-constructor_02">
+        <output-dir compare="Text">unordered-list-constructor_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="list">
+      <compilation-unit name="unordered-list-constructor_03">
+        <output-dir compare="Text">unordered-list-constructor_03</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="misc">
+  <test-case FilePath="misc">
+      <compilation-unit name="partition-by-nonexistent-field">
+        <output-dir compare="Text">partition-by-nonexistent-field</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="float_01">
+        <output-dir compare="Text">float_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="groupby-orderby-count">
+        <output-dir compare="Text">groupby-orderby-count</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="ifthenelse_01">
+        <output-dir compare="Text">ifthenelse_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="is-null_01">
+        <output-dir compare="Text">is-null_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="nested-loop-join_01">
+        <output-dir compare="Text">nested-loop-join_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="range_01">
+        <output-dir compare="Text">range_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="tid_01">
+        <output-dir compare="Text">tid_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
+      <compilation-unit name="year_01">
+        <output-dir compare="Text">year_01</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="nestrecords">
+    <test-case FilePath="nestrecords">
+      <compilation-unit name="nestrecord">
+        <output-dir compare="Text">nestrecord</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="numeric">
+    <test-case FilePath="numeric">
+      <compilation-unit name="abs0">
+        <output-dir compare="Text">abs0</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="abs1">
+        <output-dir compare="Text">abs1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="abs2">
+        <output-dir compare="Text">abs2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="abs3">
+        <output-dir compare="Text">abs3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="abs4">
+        <output-dir compare="Text">abs4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="add_double">
+        <output-dir compare="Text">add_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="add_float">
+        <output-dir compare="Text">add_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="add_int16">
+        <output-dir compare="Text">add_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="add_int32">
+        <output-dir compare="Text">add_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="add_int64">
+        <output-dir compare="Text">add_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="add_int8">
+        <output-dir compare="Text">add_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="ceiling0">
+        <output-dir compare="Text">ceiling0</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="ceiling1">
+        <output-dir compare="Text">ceiling1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="ceiling2">
+        <output-dir compare="Text">ceiling2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="ceiling3">
+        <output-dir compare="Text">ceiling3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="ceiling4">
+        <output-dir compare="Text">ceiling4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="divide_double">
+        <output-dir compare="Text">divide_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="divide_float">
+        <output-dir compare="Text">divide_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="divide_int16">
+        <output-dir compare="Text">divide_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="divide_int32">
+        <output-dir compare="Text">divide_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="divide_int64">
+        <output-dir compare="Text">divide_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="divide_int8">
+        <output-dir compare="Text">divide_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="floor0">
+        <output-dir compare="Text">floor0</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="floor1">
+        <output-dir compare="Text">floor1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="floor2">
+        <output-dir compare="Text">floor2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="floor3">
+        <output-dir compare="Text">floor3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="floor4">
+        <output-dir compare="Text">floor4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="multiply_double">
+        <output-dir compare="Text">multiply_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="multiply_float">
+        <output-dir compare="Text">multiply_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="multiply_int16">
+        <output-dir compare="Text">multiply_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="multiply_int32">
+        <output-dir compare="Text">multiply_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="multiply_int64">
+        <output-dir compare="Text">multiply_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="multiply_int8">
+        <output-dir compare="Text">multiply_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even0">
+        <output-dir compare="Text">round-half-to-even0</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even1">
+        <output-dir compare="Text">round-half-to-even1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even2">
+        <output-dir compare="Text">round-half-to-even2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even20">
+        <output-dir compare="Text">round-half-to-even20</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even21">
+        <output-dir compare="Text">round-half-to-even21</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even22">
+        <output-dir compare="Text">round-half-to-even22</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even23">
+        <output-dir compare="Text">round-half-to-even23</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even24">
+        <output-dir compare="Text">round-half-to-even24</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even3">
+        <output-dir compare="Text">round-half-to-even3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even4">
+        <output-dir compare="Text">round-half-to-even4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round-half-to-even5">
+        <output-dir compare="Text">round-half-to-even5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round0">
+        <output-dir compare="Text">round0</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round1">
+        <output-dir compare="Text">round1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round2">
+        <output-dir compare="Text">round2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round3">
+        <output-dir compare="Text">round3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="round4">
+        <output-dir compare="Text">round4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="subtract_double">
+        <output-dir compare="Text">subtract_double</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="subtract_float">
+        <output-dir compare="Text">subtract_float</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="subtract_int16">
+        <output-dir compare="Text">subtract_int16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="subtract_int32">
+        <output-dir compare="Text">subtract_int32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="subtract_int64">
+        <output-dir compare="Text">subtract_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="subtract_int8">
+        <output-dir compare="Text">subtract_int8</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_double_01">
+        <output-dir compare="Text">unary-minus_double_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_double_02">
+        <output-dir compare="Text">unary-minus_double_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_float_01">
+        <output-dir compare="Text">unary-minus_float_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_float_02">
+        <output-dir compare="Text">unary-minus_float_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_int_01">
+        <output-dir compare="Text">unary-minus_int_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_int_02">
+        <output-dir compare="Text">unary-minus_int_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="numeric">
+      <compilation-unit name="unary-minus_null">
+        <output-dir compare="Text">unary-minus_null</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="open-closed">
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="c2c-w-optional">
+        <output-dir compare="Text">c2c-w-optional</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="c2c-wo-optional">
+        <output-dir compare="Text">c2c-wo-optional</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="c2c">
+        <output-dir compare="Text">c2c</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="open-closed">
+      <compilation-unit name="heterog-list-ordered01">
+        <output-dir compare="Text">heterog-list-ordered01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="heterog-list01">
+        <output-dir compare="Text">heterog-list01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="heterog-list02">
+        <output-dir compare="Text">heterog-list02</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="heterog-list03">
+        <output-dir compare="Text">heterog-list03</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-01">
+        <output-dir compare="Text">open-closed-01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-12">
+        <output-dir compare="Text">open-closed-12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-14">
+        <output-dir compare="Text">open-closed-14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue134">
+        <output-dir compare="Text">query-issue134</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue55">
+        <output-dir compare="Text">query-issue55</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue55-1">
+        <output-dir compare="Text">query-issue55-1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue166">
+        <output-dir compare="Text">query-issue166</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue208">
+        <output-dir compare="Text">query-issue208</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue236">
+       <output-dir compare="Text">query-issue236</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-15">
+        <output-dir compare="Text">open-closed-15</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-16">
+        <output-dir compare="Text">open-closed-16</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-17">
+        <output-dir compare="Text">open-closed-17</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-19">
+        <output-dir compare="Text">open-closed-19</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-20">
+        <output-dir compare="Text">open-closed-20</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-21">
+        <output-dir compare="Text">open-closed-21</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-22">
+        <output-dir compare="Text">open-closed-22</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-24">
+        <output-dir compare="Text">open-closed-24</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-25">
+        <output-dir compare="Text">open-closed-25</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-26">
+        <output-dir compare="Text">open-closed-26</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-28">
+        <output-dir compare="Text">open-closed-28</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-29">
+        <output-dir compare="Text">open-closed-29</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-30">
+        <output-dir compare="Text">open-closed-30</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-31">
+        <output-dir compare="Text">open-closed-31</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-32">
+        <output-dir compare="Text">open-closed-32</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="open-closed-33">
+        <output-dir compare="Text">open-closed-33</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-proposal02">
+        <output-dir compare="Text">query-proposal02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-proposal">
+        <output-dir compare="Text">query-proposal</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue350">
+        <output-dir compare="Text">query-issue350</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue350-2">
+        <output-dir compare="Text">query-issue350-2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue343">
+        <output-dir compare="Text">query-issue343</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue343-2">
+        <output-dir compare="Text">query-issue343-2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="open-closed">
+      <compilation-unit name="query-issue196">
+        <output-dir compare="Text">query-issue196</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="quantifiers">
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="everysat_01">
+        <output-dir compare="Text">everysat_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="everysat_02">
+        <output-dir compare="Text">everysat_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="everysat_03">
+        <output-dir compare="Text">everysat_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="everysat_04">
+        <output-dir compare="Text">everysat_04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="somesat_01">
+        <output-dir compare="Text">somesat_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="somesat_02">
+        <output-dir compare="Text">somesat_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="somesat_03">
+        <output-dir compare="Text">somesat_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="somesat_04">
+        <output-dir compare="Text">somesat_04</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="somesat_05">
+        <output-dir compare="Text">somesat_05</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="quantifiers">
+      <compilation-unit name="somesat_06">
+        <output-dir compare="Text">somesat_06</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="records">
+    <test-case FilePath="records">
+      <compilation-unit name="closed-record-constructor_01">
+        <output-dir compare="Text">closed-record-constructor_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="closed-record-constructor_02">
+        <output-dir compare="Text">closed-record-constructor_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="closed-record-constructor_03">
+        <output-dir compare="Text">closed-record-constructor_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="expFieldName">
+        <output-dir compare="Text">expFieldName</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="field-access-by-index_01">
+        <output-dir compare="Text">field-access-by-index_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="field-access-on-open-field">
+        <output-dir compare="Text">field-access-on-open-field</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="open-record-constructor_01">
+        <output-dir compare="Text">open-record-constructor_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="open-record-constructor_02">
+        <output-dir compare="Text">open-record-constructor_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="closed-closed-fieldname-conflict_issue173">
+        <output-dir compare="Text">closed-closed-fieldname-conflict_issue173</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+  <test-case FilePath="records">
+      <compilation-unit name="open-closed-fieldname-conflict_issue173">
+        <output-dir compare="Text">open-closed-fieldname-conflict_issue173</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="records">
+      <compilation-unit name="open-open-fieldname-conflict_issue173">
+        <output-dir compare="Text">open-open-fieldname-conflict_issue173</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="scan">
+    <test-case FilePath="scan">
+      <compilation-unit name="10">
+        <output-dir compare="Text">10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="20">
+        <output-dir compare="Text">20</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="issue238_query_1">
+        <output-dir compare="Text">issue238_query_1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="issue238_query_2">
+        <output-dir compare="Text">issue238_query_2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="invalid-scan-syntax">
+        <output-dir compare="Text">invalid-scan-syntax</output-dir>
+        <expected-error>SyntaxError</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="30">
+        <output-dir compare="Text">30</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="alltypes_01">
+        <output-dir compare="Text">alltypes_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="alltypes_02">
+        <output-dir compare="Text">alltypes_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="numeric_types_01">
+        <output-dir compare="Text">numeric_types_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="scan">
+      <compilation-unit name="spatial_types_01">
+        <output-dir compare="Text">spatial_types_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="scan">
+      <compilation-unit name="spatial_types_02">
+        <output-dir compare="Text">spatial_types_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="scan">
+      <compilation-unit name="temp_types_01">
+        <output-dir compare="Text">temp_types_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="scan">
+      <compilation-unit name="temp_types_02">
+        <output-dir compare="Text">temp_types_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+  </test-group>
+  <test-group name="semistructured">
+    <test-case FilePath="semistructured">
+      <compilation-unit name="count-nullable">
+        <output-dir compare="Text">count-nullable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="semistructured">
+      <compilation-unit name="cust-filter">
+        <output-dir compare="Text">cust-filter</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="semistructured">
+      <compilation-unit name="has-param1">
+        <output-dir compare="Text">has-param1</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="similarity">
+    <test-case FilePath="similarity">
+      <compilation-unit name="edit-distance-check_ints">
+        <output-dir compare="Text">edit-distance-check_ints</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="edit-distance-check_strings">
+        <output-dir compare="Text">edit-distance-check_strings</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="edit-distance-list-is-filterable">
+        <output-dir compare="Text">edit-distance-list-is-filterable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="edit-distance-string-is-filterable">
+        <output-dir compare="Text">edit-distance-string-is-filterable</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="edit-distance_ints">
+        <output-dir compare="Text">edit-distance_ints</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="edit-distance_strings">
+        <output-dir compare="Text">edit-distance_strings</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="fuzzyeq-edit-distance">
+        <output-dir compare="Text">fuzzyeq-edit-distance</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="fuzzyeq-similarity-jaccard">
+        <output-dir compare="Text">fuzzyeq-similarity-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="prefix-len-jaccard">
+        <output-dir compare="Text">prefix-len-jaccard</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-check_ints">
+        <output-dir compare="Text">similarity-jaccard-check_ints</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-check_query">
+        <output-dir compare="Text">similarity-jaccard-check_query</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-check_strings">
+        <output-dir compare="Text">similarity-jaccard-check_strings</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-prefix-check">
+        <output-dir compare="Text">similarity-jaccard-prefix-check</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-prefix">
+        <output-dir compare="Text">similarity-jaccard-prefix</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-sorted-check_ints">
+        <output-dir compare="Text">similarity-jaccard-sorted-check_ints</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-sorted-check_query">
+        <output-dir compare="Text">similarity-jaccard-sorted-check_query</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-sorted-check_strings">
+        <output-dir compare="Text">similarity-jaccard-sorted-check_strings</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-sorted_ints">
+        <output-dir compare="Text">similarity-jaccard-sorted_ints</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-sorted_query">
+        <output-dir compare="Text">similarity-jaccard-sorted_query</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard-sorted_strings">
+        <output-dir compare="Text">similarity-jaccard-sorted_strings</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard_ints">
+        <output-dir compare="Text">similarity-jaccard_ints</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard_query">
+        <output-dir compare="Text">similarity-jaccard_query</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="similarity">
+      <compilation-unit name="similarity-jaccard_strings">
+        <output-dir compare="Text">similarity-jaccard_strings</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="spatial">
+    <test-case FilePath="spatial">
+      <compilation-unit name="cell-aggregation-with-filtering">
+        <output-dir compare="Text">cell-aggregation-with-filtering</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="cell-aggregation">
+        <output-dir compare="Text">cell-aggregation</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="circle_accessor">
+        <output-dir compare="Text">circle_accessor</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="circle-intersect-circle">
+        <output-dir compare="Text">circle-intersect-circle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="create-rtree-index">
+        <output-dir compare="Text">create-rtree-index</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="distance-between-points">
+        <output-dir compare="Text">distance-between-points</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="line_accessor">
+        <output-dir compare="Text">line_accessor</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="line-intersect-circle">
+        <output-dir compare="Text">line-intersect-circle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="line-intersect-line">
+        <output-dir compare="Text">line-intersect-line</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="line-intersect-polygon">
+        <output-dir compare="Text">line-intersect-polygon</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="line-intersect-rectangle">
+        <output-dir compare="Text">line-intersect-rectangle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="point_accessor">
+        <output-dir compare="Text">point_accessor</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="point-equals-point">
+        <output-dir compare="Text">point-equals-point</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="point-in-circle">
+        <output-dir compare="Text">point-in-circle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="point-in-polygon">
+        <output-dir compare="Text">point-in-polygon</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="point-in-rectangle">
+        <output-dir compare="Text">point-in-rectangle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="point-on-line">
+        <output-dir compare="Text">point-on-line</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="polygon_accessor">
+        <output-dir compare="Text">polygon_accessor</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="polygon-intersect-circle">
+        <output-dir compare="Text">polygon-intersect-circle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="polygon-intersect-polygon">
+        <output-dir compare="Text">polygon-intersect-polygon</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="polygon-intersect-rectangle">
+        <output-dir compare="Text">polygon-intersect-rectangle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="rectangle_accessor">
+        <output-dir compare="Text">rectangle_accessor</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="rectangle-intersect-circle">
+        <output-dir compare="Text">rectangle-intersect-circle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="rectangle-intersect-rectangle">
+        <output-dir compare="Text">rectangle-intersect-rectangle</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="spatial">
+      <compilation-unit name="spatial-area">
+        <output-dir compare="Text">spatial-area</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="string">
+    <test-case FilePath="string">
+      <compilation-unit name="codepoint-to-string1">
+        <output-dir compare="Text">codepoint-to-string1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="codepoint-to-string2">
+        <output-dir compare="Text">codepoint-to-string2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="concat_01">
+        <output-dir compare="Text">concat_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="concat_02">
+        <output-dir compare="Text">concat_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="contains_01">
+        <output-dir compare="Text">contains_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="cpttostr01">
+        <output-dir compare="Text">cpttostr01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="cpttostr02">
+        <output-dir compare="Text">cpttostr02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="cpttostr04">
+        <output-dir compare="Text">cpttostr04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="end-with1">
+        <output-dir compare="Text">end-with1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="end-with2">
+        <output-dir compare="Text">end-with2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="end-with3">
+        <output-dir compare="Text">end-with3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="end-with4">
+        <output-dir compare="Text">end-with4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="end-with5">
+        <output-dir compare="Text">end-with5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="ends-with_01">
+        <output-dir compare="Text">ends-with_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="endwith02">
+        <output-dir compare="Text">endwith02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="endwith03">
+        <output-dir compare="Text">endwith03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="length_01">
+        <output-dir compare="Text">length_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="length_02">
+        <output-dir compare="Text">length_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="like_01">
+        <output-dir compare="Text">like_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="like_null">
+        <output-dir compare="Text">like_null</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="lowercase">
+        <output-dir compare="Text">lowercase</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches02">
+        <output-dir compare="Text">matches02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches03">
+        <output-dir compare="Text">matches03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches04">
+        <output-dir compare="Text">matches04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches05">
+        <output-dir compare="Text">matches05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches06">
+        <output-dir compare="Text">matches06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches1">
+        <output-dir compare="Text">matches1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches11">
+        <output-dir compare="Text">matches11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches2">
+        <output-dir compare="Text">matches2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches21">
+        <output-dir compare="Text">matches21</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches22">
+        <output-dir compare="Text">matches22</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches23">
+        <output-dir compare="Text">matches23</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matches3">
+        <output-dir compare="Text">matches3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="matchesnull">
+        <output-dir compare="Text">matchesnull</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="replace1">
+        <output-dir compare="Text">replace1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="replace2">
+        <output-dir compare="Text">replace2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="replace21">
+        <output-dir compare="Text">replace21</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="replace22">
+        <output-dir compare="Text">replace22</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="replace3">
+        <output-dir compare="Text">replace3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="start-with1">
+        <output-dir compare="Text">start-with1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="start-with2">
+        <output-dir compare="Text">start-with2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="start-with3">
+        <output-dir compare="Text">start-with3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="start-with4">
+        <output-dir compare="Text">start-with4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="start-with5">
+        <output-dir compare="Text">start-with5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="starts-with_01">
+        <output-dir compare="Text">starts-with_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="startwith02">
+        <output-dir compare="Text">startwith02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="string">
+      <compilation-unit name="startwith03">
+        <output-dir compare="Text">startwith03</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="string">
+      <compilation-unit name="strconcat01">
+        <output-dir compare="Text">strconcat01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="strconcat02">
+        <output-dir compare="Text">strconcat02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-concat1">
+        <output-dir compare="Text">string-concat1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-equal1">
+        <output-dir compare="Text">string-equal1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-equal2">
+        <output-dir compare="Text">string-equal2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-equal3">
+        <output-dir compare="Text">string-equal3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-equal4">
+        <output-dir compare="Text">string-equal4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-join1">
+        <output-dir compare="Text">string-join1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-to-codepoint">
+        <output-dir compare="Text">string-to-codepoint</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="string-to-codepoint1">
+        <output-dir compare="Text">string-to-codepoint1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="strlen02">
+        <output-dir compare="Text">strlen02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="strlen03">
+        <output-dir compare="Text">strlen03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="strtocpt01">
+        <output-dir compare="Text">strtocpt01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="strtocpt02">
+        <output-dir compare="Text">strtocpt02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="strtocpt03">
+        <output-dir compare="Text">strtocpt03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substr01">
+        <output-dir compare="Text">substr01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!-- Issue no 219
+    <test-case FilePath="string">
+      <compilation-unit name="substr04">
+        <output-dir compare="Text">substr04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substr05">
+        <output-dir compare="Text">substr05</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="string">
+      <compilation-unit name="substr06">
+        <output-dir compare="Text">substr06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-after-1">
+        <output-dir compare="Text">substring-after-1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-after-2">
+        <output-dir compare="Text">substring-after-2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-after-3">
+        <output-dir compare="Text">substring-after-3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-after-4">
+        <output-dir compare="Text">substring-after-4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-before-1">
+        <output-dir compare="Text">substring-before-1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-before-2">
+        <output-dir compare="Text">substring-before-2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring-before-3">
+        <output-dir compare="Text">substring-before-3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring2-1">
+        <output-dir compare="Text">substring2-1</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring2-2">
+        <output-dir compare="Text">substring2-2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring2-3">
+        <output-dir compare="Text">substring2-3</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring2-4">
+        <output-dir compare="Text">substring2-4</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="substring_01">
+        <output-dir compare="Text">substring_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="toLowerCase02">
+        <output-dir compare="Text">toLowerCase02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="toLowerCase03">
+        <output-dir compare="Text">toLowerCase03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="string">
+      <compilation-unit name="toLowerCase04">
+        <output-dir compare="Text">toLowerCase04</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="subset-collection">
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="01">
+        <output-dir compare="Text">01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="02">
+        <output-dir compare="Text">02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="03">
+        <output-dir compare="Text">03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="04">
+        <output-dir compare="Text">04</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="05">
+        <output-dir compare="Text">05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="06">
+        <output-dir compare="Text">06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="subset-collection">
+      <compilation-unit name="07">
+        <output-dir compare="Text">07</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="tokenizers">
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="counthashed-gram-tokens_01">
+        <output-dir compare="Text">counthashed-gram-tokens_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="counthashed-gram-tokens_02">
+        <output-dir compare="Text">counthashed-gram-tokens_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="counthashed-word-tokens_01">
+        <output-dir compare="Text">counthashed-word-tokens_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="gram-tokens_01">
+        <output-dir compare="Text">gram-tokens_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="gram-tokens_02">
+        <output-dir compare="Text">gram-tokens_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="hashed-gram-tokens_01">
+        <output-dir compare="Text">hashed-gram-tokens_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="hashed-gram-tokens_02">
+        <output-dir compare="Text">hashed-gram-tokens_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="hashed-word-tokens_01">
+        <output-dir compare="Text">hashed-word-tokens_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="word-tokens_01">
+        <output-dir compare="Text">word-tokens_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tokenizers">
+      <compilation-unit name="word-tokens_02">
+        <output-dir compare="Text">word-tokens_02</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="tpch">
+    <test-case FilePath="tpch">
+      <compilation-unit name="distinct_by">
+        <output-dir compare="Text">distinct_by</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="group_no_agg">
+        <output-dir compare="Text">group_no_agg</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q10_returned_item">
+        <output-dir compare="Text">q10_returned_item</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q10_returned_item_int64">
+       <output-dir compare="Text">q10_returned_item_int64</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q11_important_stock">
+        <output-dir compare="Text">q11_important_stock</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q12_shipping">
+        <output-dir compare="Text">q12_shipping</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q13_customer_distribution">
+        <output-dir compare="Text">q13_customer_distribution</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q14_promotion_effect">
+        <output-dir compare="Text">q14_promotion_effect</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q15_top_supplier">
+        <output-dir compare="Text">q15_top_supplier</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q16_parts_supplier_relationship">
+        <output-dir compare="Text">q16_parts_supplier_relationship</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q17_small_quantity_order_revenue">
+        <output-dir compare="Text">q17_small_quantity_order_revenue</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q18_large_volume_customer">
+        <output-dir compare="Text">q18_large_volume_customer</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q19_discounted_revenue">
+        <output-dir compare="Text">q19_discounted_revenue</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q1_pricing_summary_report_nt">
+        <output-dir compare="Text">q1_pricing_summary_report_nt</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q20_potential_part_promotion">
+        <output-dir compare="Text">q20_potential_part_promotion</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q21_suppliers_who_kept_orders_waiting">
+        <output-dir compare="Text">q21_suppliers_who_kept_orders_waiting</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q22_global_sales_opportunity">
+        <output-dir compare="Text">q22_global_sales_opportunity</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q2_minimum_cost_supplier">
+        <output-dir compare="Text">q2_minimum_cost_supplier</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q3_shipping_priority_nt">
+        <output-dir compare="Text">q3_shipping_priority_nt</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q4_order_priority">
+        <output-dir compare="Text">q4_order_priority</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q5_local_supplier_volume">
+        <output-dir compare="Text">q5_local_supplier_volume</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q6_forecast_revenue_change">
+        <output-dir compare="Text">q6_forecast_revenue_change</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q7_volume_shipping">
+        <output-dir compare="Text">q7_volume_shipping</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q8_national_market_share">
+        <output-dir compare="Text">q8_national_market_share</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="tpch">
+      <compilation-unit name="q9_product_type_profit_nt">
+        <output-dir compare="Text">q9_product_type_profit_nt</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="writers">
+    <test-case FilePath="writers">
+      <compilation-unit name="print_01">
+        <output-dir compare="Text">print_01</output-dir>
+      </compilation-unit>
+    </test-case>
+<!--  TODO(madhusudancs): Enable this test when REST API supports serialized output support.
+    <test-case FilePath="writers">
+      <compilation-unit name="serialized_01">
+        <output-dir compare="Text">serialized_01</output-dir>
+      </compilation-unit>
+    </test-case>
+-->
+  </test-group>
+  <test-group name="cross-dataverse">
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv01">
+        <output-dir compare="Text">cross-dv01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv02">
+        <output-dir compare="Text">cross-dv02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv03">
+        <output-dir compare="Text">cross-dv03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv04">
+        <output-dir compare="Text">cross-dv04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv07">
+        <output-dir compare="Text">cross-dv07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!--NotImplementedException: No binary comparator factory implemented for type RECORD. 
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv08">
+        <output-dir compare="Text">cross-dv08</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv09">
+        <output-dir compare="Text">cross-dv09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv11">
+        <output-dir compare="Text">cross-dv11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv12">
+        <output-dir compare="Text">cross-dv12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv13">
+        <output-dir compare="Text">cross-dv13</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv14">
+        <output-dir compare="Text">cross-dv14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv15">
+        <output-dir compare="Text">cross-dv15</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv16">
+        <output-dir compare="Text">cross-dv16</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <!--NotImplementedException: No binary comparator factory implemented for type RECORD. 
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv17">
+        <output-dir compare="Text">cross-dv17</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!--NotImplementedException: No binary comparator factory implemented for type RECORD.
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv18">
+        <output-dir compare="Text">cross-dv18</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv19">
+        <output-dir compare="Text">cross-dv19</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="cross-dv20">
+        <output-dir compare="Text">cross-dv20</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="insert_across_dataverses">
+        <output-dir compare="Text">insert_across_dataverses</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="cross-dataverse">
+      <compilation-unit name="join_across_dataverses">
+        <output-dir compare="Text">join_across_dataverses</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="user-defined-functions">
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="query-issue201">
+        <output-dir compare="Text">query-issue201</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf01">
+        <output-dir compare="Text">udf01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf02">
+        <output-dir compare="Text">udf02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!-- causes NPE: Issue 200
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf03">
+        <output-dir compare="Text">udf03</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf04">
+        <output-dir compare="Text">udf04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf05">
+        <output-dir compare="Text">udf05</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf06">
+        <output-dir compare="Text">udf06</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf07">
+        <output-dir compare="Text">udf07</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf08">
+        <output-dir compare="Text">udf08</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf09">
+        <output-dir compare="Text">udf09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf10">
+        <output-dir compare="Text">udf10</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf11">
+        <output-dir compare="Text">udf11</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf12">
+        <output-dir compare="Text">udf12</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf13">
+        <output-dir compare="Text">udf13</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf14">
+        <output-dir compare="Text">udf14</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!-- Issue 166
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf15">
+        <output-dir compare="Text">udf15</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf16">
+        <output-dir compare="Text">udf16</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf17">
+        <output-dir compare="Text">udf17</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf18">
+        <output-dir compare="Text">udf18</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf19">
+        <output-dir compare="Text">udf19</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf20">
+        <output-dir compare="Text">udf20</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf21">
+        <output-dir compare="Text">udf21</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf22">
+        <output-dir compare="Text">udf22</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf23">
+        <output-dir compare="Text">udf23</output-dir>
+      </compilation-unit>
+    </test-case>
+    <!-- Issue 195
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf24">
+        <output-dir compare="Text">udf24</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <!-- Issue 218
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf25">
+        <output-dir compare="Text">udf25</output-dir>
+      </compilation-unit>
+    </test-case>
+    -->
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf26">
+        <output-dir compare="Text">udf26</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf27">
+        <output-dir compare="Text">udf27</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf28">
+        <output-dir compare="Text">udf28</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="udf29">
+        <output-dir compare="Text">udf29</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="user-defined-functions">
+      <compilation-unit name="f01">
+        <output-dir compare="Text">f01</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="load">
+    <test-case FilePath="load">
+      <compilation-unit name="issue14_query">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="load">
+      <compilation-unit name="issue315_query">
+        <output-dir compare="Text">none</output-dir>
+        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="load">
+      <compilation-unit name="issue289_query">
+        <output-dir compare="Text">issue289_query</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="hints">
+    <test-case FilePath="hints">
+      <compilation-unit name="issue_251_dataset_hint_5">
+        <output-dir compare="Text">issue_251_dataset_hint_5</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="hints">
+      <compilation-unit name="issue_251_dataset_hint_6">
+        <output-dir compare="Text">issue_251_dataset_hint_6</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="hints">
+      <compilation-unit name="issue_251_dataset_hint_7">
+        <output-dir compare="Text">issue_251_dataset_hint_7</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="feeds">
+    <test-case FilePath="feeds">
+      <compilation-unit name="feeds_01">
+        <output-dir compare="Text">feeds_01</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="feeds">
+      <compilation-unit name="feeds_02">
+        <output-dir compare="Text">feeds_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="feeds">
+      <compilation-unit name="feeds_03">
+        <output-dir compare="Text">feeds_03</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="feeds">
+      <compilation-unit name="feeds_04">
+        <output-dir compare="Text">feeds_04</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="feeds">
+      <compilation-unit name="issue_230_feeds">
+        <output-dir compare="Text">issue_230_feeds</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="hdfs">
+    <test-case FilePath="hdfs">
+      <compilation-unit name="issue_245_hdfs">
+        <output-dir compare="Text">issue_245_hdfs</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="hdfs">
+      <compilation-unit name="hdfs_02">
+        <output-dir compare="Text">hdfs_02</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="hdfs">
+      <compilation-unit name="hdfs_03">
+        <output-dir compare="Text">hdfs_03</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+  <test-group name="temporal">
+    <test-case FilePath="temporal">
+  	  <compilation-unit name="accessors">
+        <output-dir compare="Text">accessors</output-dir>
+      </compilation-unit>
+    </test-case>
+  <test-case FilePath="temporal">
+      <compilation-unit name="accessors_interval">
+        <output-dir compare="Text">accessors_interval</output-dir>
+      </compilation-unit>
+  </test-case>
+  <test-case FilePath="temporal">
+      <compilation-unit name="accessors_interval_null">
+        <output-dir compare="Text">accessors_interval_null</output-dir>
+      </compilation-unit>
+  </test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="adjust_timezone">
+        <output-dir compare="Text">adjust_timezone</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="calendar_duration">
+        <output-dir compare="Text">calendar_duration</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="date_functions">
+        <output-dir compare="Text">date_functions</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="datetime_functions">
+        <output-dir compare="Text">datetime_functions</output-dir>
+      </compilation-unit>
+  	</test-case>
+<!--   	<test-case FilePath="temporal">
+  		<compilation-unit name="insert_from_delimited_ds">
+        <output-dir compare="Text">insert_from_delimited_ds</output-dir>
+      </compilation-unit>
+  	</test-case> -->
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="insert_from_ext_ds">
+        <output-dir compare="Text">insert_from_ext_ds</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="interval_functions">
+        <output-dir compare="Text">interval_functions</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="time_functions">
+        <output-dir compare="Text">time_functions</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="constructor">
+  		<compilation-unit name="interval">
+        <output-dir compare="Text">interval</output-dir>
+      </compilation-unit>
+  	</test-case>
+  	<test-case FilePath="temporal">
+  		<compilation-unit name="duration_comps">
+        <output-dir compare="Text">duration_comps</output-dir>
+      </compilation-unit>
+  	</test-case>
+  </test-group>
+  <test-group name="leftouterjoin">
+    <test-case FilePath="leftouterjoin">
+      <compilation-unit name="query_issue285">
+        <output-dir compare="Text">query_issue285</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="leftouterjoin">
+      <compilation-unit name="query_issue285-2">
+        <output-dir compare="Text">query_issue285-2</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+</test-suite>
diff --git a/asterix/asterix-app/src/test/resources/spatial/local/spatial-drop.aql b/asterix-app/src/test/resources/spatial/local/spatial-drop.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/spatial/local/spatial-drop.aql
rename to asterix-app/src/test/resources/spatial/local/spatial-drop.aql
diff --git a/asterix/asterix-app/src/test/resources/spatial/local/spatial-load.aql b/asterix-app/src/test/resources/spatial/local/spatial-load.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/spatial/local/spatial-load.aql
rename to asterix-app/src/test/resources/spatial/local/spatial-load.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/enlist_data.aql b/asterix-app/src/test/resources/tpch/queries/asterix/enlist_data.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/enlist_data.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/enlist_data.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/inlined_q18_large_volume_customer.aql b/asterix-app/src/test/resources/tpch/queries/asterix/inlined_q18_large_volume_customer.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/inlined_q18_large_volume_customer.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/inlined_q18_large_volume_customer.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/load_data_adm.aql b/asterix-app/src/test/resources/tpch/queries/asterix/load_data_adm.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/load_data_adm.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/load_data_adm.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_100x.aql b/asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_100x.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_100x.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_100x.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_1x.aql b/asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_1x.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_1x.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/load_data_tbl_1x.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/q1_pricing_summary_report.aql b/asterix-app/src/test/resources/tpch/queries/asterix/q1_pricing_summary_report.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/q1_pricing_summary_report.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/q1_pricing_summary_report.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/q3_shipping_priority.aql b/asterix-app/src/test/resources/tpch/queries/asterix/q3_shipping_priority.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/q3_shipping_priority.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/q3_shipping_priority.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/q5_local_supplier_volume.aql b/asterix-app/src/test/resources/tpch/queries/asterix/q5_local_supplier_volume.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/q5_local_supplier_volume.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/q5_local_supplier_volume.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/asterix/q9_product_type_profit.aql b/asterix-app/src/test/resources/tpch/queries/asterix/q9_product_type_profit.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/asterix/q9_product_type_profit.aql
rename to asterix-app/src/test/resources/tpch/queries/asterix/q9_product_type_profit.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/inlined_q18_large_volume_customer.aql b/asterix-app/src/test/resources/tpch/queries/local/inlined_q18_large_volume_customer.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/inlined_q18_large_volume_customer.aql
rename to asterix-app/src/test/resources/tpch/queries/local/inlined_q18_large_volume_customer.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/load_adm_data.aql b/asterix-app/src/test/resources/tpch/queries/local/load_adm_data.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/load_adm_data.aql
rename to asterix-app/src/test/resources/tpch/queries/local/load_adm_data.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_0.001x_2nodes.aql b/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_0.001x_2nodes.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_0.001x_2nodes.aql
rename to asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_0.001x_2nodes.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_10x_1node.aql b/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_10x_1node.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_10x_1node.aql
rename to asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_10x_1node.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_1x_1node.aql b/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_1x_1node.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_1x_1node.aql
rename to asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_1x_1node.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_20x_2node.aql b/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_20x_2node.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_20x_2node.aql
rename to asterix-app/src/test/resources/tpch/queries/local/load_tbl_data_20x_2node.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/orders-index-create.aql b/asterix-app/src/test/resources/tpch/queries/local/orders-index-create.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/orders-index-create.aql
rename to asterix-app/src/test/resources/tpch/queries/local/orders-index-create.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/orders-index-search.aql b/asterix-app/src/test/resources/tpch/queries/local/orders-index-search.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/orders-index-search.aql
rename to asterix-app/src/test/resources/tpch/queries/local/orders-index-search.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/q1_pricing_summary_report.aql b/asterix-app/src/test/resources/tpch/queries/local/q1_pricing_summary_report.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/q1_pricing_summary_report.aql
rename to asterix-app/src/test/resources/tpch/queries/local/q1_pricing_summary_report.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/q3_shipping_priority.aql b/asterix-app/src/test/resources/tpch/queries/local/q3_shipping_priority.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/q3_shipping_priority.aql
rename to asterix-app/src/test/resources/tpch/queries/local/q3_shipping_priority.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/q5_local_supplier_volume.aql b/asterix-app/src/test/resources/tpch/queries/local/q5_local_supplier_volume.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/q5_local_supplier_volume.aql
rename to asterix-app/src/test/resources/tpch/queries/local/q5_local_supplier_volume.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/q9_product_type_profit.aql b/asterix-app/src/test/resources/tpch/queries/local/q9_product_type_profit.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/q9_product_type_profit.aql
rename to asterix-app/src/test/resources/tpch/queries/local/q9_product_type_profit.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/scan_filter_lineitem.aql b/asterix-app/src/test/resources/tpch/queries/local/scan_filter_lineitem.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/scan_filter_lineitem.aql
rename to asterix-app/src/test/resources/tpch/queries/local/scan_filter_lineitem.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/local/write-custorder.aql b/asterix-app/src/test/resources/tpch/queries/local/write-custorder.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/local/write-custorder.aql
rename to asterix-app/src/test/resources/tpch/queries/local/write-custorder.aql
diff --git a/asterix/asterix-app/src/test/resources/tpch/queries/rainbow/load_data_tbl_50x.aql b/asterix-app/src/test/resources/tpch/queries/rainbow/load_data_tbl_50x.aql
similarity index 100%
rename from asterix/asterix-app/src/test/resources/tpch/queries/rainbow/load_data_tbl_50x.aql
rename to asterix-app/src/test/resources/tpch/queries/rainbow/load_data_tbl_50x.aql
diff --git a/asterix-aql/pom.xml b/asterix-aql/pom.xml
new file mode 100644
index 0000000..038ec62
--- /dev/null
+++ b/asterix-aql/pom.xml
@@ -0,0 +1,111 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-aql</artifactId>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>javacc-maven-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<id>javacc</id>
+						<goals>
+							<goal>javacc</goal>
+						</goals>
+						<configuration>
+							<isStatic>false</isStatic>
+						</configuration>
+					</execution>
+					<execution>
+						<id>javacc-jjdoc</id>
+						<goals>
+							<goal>jjdoc</goal>
+						</goals>
+						<phase>process-sources</phase>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+		<pluginManagement>
+			<plugins>
+				<!--This plugin's configuration is used to store Eclipse m2e settings 
+					only. It has no influence on the Maven build itself. -->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											org.codehaus.mojo
+										</groupId>
+										<artifactId>
+											javacc-maven-plugin
+										</artifactId>
+										<versionRange>
+											[2.6,)
+										</versionRange>
+										<goals>
+											<goal>jjdoc</goal>
+											<goal>javacc</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-common</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-om</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-metadata</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.fuzzyjoin</groupId>
+			<artifactId>fuzzyjoin-core</artifactId>
+			<version>0.0.3</version>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/AbstractExpression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/AbstractExpression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/AbstractExpression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/AbstractExpression.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Clause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Clause.java
new file mode 100644
index 0000000..3e92653
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Clause.java
@@ -0,0 +1,17 @@
+package edu.uci.ics.asterix.aql.base;
+
+public interface Clause extends IAqlExpression {
+    public ClauseType getClauseType();
+
+    public enum ClauseType {
+        FOR_CLAUSE,
+        LET_CLAUSE,
+        WHERE_CLAUSE,
+        ORDER_BY_CLAUSE,
+        LIMIT_CLAUSE,
+        GROUP_BY_CLAUSE,
+        DISTINCT_BY_CLAUSE,
+        UPDATE_CLAUSE
+    }
+
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Expression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Expression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Expression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Expression.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/IAqlExpression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/IAqlExpression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/IAqlExpression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/IAqlExpression.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Literal.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Literal.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Literal.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Literal.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Statement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Statement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Statement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Statement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionExpressionMap.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionExpressionMap.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionExpressionMap.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionExpressionMap.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionSignatures.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionSignatures.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionSignatures.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/FunctionSignatures.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/RootScopeFactory.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/RootScopeFactory.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/RootScopeFactory.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/RootScopeFactory.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/Scope.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/Scope.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/Scope.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/context/Scope.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AbstractAccessor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AbstractAccessor.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AbstractAccessor.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AbstractAccessor.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AdmSplitInfo.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AdmSplitInfo.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AdmSplitInfo.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/AdmSplitInfo.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/BeginFeedStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/BeginFeedStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/BeginFeedStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/BeginFeedStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CallExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CallExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CallExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CallExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ConstructorType.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ConstructorType.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ConstructorType.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ConstructorType.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ControlFeedStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ControlFeedStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ControlFeedStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ControlFeedStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateDataverseStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateDataverseStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateDataverseStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateDataverseStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateFunctionStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateFunctionStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateFunctionStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateFunctionStatement.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateIndexStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateIndexStatement.java
new file mode 100644
index 0000000..7a764ae
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateIndexStatement.java
@@ -0,0 +1,98 @@
+package edu.uci.ics.asterix.aql.expression;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.uci.ics.asterix.aql.base.Statement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlVisitorWithVoidReturn;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+
+public class CreateIndexStatement implements Statement {
+
+    private Identifier indexName;
+    private Identifier dataverseName;
+    private Identifier datasetName;
+    private List<String> fieldExprs = new ArrayList<String>();
+    private IndexType indexType = IndexType.BTREE;
+    private boolean ifNotExists;
+
+    // Specific to NGram indexes.
+    private int gramLength;
+
+    public CreateIndexStatement() {
+    }
+
+    public void setGramLength(int gramLength) {
+        this.gramLength = gramLength;
+    }
+
+    public int getGramLength() {
+        return gramLength;
+    }
+
+    public Identifier getIndexName() {
+        return indexName;
+    }
+
+    public void setIndexName(Identifier indexName) {
+        this.indexName = indexName;
+    }
+
+    public Identifier getDataverseName() {
+        return dataverseName;
+    }
+
+    public void setDataverseName(Identifier dataverseName) {
+        this.dataverseName = dataverseName;
+    }
+
+    public Identifier getDatasetName() {
+        return datasetName;
+    }
+
+    public void setDatasetName(Identifier datasetName) {
+        this.datasetName = datasetName;
+    }
+
+    public List<String> getFieldExprs() {
+        return fieldExprs;
+    }
+
+    public void addFieldExpr(String fe) {
+        this.fieldExprs.add(fe);
+    }
+
+    public IndexType getIndexType() {
+        return indexType;
+    }
+
+    public void setIndexType(IndexType indexType) {
+        this.indexType = indexType;
+    }
+
+    public void setIfNotExists(boolean ifNotExists) {
+        this.ifNotExists = ifNotExists;
+    }
+
+    public boolean getIfNotExists() {
+        return this.ifNotExists;
+    }
+
+    @Override
+    public Kind getKind() {
+        return Kind.CREATE_INDEX;
+    }
+
+    @Override
+    public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
+        return visitor.visitCreateIndexStatement(this, arg);
+    }
+
+    @Override
+    public <T> void accept(IAqlVisitorWithVoidReturn<T> visitor, T arg) throws AsterixException {
+        visitor.visit(this, arg);
+    }
+
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DatasetDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DatasetDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DatasetDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DatasetDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDropStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDropStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDropStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DataverseDropStatement.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
new file mode 100644
index 0000000..b56d628
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
@@ -0,0 +1,61 @@
+package edu.uci.ics.asterix.aql.expression;
+
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Statement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlVisitorWithVoidReturn;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+
+public class DeleteStatement implements Statement {
+
+    private VariableExpr vars;
+    private Identifier dataverseName;
+    private Identifier datasetName;
+    private Expression condition;
+    private int varCounter;
+
+    public DeleteStatement(VariableExpr vars, Identifier dataverseName, Identifier datasetName, Expression condition,
+            int varCounter) {
+        this.vars = vars;
+        this.dataverseName = dataverseName;
+        this.datasetName = datasetName;
+        this.condition = condition;
+        this.varCounter = varCounter;
+    }
+
+    @Override
+    public Kind getKind() {
+        return Kind.DELETE;
+    }
+
+    public VariableExpr getVariableExpr() {
+        return vars;
+    }
+
+    public Identifier getDataverseName() {
+        return dataverseName;
+    }
+
+    public Identifier getDatasetName() {
+        return datasetName;
+    }
+
+    public Expression getCondition() {
+        return condition;
+    }
+
+    public int getVarCounter() {
+        return varCounter;
+    }
+
+    @Override
+    public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
+        return visitor.visitDeleteStatement(this, arg);
+    }
+
+    @Override
+    public <T> void accept(IAqlVisitorWithVoidReturn<T> visitor, T arg) throws AsterixException {
+        visitor.visit(this, arg);
+    }
+
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DistinctClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DistinctClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DistinctClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DistinctClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DropStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DropStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DropStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DropStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ExternalDetailsDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ExternalDetailsDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ExternalDetailsDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ExternalDetailsDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FLWOGRExpression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FLWOGRExpression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FLWOGRExpression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FLWOGRExpression.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FeedDetailsDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FeedDetailsDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FeedDetailsDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FeedDetailsDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldAccessor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldAccessor.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldAccessor.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldAccessor.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldBinding.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldBinding.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldBinding.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FieldBinding.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ForClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ForClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ForClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ForClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDropStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDropStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDropStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/FunctionDropStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GbyVariableExpressionPair.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GbyVariableExpressionPair.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GbyVariableExpressionPair.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GbyVariableExpressionPair.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GroupbyClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GroupbyClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GroupbyClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/GroupbyClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/HdfsPathInfo.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/HdfsPathInfo.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/HdfsPathInfo.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/HdfsPathInfo.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IDatasetDetailsDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IDatasetDetailsDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IDatasetDetailsDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IDatasetDetailsDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Identifier.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Identifier.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Identifier.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Identifier.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IfExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IfExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IfExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IfExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexAccessor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexAccessor.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexAccessor.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexAccessor.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDropStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDropStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDropStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/IndexDropStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InsertStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InsertStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InsertStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InsertStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InternalDetailsDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InternalDetailsDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InternalDetailsDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/InternalDetailsDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/JoinClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/JoinClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/JoinClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/JoinClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LetClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LetClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LetClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LetClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LimitClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LimitClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LimitClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LimitClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ListConstructor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ListConstructor.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ListConstructor.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/ListConstructor.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LiteralExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LiteralExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LiteralExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LiteralExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LoadFromFileStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LoadFromFileStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LoadFromFileStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/LoadFromFileStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/MetaVariableExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodeGroupDropStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodeGroupDropStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodeGroupDropStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodeGroupDropStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodegroupDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodegroupDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodegroupDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/NodegroupDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorType.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorType.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorType.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OperatorType.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderbyClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderbyClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderbyClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderbyClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderedListTypeDefinition.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderedListTypeDefinition.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderedListTypeDefinition.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/OrderedListTypeDefinition.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedExpression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedExpression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedExpression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedExpression.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedPair.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedPair.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedPair.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/QuantifiedPair.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Query.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Query.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Query.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/Query.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordConstructor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordConstructor.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordConstructor.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordConstructor.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordTypeDefinition.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordTypeDefinition.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordTypeDefinition.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/RecordTypeDefinition.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/SetStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/SetStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/SetStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/SetStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDecl.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDecl.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDecl.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDecl.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDropStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDropStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDropStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeDropStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeExpression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeExpression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeExpression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeExpression.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeReferenceExpression.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeReferenceExpression.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeReferenceExpression.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/TypeReferenceExpression.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnaryExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnaryExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnaryExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnaryExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnionExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnionExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnionExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnionExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnorderedListTypeDefinition.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnorderedListTypeDefinition.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnorderedListTypeDefinition.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UnorderedListTypeDefinition.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/UpdateStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VarIdentifier.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VarIdentifier.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VarIdentifier.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VarIdentifier.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VariableExpr.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VariableExpr.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VariableExpr.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/VariableExpr.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WhereClause.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteFromQueryResultStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteFromQueryResultStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteFromQueryResultStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteFromQueryResultStatement.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteStatement.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteStatement.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteStatement.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/WriteStatement.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/AQLPrintVisitor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/AQLPrintVisitor.java
new file mode 100644
index 0000000..3506e61
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/AQLPrintVisitor.java
@@ -0,0 +1,529 @@
+package edu.uci.ics.asterix.aql.expression.visitor;
+
+import java.io.PrintWriter;
+import java.util.Iterator;
+import java.util.List;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Literal;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.InternalDetailsDecl;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OperatorType;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause.OrderModifier;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition.RecordKind;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeExpression;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+
+public class AQLPrintVisitor implements IAqlVisitorWithVoidReturn<Integer> {
+    // private int level =0;
+    private final PrintWriter out;
+
+    public AQLPrintVisitor() {
+        out = new PrintWriter(System.out);
+    }
+
+    public AQLPrintVisitor(PrintWriter out) {
+        this.out = out;
+    }
+
+    private String skip(int step) {
+        StringBuffer sb = new StringBuffer();
+        for (int i = 0; i < step; i++)
+            sb.append("  ");
+        return sb.toString();
+    }
+
+    @Override
+    public void visit(Query q, Integer step) throws AsterixException {
+        if (q.getBody() != null) {
+            out.println("Query:");
+            q.getBody().accept(this, step);
+        } else {
+            out.println("No query.");
+        }
+    }
+
+    @Override
+    public void visit(LiteralExpr l, Integer step) {
+        Literal lc = l.getValue();
+        if (lc.getLiteralType().equals(Literal.Type.TRUE) || lc.getLiteralType().equals(Literal.Type.FALSE)
+                || lc.getLiteralType().equals(Literal.Type.NULL)) {
+            out.println(skip(step) + "LiteralExpr [" + l.getValue().getLiteralType() + "]");
+        } else {
+            out.println(skip(step) + "LiteralExpr [" + l.getValue().getLiteralType() + "] ["
+                    + l.getValue().getStringValue() + "] ");
+        }
+    }
+
+    @Override
+    public void visit(VariableExpr v, Integer step) {
+        out.println(skip(step) + "Variable [ Name=" + v.getVar().getValue() + " Id=" + v.getVar().getId() + " ]");
+    }
+
+    @Override
+    public void visit(ListConstructor lc, Integer step) throws AsterixException {
+        boolean ordered = false;
+        if (lc.getType().equals(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR)) {
+            ordered = true;
+        }
+
+        out.println(skip(step) + (ordered == true ? "OrderedListConstructor " : "UnorderedListConstructor ") + "[");
+        for (Expression e : lc.getExprList()) {
+            e.accept(this, step + 1);
+        }
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(RecordConstructor rc, Integer step) throws AsterixException {
+        out.println(skip(step) + "RecordConstructor [");
+        // fbList accept visitor
+        for (FieldBinding fb : rc.getFbList()) {
+            out.println(skip(step + 1) + "(");
+            fb.getLeftExpr().accept(this, step + 2);
+            out.println(skip(step + 2) + ":");
+            fb.getRightExpr().accept(this, step + 2);
+            out.println(skip(step + 1) + ")");
+        }
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(CallExpr pf, Integer step) throws AsterixException {
+        out.println(skip(step) + "FunctionCall " + pf.getFunctionSignature().toString() + "[");
+        for (Expression expr : pf.getExprList()) {
+            expr.accept(this, step + 1);
+        }
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(OperatorExpr ifbo, Integer step) throws AsterixException {
+        List<Expression> exprList = ifbo.getExprList();
+        List<OperatorType> opList = ifbo.getOpList();
+        if (ifbo.isCurrentop()) {
+            out.println(skip(step) + "OperatorExpr [");
+            exprList.get(0).accept(this, step + 1);
+            for (int i = 1; i < exprList.size(); i++) {
+                out.println(skip(step + 1) + opList.get(i - 1));
+                exprList.get(i).accept(this, step + 1);
+            }
+            out.println(skip(step) + "]");
+        } else {
+            exprList.get(0).accept(this, step);
+        }
+
+    }
+
+    @Override
+    public void visit(IfExpr ifexpr, Integer step) throws AsterixException {
+        out.println(skip(step) + "IfExpr [");
+        out.println(skip(step + 1) + "Condition:");
+        ifexpr.getCondExpr().accept(this, step + 2);
+        out.println(skip(step + 1) + "Then:");
+        ifexpr.getThenExpr().accept(this, step + 2);
+        out.println(skip(step + 1) + "Else:");
+        ifexpr.getElseExpr().accept(this, step + 2);
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(FLWOGRExpression flwor, Integer step) throws AsterixException {
+        out.println(skip(step) + "FLWOGR [");
+        for (Clause cl : flwor.getClauseList()) {
+            cl.accept(this, step + 1);
+        }
+        out.println(skip(step + 1) + "Return");
+        flwor.getReturnExpr().accept(this, step + 2);
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(QuantifiedExpression qe, Integer step) throws AsterixException {
+        out.println(skip(step) + "QuantifiedExpression " + qe.getQuantifier() + " [");
+        // quantifiedList accept visitor
+        for (QuantifiedPair pair : qe.getQuantifiedList()) {
+            out.print(skip(step + 1) + "[");
+            pair.getVarExpr().accept(this, 0);
+            out.println(skip(step + 1) + "In");
+            pair.getExpr().accept(this, step + 2);
+            out.println(skip(step + 1) + "]");
+        }
+        out.println(skip(step + 1) + "Satifies [");
+        qe.getSatisfiesExpr().accept(this, step + 2);
+        out.println(skip(step + 1) + "]");// for satifies
+        out.println(skip(step) + "]");// for quantifiedExpr
+    }
+
+    @Override
+    public void visit(ForClause fc, Integer step) throws AsterixException {
+        out.print(skip(step) + "For ");
+        fc.getVarExpr().accept(this, 0);
+        out.println(skip(step + 1) + "In ");
+        fc.getInExpr().accept(this, step + 1);
+    }
+
+    @Override
+    public void visit(LetClause lc, Integer step) throws AsterixException {
+        out.print(skip(step) + "Let ");
+        lc.getVarExpr().accept(this, 0);
+        out.println(skip(step + 1) + ":= ");
+        lc.getBindingExpr().accept(this, step + 1);
+    }
+
+    @Override
+    public void visit(WhereClause wc, Integer step) throws AsterixException {
+        out.println(skip(step) + "Where ");
+        wc.getWhereExpr().accept(this, step + 1);
+    }
+
+    @Override
+    public void visit(OrderbyClause oc, Integer step) throws AsterixException {
+        out.println(skip(step) + "Orderby");
+        List<OrderModifier> mlist = oc.getModifierList();
+        List<Expression> list = oc.getOrderbyList();
+        for (int i = 0; i < list.size(); i++) {
+            list.get(i).accept(this, step + 1);
+            out.println(skip(step + 1) + mlist.get(i).toString());
+        }
+        out.println(skip(step));
+    }
+
+    @Override
+    public void visit(GroupbyClause gc, Integer step) throws AsterixException {
+        out.println(skip(step) + "Groupby");
+        for (GbyVariableExpressionPair pair : gc.getGbyPairList()) {
+
+            if (pair.getVar() != null) {
+                pair.getVar().accept(this, step + 1);
+                out.println(skip(step + 1) + ":=");
+            }
+
+            pair.getExpr().accept(this, step + 1);
+        }
+        if (!gc.getDecorPairList().isEmpty()) {
+            out.println(skip(step + 1) + "Decor");
+            for (GbyVariableExpressionPair pair : gc.getDecorPairList()) {
+                if (pair.getVar() != null) {
+                    pair.getVar().accept(this, step + 1);
+                    out.println(skip(step + 1) + ":=");
+                }
+                pair.getExpr().accept(this, step + 1);
+            }
+        }
+        out.println(skip(step + 1) + "With");
+        for (VariableExpr exp : gc.getWithVarList()) {
+            exp.accept(this, step + 1);
+        }
+        out.println(skip(step));
+    }
+
+    @Override
+    public void visit(LimitClause lc, Integer step) throws AsterixException {
+        out.println(skip(step) + "Limit");
+        lc.getLimitExpr().accept(this, step + 1);
+        if (lc.getOffset() != null) {
+            out.println(skip(step + 1) + "Offset");
+            lc.getOffset().accept(this, step + 2);
+        }
+    }
+
+    @Override
+    public void visit(FunctionDecl fd, Integer step) throws AsterixException {
+        out.println(skip(step) + "FunctionDecl " + fd.getSignature().getName() + "(" + fd.getParamList().toString()
+                + ") {");
+        fd.getFuncBody().accept(this, step + 1);
+        out.println(skip(step) + "}");
+        out.println();
+    }
+
+    @Override
+    public void visit(UnaryExpr u, Integer step) throws AsterixException {
+        if (u.getSign() != null) {
+            out.print(skip(step) + u.getSign() + " ");
+            u.getExpr().accept(this, 0);
+        } else
+            u.getExpr().accept(this, step);
+    }
+
+    @Override
+    public void visit(FieldAccessor fa, Integer step) throws AsterixException {
+        out.println(skip(step) + "FieldAccessor [");
+        fa.getExpr().accept(this, step + 1);
+        out.println(skip(step + 1) + "Field=" + ((FieldAccessor) fa).getIdent().getValue());
+        out.println(skip(step) + "]");
+
+    }
+
+    @Override
+    public void visit(IndexAccessor fa, Integer step) throws AsterixException {
+        out.println(skip(step) + "IndexAccessor [");
+        fa.getExpr().accept(this, step + 1);
+        out.print(skip(step + 1) + "Index: ");
+        out.println((((IndexAccessor) fa).isAny() ? "ANY" : ((IndexAccessor) fa).getIndex()));
+
+        out.println(skip(step) + "]");
+
+    }
+
+    @Override
+    public void visit(TypeDecl t, Integer step) throws AsterixException {
+        out.println(skip(step) + "TypeDecl " + t.getIdent() + " [");
+        t.getTypeDef().accept(this, step + 1);
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(TypeReferenceExpression t, Integer arg) throws AsterixException {
+        out.print(t.getIdent());
+    }
+
+    @Override
+    public void visit(RecordTypeDefinition r, Integer step) throws AsterixException {
+        if (r.getRecordKind() == RecordKind.CLOSED) {
+            out.print(skip(step) + "closed ");
+        } else {
+            out.print(skip(step) + "open ");
+        }
+        out.println("RecordType {");
+        Iterator<String> nameIter = r.getFieldNames().iterator();
+        Iterator<TypeExpression> typeIter = r.getFieldTypes().iterator();
+        Iterator<Boolean> isnullableIter = r.getNullableFields().iterator();
+        boolean first = true;
+        while (nameIter.hasNext()) {
+            if (first) {
+                first = false;
+            } else {
+                out.println(",");
+            }
+            String name = nameIter.next();
+            TypeExpression texp = typeIter.next();
+            Boolean isNullable = isnullableIter.next();
+            out.print(skip(step + 1) + name + " : ");
+            texp.accept(this, step + 2);
+            if (isNullable) {
+                out.print("?");
+            }
+        }
+        out.println();
+        out.println(skip(step) + "}");
+    }
+
+    @Override
+    public void visit(OrderedListTypeDefinition x, Integer step) throws AsterixException {
+        out.print("OrderedList [");
+        x.getItemTypeExpression().accept(this, step + 2);
+        out.println("]");
+    }
+
+    @Override
+    public void visit(UnorderedListTypeDefinition x, Integer step) throws AsterixException {
+        out.print("UnorderedList <");
+        x.getItemTypeExpression().accept(this, step + 2);
+        out.println(">");
+    }
+
+    @Override
+    public void visit(DatasetDecl dd, Integer step) throws AsterixException {
+        if (dd.getDatasetType() == DatasetType.INTERNAL) {
+            out.println(skip(step) + "DatasetDecl" + dd.getName() + "(" + dd.getItemTypeName() + ")"
+                    + " partitioned by " + ((InternalDetailsDecl) dd.getDatasetDetailsDecl()).getPartitioningExprs());
+        } else if (dd.getDatasetType() == DatasetType.EXTERNAL) {
+            out.println(skip(step) + "DatasetDecl" + dd.getName() + "(" + dd.getItemTypeName() + ")"
+                    + "is an external dataset");
+        } else if (dd.getDatasetType() == DatasetType.FEED) {
+            out.println(skip(step) + "DatasetDecl" + dd.getName() + "(" + dd.getItemTypeName() + ")"
+                    + "is an feed dataset");
+        }
+    }
+
+    @Override
+    public void visit(DataverseDecl dv, Integer step) throws AsterixException {
+        out.println(skip(step) + "DataverseUse " + dv.getDataverseName());
+    }
+
+    @Override
+    public void visit(NodegroupDecl ngd, Integer step) throws AsterixException {
+        out.println(skip(step) + "Nodegroup " + ngd.getNodeControllerNames());
+    }
+
+    @Override
+    public void visit(LoadFromFileStatement stmtLoad, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(WriteFromQueryResultStatement stmtLoad, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(DropStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(WriteStatement ws, Integer step) throws AsterixException {
+        out.print(skip(step) + "WriteOutputTo " + ws.getNcName() + ":" + ws.getFileName());
+        if (ws.getWriterClassName() != null) {
+            out.print(" using " + ws.getWriterClassName());
+        }
+        out.println();
+    }
+
+    @Override
+    public void visit(SetStatement ss, Integer step) throws AsterixException {
+        out.println(skip(step) + "Set " + ss.getPropName() + "=" + ss.getPropValue());
+    }
+
+    @Override
+    public void visit(CreateIndexStatement cis, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(ControlFeedStatement ss, Integer step) throws AsterixException {
+        out.println(skip(step) + ss.getOperationType() + skip(step) + ss.getDatasetName());
+    }
+
+    @Override
+    public void visit(UnionExpr u, Integer step) throws AsterixException {
+        out.println(skip(step) + "Union [");
+        for (Expression expr : u.getExprs()) {
+            expr.accept(this, step + 1);
+        }
+        out.println(skip(step) + "]");
+    }
+
+    @Override
+    public void visit(DistinctClause dc, Integer step) throws AsterixException {
+        out.print(skip(step) + "Distinct ");
+        for (Expression expr : dc.getDistinctByExpr())
+            expr.accept(this, step + 1);
+    }
+
+    @Override
+    public void visit(InsertStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(DeleteStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(UpdateStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(UpdateClause updateClause, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(CreateDataverseStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public void visit(IndexDropStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public void visit(NodeGroupDropStatement deleteStatement, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public void visit(DataverseDropStatement deleteStatement, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public void visit(TypeDropStatement deleteStatement, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+    }
+
+    @Override
+    public void visit(CreateFunctionStatement cfs, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(FunctionDropStatement fds, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+    @Override
+    public void visit(BeginFeedStatement stmtDel, Integer arg) throws AsterixException {
+        // TODO Auto-generated method stub
+
+    }
+
+}
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlExpressionVisitor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlExpressionVisitor.java
new file mode 100644
index 0000000..1f8e980
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlExpressionVisitor.java
@@ -0,0 +1,156 @@
+package edu.uci.ics.asterix.aql.expression.visitor;
+
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+
+public interface IAqlExpressionVisitor<R, T> {
+
+    R visitQuery(Query q, T arg) throws AsterixException;
+
+    R visitFunctionDecl(FunctionDecl fd, T arg) throws AsterixException;
+
+    R visitTypeDecl(TypeDecl td, T arg) throws AsterixException;
+
+    R visitNodegroupDecl(NodegroupDecl ngd, T arg) throws AsterixException;
+
+    R visitDatasetDecl(DatasetDecl dd, T arg) throws AsterixException;
+
+    R visitLoadFromFileStatement(LoadFromFileStatement stmtLoad, T arg) throws AsterixException;
+
+    R visitLoadFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, T arg) throws AsterixException;
+
+    R visitDropStatement(DropStatement del, T arg) throws AsterixException;
+
+    R visitInsertStatement(InsertStatement insert, T arg) throws AsterixException;
+
+    R visitDeleteStatement(DeleteStatement del, T arg) throws AsterixException;
+
+    R visitUpdateStatement(UpdateStatement update, T arg) throws AsterixException;
+
+    R visitUpdateClause(UpdateClause del, T arg) throws AsterixException;
+
+    R visitTypeReferenceExpression(TypeReferenceExpression tre, T arg) throws AsterixException;
+
+    R visitRecordTypeDefiniton(RecordTypeDefinition tre, T arg) throws AsterixException;
+
+    R visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte, T arg) throws AsterixException;
+
+    R visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte, T arg) throws AsterixException;
+
+    R visitLiteralExpr(LiteralExpr l, T arg) throws AsterixException;
+
+    R visitVariableExpr(VariableExpr v, T arg) throws AsterixException;
+
+    R visitListConstructor(ListConstructor lc, T arg) throws AsterixException;
+
+    R visitRecordConstructor(RecordConstructor rc, T arg) throws AsterixException;
+
+    R visitOperatorExpr(OperatorExpr ifbo, T arg) throws AsterixException;
+
+    R visitFieldAccessor(FieldAccessor fa, T arg) throws AsterixException;
+
+    R visitIndexAccessor(IndexAccessor ia, T arg) throws AsterixException;
+
+    R visitIfExpr(IfExpr ifexpr, T arg) throws AsterixException;
+
+    R visitFlworExpression(FLWOGRExpression flwor, T arg) throws AsterixException;
+
+    R visitQuantifiedExpression(QuantifiedExpression qe, T arg) throws AsterixException;
+
+    R visitForClause(ForClause fc, T arg) throws AsterixException;
+
+    R visitLetClause(LetClause lc, T arg) throws AsterixException;
+
+    R visitWhereClause(WhereClause wc, T arg) throws AsterixException;
+
+    R visitOrderbyClause(OrderbyClause oc, T arg) throws AsterixException;
+
+    R visitGroupbyClause(GroupbyClause gc, T arg) throws AsterixException;
+
+    R visitLimitClause(LimitClause lc, T arg) throws AsterixException;
+
+    R visitDistinctClause(DistinctClause dc, T arg) throws AsterixException;
+
+    R visitUnaryExpr(UnaryExpr u, T arg) throws AsterixException;
+
+    R visitUnionExpr(UnionExpr u, T arg) throws AsterixException;
+
+    R visitCreateIndexStatement(CreateIndexStatement cis, T arg) throws AsterixException;
+
+    R visitCreateDataverseStatement(CreateDataverseStatement del, T arg) throws AsterixException;
+
+    R visitIndexDropStatement(IndexDropStatement del, T arg) throws AsterixException;
+
+    R visitNodeGroupDropStatement(NodeGroupDropStatement del, T arg) throws AsterixException;
+
+    R visitDataverseDropStatement(DataverseDropStatement del, T arg) throws AsterixException;
+
+    R visitTypeDropStatement(TypeDropStatement del, T arg) throws AsterixException;
+
+    R visitWriteStatement(WriteStatement ws, T arg) throws AsterixException;
+
+    R visitSetStatement(SetStatement ss, T arg) throws AsterixException;
+
+    R visitBeginFeedStatement(BeginFeedStatement bf, T arg) throws AsterixException;
+
+    R visitControlFeedStatement(ControlFeedStatement del, T arg) throws AsterixException;
+
+    R visitCallExpr(CallExpr pf, T arg) throws AsterixException;
+
+    R visitDataverseDecl(DataverseDecl dv, T arg) throws AsterixException;
+
+    R visitWriteFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, T arg) throws AsterixException;
+
+    R visit(CreateFunctionStatement cfs, T arg) throws AsterixException;
+
+    R visitFunctionDropStatement(FunctionDropStatement del, T arg) throws AsterixException;
+
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlPlusExpressionVisitor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlPlusExpressionVisitor.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlPlusExpressionVisitor.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlPlusExpressionVisitor.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlVisitorWithVoidReturn.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlVisitorWithVoidReturn.java
new file mode 100644
index 0000000..ff04032
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlVisitorWithVoidReturn.java
@@ -0,0 +1,153 @@
+package edu.uci.ics.asterix.aql.expression.visitor;
+
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+
+public interface IAqlVisitorWithVoidReturn<T> {
+
+    void visit(Query q, T arg) throws AsterixException;
+
+    void visit(FunctionDecl fd, T arg) throws AsterixException;
+
+    void visit(TypeDecl t, T arg) throws AsterixException;
+
+    void visit(NodegroupDecl ngd, T arg) throws AsterixException;
+
+    void visit(DropStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(LoadFromFileStatement stmtLoad, T arg) throws AsterixException;
+
+    void visit(InsertStatement stmtInsert, T arg) throws AsterixException;
+
+    void visit(DeleteStatement stmtDelete, T arg) throws AsterixException;
+
+    void visit(UpdateStatement stmtUpdate, T arg) throws AsterixException;
+
+    void visit(UpdateClause updateClause, T arg) throws AsterixException;
+
+    void visit(WriteFromQueryResultStatement stmtLoad, T arg) throws AsterixException;
+
+    void visit(DatasetDecl dd, T arg) throws AsterixException;
+
+    void visit(LiteralExpr l, T arg) throws AsterixException;
+
+    void visit(VariableExpr v, T arg) throws AsterixException;
+
+    void visit(ListConstructor lc, T arg) throws AsterixException;
+
+    void visit(RecordConstructor rc, T arg) throws AsterixException;
+
+    void visit(CallExpr pf, T arg) throws AsterixException;
+
+    void visit(OperatorExpr ifbo, T arg) throws AsterixException;
+
+    void visit(FieldAccessor fa, T arg) throws AsterixException;
+
+    void visit(IndexAccessor fa, T arg) throws AsterixException;
+
+    void visit(IfExpr ifexpr, T arg) throws AsterixException;
+
+    void visit(FLWOGRExpression flwor, T arg) throws AsterixException;
+
+    void visit(QuantifiedExpression qe, T arg) throws AsterixException;
+
+    void visit(ForClause fc, T arg) throws AsterixException;
+
+    void visit(LetClause lc, T arg) throws AsterixException;
+
+    void visit(WhereClause wc, T arg) throws AsterixException;
+
+    void visit(OrderbyClause oc, T arg) throws AsterixException;
+
+    void visit(GroupbyClause gc, T arg) throws AsterixException;
+
+    void visit(LimitClause lc, T arg) throws AsterixException;
+
+    void visit(DistinctClause dc, T arg) throws AsterixException;
+
+    void visit(UnaryExpr u, T arg) throws AsterixException;
+
+    void visit(UnionExpr u, T arg) throws AsterixException;
+
+    void visit(TypeReferenceExpression t, T arg) throws AsterixException;
+
+    void visit(RecordTypeDefinition r, T arg) throws AsterixException;
+
+    void visit(OrderedListTypeDefinition x, T arg) throws AsterixException;
+
+    void visit(UnorderedListTypeDefinition x, T arg) throws AsterixException;
+
+    void visit(DataverseDecl dv, T arg) throws AsterixException;
+
+    void visit(SetStatement ss, T arg) throws AsterixException;
+
+    void visit(WriteStatement ws, T arg) throws AsterixException;
+
+    void visit(CreateIndexStatement cis, T arg) throws AsterixException;
+
+    void visit(CreateDataverseStatement cdvStmt, T arg) throws AsterixException;
+
+    void visit(IndexDropStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(NodeGroupDropStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(DataverseDropStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(TypeDropStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(BeginFeedStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(ControlFeedStatement stmtDel, T arg) throws AsterixException;
+
+    void visit(CreateFunctionStatement cfs, T arg) throws AsterixException;
+
+    void visit(FunctionDropStatement fds, T arg) throws AsterixException;
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/DoubleLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/DoubleLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/DoubleLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/DoubleLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FalseLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FalseLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FalseLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FalseLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FloatLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FloatLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FloatLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/FloatLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/IntegerLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/IntegerLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/IntegerLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/IntegerLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/LongIntegerLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/LongIntegerLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/LongIntegerLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/LongIntegerLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/NullLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/NullLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/NullLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/NullLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/StringLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/StringLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/StringLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/StringLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/TrueLiteral.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/TrueLiteral.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/TrueLiteral.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/literal/TrueLiteral.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/parser/ScopeChecker.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/parser/ScopeChecker.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/parser/ScopeChecker.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/parser/ScopeChecker.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewriter.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewriter.java
new file mode 100644
index 0000000..84d8321
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewriter.java
@@ -0,0 +1,563 @@
+package edu.uci.ics.asterix.aql.rewrites;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Expression.Kind;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VarIdentifier;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
+import edu.uci.ics.asterix.aql.util.FunctionUtils;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.AsterixFunction;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+
+public final class AqlRewriter {
+
+    private final Query topExpr;
+    private final List<FunctionDecl> declaredFunctions;
+    private final AqlRewritingContext context;
+    private final MetadataTransactionContext mdTxnCtx;
+
+    private enum DfsColor {
+        WHITE,
+        GRAY,
+        BLACK
+    }
+
+    public AqlRewriter(List<FunctionDecl> declaredFunctions, Query topExpr, MetadataTransactionContext mdTxnCtx) {
+        this.topExpr = topExpr;
+        context = new AqlRewritingContext(topExpr.getVarCounter());
+        this.declaredFunctions = declaredFunctions;
+        this.mdTxnCtx = mdTxnCtx;
+    }
+
+    public Query getExpr() {
+        return topExpr;
+    }
+
+    public int getVarCounter() {
+        return context.getVarCounter();
+    }
+
+    public void rewrite() throws AsterixException {
+        wrapInLets();
+        inlineDeclaredUdfs();
+    }
+
+    private void wrapInLets() {
+        // If the top expression of the main statement is not a FLWOR, it wraps
+        // it into a let clause.
+        if (topExpr == null) {
+            return;
+        }
+        Expression body = topExpr.getBody();
+        if (body.getKind() != Kind.FLWOGR_EXPRESSION) {
+            VarIdentifier var = context.newVariable();
+            VariableExpr v = new VariableExpr(var);
+            LetClause c1 = new LetClause(v, body);
+            ArrayList<Clause> clauseList = new ArrayList<Clause>(1);
+            clauseList.add(c1);
+            FLWOGRExpression newBody = new FLWOGRExpression(clauseList, new VariableExpr(var));
+            topExpr.setBody(newBody);
+        }
+    }
+
+    private void inlineDeclaredUdfs() throws AsterixException {
+        if (topExpr == null) {
+            return;
+        }
+        List<FunctionSignature> funIds = new ArrayList<FunctionSignature>();
+        for (FunctionDecl fdecl : declaredFunctions) {
+            funIds.add(fdecl.getSignature());
+        }
+
+        List<FunctionDecl> otherFDecls = new ArrayList<FunctionDecl>();
+        buildOtherUdfs(topExpr.getBody(), otherFDecls, funIds);
+        declaredFunctions.addAll(otherFDecls);
+        if (!declaredFunctions.isEmpty()) {
+            InlineUdfsVisitor visitor = new InlineUdfsVisitor(context);
+            while (topExpr.accept(visitor, declaredFunctions)) {
+                // loop until no more changes
+            }
+        }
+    }
+
+    private void buildOtherUdfs(Expression expression, List<FunctionDecl> functionDecls,
+            List<FunctionSignature> declaredFunctions) throws AsterixException {
+        if (expression == null) {
+            return;
+        }
+
+        Set<FunctionSignature> functionCalls = getFunctionCalls(expression);
+        for (FunctionSignature signature : functionCalls) {
+
+            if (declaredFunctions != null && declaredFunctions.contains(signature)) {
+                continue;
+            }
+
+            FunctionDecl functionDecl = lookupUserDefinedFunctionDecl(signature);
+            if (functionDecl != null) {
+                if (functionDecls.contains(functionDecl)) {
+                    throw new AsterixException(" Detected recursvity!");
+                } else {
+                    functionDecls.add(functionDecl);
+                    buildOtherUdfs(functionDecl.getFuncBody(), functionDecls, declaredFunctions);
+                }
+            } else {
+                if (isBuiltinFunction(signature)) {
+                    continue;
+                } else {
+                    throw new AsterixException(" unknown function " + signature);
+                }
+            }
+        }
+    }
+
+    private FunctionDecl lookupUserDefinedFunctionDecl(FunctionSignature signature) throws AsterixException {
+        if (signature.getNamespace() == null) {
+            return null;
+        }
+        Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
+        if (function == null) {
+            return null;
+        }
+        return FunctionUtils.getFunctionDecl(function);
+
+    }
+
+    private boolean isBuiltinFunction(FunctionSignature functionSignature) {
+        if (AsterixBuiltinFunctions.isBuiltinCompilerFunction(new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+                functionSignature.getName(), functionSignature.getArity()))) {
+            return true;
+        }
+
+        if (AsterixBuiltinFunctions.isBuiltinCompilerFunction(new FunctionIdentifier(
+                AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionSignature.getName(), functionSignature.getArity()))) {
+            return true;
+        }
+
+        return false;
+
+    }
+
+    private Set<FunctionSignature> getFunctionCalls(Expression expression) throws AsterixException {
+        Map<AsterixFunction, DfsColor> color = new HashMap<AsterixFunction, DfsColor>();
+        Map<AsterixFunction, List<AsterixFunction>> arcs = new HashMap<AsterixFunction, List<AsterixFunction>>();
+        GatherFunctionCalls gfc = new GatherFunctionCalls();
+        expression.accept(gfc, null);
+        return gfc.getCalls();
+    }
+
+    private static class GatherFunctionCalls implements IAqlExpressionVisitor<Void, Void> {
+
+        private final Set<FunctionSignature> calls = new HashSet<FunctionSignature>();
+
+        public GatherFunctionCalls() {
+        }
+
+        @Override
+        public Void visitCallExpr(CallExpr pf, Void arg) throws AsterixException {
+            calls.add(pf.getFunctionSignature());
+            for (Expression e : pf.getExprList()) {
+                e.accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitCreateIndexStatement(CreateIndexStatement cis, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitDataverseDecl(DataverseDecl dv, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitDeleteStatement(DeleteStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitDistinctClause(DistinctClause dc, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitDropStatement(DropStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitDatasetDecl(DatasetDecl dd, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitFieldAccessor(FieldAccessor fa, Void arg) throws AsterixException {
+            fa.getExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitFlworExpression(FLWOGRExpression flwor, Void arg) throws AsterixException {
+            for (Clause c : flwor.getClauseList()) {
+                c.accept(this, arg);
+            }
+            flwor.getReturnExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitForClause(ForClause fc, Void arg) throws AsterixException {
+            fc.getInExpr().accept(this, arg);
+            if (fc.getPosVarExpr() != null) {
+                fc.getPosVarExpr().accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitFunctionDecl(FunctionDecl fd, Void arg) throws AsterixException {
+            fd.getFuncBody().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitGroupbyClause(GroupbyClause gc, Void arg) throws AsterixException {
+            for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
+                p.getExpr().accept(this, arg);
+            }
+            for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
+                p.getExpr().accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitIfExpr(IfExpr ifexpr, Void arg) throws AsterixException {
+            ifexpr.getCondExpr().accept(this, arg);
+            ifexpr.getThenExpr().accept(this, arg);
+            ifexpr.getElseExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitIndexAccessor(IndexAccessor ia, Void arg) throws AsterixException {
+            ia.getExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitInsertStatement(InsertStatement insert, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitLetClause(LetClause lc, Void arg) throws AsterixException {
+            lc.getBindingExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitLimitClause(LimitClause lc, Void arg) throws AsterixException {
+            lc.getLimitExpr().accept(this, arg);
+            if (lc.getOffset() != null) {
+                lc.getOffset().accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitListConstructor(ListConstructor lc, Void arg) throws AsterixException {
+            for (Expression e : lc.getExprList()) {
+                e.accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitLiteralExpr(LiteralExpr l, Void arg) throws AsterixException {
+            // do nothing
+            return null;
+        }
+
+        @Override
+        public Void visitLoadFromFileStatement(LoadFromFileStatement stmtLoad, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitNodegroupDecl(NodegroupDecl ngd, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitOperatorExpr(OperatorExpr op, Void arg) throws AsterixException {
+            for (Expression e : op.getExprList()) {
+                e.accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitOrderbyClause(OrderbyClause oc, Void arg) throws AsterixException {
+            for (Expression e : oc.getOrderbyList()) {
+                e.accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitQuantifiedExpression(QuantifiedExpression qe, Void arg) throws AsterixException {
+            for (QuantifiedPair qp : qe.getQuantifiedList()) {
+                qp.getExpr().accept(this, arg);
+            }
+            qe.getSatisfiesExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitQuery(Query q, Void arg) throws AsterixException {
+            q.getBody().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitRecordConstructor(RecordConstructor rc, Void arg) throws AsterixException {
+            for (FieldBinding fb : rc.getFbList()) {
+                fb.getLeftExpr().accept(this, arg);
+                fb.getRightExpr().accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitRecordTypeDefiniton(RecordTypeDefinition tre, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitSetStatement(SetStatement ss, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitTypeDecl(TypeDecl td, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitTypeReferenceExpression(TypeReferenceExpression tre, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitUnaryExpr(UnaryExpr u, Void arg) throws AsterixException {
+            u.getExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitUnionExpr(UnionExpr u, Void arg) throws AsterixException {
+            for (Expression e : u.getExprs()) {
+                e.accept(this, arg);
+            }
+            return null;
+        }
+
+        @Override
+        public Void visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitUpdateClause(UpdateClause del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitUpdateStatement(UpdateStatement update, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitVariableExpr(VariableExpr v, Void arg) throws AsterixException {
+            // do nothing
+            return null;
+        }
+
+        @Override
+        public Void visitWhereClause(WhereClause wc, Void arg) throws AsterixException {
+            wc.getWhereExpr().accept(this, arg);
+            return null;
+        }
+
+        @Override
+        public Void visitWriteFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, Void arg)
+                throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitWriteStatement(WriteStatement ws, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        public Set<FunctionSignature> getCalls() {
+            return calls;
+        }
+
+        @Override
+        public Void visitLoadFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, Void arg)
+                throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitCreateDataverseStatement(CreateDataverseStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitIndexDropStatement(IndexDropStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitNodeGroupDropStatement(NodeGroupDropStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitDataverseDropStatement(DataverseDropStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitTypeDropStatement(TypeDropStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitControlFeedStatement(ControlFeedStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visit(CreateFunctionStatement cfs, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitFunctionDropStatement(FunctionDropStatement del, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+        @Override
+        public Void visitBeginFeedStatement(BeginFeedStatement bf, Void arg) throws AsterixException {
+            // TODO Auto-generated method stub
+            return null;
+        }
+
+    }
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewritingContext.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewritingContext.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewritingContext.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewritingContext.java
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
new file mode 100644
index 0000000..cbd15a2
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
@@ -0,0 +1,586 @@
+package edu.uci.ics.asterix.aql.rewrites;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.IAqlExpression;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VarIdentifier;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+
+public class CloneAndSubstituteVariablesVisitor implements
+        IAqlExpressionVisitor<Pair<IAqlExpression, List<VariableSubstitution>>, List<VariableSubstitution>> {
+
+    private AqlRewritingContext context;
+
+    public CloneAndSubstituteVariablesVisitor(AqlRewritingContext context) {
+        this.context = context;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitFieldAccessor(FieldAccessor fa,
+            List<VariableSubstitution> arg) throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p = fa.getExpr().accept(this, arg);
+        FieldAccessor newF = new FieldAccessor((Expression) p.first, fa.getIdent());
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newF, p.second);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitFlworExpression(FLWOGRExpression flwor,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<Clause> newClauses = new ArrayList<Clause>(flwor.getClauseList().size());
+        List<VariableSubstitution> ongoing = arg;
+        for (Clause c : flwor.getClauseList()) {
+            Pair<IAqlExpression, List<VariableSubstitution>> p1 = c.accept(this, ongoing);
+            ongoing = p1.second;
+            newClauses.add((Clause) p1.first);
+        }
+        Pair<IAqlExpression, List<VariableSubstitution>> p2 = flwor.getReturnExpr().accept(this, ongoing);
+        Expression newReturnExpr = (Expression) p2.first;
+        FLWOGRExpression newFlwor = new FLWOGRExpression(newClauses, newReturnExpr);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newFlwor, p2.second);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitForClause(ForClause fc, List<VariableSubstitution> arg)
+            throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = fc.getInExpr().accept(this, arg);
+        VarIdentifier vi = fc.getVarExpr().getVar();
+        // we need new variables
+        VarIdentifier newVar = context.mapOldId(vi.getId(), vi.getValue());
+
+        VariableSubstitution vs = findVarSubst(arg, vi);
+        List<VariableSubstitution> newSubs;
+        if (vs == null) {
+            newSubs = arg;
+        } else {
+            // This for clause is overriding a binding, so we don't subst. that
+            // one anymore.
+            newSubs = eliminateSubstFromList(vi, arg);
+        }
+
+        VariableExpr newVe = new VariableExpr(newVar);
+        ForClause newFor = new ForClause(newVe, (Expression) p1.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newFor, newSubs);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitLetClause(LetClause lc, List<VariableSubstitution> arg)
+            throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = lc.getBindingExpr().accept(this, arg);
+        VarIdentifier vi = lc.getVarExpr().getVar();
+        VarIdentifier newVar = context.mapOldId(vi.getId(), vi.getValue());
+
+        VariableSubstitution vs = findVarSubst(arg, vi);
+        List<VariableSubstitution> newSubs;
+        if (vs == null) {
+            newSubs = arg;
+        } else {
+            newSubs = eliminateSubstFromList(vi, arg);
+        }
+
+        VariableExpr newVe = new VariableExpr(newVar);
+        LetClause newLet = new LetClause(newVe, (Expression) p1.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newLet, newSubs);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitGroupbyClause(GroupbyClause gc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<VariableSubstitution> newSubs = arg;
+        List<GbyVariableExpressionPair> newGbyList = substInVarExprPair(gc.getGbyPairList(), arg, newSubs);
+        List<GbyVariableExpressionPair> newDecorList = substInVarExprPair(gc.getDecorPairList(), arg, newSubs);
+        List<VariableExpr> wList = new LinkedList<VariableExpr>();
+        for (VariableExpr w : gc.getWithVarList()) {
+            VarIdentifier newVar = context.getRewrittenVar(w.getVar().getId());
+            wList.add(new VariableExpr(newVar));
+        }
+        GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, wList, gc.hasHashGroupByHint());
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newGroup, newSubs);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitQuantifiedExpression(QuantifiedExpression qe,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<QuantifiedPair> oldPairs = qe.getQuantifiedList();
+        List<QuantifiedPair> newPairs = new ArrayList<QuantifiedPair>(oldPairs.size());
+        List<VarIdentifier> newVis = new LinkedList<VarIdentifier>();
+        List<VariableSubstitution> newSubs = arg;
+        for (QuantifiedPair t : oldPairs) {
+            VarIdentifier newVar = context.mapOldVarIdentifier(t.getVarExpr().getVar());
+            newVis.add(newVar);
+            newSubs = eliminateSubstFromList(newVar, newSubs);
+            Pair<IAqlExpression, List<VariableSubstitution>> p1 = t.getExpr().accept(this, newSubs);
+            QuantifiedPair t2 = new QuantifiedPair(new VariableExpr(newVar), (Expression) p1.first);
+            newPairs.add(t2);
+        }
+        Pair<IAqlExpression, List<VariableSubstitution>> p2 = qe.getSatisfiesExpr().accept(this, newSubs);
+        QuantifiedExpression qe2 = new QuantifiedExpression(qe.getQuantifier(), newPairs, (Expression) p2.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(qe2, newSubs);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitVariableExpr(VariableExpr v,
+            List<VariableSubstitution> arg) throws AsterixException {
+        VariableSubstitution vs = findVarSubst(arg, v.getVar());
+        VarIdentifier var;
+        if (vs != null) {
+            // it is a variable subst from the list
+            var = vs.getNewVar();
+        } else {
+            // it is a var. from the context
+            var = context.getRewrittenVar(v.getVar().getId());
+            if (var == null) {
+                var = v.getVar();
+            }
+        }
+        VariableExpr ve = new VariableExpr(var);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(ve, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitWhereClause(WhereClause wc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = wc.getWhereExpr().accept(this, arg);
+        WhereClause newW = new WhereClause((Expression) p1.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newW, p1.second);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitCallExpr(CallExpr pf, List<VariableSubstitution> arg)
+            throws AsterixException {
+        List<Expression> exprList = visitAndCloneExprList(pf.getExprList(), arg);
+        CallExpr f = new CallExpr(pf.getFunctionSignature(), exprList);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(f, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitFunctionDecl(FunctionDecl fd,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<VarIdentifier> newList = new ArrayList<VarIdentifier>(fd.getParamList().size());
+        for (VarIdentifier vi : fd.getParamList()) {
+            VariableSubstitution vs = findVarSubst(arg, vi);
+            if (vs == null) {
+                throw new AsterixException("Parameter " + vi + " does not appear in the substitution list.");
+            }
+            newList.add(vs.getNewVar());
+        }
+
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = fd.getFuncBody().accept(this, arg);
+        FunctionDecl newF = new FunctionDecl(fd.getSignature(), newList, (Expression) p1.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newF, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitIfExpr(IfExpr ifexpr, List<VariableSubstitution> arg)
+            throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = ifexpr.getCondExpr().accept(this, arg);
+        Pair<IAqlExpression, List<VariableSubstitution>> p2 = ifexpr.getThenExpr().accept(this, arg);
+        Pair<IAqlExpression, List<VariableSubstitution>> p3 = ifexpr.getElseExpr().accept(this, arg);
+        IfExpr i = new IfExpr((Expression) p1.first, (Expression) p2.first, (Expression) p3.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(i, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitIndexAccessor(IndexAccessor ia,
+            List<VariableSubstitution> arg) throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = ia.getExpr().accept(this, arg);
+        IndexAccessor i = new IndexAccessor((Expression) p1.first, ia.getIndex());
+        i.setAny(ia.isAny());
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(i, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitLimitClause(LimitClause lc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = lc.getLimitExpr().accept(this, arg);
+        Pair<IAqlExpression, List<VariableSubstitution>> p2 = lc.getOffset().accept(this, arg);
+        LimitClause c = new LimitClause((Expression) p1.first, (Expression) p2.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(c, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitListConstructor(ListConstructor lc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<Expression> oldExprList = lc.getExprList();
+        List<Expression> exprs = visitAndCloneExprList(oldExprList, arg);
+        ListConstructor c = new ListConstructor(lc.getType(), exprs);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(c, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitLiteralExpr(LiteralExpr l,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // LiteralExpr e = new LiteralExpr(l.getValue());
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(l, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitOperatorExpr(OperatorExpr op,
+            List<VariableSubstitution> arg) throws AsterixException {
+        ArrayList<Expression> oldExprList = op.getExprList();
+        ArrayList<Expression> exprs = new ArrayList<Expression>(oldExprList.size());
+        for (Expression e : oldExprList) {
+            Pair<IAqlExpression, List<VariableSubstitution>> p1 = e.accept(this, arg);
+            exprs.add((Expression) p1.first);
+        }
+        OperatorExpr oe = new OperatorExpr(exprs, op.getExprBroadcastIdx(), op.getOpList());
+        oe.setCurrentop(op.isCurrentop());
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(oe, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitOrderbyClause(OrderbyClause oc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<Expression> exprList = visitAndCloneExprList(oc.getOrderbyList(), arg);
+        OrderbyClause oc2 = new OrderbyClause(exprList, oc.getModifierList());
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(oc2, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitQuery(Query q, List<VariableSubstitution> arg)
+            throws AsterixException {
+        Query newQ = new Query();
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = q.getBody().accept(this, arg);
+        newQ.setBody((Expression) p1.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newQ, p1.second);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitRecordConstructor(RecordConstructor rc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<FieldBinding> oldFbs = rc.getFbList();
+        ArrayList<FieldBinding> newFbs = new ArrayList<FieldBinding>(oldFbs.size());
+        for (FieldBinding fb : oldFbs) {
+            Pair<IAqlExpression, List<VariableSubstitution>> p1 = fb.getLeftExpr().accept(this, arg);
+            Pair<IAqlExpression, List<VariableSubstitution>> p2 = fb.getRightExpr().accept(this, arg);
+            FieldBinding fb2 = new FieldBinding((Expression) p1.first, (Expression) p2.first);
+            newFbs.add(fb2);
+        }
+        RecordConstructor newRc = new RecordConstructor(newFbs);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newRc, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitUnaryExpr(UnaryExpr u, List<VariableSubstitution> arg)
+            throws AsterixException {
+        Pair<IAqlExpression, List<VariableSubstitution>> p1 = u.getExpr().accept(this, arg);
+        UnaryExpr newU = new UnaryExpr(u.getSign(), (Expression) p1.first);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newU, arg);
+    }
+
+    private List<Expression> visitAndCloneExprList(List<Expression> oldExprList, List<VariableSubstitution> arg)
+            throws AsterixException {
+        List<Expression> exprs = new ArrayList<Expression>(oldExprList.size());
+        for (Expression e : oldExprList) {
+            Pair<IAqlExpression, List<VariableSubstitution>> p1 = e.accept(this, arg);
+            exprs.add((Expression) p1.first);
+        }
+        return exprs;
+    }
+
+    private static VariableSubstitution findVarSubst(List<VariableSubstitution> varSubstList, VarIdentifier v) {
+        VariableSubstitution res = null;
+        for (VariableSubstitution s : varSubstList) {
+            if (s.getOldVar().getValue().equals(v.getValue())) {
+                res = s;
+                break;
+            }
+        }
+        return res;
+    }
+
+    private static List<VariableSubstitution> eliminateSubstFromList(VarIdentifier vi, List<VariableSubstitution> arg) {
+        List<VariableSubstitution> newArg = new LinkedList<VariableSubstitution>();
+        for (VariableSubstitution vs1 : arg) {
+            if (!vs1.getOldVar().getValue().equals(vi.getValue())) {
+                newArg.add(vs1);
+            }
+        }
+        return newArg;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitTypeDecl(TypeDecl td, List<VariableSubstitution> arg)
+            throws AsterixException {
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitRecordTypeDefiniton(RecordTypeDefinition tre,
+            List<VariableSubstitution> arg) throws AsterixException {
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitTypeReferenceExpression(TypeReferenceExpression tre,
+            List<VariableSubstitution> arg) throws AsterixException {
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitNodegroupDecl(NodegroupDecl ngd,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitLoadFromFileStatement(LoadFromFileStatement stmtLoad,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitDropStatement(DropStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitControlFeedStatement(ControlFeedStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    private List<GbyVariableExpressionPair> substInVarExprPair(List<GbyVariableExpressionPair> gbyVeList,
+            List<VariableSubstitution> arg, List<VariableSubstitution> newSubs) throws AsterixException {
+        List<GbyVariableExpressionPair> veList = new LinkedList<GbyVariableExpressionPair>();
+        for (GbyVariableExpressionPair vep : gbyVeList) {
+            VariableExpr oldGbyVar = vep.getVar();
+            VariableExpr newGbyVar = null;
+            if (oldGbyVar != null) {
+                VarIdentifier newVar = context.mapOldVarIdentifier(oldGbyVar.getVar());
+                newSubs = eliminateSubstFromList(newVar, newSubs);
+                newGbyVar = new VariableExpr(newVar);
+            }
+            Pair<IAqlExpression, List<VariableSubstitution>> p1 = vep.getExpr().accept(this, newSubs);
+            GbyVariableExpressionPair ve2 = new GbyVariableExpressionPair(newGbyVar, (Expression) p1.first);
+            veList.add(ve2);
+        }
+        return veList;
+
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitWriteFromQueryResultStatement(
+            WriteFromQueryResultStatement stmtLoad, List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitCreateIndexStatement(CreateIndexStatement cis,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitUnionExpr(UnionExpr u, List<VariableSubstitution> arg)
+            throws AsterixException {
+        List<Expression> exprList = visitAndCloneExprList(u.getExprs(), arg);
+        UnionExpr newU = new UnionExpr(exprList);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(newU, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitDistinctClause(DistinctClause dc,
+            List<VariableSubstitution> arg) throws AsterixException {
+        List<Expression> exprList = visitAndCloneExprList(dc.getDistinctByExpr(), arg);
+        DistinctClause dc2 = new DistinctClause(exprList);
+        return new Pair<IAqlExpression, List<VariableSubstitution>>(dc2, arg);
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitOrderedListTypeDefiniton(
+            OrderedListTypeDefinition olte, List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitUnorderedListTypeDefiniton(
+            UnorderedListTypeDefinition ulte, List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitInsertStatement(InsertStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitDeleteStatement(DeleteStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitUpdateStatement(UpdateStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitUpdateClause(UpdateClause del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitDataverseDecl(DataverseDecl dv,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitSetStatement(SetStatement ss,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitWriteStatement(WriteStatement ws,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitDatasetDecl(DatasetDecl dd,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitLoadFromQueryResultStatement(
+            WriteFromQueryResultStatement stmtLoad, List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitCreateDataverseStatement(CreateDataverseStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitIndexDropStatement(IndexDropStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitNodeGroupDropStatement(NodeGroupDropStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitDataverseDropStatement(DataverseDropStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitTypeDropStatement(TypeDropStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visit(CreateFunctionStatement cfs,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitFunctionDropStatement(FunctionDropStatement del,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Pair<IAqlExpression, List<VariableSubstitution>> visitBeginFeedStatement(BeginFeedStatement bf,
+            List<VariableSubstitution> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/InlineUdfsVisitor.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/InlineUdfsVisitor.java
new file mode 100644
index 0000000..9834f27
--- /dev/null
+++ b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/InlineUdfsVisitor.java
@@ -0,0 +1,526 @@
+package edu.uci.ics.asterix.aql.rewrites;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import edu.uci.ics.asterix.aql.base.Clause;
+import edu.uci.ics.asterix.aql.base.Expression;
+import edu.uci.ics.asterix.aql.base.Expression.Kind;
+import edu.uci.ics.asterix.aql.base.IAqlExpression;
+import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CallExpr;
+import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
+import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
+import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
+import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
+import edu.uci.ics.asterix.aql.expression.DatasetDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDecl;
+import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
+import edu.uci.ics.asterix.aql.expression.DeleteStatement;
+import edu.uci.ics.asterix.aql.expression.DistinctClause;
+import edu.uci.ics.asterix.aql.expression.DropStatement;
+import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
+import edu.uci.ics.asterix.aql.expression.FieldAccessor;
+import edu.uci.ics.asterix.aql.expression.FieldBinding;
+import edu.uci.ics.asterix.aql.expression.ForClause;
+import edu.uci.ics.asterix.aql.expression.FunctionDecl;
+import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
+import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
+import edu.uci.ics.asterix.aql.expression.GroupbyClause;
+import edu.uci.ics.asterix.aql.expression.IfExpr;
+import edu.uci.ics.asterix.aql.expression.IndexAccessor;
+import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
+import edu.uci.ics.asterix.aql.expression.InsertStatement;
+import edu.uci.ics.asterix.aql.expression.LetClause;
+import edu.uci.ics.asterix.aql.expression.LimitClause;
+import edu.uci.ics.asterix.aql.expression.ListConstructor;
+import edu.uci.ics.asterix.aql.expression.LiteralExpr;
+import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
+import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
+import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
+import edu.uci.ics.asterix.aql.expression.OperatorExpr;
+import edu.uci.ics.asterix.aql.expression.OrderbyClause;
+import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
+import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
+import edu.uci.ics.asterix.aql.expression.Query;
+import edu.uci.ics.asterix.aql.expression.RecordConstructor;
+import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.SetStatement;
+import edu.uci.ics.asterix.aql.expression.TypeDecl;
+import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
+import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr;
+import edu.uci.ics.asterix.aql.expression.UnionExpr;
+import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
+import edu.uci.ics.asterix.aql.expression.UpdateClause;
+import edu.uci.ics.asterix.aql.expression.UpdateStatement;
+import edu.uci.ics.asterix.aql.expression.VarIdentifier;
+import edu.uci.ics.asterix.aql.expression.VariableExpr;
+import edu.uci.ics.asterix.aql.expression.WhereClause;
+import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
+import edu.uci.ics.asterix.aql.expression.WriteStatement;
+import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+
+public class InlineUdfsVisitor implements IAqlExpressionVisitor<Boolean, List<FunctionDecl>> {
+
+    private final AqlRewritingContext context;
+    private final CloneAndSubstituteVariablesVisitor cloneVisitor;
+
+    public InlineUdfsVisitor(AqlRewritingContext context) {
+        this.context = context;
+        this.cloneVisitor = new CloneAndSubstituteVariablesVisitor(context);
+    }
+
+    @Override
+    public Boolean visitQuery(Query q, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(q.getBody(), arg);
+        q.setBody(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitFunctionDecl(FunctionDecl fd, List<FunctionDecl> arg) throws AsterixException {
+        // Careful, we should only do this after analyzing the graph of function
+        // calls.
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(fd.getFuncBody(), arg);
+        fd.setFuncBody(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitListConstructor(ListConstructor lc, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, ArrayList<Expression>> p = newExprList(lc.getExprList(), arg);
+        lc.setExprList(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitRecordConstructor(RecordConstructor rc, List<FunctionDecl> arg) throws AsterixException {
+        boolean changed = false;
+        for (FieldBinding b : rc.getFbList()) {
+            Pair<Boolean, Expression> leftExprInlined = inlineUdfsInExpr(b.getLeftExpr(), arg);
+            b.setLeftExpr(leftExprInlined.second);
+            changed = changed | leftExprInlined.first;
+            Pair<Boolean, Expression> rightExprInlined = inlineUdfsInExpr(b.getRightExpr(), arg);
+            b.setRightExpr(rightExprInlined.second);
+            changed = changed | rightExprInlined.first;
+
+            /*
+            if (b.getLeftExpr().accept(this, arg)) {
+                changed = true;
+            }
+            if (b.getRightExpr().accept(this, arg)) {
+                changed = true;
+            }*/
+        }
+        return changed;
+    }
+
+    @Override
+    public Boolean visitCallExpr(CallExpr pf, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, ArrayList<Expression>> p = newExprList(pf.getExprList(), arg);
+        pf.setExprList(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitOperatorExpr(OperatorExpr ifbo, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, ArrayList<Expression>> p = newExprList(ifbo.getExprList(), arg);
+        ifbo.setExprList(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitFieldAccessor(FieldAccessor fa, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(fa.getExpr(), arg);
+        fa.setExpr(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitIndexAccessor(IndexAccessor fa, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(fa.getExpr(), arg);
+        fa.setExpr(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitIfExpr(IfExpr ifexpr, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p1 = inlineUdfsInExpr(ifexpr.getCondExpr(), arg);
+        ifexpr.setCondExpr(p1.second);
+        Pair<Boolean, Expression> p2 = inlineUdfsInExpr(ifexpr.getThenExpr(), arg);
+        ifexpr.setThenExpr(p2.second);
+        Pair<Boolean, Expression> p3 = inlineUdfsInExpr(ifexpr.getElseExpr(), arg);
+        ifexpr.setElseExpr(p3.second);
+        return p1.first || p2.first || p3.first;
+    }
+
+    @Override
+    public Boolean visitFlworExpression(FLWOGRExpression flwor, List<FunctionDecl> arg) throws AsterixException {
+        boolean changed = false;
+        for (Clause c : flwor.getClauseList()) {
+            if (c.accept(this, arg)) {
+                changed = true;
+            }
+        }
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(flwor.getReturnExpr(), arg);
+        flwor.setReturnExpr(p.second);
+        return changed || p.first;
+    }
+
+    @Override
+    public Boolean visitQuantifiedExpression(QuantifiedExpression qe, List<FunctionDecl> arg) throws AsterixException {
+        boolean changed = false;
+        for (QuantifiedPair t : qe.getQuantifiedList()) {
+            Pair<Boolean, Expression> p = inlineUdfsInExpr(t.getExpr(), arg);
+            t.setExpr(p.second);
+            if (p.first) {
+                changed = true;
+            }
+        }
+        Pair<Boolean, Expression> p2 = inlineUdfsInExpr(qe.getSatisfiesExpr(), arg);
+        qe.setSatisfiesExpr(p2.second);
+        return changed || p2.first;
+    }
+
+    @Override
+    public Boolean visitForClause(ForClause fc, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(fc.getInExpr(), arg);
+        fc.setInExpr(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitLetClause(LetClause lc, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(lc.getBindingExpr(), arg);
+        lc.setBindingExpr(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitWhereClause(WhereClause wc, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p = inlineUdfsInExpr(wc.getWhereExpr(), arg);
+        wc.setWhereExpr(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitOrderbyClause(OrderbyClause oc, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, ArrayList<Expression>> p = newExprList(oc.getOrderbyList(), arg);
+        oc.setOrderbyList(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitGroupbyClause(GroupbyClause gc, List<FunctionDecl> arg) throws AsterixException {
+        boolean changed = false;
+        for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
+            Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), arg);
+            p.setExpr(be.second);
+            if (be.first) {
+                changed = true;
+            }
+        }
+        for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
+            Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), arg);
+            p.setExpr(be.second);
+            if (be.first) {
+                changed = true;
+            }
+        }
+        return changed;
+    }
+
+    @Override
+    public Boolean visitLimitClause(LimitClause lc, List<FunctionDecl> arg) throws AsterixException {
+        Pair<Boolean, Expression> p1 = inlineUdfsInExpr(lc.getLimitExpr(), arg);
+        lc.setLimitExpr(p1.second);
+        boolean changed = p1.first;
+        if (lc.getOffset() != null) {
+            Pair<Boolean, Expression> p2 = inlineUdfsInExpr(lc.getOffset(), arg);
+            lc.setOffset(p2.second);
+            changed = changed || p2.first;
+        }
+        return changed;
+    }
+
+    @Override
+    public Boolean visitUnaryExpr(UnaryExpr u, List<FunctionDecl> arg) throws AsterixException {
+        return u.getExpr().accept(this, arg);
+    }
+
+    @Override
+    public Boolean visitUnionExpr(UnionExpr u, List<FunctionDecl> fds) throws AsterixException {
+        Pair<Boolean, ArrayList<Expression>> p = newExprList(u.getExprs(), fds);
+        u.setExprs(p.second);
+        return p.first;
+    }
+
+    @Override
+    public Boolean visitDistinctClause(DistinctClause dc, List<FunctionDecl> arg) throws AsterixException {
+        boolean changed = false;
+        for (Expression expr : dc.getDistinctByExpr()) {
+            changed = expr.accept(this, arg);
+        }
+        return changed;
+    }
+
+    @Override
+    public Boolean visitVariableExpr(VariableExpr v, List<FunctionDecl> arg) throws AsterixException {
+        return false;
+    }
+
+    @Override
+    public Boolean visitLiteralExpr(LiteralExpr l, List<FunctionDecl> arg) throws AsterixException {
+        return false;
+    }
+
+    private Pair<Boolean, Expression> inlineUdfsInExpr(Expression expr, List<FunctionDecl> arg) throws AsterixException {
+        if (expr.getKind() != Kind.CALL_EXPRESSION) {
+            boolean r = expr.accept(this, arg);
+            return new Pair<Boolean, Expression>(r, expr);
+        } else {
+            CallExpr f = (CallExpr) expr;
+            FunctionDecl implem = findFuncDeclaration(f.getFunctionSignature(), arg);
+            if (implem == null) {
+                boolean r = expr.accept(this, arg);
+                return new Pair<Boolean, Expression>(r, expr);
+            } else { // it's one of the functions we want to inline
+                List<Clause> clauses = new ArrayList<Clause>();
+                Iterator<VarIdentifier> paramIter = implem.getParamList().iterator();
+                // List<VariableExpr> effectiveArgs = new
+                // ArrayList<VariableExpr>(f.getExprList().size());
+                List<VariableSubstitution> subts = new ArrayList<VariableSubstitution>(f.getExprList().size());
+                for (Expression e : f.getExprList()) {
+                    VarIdentifier param = paramIter.next();
+                    // Obs: we could do smth about passing also literals, or let
+                    // variable inlining to take care of this.
+                    if (e.getKind() == Kind.VARIABLE_EXPRESSION) {
+                        subts.add(new VariableSubstitution(param, ((VariableExpr) e).getVar()));
+                    } else {
+                        VarIdentifier newV = context.newVariable();
+                        Pair<IAqlExpression, List<VariableSubstitution>> p1 = e.accept(cloneVisitor,
+                                new ArrayList<VariableSubstitution>());
+                        LetClause c = new LetClause(new VariableExpr(newV), (Expression) p1.first);
+                        clauses.add(c);
+                        subts.add(new VariableSubstitution(param, newV));
+                    }
+                }
+                Pair<IAqlExpression, List<VariableSubstitution>> p2 = implem.getFuncBody().accept(cloneVisitor, subts);
+                Expression resExpr;
+                if (clauses.isEmpty()) {
+                    resExpr = (Expression) p2.first;
+                } else {
+                    resExpr = new FLWOGRExpression(clauses, (Expression) p2.first);
+                }
+                return new Pair<Boolean, Expression>(true, resExpr);
+            }
+        }
+    }
+
+    private Pair<Boolean, ArrayList<Expression>> newExprList(List<Expression> exprList, List<FunctionDecl> fds)
+            throws AsterixException {
+        ArrayList<Expression> newList = new ArrayList<Expression>();
+        boolean changed = false;
+        for (Expression e : exprList) {
+            Pair<Boolean, Expression> p = inlineUdfsInExpr(e, fds);
+            newList.add(p.second);
+            if (p.first) {
+                changed = true;
+            }
+        }
+        return new Pair<Boolean, ArrayList<Expression>>(changed, newList);
+    }
+
+    private static FunctionDecl findFuncDeclaration(FunctionSignature fid, List<FunctionDecl> sequence) {
+        for (FunctionDecl f : sequence) {
+            if (f.getSignature().equals(fid)) {
+                return f;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Boolean visitCreateIndexStatement(CreateIndexStatement cis, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitDataverseDecl(DataverseDecl dv, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitDeleteStatement(DeleteStatement del, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitDropStatement(DropStatement del, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitDatasetDecl(DatasetDecl dd, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitInsertStatement(InsertStatement insert, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitLoadFromFileStatement(LoadFromFileStatement stmtLoad, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitNodegroupDecl(NodegroupDecl ngd, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitRecordTypeDefiniton(RecordTypeDefinition tre, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitSetStatement(SetStatement ss, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitTypeDecl(TypeDecl td, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitTypeReferenceExpression(TypeReferenceExpression tre, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitUpdateClause(UpdateClause del, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitUpdateStatement(UpdateStatement update, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitWriteFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitWriteStatement(WriteStatement ws, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitLoadFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitCreateDataverseStatement(CreateDataverseStatement del, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitIndexDropStatement(IndexDropStatement del, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitNodeGroupDropStatement(NodeGroupDropStatement del, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitDataverseDropStatement(DataverseDropStatement del, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitTypeDropStatement(TypeDropStatement del, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitControlFeedStatement(ControlFeedStatement del, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visit(CreateFunctionStatement cfs, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitFunctionDropStatement(FunctionDropStatement del, List<FunctionDecl> arg)
+            throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+
+    @Override
+    public Boolean visitBeginFeedStatement(BeginFeedStatement bf, List<FunctionDecl> arg) throws AsterixException {
+        // TODO Auto-generated method stub
+        return null;
+    }
+}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/VariableSubstitution.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/VariableSubstitution.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/VariableSubstitution.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/VariableSubstitution.java
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/util/FunctionUtils.java b/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/util/FunctionUtils.java
similarity index 100%
rename from asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/util/FunctionUtils.java
rename to asterix-aql/src/main/java/edu/uci/ics/asterix/aql/util/FunctionUtils.java
diff --git a/asterix/asterix-aql/src/main/javacc/AQL.html b/asterix-aql/src/main/javacc/AQL.html
similarity index 100%
rename from asterix/asterix-aql/src/main/javacc/AQL.html
rename to asterix-aql/src/main/javacc/AQL.html
diff --git a/asterix-aql/src/main/javacc/AQL.jj b/asterix-aql/src/main/javacc/AQL.jj
new file mode 100644
index 0000000..68e1497
--- /dev/null
+++ b/asterix-aql/src/main/javacc/AQL.jj
@@ -0,0 +1,2601 @@
+options {
+
+	  
+       STATIC = false;
+	
+}
+
+
+PARSER_BEGIN(AQLParser)
+
+package edu.uci.ics.asterix.aql.parser;
+
+import java.io.*;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Stack;
+
+import java.util.Map;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import edu.uci.ics.asterix.aql.literal.FloatLiteral;
+import edu.uci.ics.asterix.aql.literal.DoubleLiteral;
+import edu.uci.ics.asterix.aql.literal.FalseLiteral;
+import edu.uci.ics.asterix.aql.base.Literal;
+import edu.uci.ics.asterix.aql.literal.IntegerLiteral;
+import edu.uci.ics.asterix.aql.literal.LongIntegerLiteral;
+import edu.uci.ics.asterix.aql.literal.NullLiteral;
+import edu.uci.ics.asterix.aql.literal.StringLiteral;
+import edu.uci.ics.asterix.aql.literal.TrueLiteral;
+import edu.uci.ics.asterix.metadata.bootstrap.MetadataConstants;
+
+import edu.uci.ics.asterix.aql.base.*;
+import edu.uci.ics.asterix.aql.expression.*;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.aql.expression.visitor.AQLPrintVisitor;
+import edu.uci.ics.asterix.aql.expression.UnaryExpr.Sign;
+import edu.uci.ics.asterix.aql.base.Statement.Kind;
+import edu.uci.ics.asterix.aql.context.Scope;
+import edu.uci.ics.asterix.aql.context.RootScopeFactory;
+import edu.uci.ics.asterix.common.annotations.*;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.functions.AsterixFunction;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IndexedNLJoinExpressionAnnotation;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+
+
+
+
+public class AQLParser extends ScopeChecker {
+
+    // optimizer hints
+    private static final String HASH_GROUP_BY_HINT = "hash";
+    private static final String BROADCAST_JOIN_HINT = "bcast";
+    private static final String INDEXED_NESTED_LOOP_JOIN_HINT = "indexnl";
+    private static final String INMEMORY_HINT = "inmem";
+    private static final String VAL_FILE_HINT = "val-files";
+    private static final String VAL_FILE_SAME_INDEX_HINT = "val-file-same-idx";
+    private static final String INTERVAL_HINT = "interval";
+    private static final String COMPOSE_VAL_FILES_HINT = "compose-val-files";
+    private static final String INSERT_RAND_INT_HINT = "insert-rand-int";
+    private static final String LIST_VAL_FILE_HINT = "list-val-file";
+    private static final String LIST_HINT = "list";
+    private static final String DATETIME_BETWEEN_YEARS_HINT = "datetime-between-years";
+    private static final String DATE_BETWEEN_YEARS_HINT = "date-between-years";
+    private static final String DATETIME_ADD_RAND_HOURS_HINT = "datetime-add-rand-hours";
+    private static final String AUTO_HINT = "auto";   
+        
+    private static final String GEN_FIELDS_HINT = "gen-fields";   
+    
+    // data generator hints
+    private static final String DGEN_HINT = "dgen";
+   
+    private static String getHint(Token t) {
+       if (t.specialToken == null) {
+         return null;
+       }       
+       String s = t.specialToken.image;
+       int n = s.length();
+       if (n < 2) {
+         return null;
+       }  
+       return s.substring(1).trim();
+    }
+
+    public AQLParser(String s){
+		this(new StringReader(s));
+		super.setInput(s);
+	}
+	
+	public static void main(String args[]) throws ParseException, TokenMgrError, IOException, FileNotFoundException, AsterixException {
+			File file = new File(args[0]);
+			Reader fis = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
+		    AQLParser parser = new AQLParser(fis);
+		    List<Statement> st = parser.Statement();
+		    //st.accept(new AQLPrintVisitor(), 0);
+	}
+
+
+}
+
+PARSER_END(AQLParser)
+
+
+List<Statement> Statement() throws ParseException:
+{
+  scopeStack.push(RootScopeFactory.createRootScope(this));
+  List<Statement> decls = new ArrayList<Statement>();
+  Query query=null;
+}
+{
+    (
+      (
+        ( 
+          "use"
+            {
+              decls.add(DataverseDeclaration());
+            }           
+          | "declare" "function" { 
+                              decls.add(FunctionDeclaration()); 
+             }
+	  	   |  "create" (
+	  	   	  {
+                String hint = getHint(token);
+                boolean dgen = false;
+         	   	if (hint != null && hint.startsWith(DGEN_HINT)) {
+         	   	  dgen = true;
+         	   	}                  
+              } 
+              "type"     
+              	{ 
+                              decls.add(TypeDeclaration(dgen, hint)); 
+                 }
+              | "nodegroup" 
+              	{
+                              decls.add(NodegroupDeclaration());
+                }   
+              | "external" <DATASET>
+            	{   
+              		decls.add(DatasetDeclaration(DatasetType.EXTERNAL));
+            	}
+              | "feed" <DATASET>
+                {
+                   decls.add(DatasetDeclaration(DatasetType.FEED)); 	
+            	}
+              | <DATASET>
+          		{
+            		decls.add(DatasetDeclaration(DatasetType.INTERNAL));
+          		}
+              | "index" 
+              	{
+              				decls.add(CreateIndexStatement());
+                 }
+	          | "dataverse"
+          		{
+            		decls.add(CreateDataverseStatement());
+          		}
+          	  | "function"
+          	    {
+          	        decls.add(FunctionCreation());
+          	    }	
+            )        
+         	 | "load" {
+                       decls.add(LoadStatement());
+                   }  
+          	                    
+          	| "drop"
+			(
+          	<DATASET>
+          	{
+            		decls.add(DropStatement());
+          	}
+        	| "index"
+          	{
+            		decls.add(IndexDropStatement());
+          	}
+        	| "nodegroup"
+          	{
+            		decls.add(NodeGroupDropStatement());
+          	}
+        	| "type"
+          	{
+            		decls.add(TypeDropStatement());
+          	}
+        	| "dataverse"
+          	{
+            		decls.add(DataverseDropStatement());
+          	}
+          	| "function"
+          	{
+            		decls.add(FunctionDropStatement());
+          	}
+        	)
+          | "write" {
+                       decls.add(WriteStatement());
+                    }              
+          | "set" {
+                       decls.add(SetStatement());
+                    }                                                      
+	  	  | "insert" {
+		       decls.add(InsertStatement());
+			}
+          | "delete" {
+			decls.add(DeleteStatement());
+		    }
+          | "update" {
+	  		decls.add(UpdateStatement());		
+	  	    } 
+	  	  | "begin" "feed"  
+	  	      {
+                Pair<Identifier,Identifier> nameComponents = getDotSeparatedPair();
+                decls.add(new BeginFeedStatement(nameComponents.first, nameComponents.second, getVarCounter()));
+	  	      } ";"
+	  	      
+	  	  | "suspend" "feed"  
+	  	  	 {
+                decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.SUSPEND));
+             } ";"
+	  	   | "resume" "feed"   {
+                decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.RESUME));
+	  	   } ";"
+	  	   | "end" "feed"   {
+	  	        decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.END));
+	  	   } ";" 
+	  	   | "alter" "feed"  {
+      	        decls.add(AlterFeedDeclaration());
+           } ";"
+           
+           | (query = Query()) {
+               decls.add(query);
+           }
+           )*
+          //  (query = Query())?
+      )
+
+      <EOF>
+    )
+    {
+     return decls;  
+    }
+}
+
+InsertStatement InsertStatement() throws ParseException:
+{
+	Identifier dataverseName;
+	Identifier datasetName;
+	Pair<Identifier,Identifier> nameComponents = null;
+	Query query;
+}
+{
+   "into" <DATASET>
+   
+   {
+    nameComponents = getDotSeparatedPair();
+    dataverseName = nameComponents.first;
+    datasetName = nameComponents.second;
+   }
+    
+    query = Query() (";")?
+   {return new InsertStatement(dataverseName, datasetName, query,  getVarCounter());}
+}
+
+DeleteStatement DeleteStatement() throws ParseException:
+{
+	VariableExpr var = null;
+    Identifier dataverseName;
+    Identifier datasetName = null;
+	Expression condition = null;
+	Pair<Identifier, Identifier> nameComponents;
+}
+{
+   var = Variable() { getCurrentScope().addNewVarSymbolToScope(var.getVar());  }
+   "from" 
+   <DATASET> 
+   { 
+	  nameComponents  = getDotSeparatedPair();
+   }
+   ("where" condition = Expression())? (";")?
+   {return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition, getVarCounter()); }
+}
+
+UpdateStatement UpdateStatement() throws ParseException:
+{
+	VariableExpr vars;
+    Expression target;
+	Expression condition;
+	UpdateClause uc;
+ 	List<UpdateClause> ucs = new ArrayList<UpdateClause>();
+}
+{
+   vars = Variable()  "in" target = Expression()
+	"where" condition = Expression() 
+	<LEFTPAREN> (uc=UpdateClause() {ucs.add(uc); }  ("," uc=UpdateClause() {ucs.add(uc); } )*) <RIGHTPAREN> ";"
+   {return new UpdateStatement(vars, target, condition, ucs);}
+}
+
+
+
+UpdateClause UpdateClause() throws ParseException:
+{
+	Expression target = null;
+	Expression value = null ;	
+	InsertStatement is = null;
+	DeleteStatement ds = null;
+	UpdateStatement us = null;
+	Expression condition = null;
+	UpdateClause ifbranch = null;
+	UpdateClause elsebranch = null;
+}
+{
+   "set" target = Expression() ":=" value = Expression() 
+   | "insert" is = InsertStatement()
+   | "delete" ds = DeleteStatement()
+   | "update" us = UpdateStatement()
+   | "if" <LEFTPAREN> condition = Expression() <RIGHTPAREN> "then" ifbranch = UpdateClause() [LOOKAHEAD(1) "else" elsebranch = UpdateClause()] 
+   {return new UpdateClause(target, value, is, ds, us, condition, ifbranch, elsebranch);}
+}
+
+
+Statement SetStatement() throws ParseException:
+{
+  String pn = null;
+  Statement stmt = null;
+}
+{
+  <IDENTIFIER>  { pn = token.image; }  
+  <STRING_LITERAL>
+    { String pv = removeQuotesAndEscapes(token.image); }
+    ";"
+  {
+    return new SetStatement(pn, pv);
+  }
+}
+
+Statement WriteStatement() throws ParseException:
+{
+  Identifier nodeName = null;
+  String fileName = null;
+  Statement stmt = null;
+  Query query;
+  String writerClass = null;
+  Pair<Identifier,Identifier> nameComponents = null;
+}
+{
+  (( "output" "to" 
+    <IDENTIFIER> { nodeName = new Identifier(token.image); } 
+    ":" <STRING_LITERAL> { fileName = removeQuotesAndEscapes(token.image); }
+    ( "using" <STRING_LITERAL> { writerClass = removeQuotesAndEscapes(token.image); } )?
+         {                  
+             stmt = new WriteStatement(nodeName, fileName, writerClass);         
+         } )
+    |
+   ( "into" 
+     <DATASET> 
+     
+      {
+       nameComponents = getDotSeparatedPair();
+      }
+     
+     <LEFTPAREN> query = Query() <RIGHTPAREN>
+     {
+        stmt = new WriteFromQueryResultStatement(nameComponents.first, nameComponents.second, query, getVarCounter());
+     } ))  
+        
+    ";"
+    {
+      return stmt;
+    }
+}
+
+CreateIndexStatement CreateIndexStatement() throws ParseException:
+{
+  CreateIndexStatement cis = new CreateIndexStatement();
+  Pair<Identifier,Identifier> nameComponents = null;
+}
+{
+  <IDENTIFIER> { cis.setIndexName(new Identifier(token.image)); }
+  (
+    "if not exists"
+    {
+      cis.setIfNotExists(true);
+    }
+  )?
+  "on"  
+  
+   {
+   nameComponents = getDotSeparatedPair();
+   cis.setDataverseName(nameComponents.first);
+   cis.setDatasetName(nameComponents.second);
+   }
+  
+  <LEFTPAREN>
+  	( <IDENTIFIER> { cis.addFieldExpr(token.image); } )
+  	("," <IDENTIFIER> { cis.addFieldExpr(token.image); })*
+  <RIGHTPAREN>
+    ("type"
+  		("btree" { cis.setIndexType(IndexType.BTREE); }  		
+  		| "rtree" { cis.setIndexType(IndexType.RTREE); }
+  		| "keyword" { cis.setIndexType(IndexType.WORD_INVIX); }
+  		| "fuzzy keyword" { cis.setIndexType(IndexType.FUZZY_WORD_INVIX); }
+  		| "ngram"
+  		  <LEFTPAREN>
+  		  (<INTEGER_LITERAL>
+  		    {
+  		      cis.setIndexType(IndexType.NGRAM_INVIX);
+  		      cis.setGramLength(Integer.valueOf(token.image));
+  		    }
+  		  )
+  		  <RIGHTPAREN>
+  		| "fuzzy ngram"
+  		  <LEFTPAREN>
+  		  (<INTEGER_LITERAL>
+  		    {
+  		      cis.setIndexType(IndexType.FUZZY_NGRAM_INVIX);
+  		      cis.setGramLength(Integer.valueOf(token.image));
+  		    }
+  		  )
+  		  <RIGHTPAREN>
+		)
+  	";"  	
+  	| ";"
+    )
+   {
+     return cis;
+   }
+}
+
+DataverseDecl DataverseDeclaration() throws ParseException:
+{
+  Identifier dvName = null;  
+}
+{
+  "dataverse" <IDENTIFIER> { defaultDataverse = token.image;}
+  ";"
+  {
+    return new DataverseDecl(new Identifier(defaultDataverse));
+  }
+}
+
+DropStatement DropStatement() throws ParseException :
+{
+  Identifier dataverseName = null;
+  Identifier datasetName = null;
+  boolean ifExists = false;
+  Pair<Identifier,Identifier> nameComponents=null;
+}
+{
+   {
+   nameComponents = getDotSeparatedPair();
+   dataverseName = nameComponents.first;
+   datasetName = nameComponents.second;
+   }
+   
+   
+  (
+    "if exists"
+    {
+      ifExists = true;
+    }
+  )? ";"
+  {
+    return new DropStatement(dataverseName, datasetName, ifExists);
+  }
+}
+
+IndexDropStatement IndexDropStatement() throws ParseException :
+{
+  Identifier dataverseName = null;
+  Identifier datasetName = null;
+  Identifier indexName = null;
+  boolean ifExists = false;
+  Triple<Identifier,Identifier,Identifier> nameComponents=null;
+}
+{
+  
+  {
+   nameComponents = getDotSeparatedTriple();
+   dataverseName = nameComponents.first;
+   datasetName = nameComponents.second;
+   indexName = nameComponents.third;
+   }
+  
+  (
+    "if exists"
+    {
+      ifExists = true;
+    }
+  )? ";"
+  {
+    return new IndexDropStatement(dataverseName, datasetName, indexName, ifExists);
+  }
+}
+
+NodeGroupDropStatement NodeGroupDropStatement() throws ParseException :
+{
+  Identifier groupName = null;
+  boolean ifExists = false;
+}
+{
+  < IDENTIFIER >
+  {
+    groupName = new Identifier(token.image);
+  }
+  (
+    "if exists"
+    {
+      ifExists = true;
+    }
+  )? ";"
+  {
+    return new NodeGroupDropStatement(groupName, ifExists);
+  }
+}
+
+TypeDropStatement TypeDropStatement() throws ParseException :
+{
+  Identifier dataverseName = null;
+  Identifier typeName = null;
+  boolean ifExists = false;
+  Pair<Identifier,Identifier> nameComponents;
+}
+{
+  {
+    nameComponents = getDotSeparatedPair();
+    dataverseName = nameComponents.first == null ? new Identifier(defaultDataverse) : nameComponents.first;
+    typeName = nameComponents.second;
+  }
+  (
+    "if exists"
+    {
+      ifExists = true;
+    }
+  )? ";"
+  {
+    return new TypeDropStatement(dataverseName, typeName, ifExists);
+  }
+}
+
+DataverseDropStatement DataverseDropStatement() throws ParseException :
+{
+  Identifier dataverseName = null;
+  boolean ifExists = false;
+}
+{
+  < IDENTIFIER >
+  {
+    dataverseName = new Identifier(token.image);
+  }
+  (
+    "if exists"
+    {
+      ifExists = true;
+    }
+  )? ";"
+  {
+    return new DataverseDropStatement(dataverseName, ifExists);
+  }
+}
+
+CreateDataverseStatement CreateDataverseStatement() throws ParseException :
+{
+  Identifier dvName = null;
+  boolean ifNotExists = false;
+  String format = null;
+}
+{
+  < IDENTIFIER >
+  {
+    dvName = new Identifier(token.image);
+  }
+  (
+    "if not exists"
+    {
+      ifNotExists = true;
+    }
+  )?
+  (
+    "with format" < STRING_LITERAL >
+    {
+      format = removeQuotesAndEscapes(token.image);
+    }
+  )?
+  ";"
+  {
+    return new CreateDataverseStatement(dvName, format, ifNotExists);
+  }
+}
+
+
+FunctionDropStatement FunctionDropStatement() throws ParseException :
+{
+  String dataverse;
+  String functionName;
+  int arity=0;
+  boolean ifExists = false;
+  Pair<Identifier, Identifier> nameComponents=null;
+}
+{
+  {
+     nameComponents = getDotSeparatedPair();
+     dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
+     functionName = nameComponents.second.getValue(); 
+  }
+  
+   "@"
+  <INTEGER_LITERAL> 
+  {  
+     Token t= getToken(0);
+	 arity = new Integer(t.image);
+  	 if( arity < 0 && arity != FunctionIdentifier.VARARGS){
+  	 	throw new ParseException(" invalid arity:" + arity);
+  	 } 
+  }
+  
+  (
+    "if exists"
+    {
+      ifExists = true;
+    }
+  )? ";"
+  {
+    return new FunctionDropStatement(new FunctionSignature(dataverse, functionName, arity), ifExists);
+  }
+}
+
+
+LoadFromFileStatement LoadStatement() throws ParseException:
+{
+  Identifier dataverseName = null;
+  Identifier datasetName = null;
+  boolean alreadySorted = false;
+  String adapterName;
+  Map<String,String> properties;
+  Pair<Identifier,Identifier> nameComponents = null;
+}
+{
+   <DATASET> 
+   {
+   nameComponents = getDotSeparatedPair();
+   dataverseName = nameComponents.first;
+   datasetName = nameComponents.second;
+   }
+   
+   "using"
+  
+    {
+    	adapterName = getAdapterName();
+    }
+   
+    {
+      properties = getConfiguration();
+    }
+  
+    ("pre-sorted" 
+      {  alreadySorted = true; }
+    )?
+        
+  ";"
+  {
+     return new LoadFromFileStatement(dataverseName, datasetName, adapterName, properties, alreadySorted);
+  }   
+}
+
+
+String getAdapterName() throws ParseException :
+{
+	String adapterName = null;
+}
+{
+    ( 
+      <IDENTIFIER> {
+     	adapterName = (new Identifier(token.image)).getValue();; 
+      }
+      | 
+      <STRING_LITERAL>
+      {
+        adapterName = removeQuotesAndEscapes(token.image);
+      }
+    )
+    {
+	return adapterName;
+	}
+}
+
+
+DatasetDecl DatasetDeclaration(DatasetType datasetType) throws ParseException :
+{
+  DatasetDecl dd = null;
+  Identifier datasetName = null;
+  Identifier dataverseName = null;
+  Identifier itemDataverseName = null;
+  Identifier itemTypeName = null;
+  String nameComponentFirst = null;
+  String nameComponentSecond = null;
+  boolean ifNotExists = false;
+  IDatasetDetailsDecl datasetDetails = null;
+  Pair<Identifier,Identifier> nameComponents = null;
+  Map<String,String> hints = new HashMap<String,String>();	
+}
+{
+  {
+   nameComponents = getDotSeparatedPair();
+   dataverseName = nameComponents.first;
+   datasetName = nameComponents.second;
+   }
+    
+  (
+    "if not exists"
+    {
+      ifNotExists = true;
+    }
+  )?
+  (
+  	< LEFTPAREN > <IDENTIFIER>
+  	{
+    	itemTypeName = new Identifier(token.image);
+  	}
+  	< RIGHTPAREN >
+  )
+  {
+  	  if(datasetType == DatasetType.INTERNAL) {
+      	datasetDetails = InternalDatasetDeclaration();
+      }
+      else if(datasetType == DatasetType.EXTERNAL) {
+      	datasetDetails = ExternalDatasetDeclaration();
+      }
+      else if(datasetType == DatasetType.FEED) {
+      	datasetDetails = FeedDatasetDeclaration();
+      }
+  }
+  
+  (
+  "hints"
+  {
+      initProperties(hints);
+  }
+  )?
+   ";"
+ 
+  {
+   dd = new DatasetDecl(dataverseName, datasetName, itemTypeName, hints, datasetType, datasetDetails,ifNotExists);
+   return dd;
+  }
+}
+
+InternalDetailsDecl InternalDatasetDeclaration() throws ParseException :
+{
+    InternalDetailsDecl idd = null;
+    List<String> primaryKeyFields = new ArrayList<String>();
+    Identifier nodeGroupName=null;
+}
+{
+  (
+    {
+  	  primaryKeyFields = getPrimaryKeyFields();
+    }
+  )
+  
+  (
+  "on" < IDENTIFIER >
+    {
+        nodeGroupName = new Identifier(token.image);
+    }
+  )?
+  
+  {
+    idd = new InternalDetailsDecl(nodeGroupName, primaryKeyFields);
+    return idd;
+  }
+}
+
+ExternalDetailsDecl ExternalDatasetDeclaration() throws ParseException :
+{
+  ExternalDetailsDecl edd = null;
+  String adapterName = null;
+  Map < String, String > properties;
+}
+{
+  {
+    edd = new ExternalDetailsDecl();
+  }
+ 
+    "using"
+    {
+    	adapterName = getAdapterName();
+    }
+
+    {
+      properties = getConfiguration();
+    }
+
+    {
+    	  edd = new ExternalDetailsDecl();
+		  edd.setAdapter(adapterName);
+   		  edd.setProperties(properties);
+    } 
+ 
+  {
+    return edd;
+  }
+}
+
+FeedDetailsDecl FeedDatasetDeclaration() throws ParseException :
+{
+    FeedDetailsDecl fdd = null;
+    String adapterName = null;
+    Map < String, String > properties;
+	Pair<Identifier,Identifier> nameComponents;
+	List<String> primaryKeyFields = new ArrayList<String>();
+    Identifier nodeGroupName=null;
+    FunctionSignature appliedFunction=null;
+	String dataverse;
+	String functionName;
+	int arity;
+}
+{
+   "using"
+    {
+    	adapterName = getAdapterName();
+    }
+
+    {
+      properties = getConfiguration();
+    }
+  
+  ("apply" "function" 
+  {
+  nameComponents = getDotSeparatedPair();
+  dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
+  functionName = nameComponents.second.getValue();
+  }
+  ("@" <INTEGER_LITERAL> 
+     {
+        arity = Integer.parseInt(token.image);
+     }
+  )
+  
+  {
+    appliedFunction = new FunctionSignature(dataverse, functionName, arity);
+  }   
+  )?
+  
+  (
+    {
+  	  primaryKeyFields  = getPrimaryKeyFields();
+    }
+  )
+  
+  (
+  "on" < IDENTIFIER >
+  {
+    	nodeGroupName = new Identifier(token.image);
+  }
+  )?
+  
+  {
+    fdd = new FeedDetailsDecl(adapterName, properties, appliedFunction, nodeGroupName, primaryKeyFields);
+    return fdd;
+  }
+}
+
+List<String> getPrimaryKeyFields()  throws ParseException :
+{
+	List<String> primaryKeyFields = new ArrayList<String>();
+}
+{
+
+  "primary" "key"
+  < IDENTIFIER >
+  {
+    	 primaryKeyFields.add(token.image);
+  }
+  (
+    "," < IDENTIFIER >
+    {
+    	 primaryKeyFields.add(token.image);
+    }
+  )*
+  {
+   	return primaryKeyFields;
+  }
+  
+}
+
+
+
+
+
+ControlFeedStatement ControlFeedDeclaration(ControlFeedStatement.OperationType operationType) throws ParseException :
+{
+  Pair<Identifier,Identifier> nameComponents = null;
+}
+{
+    {
+    nameComponents = getDotSeparatedPair();
+    return new ControlFeedStatement(operationType, nameComponents.first, nameComponents.second);
+    }
+}
+
+
+ControlFeedStatement AlterFeedDeclaration() throws ParseException :
+{
+    Pair<Identifier,Identifier> nameComponents = null;
+    Map < String, String > configuration = new HashMap < String, String > ();
+}
+{
+   {
+    nameComponents = getDotSeparatedPair();
+   }
+
+   "set"
+   { 
+   configuration = getConfiguration();
+   }
+  
+  {
+    return new ControlFeedStatement(ControlFeedStatement.OperationType.ALTER, nameComponents.first, nameComponents.second, configuration);
+  }
+}
+
+Map<String,String> getConfiguration()  throws ParseException :
+{
+	Map<String,String> configuration = new LinkedHashMap<String,String>();
+	String key;
+	String value;
+}
+{
+
+<LEFTPAREN>
+    (
+      (
+        <LEFTPAREN>
+        (
+          <STRING_LITERAL>
+          {
+            key = removeQuotesAndEscapes(token.image);
+          }
+          "=" <STRING_LITERAL>
+          {
+            value = removeQuotesAndEscapes(token.image);
+          }
+        )
+        <RIGHTPAREN>
+        {
+          configuration.put(key, value);
+        }
+      )
+      (
+        "," <LEFTPAREN>
+        (
+          <STRING_LITERAL>
+          {
+            key = removeQuotesAndEscapes(token.image);
+          }
+          "=" <STRING_LITERAL>
+          {
+            value = removeQuotesAndEscapes(token.image);
+          }
+        )
+        <RIGHTPAREN>
+        {
+          configuration.put(key, value);
+        }
+      )*
+    )?
+    <RIGHTPAREN>
+     {
+     	return configuration;
+     }
+}
+
+void initProperties(Map<String,String> properties)  throws ParseException :
+{
+	String key;
+	String value;
+}
+{
+    (
+      <LEFTPAREN>
+        (
+          <IDENTIFIER>
+          {
+            key = (new Identifier(token.image)).getValue();
+          }
+          "=" 
+          (
+            (<STRING_LITERAL>
+             {
+              value = removeQuotesAndEscapes(token.image);
+             }
+            ) |
+            (<INTEGER_LITERAL>
+             {
+             try{
+              value = "" + Long.valueOf(token.image);
+              } catch (NumberFormatException nfe){
+                  throw new ParseException("inapproriate value: " + token.image); 
+              }
+             } 
+            )
+          )
+        {
+          properties.put(key.toUpperCase(), value);
+        }
+       ( 
+        "," 
+        (
+          <IDENTIFIER>
+          {
+            key = (new Identifier(token.image)).getValue();
+          }
+          "=" 
+          (
+           (<STRING_LITERAL>
+            {
+              value = removeQuotesAndEscapes(token.image);
+            }
+           ) |
+           (<INTEGER_LITERAL>
+            {
+              try{
+                value = "" + Long.valueOf(token.image);
+              } catch (NumberFormatException nfe){
+              	throw new ParseException("inapproriate value: " + token.image); 
+              }
+            } 
+           )
+          ) 
+        )
+        {
+          properties.put(key.toUpperCase(), value);
+        }
+        
+       )*
+      )
+       <RIGHTPAREN>
+    )?
+}
+
+
+
+NodegroupDecl NodegroupDeclaration() throws ParseException :
+{
+  Identifier name = null;
+  List < Identifier > ncNames = new ArrayList < Identifier > ();
+  boolean ifNotExists = false;
+}
+{
+  < IDENTIFIER >
+  {
+    name = new Identifier(token.image);
+  }
+  (
+    "if not exists"
+    { 
+      ifNotExists = true;
+    }
+  )?
+  "on" < IDENTIFIER >
+  {
+    ncNames.add(new Identifier(token.image));
+  }
+  (
+    "," < IDENTIFIER >
+    {
+      ncNames.add(new Identifier(token.image));
+    }
+  )*
+  ";"
+  {
+    return new NodegroupDecl(name, ncNames, ifNotExists);
+  }
+}
+
+
+TypeDecl TypeDeclaration(boolean dgen, String hint) throws ParseException:
+{
+  Identifier dataverse;
+  Identifier ident;
+  TypeExpression typeExpr;
+  boolean ifNotExists = false;
+  Pair<Identifier,Identifier> nameComponents=null;	
+}
+{
+  {
+    nameComponents = getDotSeparatedPair();
+    dataverse = nameComponents.first;
+    ident = nameComponents.second; 
+  }
+  
+  (
+    "if not exists"
+    {
+      ifNotExists = true;
+    }
+  )?
+  "as"
+  ( typeExpr = TypeExpr() )
+  (";")?
+  {
+    long numValues = -1;
+    String filename = null;
+    if (dgen) {       
+      String splits[] = hint.split(" +");
+      if (splits.length != 3) {
+        throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");
+      } 
+      filename = splits[1];
+      numValues = Long.parseLong(splits[2]);
+    }  
+    TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues);
+    return new TypeDecl(dataverse, ident, typeExpr, tddg, ifNotExists);
+  }
+}
+
+TypeExpression TypeExpr() throws ParseException:
+{
+  TypeExpression typeExpr = null;
+}
+{
+  (
+      typeExpr = RecordTypeDef()
+    | typeExpr = TypeReference()
+    | typeExpr = OrderedListTypeDef()
+    | typeExpr = UnorderedListTypeDef()  
+  )  
+  {
+    return typeExpr;
+  }
+}
+
+RecordTypeDefinition RecordTypeDef() throws ParseException:
+{
+  RecordTypeDefinition recType = new RecordTypeDefinition();
+  RecordTypeDefinition.RecordKind recordKind = null; 
+}
+{
+  ( "closed" { recordKind = RecordTypeDefinition.RecordKind.CLOSED; } 
+    | "open" { recordKind = RecordTypeDefinition.RecordKind.OPEN; } )?
+   "{"
+    {
+      String hint = getHint(token);
+      if (hint != null) { 
+        String splits[] = hint.split(" +");
+        if (splits[0].equals(GEN_FIELDS_HINT)) {
+          if (splits.length != 5) {
+            throw new ParseException("Expecting: /*+ gen-fields <type> <min> <max> <prefix>*/");
+          }
+          if (!splits[1].equals("int")) {
+            throw new ParseException("The only supported type for gen-fields is int.");
+          } 
+          UndeclaredFieldsDataGen ufdg = new UndeclaredFieldsDataGen(UndeclaredFieldsDataGen.Type.INT, 
+             Integer.parseInt(splits[2]), Integer.parseInt(splits[3]), splits[4]);
+          recType.setUndeclaredFieldsDataGen(ufdg);   
+        }
+      }  
+      
+    }
+		( 
+		  RecordField(recType)
+		  ( ","  RecordField(recType) )*
+		)?
+   "}"
+   {
+      if (recordKind == null) {
+        recordKind = RecordTypeDefinition.RecordKind.OPEN;
+      }
+      recType.setRecordKind(recordKind);
+      return recType;
+   } 
+}
+
+void RecordField(RecordTypeDefinition recType) throws ParseException:
+{
+        String fieldName;
+        TypeExpression type = null; 
+        boolean nullable = false;
+}
+{
+      <IDENTIFIER>
+      	{
+	     Token t = getToken(0);
+	     fieldName = t.toString();	     	     
+         String hint = getHint(t);
+         IRecordFieldDataGen rfdg = null;
+         if (hint != null) { 
+           String splits[] = hint.split(" +");
+           if (splits[0].equals(VAL_FILE_HINT)) { 
+             File[] valFiles = new File[splits.length - 1];
+             for (int k=1; k<splits.length; k++) {
+               valFiles[k-1] = new File(splits[k]);
+             } 
+             rfdg = new FieldValFileDataGen(valFiles);
+           } else if (splits[0].equals(VAL_FILE_SAME_INDEX_HINT)) {
+             rfdg = new FieldValFileSameIndexDataGen(new File(splits[1]), splits[2]);
+           } else if (splits[0].equals(LIST_VAL_FILE_HINT)) {
+             rfdg = new ListValFileDataGen(new File(splits[1]), Integer.parseInt(splits[2]), Integer.parseInt(splits[3]));
+           } else if (splits[0].equals(LIST_HINT)) {
+             rfdg = new ListDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]));
+           } else if (splits[0].equals(INTERVAL_HINT)) {
+             FieldIntervalDataGen.ValueType vt;
+             if (splits[1].equals("int")) {
+               vt = FieldIntervalDataGen.ValueType.INT;
+             } else if (splits[1].equals("long")) {
+               vt = FieldIntervalDataGen.ValueType.LONG;
+             } else if (splits[1].equals("float")) {
+               vt = FieldIntervalDataGen.ValueType.FLOAT;
+             } else if (splits[1].equals("double")) {
+               vt = FieldIntervalDataGen.ValueType.DOUBLE;
+             } else {
+               throw new ParseException("Unknown type for interval data gen: " + splits[1]);
+             }
+             rfdg = new FieldIntervalDataGen(vt, splits[2], splits[3]); 
+           } else if (splits[0].equals(INSERT_RAND_INT_HINT)) {
+             rfdg = new InsertRandIntDataGen(splits[1], splits[2]);
+           } else if (splits[0].equals(DATE_BETWEEN_YEARS_HINT)) {
+             rfdg = new DateBetweenYearsDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]));
+           } else if (splits[0].equals(DATETIME_BETWEEN_YEARS_HINT)) {
+             rfdg = new DatetimeBetweenYearsDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]));
+           } else if (splits[0].equals(DATETIME_ADD_RAND_HOURS_HINT)) {
+             rfdg = new DatetimeAddRandHoursDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]), splits[3]);
+           } else if (splits[0].equals(AUTO_HINT)) {
+              rfdg = new AutoDataGen(splits[1]);
+           }
+         }
+	    }
+	  ":"
+	  ( type =  TypeExpr() )
+	  ("?" { nullable = true; } )?
+	  {
+	     recType.addField(fieldName, type, nullable, rfdg);
+	  }   
+}
+
+TypeReferenceExpression TypeReference() throws ParseException:
+{}
+{
+ <IDENTIFIER>
+ {
+     Token t = getToken(0);
+     Identifier id = new Identifier(t.toString());
+     return new TypeReferenceExpression(id);
+ }
+}
+
+OrderedListTypeDefinition OrderedListTypeDef() throws ParseException:
+{  
+  TypeExpression type = null;
+}
+{
+  "["
+    ( type =  TypeExpr() )
+  "]"
+  {
+    return new OrderedListTypeDefinition(type);
+  }
+}
+
+
+UnorderedListTypeDefinition UnorderedListTypeDef() throws ParseException:
+{  
+  TypeExpression type = null;
+}
+{
+  "{{"
+    ( type =  TypeExpr() )
+  "}}"
+  {
+    return new UnorderedListTypeDefinition(type);
+  }
+}
+
+Pair<Identifier,Identifier> getDotSeparatedPair() throws ParseException:
+{
+ Identifier first = null;
+ Identifier second = null;
+}
+{
+  < IDENTIFIER >
+  {
+    first = new Identifier(token.image);
+  } 
+  ("." <IDENTIFIER>
+  {
+    second = new Identifier(token.image);
+  }
+  )?
+  
+  {
+   if(second == null){
+   	second = first;
+   	first = null;
+   } 
+   
+   return new Pair<Identifier,Identifier>(first,second);
+  }  
+}  
+  
+Triple<Identifier,Identifier,Identifier> getDotSeparatedTriple() throws ParseException:
+{
+ Identifier first = null;
+ Identifier second = null;
+ Identifier third = null;
+}
+{
+  < IDENTIFIER >
+  {
+    first = new Identifier(token.image);
+  } 
+  "." <IDENTIFIER>
+  {
+    second = new Identifier(token.image);
+  }
+  (
+  "." <IDENTIFIER>
+  {
+    third = new Identifier(token.image);
+  }
+  )?
+  
+  {
+   if(third == null){
+   	third  = second;
+   	second = first;
+   	first = null;
+   } 
+   
+   return new Triple<Identifier,Identifier,Identifier>(first,second,third);
+  }  
+}  
+
+
+  
+
+FunctionDecl FunctionDeclaration() throws ParseException:
+{
+  FunctionDecl funcDecl;
+  FunctionSignature signature;
+  String functionName;
+  int arity = 0;
+  List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
+  Expression funcBody;
+  VarIdentifier var = null;
+  createNewScope();
+}
+{
+
+    <IDENTIFIER>
+	{
+	  Token t = getToken(0);
+	  functionName = t.toString();
+	}
+    <LEFTPAREN> (<VARIABLE>
+    {
+      var = new VarIdentifier();
+      var.setValue(getToken(0).toString());
+      paramList.add(var);
+      getCurrentScope().addNewVarSymbolToScope(var);
+      arity++;
+    }
+    ("," <VARIABLE>
+    {
+      var = new VarIdentifier();
+      var.setValue(getToken(0).toString());
+      paramList.add(var);
+      getCurrentScope().addNewVarSymbolToScope(var);
+      arity++;
+    })*)? <RIGHTPAREN> "{" funcBody = Expression() "}"
+    (";")?
+    {
+      signature = new FunctionSignature(defaultDataverse, functionName, arity);
+      getCurrentScope().addFunctionDescriptor(signature, false);
+      funcDecl = new FunctionDecl(signature, paramList, funcBody);
+      return funcDecl;
+    }
+}
+
+CreateFunctionStatement FunctionCreation() throws ParseException:
+{
+  CreateFunctionStatement cfs = null;
+  FunctionSignature signature;
+  String dataverse;
+  String functionName;
+  boolean ifNotExists = false;
+  List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
+  String functionBody;
+  VarIdentifier var = null;
+  createNewScope();
+  Expression functionBodyExpr;
+  Token beginPos;
+  Token endPos;
+  Pair<Identifier,Identifier> nameComponents=null;
+}
+{
+    {
+      nameComponents = getDotSeparatedPair();
+   	  dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
+   	  functionName= nameComponents.second.getValue();
+	}
+	
+	(
+      "if not exists"
+       {
+         ifNotExists = true;
+       }
+    )?
+	
+    <LEFTPAREN> (<VARIABLE>
+    {
+      var = new VarIdentifier();
+      var.setValue(getToken(0).toString());
+      paramList.add(var);
+      getCurrentScope().addNewVarSymbolToScope(var);
+    }
+    ("," <VARIABLE>
+    {
+      var = new VarIdentifier();
+      var.setValue(getToken(0).toString());
+      paramList.add(var);
+      getCurrentScope().addNewVarSymbolToScope(var);
+    })*)? <RIGHTPAREN>  "{"
+          {
+          beginPos = getToken(0);
+          } 
+          functionBodyExpr = Expression() 
+          "}" 
+          {
+            endPos = getToken(0);
+            functionBody = extractFragment(beginPos.beginLine, beginPos.beginColumn, endPos.beginLine, endPos.beginColumn);
+          }
+          (";")?
+    {
+      signature = new FunctionSignature(dataverse, functionName, paramList.size());
+      getCurrentScope().addFunctionDescriptor(signature, false);
+      cfs = new CreateFunctionStatement(signature, paramList, functionBody, ifNotExists);
+      return cfs;
+    }
+}
+
+
+
+Query Query()throws ParseException:
+{
+  Query query = new Query();
+  Expression expr;
+}
+{
+    expr = Expression()
+    (";")?
+    {
+      query.setBody(expr);
+      query.setVarCounter(getVarCounter());
+      return query;
+    }
+     
+}
+
+
+
+Expression Expression():
+{
+  Expression expr = null;
+  Expression exprP = null;
+}
+{
+(
+  
+//OperatorExpr | IfThenElse | FLWOGRExpression | QuantifiedExpression
+    expr = OperatorExpr()
+    | expr = IfThenElse()
+    | expr = FLWOGR()
+    | expr = QuantifiedExpression()
+   
+
+)
+	{
+	  return (exprP==null) ? expr : exprP;
+	}
+}
+
+
+
+Expression OperatorExpr()throws ParseException:
+{
+  OperatorExpr op = null;
+  Expression operand = null;
+}
+{
+	operand = AndExpr()
+	(
+	
+	  "or"
+  	{
+  	  if (op == null) {
+  	    op = new OperatorExpr();
+  	    op.addOperand(operand);
+	    op.setCurrentop(true);  	      	     
+  	  }  
+  	  Token t = getToken(0);
+      op.addOperator(t.toString());
+	}
+
+	operand = AndExpr()
+	{
+	  op.addOperand(operand);
+	}
+
+	)*
+	
+	{
+	  return op==null? operand: op;
+	}
+}
+
+Expression AndExpr()throws ParseException:
+{
+  OperatorExpr op = null;
+  Expression operand = null;
+}
+{
+	operand = RelExpr()
+	(
+	
+	  "and"
+  	{
+  	  if (op == null) {
+  	    op = new OperatorExpr();
+  	    op.addOperand(operand);
+	    op.setCurrentop(true);  	      	     
+  	  }  
+  	  Token t = getToken(0);
+      op.addOperator(t.toString());
+	}
+
+	operand = RelExpr()
+	{
+	  op.addOperand(operand);
+	}
+
+	)*
+	
+	{
+	  return op==null? operand: op;
+	}
+}
+
+
+
+Expression RelExpr()throws ParseException:
+{
+  OperatorExpr op = null;
+  Expression operand = null;
+  boolean broadcast = false;
+  IExpressionAnnotation annotation = null;
+}
+{
+    operand = AddExpr()
+    { 
+      if (operand instanceof VariableExpr) {        
+        String hint = getHint(token);        
+        if (hint != null && hint.equals(BROADCAST_JOIN_HINT)) {
+          broadcast = true;
+        }
+      }
+    } 
+
+    (
+      LOOKAHEAD(2)( "<" | ">" | "<=" | ">=" | "=" | "!=" |"~=")
+  	  {
+  	    String mhint = getHint(token);
+  	    if (mhint != null && mhint.equals(INDEXED_NESTED_LOOP_JOIN_HINT)) {
+          annotation = IndexedNLJoinExpressionAnnotation.INSTANCE;
+        }
+  	    if (op == null) {
+  	      op = new OperatorExpr();
+  	      op.addOperand(operand, broadcast);
+          op.setCurrentop(true);
+          broadcast = false;
+  	    }   
+  	    Token t = getToken(0);
+        op.addOperator(t.toString());
+	  }
+	  
+ 	  operand = AddExpr()
+	  {
+         broadcast = false;	     
+         if (operand instanceof VariableExpr) {
+           String hint = getHint(token);        
+           if (hint != null && hint.equals(BROADCAST_JOIN_HINT)) {
+             broadcast = true;
+           }
+         }
+         op.addOperand(operand, broadcast);
+      } 
+    )?
+ 	
+ 	{
+ 	  if (annotation != null) {
+ 	    op.addHint(annotation);
+ 	  }
+ 	  return op==null? operand: op;
+ 	}
+}
+
+Expression AddExpr()throws ParseException:
+{
+  OperatorExpr op = null;
+  Expression operand = null;  
+}
+{
+	operand = MultExpr()
+
+	( ("+" | "-")
+  	{
+  	  if (op == null) {
+  	    op = new OperatorExpr();
+        op.addOperand(operand);  	    
+        op.setCurrentop(true);        
+  	  } 
+  	  Token t = getToken(0);
+	  ((OperatorExpr)op).addOperator(t.toString());
+	}
+
+	operand = MultExpr()
+	{
+	  op.addOperand(operand);
+	}
+	)*
+	
+	{
+ 	  return op==null? operand: op;
+ 	}
+}
+
+Expression MultExpr()throws ParseException:
+{
+  OperatorExpr op = null;
+  Expression operand = null;
+}
+{
+	operand = UnionExpr()
+
+	(( "*" | "/" | "%" | <CARET> | "idiv")
+  	{
+  	  if (op == null) {
+  	    op = new OperatorExpr();
+        op.addOperand(operand);
+        op.setCurrentop(true);          	    
+  	  } 
+  	  Token t = getToken(0);
+	  op.addOperator(t.toString());
+	}
+	operand = UnionExpr()
+	{
+	   op.addOperand(operand);
+	}
+	)*
+	
+ 	{
+ 	  return op==null?operand:op;
+ 	}	
+}
+
+Expression UnionExpr() throws ParseException:
+{
+    UnionExpr union = null;
+    Expression operand1 = null;
+    Expression operand2 = null;
+}
+{
+   operand1 = UnaryExpr() 
+   ("union" 
+       (operand2 = UnaryExpr()) {
+          if (union == null) {
+             union = new UnionExpr();
+             union.addExpr(operand1); 
+          }
+          union.addExpr(operand2);   
+       } )*
+   {
+     return (union == null)? operand1: union;
+   }
+}
+
+Expression UnaryExpr() throws ParseException:
+{
+	Expression uexpr = null;
+	Expression expr = null;
+}
+{
+	(( "+"|"-") 
+	{
+	  	uexpr = new UnaryExpr(); 
+		Token t = getToken(0);
+		if("+".equals(t.toString()))
+			((UnaryExpr)uexpr).setSign(Sign.POSITIVE);
+		else if("-".equals(t.toString()))
+			((UnaryExpr)uexpr).setSign(Sign.NEGATIVE);
+		else 
+			throw new ParseException();
+	}
+	)?
+	
+	expr = ValueExpr()
+	{
+		if(uexpr!=null){
+			((UnaryExpr)uexpr).setExpr(expr);
+			return uexpr;
+		}
+		else{
+			return expr;
+		}
+	}
+}
+
+Expression ValueExpr() throws ParseException:
+{
+  Expression expr;
+}
+{
+  expr = FieldOrIndexAccessor()
+  {
+    return expr;
+  }
+}
+
+
+Expression FieldOrIndexAccessor()throws ParseException:
+{
+  Expression expr = null;
+  Identifier ident = null;
+  AbstractAccessor fa = null;
+  int index;
+
+}
+{
+	( expr = PrimaryExpr()
+
+	)
+
+
+	(
+	(
+	  	ident = Field()
+	{
+		  if(fa == null)
+		  	fa = new FieldAccessor(expr, ident);
+		  else
+		  	fa = new FieldAccessor(fa, ident);
+	}
+	)
+	| (
+		index = Index()
+		{
+		  if(fa == null)
+		  	fa = new IndexAccessor(expr, index);
+		  else
+		  	fa = new IndexAccessor(fa, index);
+		}
+	) 
+	)*
+
+	
+  	{
+ 	  return fa==null?expr:fa;
+ 	}
+}
+
+Identifier Field() throws ParseException:
+{
+  Identifier ident = null;
+
+}
+{
+  "." < IDENTIFIER >
+  	{
+    
+  	ident = new Identifier();
+	ident.setValue(getToken(0).toString());
+
+	  return ident;
+	}
+}
+
+int Index() throws ParseException:
+{
+	Expression expr = null;
+	int idx = -2;
+}
+{
+  "[" ( expr = Expression()
+	{
+		if(expr.getKind() == Expression.Kind.LITERAL_EXPRESSION)
+		{
+			Literal lit = ((LiteralExpr)expr).getValue();
+			if(lit.getLiteralType() == Literal.Type.INTEGER || 
+			   lit.getLiteralType() == Literal.Type.LONG) {
+				idx = Integer.valueOf(lit.getStringValue());
+			}
+			else {
+				throw new ParseException("Index should be an INTEGER");				
+            }
+		}
+
+	}
+
+  	| "?"
+	{
+		idx = IndexAccessor.ANY;
+	  // ANY
+	}
+ 	 
+  	)
+
+   "]"
+	{
+	  return idx;
+	}
+}
+
+
+Expression PrimaryExpr()throws ParseException:
+{
+  Expression expr = null;
+}
+{
+  //Literal | VariableRef | ListConstructor | RecordConstructor | FunctionCallExpr | DatasetAccessExpression | ParenthesizedExpression
+	(
+	  expr =Literal() 
+	   | expr = FunctionCallExpr()
+	   | expr = DatasetAccessExpression()
+	   | expr =VariableRef() 
+	   
+    {
+      if(((VariableExpr)expr).getIsNewVar() == true)
+      	throw new ParseException("can't find variable " + ((VariableExpr)expr).getVar());
+    }
+    	   | expr = ListConstructor()
+	   | expr = RecordConstructor()
+	   | expr = ParenthesizedExpression()
+	)
+ 	{
+ 	  return expr;
+ 	}
+}
+
+Expression Literal() throws ParseException:
+{
+
+  LiteralExpr lit = new LiteralExpr();
+  Token t;
+}
+{
+(
+      <STRING_LITERAL>
+	{
+	  t= getToken(0);
+	  lit.setValue( new StringLiteral(removeQuotesAndEscapes(t.image)));
+	}
+    
+ 	 | <INTEGER_LITERAL>
+    {
+      t= getToken(0);
+	  try {
+	      lit.setValue(new IntegerLiteral(new Integer(t.image)));
+	  } catch(NumberFormatException ex) {
+	      lit.setValue(new LongIntegerLiteral(new Long(t.image)));
+	  }
+	}
+     | < FLOAT_LITERAL >
+    {
+      t= getToken(0);
+      lit.setValue(new FloatLiteral(new Float(t.image)));
+    }     
+	 | < DOUBLE_LITERAL >
+    {
+      t= getToken(0);
+	  lit.setValue(new DoubleLiteral(new Double(t.image)));
+	}	  
+ 	 | <NULL>
+	{
+	  t= getToken(0);
+	  lit.setValue(NullLiteral.INSTANCE);
+	}
+   	 | <TRUE>
+	{
+	  t= getToken(0);
+	  lit.setValue(TrueLiteral.INSTANCE);
+	}   	 
+   	 | <FALSE>
+	{
+	  t= getToken(0);
+	  lit.setValue(FalseLiteral.INSTANCE);
+	}
+)
+    {
+      return lit;
+    }
+}
+
+
+VariableExpr VariableRef() throws ParseException:
+{
+	VariableExpr varExp = new VariableExpr();
+	VarIdentifier var = new VarIdentifier();
+	Token t;
+}
+{
+      <VARIABLE>
+    {
+     t = getToken(0);//get current token
+     String varName = t.toString(); 
+     Identifier ident = lookupSymbol(varName);
+     if (isInForbiddenScopes(varName)) {
+       throw new ParseException("Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.");
+     }
+     if(ident != null) { // exist such ident
+       varExp.setIsNewVar(false);
+       varExp.setVar((VarIdentifier)ident);       
+     } else {
+       varExp.setVar(var);     
+     }
+     var.setValue(t.toString());        
+     return varExp;
+    }
+}
+
+
+VariableExpr Variable() throws ParseException:
+{
+	VariableExpr varExp = new VariableExpr();
+	VarIdentifier var = new VarIdentifier();
+	Token t;
+}
+{
+      <VARIABLE>
+    {
+     t = getToken(0);//get current token
+     Identifier ident = lookupSymbol(t.toString());
+     if(ident != null) { // exist such ident
+       varExp.setIsNewVar(false);
+     }  
+     varExp.setVar(var);     
+     var.setValue(t.toString());        
+     return varExp;
+    }
+}
+
+Expression ListConstructor() throws ParseException:
+{
+	Expression expr = null;
+}
+{
+    (
+    	expr = OrderedListConstructor() | expr = UnorderedListConstructor()
+    )
+    
+    {
+      return expr;
+    }
+}
+
+
+ListConstructor OrderedListConstructor() throws ParseException:
+{
+  	ListConstructor expr = new ListConstructor();
+  	Expression tmp = null;
+  	List<Expression> exprList = new ArrayList<Expression>();
+  	expr.setType(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR);
+}
+{
+
+    "[" 
+	    ( tmp = Expression()
+			{
+			  exprList.add(tmp);
+			}
+		
+		    ("," tmp = Expression() { exprList.add(tmp);  })*
+	    )? 
+    
+    "]"
+
+    {
+      expr.setExprList(exprList);
+      return expr;
+    }    
+}
+
+ListConstructor UnorderedListConstructor() throws ParseException:
+{
+  	ListConstructor expr = new ListConstructor();
+  	Expression tmp = null;
+  	List<Expression> exprList = new ArrayList<Expression>();
+  	expr.setType(ListConstructor.Type.UNORDERED_LIST_CONSTRUCTOR);
+}
+{
+
+    "{{" ( tmp = Expression()
+	{
+	  exprList.add(tmp);
+	}
+    ("," tmp = Expression() { exprList.add(tmp);  })*)? "}}"
+    {
+      expr.setExprList(exprList);
+      return expr;
+    }    
+}
+
+RecordConstructor RecordConstructor() throws ParseException:
+{
+  	RecordConstructor expr = new RecordConstructor();
+  	FieldBinding tmp = null;
+  	List<FieldBinding> fbList = new ArrayList<FieldBinding>();
+}
+{
+    "{" (tmp = FieldBinding()
+    {
+      fbList.add(tmp);
+    }
+    ("," tmp = FieldBinding() { fbList.add(tmp);  })*)? "}"
+    {
+      expr.setFbList(fbList);
+      return expr;
+    }       
+}
+
+FieldBinding FieldBinding() throws ParseException:
+{
+	FieldBinding fb = new FieldBinding();
+	Expression left, right;
+}
+{
+    left = Expression() ":" right = Expression()
+    {
+      fb.setLeftExpr(left);
+      fb.setRightExpr(right);
+      return fb;
+    }
+}
+
+
+Expression FunctionCallExpr() throws ParseException:
+{
+  CallExpr callExpr;
+  List<Expression> argList = new ArrayList<Expression>();
+  Expression tmp;
+  int arity = 0;
+  String funcName;
+  String dataverse;
+  String hint=null;
+  String id1=null;
+  String id2=null;
+}
+{  
+    
+    <IDENTIFIER> { dataverse = defaultDataverse; funcName = token.image;} ("." <IDENTIFIER> { dataverse = funcName; funcName = token.image;})?
+    {
+       hint = getHint(token);
+    }
+     <LEFTPAREN> (tmp = Expression()
+     {
+       argList.add(tmp);
+       arity ++;
+     } ("," tmp = Expression() { argList.add(tmp); arity++; })*)? <RIGHTPAREN>
+
+     {
+       FunctionSignature signature = lookupFunctionSignature(dataverse, funcName.toString(), arity);
+             if(signature == null)
+             {
+                signature = new FunctionSignature(dataverse, funcName.toString(), arity);
+             }
+       callExpr = new CallExpr(signature,argList);
+       if (hint != null && hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
+          callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
+        }
+       return callExpr;
+     }
+}
+
+Expression DatasetAccessExpression() throws ParseException:
+{
+  CallExpr callExpr;
+  List<Expression> argList = new ArrayList<Expression>();
+  String funcName;
+  String dataverse;
+  LiteralExpr ds;
+  LiteralExpr dvds;
+  Expression nameArg;
+  int arity = 0;
+}
+{  
+    <DATASET> {dataverse = MetadataConstants.METADATA_DATAVERSE_NAME; funcName = getToken(0).toString();}
+    (
+    (<IDENTIFIER> {ds = new LiteralExpr(); ds.setValue( new StringLiteral(token.image) ); argList.add(ds); arity ++;} ("." <IDENTIFIER> { dvds = new LiteralExpr(); dvds.setValue(new StringLiteral(ds.getValue()+"."+token.image)); argList.remove(0); argList.add(dvds);})? ) |  
+    (<LEFTPAREN> nameArg = Expression() {argList.add(nameArg); arity ++;} ("," nameArg = Expression() { argList.add(nameArg); arity++; })* <RIGHTPAREN>)
+    )  
+     
+     {
+       FunctionSignature signature = lookupFunctionSignature(dataverse, funcName.toString(), arity);
+       if(signature == null)
+             {
+                signature = new FunctionSignature(dataverse, funcName.toString(), arity);
+             }
+       callExpr = new CallExpr(signature,argList);
+       return callExpr;
+     }
+}
+
+Expression ParenthesizedExpression() throws ParseException:
+{
+  Expression expr;
+}
+{
+    <LEFTPAREN> expr = Expression() <RIGHTPAREN>
+    {
+      return expr;
+    }
+}
+
+Expression IfThenElse() throws ParseException:
+{
+  Expression condExpr;
+  Expression thenExpr;
+  Expression elseExpr;
+  IfExpr ifExpr = new IfExpr();
+}
+{
+    "if" <LEFTPAREN> condExpr = Expression() <RIGHTPAREN> "then" thenExpr = Expression() "else" elseExpr = Expression()
+
+    {
+      ifExpr.setCondExpr(condExpr);
+      ifExpr.setThenExpr(thenExpr);
+      ifExpr.setElseExpr(elseExpr);
+      return ifExpr;
+    }
+}
+
+Expression  FLWOGR() throws ParseException:
+{
+	FLWOGRExpression flworg = new FLWOGRExpression();
+	List<Clause> clauseList = new ArrayList<Clause>();
+	Expression returnExpr;
+	Clause tmp;
+	createNewScope();
+}
+{
+     (tmp = ForClause()  {clauseList.add(tmp);} | tmp = LetClause() {clauseList.add(tmp);})
+      (tmp = Clause() {clauseList.add(tmp);})* "return" returnExpr = Expression()
+
+     {
+       flworg.setClauseList(clauseList);
+       flworg.setReturnExpr(returnExpr);
+       removeCurrentScope();
+       return flworg;
+     }
+}
+
+Clause Clause()throws ParseException :
+{
+  Clause clause;
+}
+{
+    (
+         clause = ForClause() 
+       | clause = LetClause() 
+       | clause = WhereClause() 
+       | clause = OrderbyClause() 
+       | clause = GroupClause() 
+       | clause = LimitClause()
+       | clause = DistinctClause()
+    )
+    {
+      return clause;
+    }
+}
+
+Clause ForClause()throws ParseException :
+{
+	ForClause fc = new ForClause();
+	VariableExpr varExp;
+	VariableExpr varPos = null;
+	Expression inExp;
+	extendCurrentScope();
+}
+{
+    "for" varExp = Variable()
+    {
+     	getCurrentScope().addNewVarSymbolToScope(varExp.getVar());
+	}
+	("at" varPos = Variable()
+	  {
+	     getCurrentScope().addNewVarSymbolToScope(varPos.getVar());
+	  } 
+	 )? 
+      "in" ( inExp = Expression() )
+    {
+      fc.setVarExpr(varExp);
+      fc.setInExpr(inExp);
+      if (varPos != null) {
+        fc.setPosExpr(varPos);
+      }
+      return fc;
+    }
+}
+
+Clause LetClause() throws ParseException:
+{
+	LetClause lc = new LetClause();
+	VariableExpr varExp;
+	Expression beExp;
+	extendCurrentScope();
+}
+{
+    "let" varExp = Variable() ":=" beExp = Expression()
+    {
+      getCurrentScope().addNewVarSymbolToScope(varExp.getVar());
+      lc.setVarExpr(varExp);
+      lc.setBeExpr(beExp);
+      return lc;
+    }
+}
+
+Clause WhereClause()throws ParseException :
+{
+  WhereClause wc = new WhereClause();
+  Expression whereExpr;
+}
+{
+    "where" whereExpr = Expression()
+    {
+      wc.setWhereExpr(whereExpr);
+      return wc;
+    }
+}
+
+Clause OrderbyClause()throws ParseException :
+{
+  OrderbyClause oc = new OrderbyClause();
+  Expression orderbyExpr;
+  List<Expression> orderbyList = new ArrayList<Expression>();
+  List<OrderbyClause.OrderModifier> modifierList = new ArrayList<OrderbyClause.OrderModifier >();
+  int numOfOrderby = 0;
+}
+{
+  (
+    "order" 
+      {
+         String hint = getHint(token);
+         if (hint != null && hint.startsWith(INMEMORY_HINT)) {
+           String splits[] = hint.split(" +"); 
+           int numFrames = Integer.parseInt(splits[1]);
+           int numTuples = Integer.parseInt(splits[2]);
+           oc.setNumFrames(numFrames);
+           oc.setNumTuples(numTuples);   
+         } 
+      }     
+    "by" orderbyExpr = Expression()
+    {
+      orderbyList.add(orderbyExpr);
+      OrderbyClause.OrderModifier modif = OrderbyClause.OrderModifier.ASC;       
+    }
+    ( ("asc" { modif = OrderbyClause.OrderModifier.ASC; })
+    | ("desc" { modif = OrderbyClause.OrderModifier.DESC; }))?
+    {
+      modifierList.add(modif);
+    }
+    
+    ("," orderbyExpr = Expression()
+    {
+      orderbyList.add(orderbyExpr);
+      modif = OrderbyClause.OrderModifier.ASC;
+    }
+    ( ("asc" { modif = OrderbyClause.OrderModifier.ASC; })
+    | ("desc" { modif = OrderbyClause.OrderModifier.DESC; }))?
+    {
+      modifierList.add(modif);
+    }    
+    )*
+)
+    {
+      oc.setModifierList(modifierList);
+      oc.setOrderbyList(orderbyList);
+      return oc;
+    }
+}
+Clause GroupClause()throws ParseException :
+{
+  	GroupbyClause gbc = new GroupbyClause();
+  	// GbyVariableExpressionPair pair = new GbyVariableExpressionPair();
+ 	List<GbyVariableExpressionPair> vePairList = new ArrayList<GbyVariableExpressionPair>();
+    List<GbyVariableExpressionPair> decorPairList = new ArrayList<GbyVariableExpressionPair>();
+	List<VariableExpr> withVarList= new ArrayList<VariableExpr>();
+	VariableExpr var = null;
+	VariableExpr withVar = null;
+	Expression expr = null;
+	VariableExpr decorVar = null;
+	Expression decorExpr = null;
+}
+{
+  	{
+  	  Scope newScope = extendCurrentScopeNoPush(true); 
+  	  // extendCurrentScope(true);
+  	}
+    "group"
+      {
+         String hint = getHint(token);
+         if (hint != null && hint.equals(HASH_GROUP_BY_HINT)) {
+           gbc.setHashGroupByHint(true);   
+         } 
+      } 
+    "by" (LOOKAHEAD(2)  var = Variable()
+    {
+      newScope.addNewVarSymbolToScope(var.getVar());
+    } ":=")?
+    expr = Expression() 
+       {
+         GbyVariableExpressionPair pair1 = new GbyVariableExpressionPair(var, expr);    
+         vePairList.add(pair1);
+       }
+    ("," ( LOOKAHEAD(2) var = Variable()
+    {
+      newScope.addNewVarSymbolToScope(var.getVar());
+    } ":=")?
+    	expr = Expression()  
+    	 {
+           GbyVariableExpressionPair pair2 = new GbyVariableExpressionPair(var, expr);    
+           vePairList.add(pair2);
+         }
+    	)*
+    ("decor" decorVar = Variable() ":=" decorExpr = Expression()
+       {    
+         newScope.addNewVarSymbolToScope(decorVar.getVar()); 
+         GbyVariableExpressionPair pair3 = new GbyVariableExpressionPair(decorVar, decorExpr);
+         decorPairList.add(pair3);
+       }
+      ("," "decor" decorVar = Variable() ":=" decorExpr = Expression()
+           { 
+             newScope.addNewVarSymbolToScope(decorVar.getVar()); 
+             GbyVariableExpressionPair pair4 = new GbyVariableExpressionPair(decorVar, decorExpr);
+             decorPairList.add(pair4);              
+           }
+       )*            
+    )?	
+    "with" withVar = VariableRef()
+    {
+      if(withVar.getIsNewVar()==true)
+      	throw new ParseException("can't find variable " + withVar.getVar());
+      withVarList.add(withVar);
+      newScope.addNewVarSymbolToScope(withVar.getVar());
+    }
+    ("," withVar = VariableRef()
+    {
+      if(withVar.getIsNewVar()==true)
+      	throw new ParseException("can't find variable " + withVar.getVar());
+      withVarList.add(withVar);
+      newScope.addNewVarSymbolToScope(withVar.getVar());
+    })*
+    {
+      gbc.setGbyPairList(vePairList);
+      gbc.setDecorPairList(decorPairList);
+      gbc.setWithVarList(withVarList);
+      replaceCurrentScope(newScope);
+      return gbc;
+    }
+}
+
+
+LimitClause LimitClause() throws ParseException:
+{
+	LimitClause lc = new LimitClause();
+	Expression expr;
+	pushForbiddenScope(getCurrentScope());
+}
+{
+    "limit" expr = Expression()    { lc.setLimitExpr(expr);    }
+    ("offset" expr = Expression() { lc.setOffset(expr);    })?
+
+  {
+    popForbiddenScope();   
+    return lc;
+  }
+}
+
+DistinctClause DistinctClause() throws ParseException:
+{
+  List<Expression> exprs = new ArrayList<Expression>();
+  Expression expr;
+}
+{
+  "distinct" "by" expr = Expression() 
+  {
+    exprs.add(expr);
+  }
+  ("," expr = Expression() 
+  	{
+  		exprs.add(expr); 
+  	} 
+  )*
+  {
+  	return new DistinctClause(exprs);
+  }
+}
+
+QuantifiedExpression QuantifiedExpression()throws ParseException:
+{
+  QuantifiedExpression qc = new QuantifiedExpression();
+  List<QuantifiedPair> quantifiedList = new ArrayList<QuantifiedPair>();
+  Expression satisfiesExpr;
+  VariableExpr var;
+  Expression inExpr;
+  QuantifiedPair pair;
+}
+{
+  {
+    createNewScope();
+  }
+	
+   (      ("some"  {  qc.setQuantifier(QuantifiedExpression.Quantifier.SOME);	})
+		| ("every" {  qc.setQuantifier(QuantifiedExpression.Quantifier.EVERY);	}))
+	var = Variable() "in" inExpr = Expression() 
+	{
+	  pair = new QuantifiedPair(var, inExpr);
+      getCurrentScope().addNewVarSymbolToScope(var.getVar());
+      quantifiedList.add(pair);
+	}
+	(
+	"," var = Variable() "in" inExpr = Expression() 
+	{ 
+      pair = new QuantifiedPair(var, inExpr);
+      getCurrentScope().addNewVarSymbolToScope(var.getVar());
+      quantifiedList.add(pair);	
+	}
+	)*
+	 "satisfies" satisfiesExpr = Expression()
+	 {
+	   qc.setSatisfiesExpr(satisfiesExpr);
+	   qc.setQuantifiedList(quantifiedList);
+	   removeCurrentScope();
+	   return qc;
+	 }
+}
+
+TOKEN_MGR_DECLS:
+{
+        public int commentDepth = 0;
+}
+
+<DEFAULT>
+TOKEN :
+{
+   <CARET : "^"  >
+}
+
+<DEFAULT>
+TOKEN :
+{
+   <DATASET : "dataset"  >
+}
+
+<DEFAULT>
+TOKEN :
+{
+   <LEFTPAREN : "("  >
+}
+
+<DEFAULT>
+TOKEN :
+{
+   <RIGHTPAREN : ")"  >
+}
+
+
+<DEFAULT>
+TOKEN :
+{
+	<INTEGER_LITERAL : (<DIGIT>)+ >
+}
+
+
+<DEFAULT>
+TOKEN :
+{
+	<NULL : "null">
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<TRUE : "true">
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<FALSE : "false">
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<#DIGIT : ["0" - "9"]>
+}
+
+
+TOKEN:
+{
+  < DOUBLE_LITERAL: <INTEGER>
+        | <INTEGER> ( "." <INTEGER> )?
+        | "." <INTEGER>
+  >
+  |
+  < FLOAT_LITERAL: <INTEGER> ( "f" | "F" )
+        | <INTEGER> ( "." <INTEGER> ( "f" | "F" ) )?
+        | "." <INTEGER> ( "f" | "F" )
+  >
+  |
+  <INTEGER : (<DIGIT>)+ >
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<#LETTER : ["A" - "Z", "a" - "z"]>
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<SPECIALCHARS : ["$", "_", "-"]  >
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<STRING_LITERAL : ("\"" (<EscapeQuot> | ~["\""])* "\"") | ("\'"(<EscapeApos> | ~["\'"])* "\'")>
+	|
+	< #EscapeQuot: "\\\"" >
+	|
+    < #EscapeApos: "\\\'" >
+}
+
+<DEFAULT>
+TOKEN :
+{
+	<IDENTIFIER : (<LETTER>)+ (<LETTER> | <DIGIT> | <SPECIALCHARS>)*>
+}
+
+
+<DEFAULT>
+TOKEN :
+{
+	<VARIABLE : "$" <IDENTIFIER> >
+}
+
+SKIP:
+{
+    " "
+|   "\t"
+|   "\r"
+|   "\n"
+}
+
+SKIP:
+{
+	<"//" (~["\n"])* "\n">
+}
+
+SKIP:
+{
+	<"//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")?> 
+}
+
+
+SKIP:
+{
+        <"/*"> {commentDepth=1;}: INSIDE_COMMENT
+}
+
+<INSIDE_COMMENT>
+SPECIAL_TOKEN:
+{
+       <"+"(" ")*(~["*"])*>
+}
+
+<INSIDE_COMMENT>
+SKIP:
+{
+        <"/*"> {commentDepth++;}
+}
+
+<INSIDE_COMMENT>
+SKIP:
+{
+        <"*/"> {commentDepth--; if (commentDepth == 0) SwitchTo(DEFAULT);}
+|       <~[]>
+}
diff --git a/asterix-common/pom.xml b/asterix-common/pom.xml
new file mode 100644
index 0000000..1a0e782
--- /dev/null
+++ b/asterix-common/pom.xml
@@ -0,0 +1,127 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-common</artifactId>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.jvnet.jaxb2.maven2</groupId>
+				<artifactId>maven-jaxb2-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>configuration</id>
+						<goals>
+							<goal>generate</goal>
+						</goals>
+						<configuration>
+							<args>
+								<arg>-Xsetters</arg>
+								<arg>-Xvalue-constructor</arg>
+							</args>
+							<plugins>
+								<plugin>
+									<groupId>org.jvnet.jaxb2_commons</groupId>
+									<artifactId>jaxb2-basics</artifactId>
+									<version>0.6.2</version>
+								</plugin>
+								<plugin>
+									<groupId>org.jvnet.jaxb2_commons</groupId>
+									<artifactId>jaxb2-value-constructor</artifactId>
+									<version>3.0</version>
+								</plugin>
+							</plugins>
+							<schemaDirectory>src/main/resources/schema</schemaDirectory>
+							<schemaIncludes>
+								<include>asterix-conf.xsd</include>
+							</schemaIncludes>
+							<generatePackage>edu.uci.ics.asterix.common.configuration</generatePackage>
+							<bindingDirectory>src/main/resources/schema</bindingDirectory>
+							<bindingIncludes>
+								<bindingInclude>jaxb-bindings.xjb</bindingInclude>
+							</bindingIncludes>
+							<generateDirectory>${project.build.directory}/generated-sources/configuration</generateDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-jar-plugin</artifactId>
+				<version>2.2</version>
+				<configuration>
+					<includes>
+						<include>**/*.class</include>
+					</includes>
+				</configuration>
+				<executions>
+					<execution>
+						<goals>
+							<goal>test-jar</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>algebricks-compiler</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-dataflow-std</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>1.4</version>
+		</dependency>
+		<dependency>
+			<groupId>commons-httpclient</groupId>
+			<artifactId>commons-httpclient</artifactId>
+			<version>3.0.1</version>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-transactions</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-common</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-test-framework</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.8.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+</project>
+
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/AutoDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/AutoDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/AutoDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/AutoDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DateBetweenYearsDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DateBetweenYearsDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DateBetweenYearsDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DateBetweenYearsDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeAddRandHoursDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeAddRandHoursDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeAddRandHoursDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeAddRandHoursDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeBetweenYearsDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeBetweenYearsDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeBetweenYearsDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/DatetimeBetweenYearsDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldIntervalDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldIntervalDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldIntervalDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldIntervalDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileSameIndexDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileSameIndexDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileSameIndexDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/FieldValFileSameIndexDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordFieldDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordFieldDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordFieldDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordFieldDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordTypeAnnotation.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordTypeAnnotation.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordTypeAnnotation.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/IRecordTypeAnnotation.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/InsertRandIntDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/InsertRandIntDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/InsertRandIntDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/InsertRandIntDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListValFileDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListValFileDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListValFileDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/ListValFileDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/RecordDataGenAnnotation.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/RecordDataGenAnnotation.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/RecordDataGenAnnotation.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/RecordDataGenAnnotation.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/TypeDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/TypeDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/TypeDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/TypeDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/UndeclaredFieldsDataGen.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/UndeclaredFieldsDataGen.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/UndeclaredFieldsDataGen.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/annotations/UndeclaredFieldsDataGen.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/api/AsterixAppContextInfoImpl.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/api/AsterixAppContextInfoImpl.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/api/AsterixAppContextInfoImpl.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/api/AsterixAppContextInfoImpl.java
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/AsterixProperties.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/AsterixProperties.java
new file mode 100644
index 0000000..04e974d
--- /dev/null
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/AsterixProperties.java
@@ -0,0 +1,252 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.common.config;
+
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+
+import edu.uci.ics.asterix.common.configuration.AsterixConfiguration;
+import edu.uci.ics.asterix.common.configuration.Property;
+import edu.uci.ics.asterix.common.configuration.Store;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+
+/**
+ * Holder for Asterix properties values typically set as Java Properties.
+ * Intended to live in the AsterixStateProxy so it can be accessed remotely.
+ */
+public class AsterixProperties implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+    private static String metadataNodeName;
+    private static HashSet<String> nodeNames;
+    private static Map<String, String[]> stores;
+    private static Map<String, String> asterixConfigurationParams;
+
+    public static AsterixProperties INSTANCE = new AsterixProperties();
+
+    public static class AsterixConfigurationKeys {
+
+        // JVM parameters for each Node Contoller (NC)
+        public static final String NC_JAVA_OPTS = "nc_java_opts";
+        public static final String NC_JAVA_OPTS_DEFAULT = "-Xmx1024m";
+
+        // JVM parameters for the Cluster Contoller (CC)
+        public static final String CC_JAVA_OPTS = "cc_java_opts";
+        public static final String CC_JAVA_OPTS_DEFAULT = "-Xmx1024m";
+
+        public static final String SIZE_MEMORY_COMPONENT = "size_memory_component";
+        public static final String SIZE_MEMORY_COMPONENT_DEFAULT = "512m";
+
+        public static final String TOTAL_SIZE_MEMORY_COMPONENT = "total_size_memory_component";
+        public static final String TOTAL_SIZE_MEMORY_COMPONENT_DEFAULT = "512m";
+
+        public static final String LOG_BUFFER_NUM_PAGES = "log_buffer_num_pages";
+        public static final String LOG_BUFFER_NUM_PAGES_DEFAULT = "8";
+
+        public static final String LOG_BUFFER_PAGE_SIZE = "log_buffer_page_size";
+        public static final String LOG_BUFFER_PAGE_SIZE_DEFAULT = "131072";
+
+        public static final String LOG_PARTITION_SIZE = "log_partition_size";
+        public static final String LOG_PARTITION_SIZE_DEFAULT = "2147483648";
+
+        public static final String GROUP_COMMIT_INTERVAL = "group_commit_interval";
+        public static final String GROUP_COMMIT_INTERVAL_DEFAULT = "200ms";
+
+        public static final String SORT_OP_MEMORY = "sort_op_memory";
+        public static final String SORT_OP_MEMORY_DEFAULT = "512m";
+
+        public static final String JOIN_OP_MEMORY = "join_op_memory";
+        public static final String JOIN_OP_MEMORY_DEFAULT = "512m";
+
+        public static final String WEB_INTERFACE_PORT = "web_interface_port";
+        public static final String WEB_INTERFACE_PORT_DEFAULT = "19001";
+
+        public static final String NUM_PAGES_BUFFER_CACHE = "num_pages_buffer_cache";
+        public static final String NUM_PAGES_BUFFER_CACHE_DEFAULT = "1000";
+
+        public static final String LOG_LEVEL = "log_level";
+        public static final String LOG_LEVEL_DEFAULT = "INFO";
+
+        public static final String LSN_THRESHOLD = "lsn_threshold";
+        public static final String LSN_THRESHOLD_DEFAULT = "64m";
+
+        public static final String CHECKPOINT_TERMS_IN_SECS = "checkpoint_terms_in_secs";
+        public static final String CHECKPOINT_TERMS_IN_SECS_DEFAULT = "120";
+
+        public static final String ESCALATE_THRSHOLD_ENTITY_TO_DATASET = "escalate_threshold_entity_to_dataset";
+        public static final String ESCALATE_THRSHOLD_ENTITY_TO_DATASET_DEFAULT = "8";
+
+        public static final String SHRINK_TIMER_THRESHOLD = "shrink_timer_threshold";
+        public static final String SHRINK_TIMER_THRESHOLD_DEFAULT = "120000";
+
+    }
+
+    private AsterixProperties() {
+        try {
+            String fileName = System.getProperty(GlobalConfig.CONFIG_FILE_PROPERTY);
+            if (fileName == null) {
+                fileName = GlobalConfig.DEFAULT_CONFIG_FILE_NAME;
+            }
+            InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName);
+            if (is == null) {
+                try {
+                    fileName = GlobalConfig.DEFAULT_CONFIG_FILE_NAME;
+                    is = new FileInputStream(fileName);
+                } catch (FileNotFoundException fnf) {
+                    throw new AlgebricksException("Could not find the configuration file " + fileName);
+                }
+            }
+
+            JAXBContext ctx = JAXBContext.newInstance(AsterixConfiguration.class);
+            Unmarshaller unmarshaller = ctx.createUnmarshaller();
+            AsterixConfiguration asterixConfiguration = (AsterixConfiguration) unmarshaller.unmarshal(is);
+            metadataNodeName = asterixConfiguration.getMetadataNode();
+            stores = new HashMap<String, String[]>();
+            List<Store> configuredStores = asterixConfiguration.getStore();
+            nodeNames = new HashSet<String>();
+            for (Store store : configuredStores) {
+                String trimmedStoreDirs = store.getStoreDirs().trim();
+                stores.put(store.getNcId(), trimmedStoreDirs.split(","));
+                nodeNames.add(store.getNcId());
+            }
+            asterixConfigurationParams = new HashMap<String, String>();
+            for (Property p : asterixConfiguration.getProperty()) {
+                asterixConfigurationParams.put(p.getName(), p.getValue());
+            }
+
+            initializeLogLevel(getProperty(AsterixConfigurationKeys.LOG_LEVEL));
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    public String getMetadataNodeName() {
+        return metadataNodeName;
+    }
+
+    public String getMetadataStore() {
+        return stores.get(metadataNodeName)[0];
+    }
+
+    public Map<String, String[]> getStores() {
+        return stores;
+    }
+
+    public HashSet<String> getNodeNames() {
+        return nodeNames;
+    }
+
+    public String getProperty(String property) {
+        String propValue = asterixConfigurationParams.get(property);
+        if (propValue == null) {
+            switch (property) {
+                case AsterixConfigurationKeys.NC_JAVA_OPTS:
+                    propValue = AsterixConfigurationKeys.NC_JAVA_OPTS_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.CC_JAVA_OPTS:
+                    propValue = AsterixConfigurationKeys.CC_JAVA_OPTS_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.SIZE_MEMORY_COMPONENT:
+                    propValue = AsterixConfigurationKeys.SIZE_MEMORY_COMPONENT_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.TOTAL_SIZE_MEMORY_COMPONENT:
+                    propValue = AsterixConfigurationKeys.TOTAL_SIZE_MEMORY_COMPONENT_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.LOG_BUFFER_NUM_PAGES:
+                    propValue = AsterixConfigurationKeys.LOG_BUFFER_NUM_PAGES_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.LOG_BUFFER_PAGE_SIZE:
+                    propValue = AsterixConfigurationKeys.LOG_BUFFER_PAGE_SIZE_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.LOG_PARTITION_SIZE:
+                    propValue = AsterixConfigurationKeys.LOG_PARTITION_SIZE_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.GROUP_COMMIT_INTERVAL:
+                    propValue = AsterixConfigurationKeys.GROUP_COMMIT_INTERVAL_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.SORT_OP_MEMORY:
+                    propValue = AsterixConfigurationKeys.SORT_OP_MEMORY_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.JOIN_OP_MEMORY:
+                    propValue = AsterixConfigurationKeys.JOIN_OP_MEMORY_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.WEB_INTERFACE_PORT:
+                    propValue = AsterixConfigurationKeys.WEB_INTERFACE_PORT_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.NUM_PAGES_BUFFER_CACHE:
+                    propValue = AsterixConfigurationKeys.NUM_PAGES_BUFFER_CACHE_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.LOG_LEVEL:
+                    propValue = AsterixConfigurationKeys.LOG_LEVEL_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.LSN_THRESHOLD:
+                    propValue = AsterixConfigurationKeys.LSN_THRESHOLD_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.CHECKPOINT_TERMS_IN_SECS:
+                    propValue = AsterixConfigurationKeys.CHECKPOINT_TERMS_IN_SECS_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.ESCALATE_THRSHOLD_ENTITY_TO_DATASET:
+                    propValue = AsterixConfigurationKeys.ESCALATE_THRSHOLD_ENTITY_TO_DATASET_DEFAULT;
+                    break;
+                case AsterixConfigurationKeys.SHRINK_TIMER_THRESHOLD:
+                    propValue = AsterixConfigurationKeys.SHRINK_TIMER_THRESHOLD_DEFAULT;
+                    break;
+            }
+        }
+        return propValue;
+    }
+
+    private void initializeLogLevel(String configuredLogLevel) {
+        Level level = null;
+        switch (configuredLogLevel.toLowerCase()) {
+            case "info":
+                level = Level.INFO;
+                break;
+            case "fine":
+                level = Level.FINE;
+                break;
+            case "finer":
+                level = Level.FINER;
+                break;
+            case "finest":
+                level = Level.FINEST;
+                break;
+            case "severe":
+                level = Level.SEVERE;
+                break;
+            case "off":
+                level = Level.OFF;
+                break;
+            case "warning":
+                level = Level.WARNING;
+                break;
+            default:
+                level = Level.ALL;
+        }
+        Logger.getLogger(".").setLevel(level);
+    }
+}
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/DatasetConfig.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/DatasetConfig.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/DatasetConfig.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/config/DatasetConfig.java
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/GlobalConfig.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/GlobalConfig.java
new file mode 100644
index 0000000..ebce6fe
--- /dev/null
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/GlobalConfig.java
@@ -0,0 +1,63 @@
+package edu.uci.ics.asterix.common.config;
+
+import java.util.logging.Logger;
+
+public class GlobalConfig {
+	public static final boolean DEBUG = true;
+
+	public static final String ASTERIX_LOGGER_NAME = "edu.uci.ics.asterix";
+
+	public static final Logger ASTERIX_LOGGER = Logger
+			.getLogger(ASTERIX_LOGGER_NAME);
+
+	public static final String ASTERIX_LOGFILE_PATTERN = "%t/asterix.log";
+
+	public static final String DEFAULT_CONFIG_FILE_NAME = "asterix-configuration.xml";
+
+	public static final String TEST_CONFIG_FILE_NAME = "src/main/resources/asterix-configuration.xml";
+
+	public static final String CONFIG_FILE_PROPERTY = "AsterixConfigFileName";
+
+	public static final String WEB_SERVER_PORT_PROPERTY = "AsterixWebServerPort";
+
+	public static final String JSON_API_SERVER_PORT_PROPERTY = "AsterixJSONAPIServerPort";
+
+	public static final String BUFFER_CACHE_PAGE_SIZE_PROPERTY = "BufferCachePageSize";
+
+	public static final String BUFFER_CACHE_NUM_PAGES_PROPERTY = "BufferCacheNumPages";
+
+	public static final int DEFAULT_BUFFER_CACHE_NUM_PAGES = 4096;
+
+	public static final int DEFAULT_FRAME_SIZE = 32768;
+
+	public static final String FRAME_SIZE_PROPERTY = "FrameSize";
+
+	public static final float DEFAULT_BTREE_FILL_FACTOR = 1.00f;
+
+	public static int DEFAULT_INPUT_DATA_COLUMN = 0;
+
+	public static int DEFAULT_INDEX_MEM_PAGE_SIZE = 32768;
+
+	public static int DEFAULT_INDEX_MEM_NUM_PAGES = 1000;
+
+	public static int getFrameSize() {
+		int frameSize = GlobalConfig.DEFAULT_FRAME_SIZE;
+		String frameSizeStr = System
+				.getProperty(GlobalConfig.FRAME_SIZE_PROPERTY);
+		if (frameSizeStr != null) {
+			int fz = -1;
+			try {
+				fz = Integer.parseInt(frameSizeStr);
+			} catch (NumberFormatException nfe) {
+				GlobalConfig.ASTERIX_LOGGER
+						.warning("Wrong frame size size argument. Picking default value ("
+								+ GlobalConfig.DEFAULT_FRAME_SIZE
+								+ ") instead.\n");
+			}
+			if (fz >= 0) {
+				frameSize = fz;
+			}
+		}
+		return frameSize;
+	}
+}
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/OptimizationConfUtil.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/OptimizationConfUtil.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/OptimizationConfUtil.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/config/OptimizationConfUtil.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContext.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContextProviderForRecovery.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContextProviderForRecovery.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContextProviderForRecovery.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixAppRuntimeContextProviderForRecovery.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixFileMapManager.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixFileMapManager.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixFileMapManager.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixFileMapManager.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixRuntimeComponentsProvider.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixRuntimeComponentsProvider.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixRuntimeComponentsProvider.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/context/AsterixRuntimeComponentsProvider.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/ConstantMergePolicy.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/ConstantMergePolicy.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/ConstantMergePolicy.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/context/ConstantMergePolicy.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/TransactionSubsystemProvider.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/TransactionSubsystemProvider.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/context/TransactionSubsystemProvider.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/context/TransactionSubsystemProvider.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/dataflow/IAsterixApplicationContextInfo.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/dataflow/IAsterixApplicationContextInfo.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/dataflow/IAsterixApplicationContextInfo.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/dataflow/IAsterixApplicationContextInfo.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixException.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixException.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixException.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixException.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixRuntimeException.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixRuntimeException.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixRuntimeException.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/AsterixRuntimeException.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/TypeException.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/TypeException.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/TypeException.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/exceptions/TypeException.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionConstants.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionConstants.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionConstants.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionConstants.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionDescriptorTag.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionDescriptorTag.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionDescriptorTag.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionDescriptorTag.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/functions/FunctionSignature.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/parse/IParseFileSplitsDecl.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/parse/IParseFileSplitsDecl.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/parse/IParseFileSplitsDecl.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/parse/IParseFileSplitsDecl.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/ANameSchema.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/ANameSchema.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/ANameSchema.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/ANameSchema.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/test/base/AsterixTestHelper.java b/asterix-common/src/main/java/edu/uci/ics/asterix/test/base/AsterixTestHelper.java
similarity index 100%
rename from asterix/asterix-common/src/main/java/edu/uci/ics/asterix/test/base/AsterixTestHelper.java
rename to asterix-common/src/main/java/edu/uci/ics/asterix/test/base/AsterixTestHelper.java
diff --git a/asterix-common/src/main/resources/schema/asterix-conf.xsd b/asterix-common/src/main/resources/schema/asterix-conf.xsd
new file mode 100644
index 0000000..f53fb4b
--- /dev/null
+++ b/asterix-common/src/main/resources/schema/asterix-conf.xsd
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+	xmlns:mg="asterixconf" targetNamespace="asterixconf"
+	elementFormDefault="qualified">
+
+	<!-- definition of simple types -->
+
+        
+	<xs:element name="metadataNode" type="xs:string" />
+	<xs:element name="storeDirs" type="xs:string" />
+	<xs:element name="ncId" type="xs:string" />
+	<xs:element name="name" type="xs:string" />
+	<xs:element name="value" type="xs:string" />
+	<xs:element name="description" type="xs:string" />
+	
+	<!-- definition of complex elements -->
+	<xs:element name="store">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="mg:ncId" />
+				<xs:element ref="mg:storeDirs" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+	<xs:element name="property">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="mg:name" />
+				<xs:element ref="mg:value" />
+				<xs:element ref="mg:description" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+
+	<xs:element name="asterixConfiguration">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="mg:metadataNode" minOccurs="0"/>
+				<xs:element ref="mg:store" maxOccurs="unbounded" />
+				<xs:element ref="mg:property" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+</xs:schema>     
diff --git a/asterix/asterix-events/src/main/resources/schema/jaxb-bindings.xjb b/asterix-common/src/main/resources/schema/jaxb-bindings.xjb
similarity index 100%
copy from asterix/asterix-events/src/main/resources/schema/jaxb-bindings.xjb
copy to asterix-common/src/main/resources/schema/jaxb-bindings.xjb
diff --git a/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java b/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
new file mode 100644
index 0000000..8449971
--- /dev/null
+++ b/asterix-common/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
@@ -0,0 +1,399 @@
+package edu.uci.ics.asterix.test.aql;
+
+import static org.junit.Assert.fail;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Iterator;
+import java.util.List;
+import java.util.NoSuchElementException;
+import java.util.logging.Logger;
+
+import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.NameValuePair;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.commons.httpclient.params.HttpMethodParams;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import edu.uci.ics.asterix.testframework.context.TestCaseContext;
+import edu.uci.ics.asterix.testframework.context.TestFileContext;
+import edu.uci.ics.asterix.testframework.xml.TestCase.CompilationUnit;
+
+public class TestsUtils {
+
+    private static final String EXTENSION_AQL_RESULT = "adm";
+    private static final Logger LOGGER = Logger.getLogger(TestsUtils.class.getName());
+    private static Method managixExecuteMethod = null;
+
+    /**
+     * Probably does not work well with symlinks.
+     */
+    public static boolean deleteRec(File path) {
+        if (path.isDirectory()) {
+            for (File f : path.listFiles()) {
+                if (!deleteRec(f)) {
+                    return false;
+                }
+            }
+        }
+        return path.delete();
+    }
+
+    public static void runScriptAndCompareWithResult(File scriptFile, PrintWriter print, File expectedFile,
+            File actualFile) throws Exception {
+        BufferedReader readerExpected = new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile),
+                "UTF-8"));
+        BufferedReader readerActual = new BufferedReader(
+                new InputStreamReader(new FileInputStream(actualFile), "UTF-8"));
+        String lineExpected, lineActual;
+        int num = 1;
+        try {
+            while ((lineExpected = readerExpected.readLine()) != null) {
+                lineActual = readerActual.readLine();
+                // Assert.assertEquals(lineExpected, lineActual);
+                if (lineActual == null) {
+                    if (lineExpected.isEmpty()) {
+                        continue;
+                    }
+                    throw new Exception("Result for " + scriptFile + " changed at line " + num + ":\n< " + lineExpected
+                            + "\n> ");
+                }
+
+                if (!equalStrings(lineExpected.split("Timestamp")[0], lineActual.split("Timestamp")[0])) {
+                    fail("Result for " + scriptFile + " changed at line " + num + ":\n< " + lineExpected + "\n> "
+                            + lineActual);
+                }
+
+                ++num;
+            }
+            lineActual = readerActual.readLine();
+            // Assert.assertEquals(null, lineActual);
+            if (lineActual != null) {
+                throw new Exception("Result for " + scriptFile + " changed at line " + num + ":\n< \n> " + lineActual);
+            }
+            // actualFile.delete();
+        } finally {
+            readerExpected.close();
+            readerActual.close();
+        }
+
+    }
+
+    private static boolean equalStrings(String s1, String s2) {
+        String[] rowsOne = s1.split("\n");
+        String[] rowsTwo = s2.split("\n");
+
+        for (int i = 0; i < rowsOne.length; i++) {
+            String row1 = rowsOne[i];
+            String row2 = rowsTwo[i];
+
+            if (row1.equals(row2))
+                continue;
+
+            String[] fields1 = row1.split(" ");
+            String[] fields2 = row2.split(" ");
+
+            for (int j = 0; j < fields1.length; j++) {
+                if (fields1[j].equals(fields2[j])) {
+                    continue;
+                } else if (fields1[j].indexOf('.') < 0) {
+                    return false;
+                } else {
+                    fields1[j] = fields1[j].split(",")[0];
+                    fields2[j] = fields2[j].split(",")[0];
+                    Double double1 = Double.parseDouble(fields1[j]);
+                    Double double2 = Double.parseDouble(fields2[j]);
+                    float float1 = (float) double1.doubleValue();
+                    float float2 = (float) double2.doubleValue();
+
+                    if (Math.abs(float1 - float2) == 0)
+                        continue;
+                    else {
+                        return false;
+                    }
+                }
+            }
+        }
+        return true;
+    }
+
+    public static String aqlExtToResExt(String fname) {
+        int dot = fname.lastIndexOf('.');
+        return fname.substring(0, dot + 1) + EXTENSION_AQL_RESULT;
+    }
+
+    public static void writeResultsToFile(File actualFile, JSONObject result) throws IOException, JSONException {
+        BufferedWriter writer = new BufferedWriter(new FileWriter(actualFile));
+        Results res = new Results(result);
+        for (String line : res) {
+            writer.write(line);
+            writer.newLine();
+        }
+        writer.close();
+    }
+
+    public static class Results implements Iterable<String> {
+        private final JSONArray chunks;
+
+        public Results(JSONObject result) throws JSONException {
+            chunks = result.getJSONArray("results");
+        }
+
+        public Iterator<String> iterator() {
+            return new ResultIterator(chunks);
+        }
+    }
+
+    public static class ResultIterator implements Iterator<String> {
+        private final JSONArray chunks;
+
+        private int chunkCounter = 0;
+        private int recordCounter = 0;
+
+        public ResultIterator(JSONArray chunks) {
+            this.chunks = chunks;
+        }
+
+        @Override
+        public boolean hasNext() {
+            JSONArray resultArray;
+            try {
+                resultArray = chunks.getJSONArray(chunkCounter);
+                if (resultArray.getString(recordCounter) != null) {
+                    return true;
+                }
+            } catch (JSONException e) {
+                return false;
+            }
+            return false;
+        }
+
+        @Override
+        public String next() throws NoSuchElementException {
+            JSONArray resultArray;
+            String item = "";
+
+            try {
+                resultArray = chunks.getJSONArray(chunkCounter);
+                item = resultArray.getString(recordCounter);
+                if (item == null) {
+                    throw new NoSuchElementException();
+                }
+                item = item.trim();
+
+                recordCounter++;
+                if (recordCounter >= resultArray.length()) {
+                    chunkCounter++;
+                    recordCounter = 0;
+                }
+            } catch (JSONException e) {
+                throw new NoSuchElementException(e.getMessage());
+            }
+            return item;
+        }
+
+        @Override
+        public void remove() {
+            throw new UnsupportedOperationException();
+        }
+    }
+
+    // Executes Query and returns results as JSONArray
+    public static JSONObject executeQuery(String str) throws Exception {
+
+        final String url = "http://localhost:19101/query";
+
+        // Create an instance of HttpClient.
+        HttpClient client = new HttpClient();
+
+        // Create a method instance.
+        GetMethod method = new GetMethod(url);
+
+        method.setQueryString(new NameValuePair[] { new NameValuePair("query", str) });
+
+        // Provide custom retry handler is necessary
+        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
+
+        JSONObject result = null;
+
+        try {
+            // Execute the method.
+            int statusCode = client.executeMethod(method);
+
+            // Check if the method was executed successfully.
+            if (statusCode != HttpStatus.SC_OK) {
+                System.err.println("Method failed: " + method.getStatusLine());
+            }
+
+            // Read the response body as String.
+            String responseBody = method.getResponseBodyAsString();
+
+            result = new JSONObject(responseBody);
+        } catch (Exception e) {
+            System.out.println(e.getMessage());
+            e.printStackTrace();
+        }
+        return result;
+    }
+
+    // To execute Update statements
+    // Insert and Delete statements are executed here
+    public static void executeUpdate(String str) throws Exception {
+        final String url = "http://localhost:19101/update";
+
+        // Create an instance of HttpClient.
+        HttpClient client = new HttpClient();
+
+        // Create a method instance.
+        GetMethod method = new GetMethod(url);
+
+        method.setQueryString(new NameValuePair[] { new NameValuePair("statements", str) });
+
+        // Provide custom retry handler is necessary
+        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
+
+        // Execute the method.
+        int statusCode = client.executeMethod(method);
+
+        // Check if the method was executed successfully.
+        if (statusCode != HttpStatus.SC_OK) {
+            System.err.println("Method failed: " + method.getStatusLine());
+        }
+    }
+
+    // To execute DDL and Update statements
+    // create type statement
+    // create dataset statement
+    // create index statement
+    // create dataverse statement
+    // create function statement
+    public static void executeDDL(String str) throws Exception {
+        final String url = "http://localhost:19101/ddl";
+
+        // Create an instance of HttpClient.
+        HttpClient client = new HttpClient();
+
+        // Create a method instance.
+        GetMethod method = new GetMethod(url);
+
+        method.setQueryString(new NameValuePair[] { new NameValuePair("ddl", str) });
+
+        // Provide custom retry handler is necessary
+        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
+
+        // Execute the method.
+        int statusCode = client.executeMethod(method);
+
+        // Check if the method was executed successfully.
+        if (statusCode != HttpStatus.SC_OK) {
+            System.err.println("Method failed: " + method.getStatusLine());
+        }
+    }
+
+    // Method that reads a DDL/Update/Query File
+    // and returns the contents as a string
+    // This string is later passed to REST API for execution.
+    public static String readTestFile(File testFile) throws Exception {
+        BufferedReader reader = new BufferedReader(new FileReader(testFile));
+        String line = null;
+        StringBuilder stringBuilder = new StringBuilder();
+        String ls = System.getProperty("line.separator");
+
+        while ((line = reader.readLine()) != null) {
+            stringBuilder.append(line);
+            stringBuilder.append(ls);
+        }
+
+        return stringBuilder.toString();
+    }
+
+    public static void executeManagixCommand(String command) throws ClassNotFoundException, NoSuchMethodException,
+            SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
+        if (managixExecuteMethod == null) {
+            Class clazz = Class.forName("edu.uci.ics.asterix.installer.test.AsterixInstallerIntegrationUtil");
+            managixExecuteMethod = clazz.getMethod("executeCommand", String.class);
+        }
+        managixExecuteMethod.invoke(null, command);
+    }
+
+    public static void executeTest(String actualPath, TestCaseContext testCaseCtx) throws Exception {
+
+        File testFile;
+        File expectedResultFile;
+        String statement;
+        List<TestFileContext> expectedResultFileCtxs;
+        List<TestFileContext> testFileCtxs;
+
+        int queryCount = 0;
+        JSONObject result;
+
+        List<CompilationUnit> cUnits = testCaseCtx.getTestCase().getCompilationUnit();
+        for (CompilationUnit cUnit : cUnits) {
+            LOGGER.info("[TEST]: " + testCaseCtx.getTestCase().getFilePath() + "/" + cUnit.getName());
+
+            testFileCtxs = testCaseCtx.getTestFiles(cUnit);
+            expectedResultFileCtxs = testCaseCtx.getExpectedResultFiles(cUnit);
+
+            for (TestFileContext ctx : testFileCtxs) {
+                testFile = ctx.getFile();
+                statement = TestsUtils.readTestFile(testFile);
+                try {
+                    switch (ctx.getType()) {
+                        case "ddl":
+                            TestsUtils.executeDDL(statement);
+                            break;
+                        case "update":
+                            TestsUtils.executeUpdate(statement);
+                            break;
+                        case "query":
+                            result = TestsUtils.executeQuery(statement);
+                            if (!cUnit.getExpectedError().isEmpty()) {
+                                if (!result.has("error")) {
+                                    throw new Exception("Test \"" + testFile + "\" FAILED!");
+                                }
+                            } else {
+                                expectedResultFile = expectedResultFileCtxs.get(queryCount).getFile();
+
+                                File actualFile = new File(actualPath + File.separator
+                                        + testCaseCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
+                                        + cUnit.getName() + ".adm");
+
+                                File actualResultFile = testCaseCtx.getActualResultFile(cUnit, new File(actualPath));
+                                actualResultFile.getParentFile().mkdirs();
+
+                                TestsUtils.writeResultsToFile(actualFile, result);
+
+                                TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
+                                        expectedResultFile, actualFile);
+                            }
+                            queryCount++;
+                            break;
+                        case "mgx":
+                            executeManagixCommand(statement);
+                            break;
+                        default:
+                            throw new IllegalArgumentException("No statements of type " + ctx.getType());
+                    }
+                } catch (Exception e) {
+                    if (cUnit.getExpectedError().isEmpty()) {
+                        throw new Exception("Test \"" + testFile + "\" FAILED!", e);
+                    }
+                }
+            }
+        }
+
+    }
+}
diff --git a/asterix-events/pom.xml b/asterix-events/pom.xml
new file mode 100644
index 0000000..7b187bb
--- /dev/null
+++ b/asterix-events/pom.xml
@@ -0,0 +1,170 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+          <artifactId>asterix</artifactId>
+          <groupId>edu.uci.ics.asterix</groupId>
+          <version>0.0.6-SNAPSHOT</version>
+  </parent>
+  <groupId>edu.uci.ics.asterix</groupId>
+  <artifactId>asterix-events</artifactId>
+  <version>0.0.6-SNAPSHOT</version>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <build>
+    <plugins>
+       <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.0.2</version>
+          <configuration>
+             <source>1.6</source>
+             <target>1.6</target>
+          </configuration>
+       </plugin>
+       <plugin>
+          <groupId>org.jvnet.jaxb2.maven2</groupId>
+          <artifactId>maven-jaxb2-plugin</artifactId>
+          <executions>
+            <execution>
+              <id>event</id>
+              <goals>
+                <goal>generate</goal>
+              </goals>
+              <configuration>
+                <args>
+                  <arg>-Xsetters</arg>
+                  <arg>-Xvalue-constructor</arg>
+                </args>
+                <plugins>
+                  <plugin>
+                    <groupId>org.jvnet.jaxb2_commons</groupId>
+                    <artifactId>jaxb2-basics</artifactId>
+                    <version>0.6.2</version>
+                  </plugin>
+                  <plugin>
+                    <groupId>org.jvnet.jaxb2_commons</groupId>
+                    <artifactId>jaxb2-value-constructor</artifactId>
+                    <version>3.0</version>
+                  </plugin>
+                </plugins>
+                <schemaDirectory>src/main/resources/schema</schemaDirectory>
+                <schemaIncludes>
+	          <include>event.xsd</include>
+	        </schemaIncludes>
+                <generatePackage>edu.uci.ics.asterix.event.schema.event</generatePackage>
+                <generateDirectory>${project.build.directory}/generated-sources/event</generateDirectory>
+              </configuration>
+            </execution>
+            <execution>
+              <id>pattern</id>
+              <goals>
+                <goal>generate</goal>
+              </goals>
+              <configuration>
+                <args>
+                  <arg>-Xsetters</arg>
+                  <arg>-Xvalue-constructor</arg>
+                </args>
+                <plugins>
+                  <plugin>
+                    <groupId>org.jvnet.jaxb2_commons</groupId>
+                    <artifactId>jaxb2-basics</artifactId>
+                    <version>0.6.2</version>
+                  </plugin>
+                  <plugin>
+                    <groupId>org.jvnet.jaxb2_commons</groupId>
+                    <artifactId>jaxb2-value-constructor</artifactId>
+                    <version>3.0</version>
+                  </plugin>
+                </plugins>
+                <schemaDirectory>src/main/resources/schema</schemaDirectory>
+                <schemaIncludes>
+	          <include>pattern.xsd</include>
+	        </schemaIncludes>
+                <generatePackage>edu.uci.ics.asterix.event.schema.pattern</generatePackage>
+                <generateDirectory>${project.build.directory}/generated-sources/pattern</generateDirectory>
+              </configuration>
+            </execution>
+            <execution>
+              <id>cluster</id>
+              <goals>
+                <goal>generate</goal>
+              </goals>
+              <configuration>
+                <args>
+                  <arg>-Xsetters</arg>
+                  <arg>-Xvalue-constructor</arg>
+                </args>
+                <plugins>
+                  <plugin>
+                    <groupId>org.jvnet.jaxb2_commons</groupId>
+                    <artifactId>jaxb2-basics</artifactId>
+                    <version>0.6.2</version>
+                  </plugin>
+                  <plugin>
+                    <groupId>org.jvnet.jaxb2_commons</groupId>
+                    <artifactId>jaxb2-value-constructor</artifactId>
+                    <version>3.0</version>
+                  </plugin>
+                </plugins>
+                <schemaDirectory>src/main/resources/schema</schemaDirectory>
+                <schemaIncludes>
+	          <include>cluster.xsd</include>
+	        </schemaIncludes>
+                <generatePackage>edu.uci.ics.asterix.event.schema.cluster</generatePackage>
+                <generateDirectory>${project.build.directory}/generated-sources/cluster</generateDirectory>
+                <bindingDirectory>src/main/resources/schema</bindingDirectory>
+                <bindingIncludes>
+                  <bindingInclude>jaxb-bindings.xjb</bindingInclude>
+                </bindingIncludes>
+              </configuration>
+            </execution>
+          </executions>
+       </plugin>
+       <plugin>
+         <artifactId>maven-assembly-plugin</artifactId>
+         <version>2.2-beta-2</version>
+         <executions>
+           <execution>
+             <configuration>
+               <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+             </configuration>
+             <phase>package</phase>
+             <goals>
+               <goal>attached</goal>
+             </goals>
+           </execution>
+         </executions>
+       </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>args4j</groupId>
+      <artifactId>args4j</artifactId>
+      <version>2.0.12</version>
+      <type>jar</type>
+      <scope>compile</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jvnet.jaxb2_commons</groupId>
+      <artifactId>jaxb2-value-constructor</artifactId>
+      <version>3.0</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>1.4</version>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/asterix/asterix-events/src/main/assembly/binary-assembly.xml b/asterix-events/src/main/assembly/binary-assembly.xml
similarity index 100%
rename from asterix/asterix-events/src/main/assembly/binary-assembly.xml
rename to asterix-events/src/main/assembly/binary-assembly.xml
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/api/ClusterInfo.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/api/ClusterInfo.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/api/ClusterInfo.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/api/ClusterInfo.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/api/NodeInfo.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/api/NodeInfo.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/api/NodeInfo.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/api/NodeInfo.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventConfig.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventConfig.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventConfig.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventConfig.java
diff --git a/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventDriver.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventDriver.java
new file mode 100644
index 0000000..b6a32e3
--- /dev/null
+++ b/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventDriver.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.event.driver;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import org.kohsuke.args4j.CmdLineParser;
+
+import edu.uci.ics.asterix.event.management.DefaultOutputHandler;
+import edu.uci.ics.asterix.event.management.EventUtil;
+import edu.uci.ics.asterix.event.management.EventrixClient;
+import edu.uci.ics.asterix.event.management.IOutputHandler;
+import edu.uci.ics.asterix.event.management.Randomizer;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.event.schema.cluster.Property;
+import edu.uci.ics.asterix.event.schema.event.Events;
+import edu.uci.ics.asterix.event.schema.pattern.Patterns;
+
+public class EventDriver {
+
+    public static final String CLIENT_NODE_ID = "client_node";
+    public static final Node CLIENT_NODE = new Node(CLIENT_NODE_ID, "127.0.0.1", null, null, null, null, null);
+
+    private static String eventsDir;
+    private static Events events;
+    private static Map<String, String> env = new HashMap<String, String>();
+    private static String scriptDirSuffix;
+
+    public static String getEventsDir() {
+        return eventsDir;
+    }
+
+    public static Events getEvents() {
+        return events;
+    }
+
+    public static Map<String, String> getEnvironment() {
+        return env;
+    }
+
+    public static String getStringifiedEnv(Cluster cluster) {
+        StringBuffer buffer = new StringBuffer();
+        for (Property p : cluster.getEnv().getProperty()) {
+            buffer.append(p.getKey() + "=" + p.getValue() + " ");
+        }
+        return buffer.toString();
+    }
+
+    public static Cluster initializeCluster(String path) throws JAXBException, IOException {
+        Cluster cluster = EventUtil.getCluster(path);
+        for (Property p : cluster.getEnv().getProperty()) {
+            env.put(p.getKey(), p.getValue());
+        }
+        return cluster;
+    }
+
+    public static Patterns initializePatterns(String path) throws JAXBException, IOException {
+        File file = new File(path);
+        JAXBContext ctx = JAXBContext.newInstance(Patterns.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+        return (Patterns) unmarshaller.unmarshal(file);
+    }
+
+    private static void initialize(EventConfig eventConfig) throws IOException, JAXBException {
+
+    }
+
+    public static EventrixClient getClient(String eventsDir, Cluster cluster, boolean dryRun) throws Exception {
+        return new EventrixClient(eventsDir, cluster, dryRun, new DefaultOutputHandler());
+    }
+
+    public static EventrixClient getClient(String eventsDir, Cluster cluster, boolean dryRun,
+            IOutputHandler outputHandler) throws Exception {
+        return new EventrixClient(eventsDir, cluster, dryRun, outputHandler);
+    }
+
+    public static void main(String[] args) throws Exception {
+        String eventsHome = System.getenv("EVENT_HOME");
+        if (eventsHome == null) {
+            throw new IllegalStateException("EVENT_HOME is not set");
+        }
+        eventsDir = eventsHome + File.separator + EventUtil.EVENTS_DIR;
+        EventConfig eventConfig = new EventConfig();
+        CmdLineParser parser = new CmdLineParser(eventConfig);
+        try {
+            parser.parseArgument(args);
+            if (eventConfig.help) {
+                parser.printUsage(System.out);
+            }
+            if (eventConfig.seed > 0) {
+                Randomizer.getInstance(eventConfig.seed);
+            }
+            Cluster cluster = initializeCluster(eventConfig.clusterPath);
+            Patterns patterns = initializePatterns(eventConfig.patternPath);
+            initialize(eventConfig);
+
+            if (!eventConfig.dryRun) {
+                prepare(cluster);
+            }
+            EventrixClient client = new EventrixClient(eventsDir, cluster, eventConfig.dryRun,
+                    new DefaultOutputHandler());
+            client.submit(patterns);
+            if (!eventConfig.dryRun) {
+                cleanup(cluster);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            parser.printUsage(System.err);
+        }
+    }
+
+    private static void prepare(Cluster cluster) throws IOException, InterruptedException {
+
+        scriptDirSuffix = "" + System.nanoTime();
+        List<String> args = new ArrayList<String>();
+        args.add(scriptDirSuffix);
+        Node clientNode = new Node();
+        clientNode.setId("client");
+        clientNode.setClusterIp("127.0.0.1");
+        for (Node node : cluster.getNode()) {
+            args.add(node.getClusterIp());
+        }
+        EventUtil.executeLocalScript(clientNode, eventsDir + "/" + "events" + "/" + "prepare.sh", args);
+    }
+
+    private static void cleanup(Cluster cluster) throws IOException, InterruptedException {
+        List<String> args = new ArrayList<String>();
+        args.add(scriptDirSuffix);
+        Node clientNode = new Node();
+        clientNode.setId("client");
+        clientNode.setClusterIp("127.0.0.1");
+        for (Node node : cluster.getNode()) {
+            args.add(node.getClusterIp());
+        }
+        EventUtil.executeLocalScript(clientNode, eventsDir + "/" + "events" + "/" + "cleanup.sh", args);
+    }
+}
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/DefaultOutputHandler.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/DefaultOutputHandler.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/DefaultOutputHandler.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/DefaultOutputHandler.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ErrorHandler.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ErrorHandler.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ErrorHandler.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ErrorHandler.java
diff --git a/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventExecutor.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventExecutor.java
new file mode 100644
index 0000000..352d787
--- /dev/null
+++ b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventExecutor.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.event.management;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringWriter;
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+
+import edu.uci.ics.asterix.event.driver.EventDriver;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.event.schema.cluster.Property;
+import edu.uci.ics.asterix.event.schema.pattern.Pattern;
+
+public class EventExecutor {
+
+    public static final String EVENTS_DIR = "events";
+    private static final String EXECUTE_SCRIPT = "execute.sh";
+    private static final String IP_LOCATION = "IP_LOCATION";
+    private static final String CLUSTER_ENV = "ENV";
+    private static final String SCRIPT = "SCRIPT";
+    private static final String ARGS = "ARGS";
+    private static final String DAEMON = "DAEMON";
+
+    public void executeEvent(Node node, String script, List<String> args, boolean isDaemon, Cluster cluster,
+            Pattern pattern, IOutputHandler outputHandler, EventrixClient client) throws IOException {
+        List<String> pargs = new ArrayList<String>();
+        pargs.add("/bin/bash");
+        pargs.add(client.getEventsDir() + File.separator + "scripts" + File.separator + EXECUTE_SCRIPT);
+        StringBuffer envBuffer = new StringBuffer(IP_LOCATION + "=" + node.getClusterIp() + " ");
+        boolean isMasterNode = node.getId().equals(cluster.getMasterNode().getId());
+
+        if (!node.getId().equals(EventDriver.CLIENT_NODE_ID) && cluster.getEnv() != null) {
+            for (Property p : cluster.getEnv().getProperty()) {
+                if (p.getKey().equals("JAVA_HOME")) {
+                    String val = node.getJavaHome() == null ? p.getValue() : node.getJavaHome();
+                    envBuffer.append(p.getKey() + "=" + val + " ");
+                } else if (p.getKey().equals("NC_JAVA_OPTS")) {
+                    if (!isMasterNode) {
+                        StringBuilder builder = new StringBuilder();
+                        builder.append("\"");
+                        String javaOpts = p.getValue();
+                        if (javaOpts != null) {
+                            builder.append(javaOpts);
+                        }
+                        builder.append("\"");
+                        envBuffer.append("JAVA_OPTS" + "=" + builder + " ");
+                    }
+                } else if (p.getKey().equals("CC_JAVA_OPTS")) {
+                    if (isMasterNode) {
+                        StringBuilder builder = new StringBuilder();
+                        builder.append("\"");
+                        String javaOpts = p.getValue();
+                        if (javaOpts != null) {
+                            builder.append(javaOpts);
+                        }
+                        builder.append("\"");
+                        envBuffer.append("JAVA_OPTS" + "=" + builder + " ");
+                    }
+                } else if (p.getKey().equals("LOG_DIR")) {
+                    String val = node.getLogDir() == null ? p.getValue() : node.getLogDir();
+                    envBuffer.append(p.getKey() + "=" + val + " ");
+                } else {
+                    envBuffer.append(p.getKey() + "=" + p.getValue() + " ");
+                }
+
+            }
+            pargs.add(cluster.getUsername() == null ? System.getProperty("user.name") : cluster.getUsername());
+        }
+
+        StringBuffer argBuffer = new StringBuffer();
+        if (args != null && args.size() > 0) {
+            for (String arg : args) {
+                argBuffer.append(arg + " ");
+            }
+        }
+
+        ProcessBuilder pb = new ProcessBuilder(pargs);
+        pb.environment().put(IP_LOCATION, node.getClusterIp());
+        pb.environment().put(CLUSTER_ENV, envBuffer.toString());
+        pb.environment().put(SCRIPT, script);
+        pb.environment().put(ARGS, argBuffer.toString());
+        pb.environment().put(DAEMON, isDaemon ? "true" : "false");
+
+        Process p = pb.start();
+        if (!isDaemon) {
+            BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
+            StringWriter writer = new StringWriter();
+            IOUtils.copy(bis, writer, "UTF-8");
+            String result = writer.getBuffer().toString();
+            OutputAnalysis analysis = outputHandler.reportEventOutput(pattern.getEvent(), result);
+            if (!analysis.isExpected()) {
+                throw new IOException(analysis.getErrorMessage() + result);
+            }
+        }
+    }
+}
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTask.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTask.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTask.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTask.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTaskReport.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTaskReport.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTaskReport.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventTaskReport.java
diff --git a/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventUtil.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventUtil.java
new file mode 100644
index 0000000..7cbb515
--- /dev/null
+++ b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventUtil.java
@@ -0,0 +1,265 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.event.management;
+
+import java.io.File;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
+
+import edu.uci.ics.asterix.event.driver.EventDriver;
+import edu.uci.ics.asterix.event.management.ValueType.Type;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.event.schema.event.Event;
+import edu.uci.ics.asterix.event.schema.event.Events;
+import edu.uci.ics.asterix.event.schema.pattern.Pattern;
+
+public class EventUtil {
+
+    public static final String EVENTS_DIR = "events";
+    public static final String CLUSTER_CONF = "config/cluster.xml";
+    public static final String PATTERN_CONF = "config/pattern.xml";
+    public static final DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+
+    private static final String IP_LOCATION = "IP_LOCATION";
+    private static final String CLUSTER_ENV = "ENV";
+    private static final String SCRIPT = "SCRIPT";
+    private static final String ARGS = "ARGS";
+    private static final String EXECUTE_SCRIPT = "events/execute.sh";
+    private static final String LOCALHOST = "localhost";
+    private static final String LOCALHOST_IP = "127.0.0.1";
+
+    public static Cluster getCluster(String clusterConfigurationPath) throws JAXBException {
+        File file = new File(clusterConfigurationPath);
+        JAXBContext ctx = JAXBContext.newInstance(Cluster.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+        Cluster cluster = (Cluster) unmarshaller.unmarshal(file);
+        if (cluster.getMasterNode().getClusterIp().equals(LOCALHOST)) {
+            cluster.getMasterNode().setClusterIp(LOCALHOST_IP);
+        }
+        for (Node node : cluster.getNode()) {
+            if (node.getClusterIp().equals(LOCALHOST)) {
+                node.setClusterIp(LOCALHOST_IP);
+            }
+        }
+        return cluster;
+    }
+
+    public static long parseTimeInterval(ValueType v, String unit) throws IllegalArgumentException {
+        int val = 0;
+        switch (v.getType()) {
+            case ABS:
+                val = Integer.parseInt(v.getAbsoluteValue());
+                break;
+            case RANDOM_MIN_MAX:
+                val = Randomizer.getInstance().getRandomInt(v.getMin(), v.getMax());
+                break;
+            case RANDOM_RANGE:
+                String[] values = v.getRangeSet();
+                val = Integer.parseInt(values[Randomizer.getInstance().getRandomInt(0, values.length - 1)]);
+                break;
+        }
+        return computeInterval(val, unit);
+    }
+
+    public static long parseTimeInterval(String v, String unit) throws IllegalArgumentException {
+        int value = Integer.parseInt(v);
+        return computeInterval(value, unit);
+    }
+
+    private static long computeInterval(int val, String unit) {
+        int vmult = 1;
+        if ("hr".equalsIgnoreCase(unit)) {
+            vmult = 3600 * 1000;
+        } else if ("min".equalsIgnoreCase(unit)) {
+            vmult = 60 * 1000;
+        } else if ("sec".equalsIgnoreCase(unit)) {
+            vmult = 1000;
+        } else
+            throw new IllegalArgumentException(" invalid unit value specified for frequency (hr,min,sec)");
+        return val * vmult;
+
+    }
+
+    public static Event getEvent(Pattern pattern, Events events) {
+        for (Event event : events.getEvent()) {
+            if (event.getType().equals(pattern.getEvent().getType())) {
+                return event;
+            }
+        }
+        throw new IllegalArgumentException(" Unknown event type" + pattern.getEvent().getType());
+    }
+
+    public static Node getEventLocation(Pattern pattern, List<Node> candidateLocations, Cluster cluster) {
+        ValueType value = new ValueType(pattern.getEvent().getNodeid().getValue());
+        Node location = null;
+        Type vtype = value.getType();
+
+        switch (vtype) {
+            case ABS:
+                location = getNodeFromId(value.getAbsoluteValue(), cluster);
+                break;
+            case RANDOM_RANGE:
+                int nodeIndex = Randomizer.getInstance().getRandomInt(0, candidateLocations.size() - 1);
+                location = candidateLocations.get(nodeIndex);
+                break;
+            case RANDOM_MIN_MAX:
+                throw new IllegalStateException(" Canont configure a min max value range for location");
+        }
+        return location;
+
+    }
+
+    public static List<Node> getCandidateLocations(Pattern pattern, Cluster cluster) {
+        ValueType value = new ValueType(pattern.getEvent().getNodeid().getValue());
+        List<Node> candidateList = new ArrayList<Node>();
+        switch (value.getType()) {
+            case ABS:
+                candidateList.add(getNodeFromId(value.getAbsoluteValue(), cluster));
+                break;
+            case RANDOM_RANGE:
+                boolean anyOption = false;
+                String[] values = value.getRangeSet();
+                for (String v : values) {
+                    if (v.equalsIgnoreCase("ANY")) {
+                        anyOption = true;
+                    }
+                }
+                if (anyOption) {
+                    for (Node node : cluster.getNode()) {
+                        candidateList.add(node);
+                    }
+                } else {
+                    boolean found = false;
+                    for (String v : values) {
+                        for (Node node : cluster.getNode()) {
+                            if (node.getId().equals(v)) {
+                                candidateList.add(node);
+                                found = true;
+                                break;
+                            }
+                        }
+                        if (!found) {
+                            throw new IllegalStateException("Unknonw nodeId : " + v);
+                        }
+                        found = false;
+                    }
+
+                }
+                String[] excluded = value.getRangeExcluded();
+                if (excluded != null && excluded.length > 0) {
+                    List<Node> markedForRemoval = new ArrayList<Node>();
+                    for (String exclusion : excluded) {
+                        for (Node node : candidateList) {
+                            if (node.getId().equals(exclusion)) {
+                                markedForRemoval.add(node);
+                            }
+                        }
+                    }
+                    candidateList.removeAll(markedForRemoval);
+                }
+                break;
+            case RANDOM_MIN_MAX:
+                throw new IllegalStateException(" Invalid value configured for location");
+        }
+        return candidateList;
+    }
+
+    private static Node getNodeFromId(String nodeid, Cluster cluster) {
+        if (nodeid.equals(EventDriver.CLIENT_NODE.getId())) {
+            return EventDriver.CLIENT_NODE;
+        }
+
+        if (nodeid.equals(cluster.getMasterNode().getId())) {
+            String logDir = cluster.getMasterNode().getLogDir() == null ? cluster.getLogDir() : cluster.getMasterNode()
+                    .getLogDir();
+            String javaHome = cluster.getMasterNode().getJavaHome() == null ? cluster.getJavaHome() : cluster
+                    .getMasterNode().getJavaHome();
+            return new Node(cluster.getMasterNode().getId(), cluster.getMasterNode().getClusterIp(), javaHome, logDir,
+                    null, null, null);
+        }
+
+        List<Node> nodeList = cluster.getNode();
+        for (Node node : nodeList) {
+            if (node.getId().equals(nodeid)) {
+                return node;
+            }
+        }
+        StringBuffer buffer = new StringBuffer();
+        buffer.append(EventDriver.CLIENT_NODE.getId() + ",");
+        buffer.append(cluster.getMasterNode().getId() + ",");
+        for (Node v : cluster.getNode()) {
+            buffer.append(v.getId() + ",");
+        }
+        buffer.deleteCharAt(buffer.length() - 1);
+        throw new IllegalArgumentException("Unknown node id :" + nodeid + " valid ids:" + buffer);
+    }
+
+    public static void executeEventScript(Node node, String script, List<String> args, Cluster cluster)
+            throws IOException, InterruptedException {
+        List<String> pargs = new ArrayList<String>();
+        pargs.add("/bin/bash");
+        pargs.add(EventDriver.getEventsDir() + "/" + EXECUTE_SCRIPT);
+        StringBuffer argBuffer = new StringBuffer();
+        String env = EventDriver.getStringifiedEnv(cluster) + " " + IP_LOCATION + "=" + node.getClusterIp();
+        if (args != null) {
+            for (String arg : args) {
+                argBuffer.append(arg + " ");
+            }
+        }
+        ProcessBuilder pb = new ProcessBuilder(pargs);
+        pb.environment().putAll(EventDriver.getEnvironment());
+        pb.environment().put(IP_LOCATION, node.getClusterIp());
+        pb.environment().put(CLUSTER_ENV, env);
+        pb.environment().put(SCRIPT, script);
+        pb.environment().put(ARGS, argBuffer.toString());
+        pb.start();
+    }
+
+    public static void executeLocalScript(Node node, String script, List<String> args) throws IOException,
+            InterruptedException {
+        List<String> pargs = new ArrayList<String>();
+        pargs.add("/bin/bash");
+        pargs.add(script);
+        if (args != null) {
+            pargs.addAll(args);
+        }
+        ProcessBuilder pb = new ProcessBuilder(pargs);
+        pb.environment().putAll(EventDriver.getEnvironment());
+        pb.environment().put(IP_LOCATION, node.getClusterIp());
+        pb.start();
+    }
+
+    public static List<String> getEventArgs(Pattern pattern) {
+        List<String> pargs = new ArrayList<String>();
+        if (pattern.getEvent().getPargs() == null) {
+            return pargs;
+        }
+        String[] args = pattern.getEvent().getPargs().split(" ");
+        for (String arg : args) {
+            pargs.add(arg.trim());
+        }
+        return pargs;
+    }
+
+}
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventrixClient.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventrixClient.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventrixClient.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventrixClient.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IOutputHandler.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IOutputHandler.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IOutputHandler.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IOutputHandler.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IPatternListener.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IPatternListener.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IPatternListener.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/IPatternListener.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/OutputAnalysis.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/OutputAnalysis.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/OutputAnalysis.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/OutputAnalysis.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/Randomizer.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/Randomizer.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/Randomizer.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/Randomizer.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ValueType.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ValueType.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ValueType.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/management/ValueType.java
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/xml/PatternParser.java b/asterix-events/src/main/java/edu/uci/ics/asterix/event/xml/PatternParser.java
similarity index 100%
rename from asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/xml/PatternParser.java
rename to asterix-events/src/main/java/edu/uci/ics/asterix/event/xml/PatternParser.java
diff --git a/asterix-events/src/main/resources/events/backup/backup.sh b/asterix-events/src/main/resources/events/backup/backup.sh
new file mode 100755
index 0000000..fc6e3cc
--- /dev/null
+++ b/asterix-events/src/main/resources/events/backup/backup.sh
@@ -0,0 +1,70 @@
+WORKING_DIR=$1
+ASTERIX_INSTANCE_NAME=$2
+ASTERIX_IODEVICES=$3
+NODE_STORE=$4
+ASTERIX_ROOT_METADATA_DIR=$5
+TXN_LOG_DIR=$6
+BACKUP_ID=$7
+BACKUP_DIR=$8
+BACKUP_TYPE=$9
+NODE_ID=${10}
+
+nodeIODevices=$(echo $ASTERIX_IODEVICES | tr "," "\n")
+
+if [ $BACKUP_TYPE == "hdfs" ];
+then
+  HDFS_URL=${11}
+  HADOOP_VERSION=${12}
+  export HADOOP_HOME=$WORKING_DIR/hadoop-$HADOOP_VERSION
+  index=1
+  for nodeIODevice in $nodeIODevices
+  do
+    STORE_DIR=$nodeIODevice/$NODE_STORE
+    NODE_BACKUP_DIR=$BACKUP_DIR/$ASTERIX_INSTANCE_NAME/$BACKUP_ID/$NODE_ID/
+   
+    # make the destination directory 
+    $HADOOP_HOME/bin/hadoop fs -mkdir $STORE_DIR $HDFS_URL/$NODE_BACKUP_DIR
+
+    # copy store directory
+    $HADOOP_HOME/bin/hadoop fs -copyFromLocal $STORE_DIR $HDFS_URL/$NODE_BACKUP_DIR/
+
+    # copy asterix root metadata directory and log directory from the primary(first) iodevice
+    if [ $index -eq 1 ];
+    then
+      # copy asterix root metadata directory
+      $HADOOP_HOME/bin/hadoop fs -copyFromLocal $nodeIODevice/$ASTERIX_ROOT_METADATA_DIR $HDFS_URL/$NODE_BACKUP_DIR/
+
+      # copy log directory 
+      $HADOOP_HOME/bin/hadoop fs -copyFromLocal $TXN_LOG_DIR $HDFS_URL/$NODE_BACKUP_DIR/
+    fi
+
+    index=`expr $index + 1`
+  done
+else 
+  index=1
+  for nodeIODevice in $nodeIODevices
+  do
+    STORE_DIR=$nodeIODevice/$NODE_STORE
+    NODE_BACKUP_DIR=$BACKUP_DIR/$ASTERIX_INSTANCE_NAME/$BACKUP_ID/$NODE_ID
+
+    # create the backup directory, if it does not exists
+    if [ ! -d $NODE_BACKUP_DIR ];
+    then
+      mkdir -p $NODE_BACKUP_DIR
+    fi
+
+    # copy store directory
+    cp -r $STORE_DIR $NODE_BACKUP_DIR/
+
+    # copy asterix root metadata directory and log directory from the primary(first) iodevice
+    if [ $index -eq 1 ];
+    then
+      cp -r $nodeIODevice/$ASTERIX_ROOT_METADATA_DIR  $NODE_BACKUP_DIR/
+
+      # copy log directory
+      cp -r $TXN_LOG_DIR $NODE_BACKUP_DIR/
+    fi
+
+    index=`expr $index + 1`
+  done
+fi
diff --git a/asterix/asterix-events/src/main/resources/events/cc_failure/cc_failure.sh b/asterix-events/src/main/resources/events/cc_failure/cc_failure.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/cc_failure/cc_failure.sh
rename to asterix-events/src/main/resources/events/cc_failure/cc_failure.sh
diff --git a/asterix-events/src/main/resources/events/cc_start/cc_start.sh b/asterix-events/src/main/resources/events/cc_start/cc_start.sh
new file mode 100755
index 0000000..003d9cf
--- /dev/null
+++ b/asterix-events/src/main/resources/events/cc_start/cc_start.sh
@@ -0,0 +1,6 @@
+if [ ! -d $LOG_DIR ]; 
+then 
+  mkdir -p $LOG_DIR
+fi
+cd $WORKING_DIR
+$ASTERIX_HOME/bin/asterixcc -client-net-ip-address $CLIENT_NET_IP -client-net-port 1098 -cluster-net-ip-address $CLUSTER_NET_IP -cluster-net-port 1099 -http-port 8888  &> $LOG_DIR/cc.log
diff --git a/asterix/asterix-events/src/main/resources/events/events.xml b/asterix-events/src/main/resources/events/events.xml
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/events.xml
rename to asterix-events/src/main/resources/events/events.xml
diff --git a/asterix/asterix-events/src/main/resources/events/file/delete.sh b/asterix-events/src/main/resources/events/file/delete.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/file/delete.sh
rename to asterix-events/src/main/resources/events/file/delete.sh
diff --git a/asterix/asterix-events/src/main/resources/events/file/dir_transfer.sh b/asterix-events/src/main/resources/events/file/dir_transfer.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/file/dir_transfer.sh
rename to asterix-events/src/main/resources/events/file/dir_transfer.sh
diff --git a/asterix/asterix-events/src/main/resources/events/file/transfer.sh b/asterix-events/src/main/resources/events/file/transfer.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/file/transfer.sh
rename to asterix-events/src/main/resources/events/file/transfer.sh
diff --git a/asterix/asterix-events/src/main/resources/events/hdfs/delete.sh b/asterix-events/src/main/resources/events/hdfs/delete.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/hdfs/delete.sh
rename to asterix-events/src/main/resources/events/hdfs/delete.sh
diff --git a/asterix/asterix-events/src/main/resources/events/node_failure/nc_failure.sh b/asterix-events/src/main/resources/events/node_failure/nc_failure.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/node_failure/nc_failure.sh
rename to asterix-events/src/main/resources/events/node_failure/nc_failure.sh
diff --git a/asterix/asterix-events/src/main/resources/events/node_info/node_info.sh b/asterix-events/src/main/resources/events/node_info/node_info.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/node_info/node_info.sh
rename to asterix-events/src/main/resources/events/node_info/node_info.sh
diff --git a/asterix-events/src/main/resources/events/node_join/nc_join.sh b/asterix-events/src/main/resources/events/node_join/nc_join.sh
new file mode 100755
index 0000000..d8bbbd2
--- /dev/null
+++ b/asterix-events/src/main/resources/events/node_join/nc_join.sh
@@ -0,0 +1,9 @@
+CC_HOST=$1
+NC_ID=$2
+IO_DEVICES=$3
+if [ ! -d $LOG_DIR ]; 
+then 
+  mkdir -p $LOG_DIR
+fi
+cd $WORKING_DIR
+$ASTERIX_HOME/bin/asterixnc -node-id $NC_ID -cc-host $CC_HOST -cc-port 1099 -cluster-net-ip-address $IP_LOCATION  -data-ip-address $IP_LOCATION -iodevices $IO_DEVICES -result-ip-address $IP_LOCATION &> $LOG_DIR/${NC_ID}.log
diff --git a/asterix/asterix-events/src/main/resources/events/node_restart/nc_restart.sh b/asterix-events/src/main/resources/events/node_restart/nc_restart.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/events/node_restart/nc_restart.sh
rename to asterix-events/src/main/resources/events/node_restart/nc_restart.sh
diff --git a/asterix-events/src/main/resources/events/restore/restore.sh b/asterix-events/src/main/resources/events/restore/restore.sh
new file mode 100755
index 0000000..88c5a6f
--- /dev/null
+++ b/asterix-events/src/main/resources/events/restore/restore.sh
@@ -0,0 +1,76 @@
+WORKING_DIR=$1
+ASTERIX_INSTANCE_NAME=$2
+ASTERIX_IODEVICES=$3
+NODE_STORE=$4
+ASTERIX_ROOT_METADATA_DIR=$5
+TXN_LOG_DIR=$6
+BACKUP_ID=$7
+BACKUP_DIR=$8
+BACKUP_TYPE=$9
+NODE_ID=${10}
+HDFS_URL=${11}
+HADOOP_VERSION=${12}
+HADOOP_HOME=$WORKING_DIR/hadoop-$HADOOP_VERSION
+
+iodevices=$(echo $ASTERIX_IODEVICES | tr "," "\n")
+
+index=1
+for iodevice in $iodevices
+do
+  NODE_BACKUP_DIR=$BACKUP_DIR/$ASTERIX_INSTANCE_NAME/$BACKUP_ID/$NODE_ID
+
+  # remove the existing store directory
+  STORE_DIR=$iodevice/$NODE_STORE
+
+  # if STORE_DIR ends with a /, remove it
+  if [ ${STORE_DIR:${#STORE_DIR}-1} == "/" ];
+  then
+    STORE_DIR=${STORE_DIR:0:${#STORE_DIR}-1}
+  fi
+
+  DEST_STORE_DIR=${STORE_DIR%/*}
+  SOURCE_STORE_DIR=${NODE_STORE##*/}
+  rm -rf $DEST_STORE_DIR/$SOURCE_STORE_DIR
+
+  # remove the existing log directory
+  DEST_LOG_DIR=$TXN_LOG_DIR
+  rm -rf $DEST_LOG_DIR/*
+  TXN_LOG_DIR_NAME=${TXN_LOG_DIR%/*}
+
+  # remove the existing asterix metadata directory
+  rm -rf $iodevice/$ASTERIX_ROOT_METADATA_DIR
+
+  if [ $BACKUP_TYPE == "hdfs" ];
+  then
+      # RESTORE FROM HDFS BACKUP
+
+      # copy store directory
+      $HADOOP_HOME/bin/hadoop fs -copyToLocal $HDFS_URL/$NODE_BACKUP_DIR/$SOURCE_STORE_DIR  $DEST_STORE_DIR/ 
+
+      # copy asterix metadata root directory and txn log directory
+      if [ $index -eq 1 ];
+      then
+        $HADOOP_HOME/bin/hadoop fs -copyToLocal $HDFS_URL/$NODE_BACKUP_DIR/$ASTERIX_ROOT_METADATA_DIR $iodevice/
+
+        # copy transaction logs directory
+        $HADOOP_HOME/bin/hadoop fs -copyToLocal $HDFS_URL/$NODE_BACKUP_DIR/$TXN_LOG_DIR_NAME $$TXN_LOG_DIR/
+      fi
+
+  else
+
+      # RESTORE FROM LOCAL BACKUP
+      # copy store directory
+      cp  -r $NODE_BACKUP_DIR/$SOURCE_STORE_DIR  $DEST_STORE_DIR/ 
+
+      # copy asterix metadata root directory and txn log directory
+      if [ $index -eq 1 ];
+      then
+        cp -r $NODE_BACKUP_DIR/$ASTERIX_ROOT_METADATA_DIR $iodevice/
+
+        # copy transaction logs directory
+        cp -r $NODE_BACKUP_DIR/$TXN_LOG_DIR_NAME $TXN_LOG_DIR/
+      fi
+
+  fi
+  index=`expr $index + 1`
+done
diff --git a/asterix-events/src/main/resources/schema/cluster.xsd b/asterix-events/src/main/resources/schema/cluster.xsd
new file mode 100644
index 0000000..718d7b0
--- /dev/null
+++ b/asterix-events/src/main/resources/schema/cluster.xsd
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+	xmlns:cl="cluster" targetNamespace="cluster" elementFormDefault="qualified">
+
+	<!-- definition of simple types -->
+	<xs:element name="name" type="xs:string" />
+	<xs:element name="log_dir" type="xs:string" />
+	<xs:element name="txn_log_dir" type="xs:string" />
+	<xs:element name="id" type="xs:string" />
+	<xs:element name="client_ip" type="xs:string" />
+	<xs:element name="cluster_ip" type="xs:string" />
+	<xs:element name="key" type="xs:string" />
+	<xs:element name="value" type="xs:string" />
+	<xs:element name="dir" type="xs:string" />
+	<xs:element name="NFS" type="xs:boolean" />
+	<xs:element name="store" type="xs:string" />
+	<xs:element name="iodevices" type="xs:string" />
+	<xs:element name="java_home" type="xs:string" />
+	<xs:element name="username" type="xs:string" />
+
+	<!-- definition of complex elements -->
+	<xs:element name="working_dir">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="cl:dir" />
+				<xs:element ref="cl:NFS" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+	<xs:element name="master_node">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="cl:id" />
+				<xs:element ref="cl:client_ip" />
+				<xs:element ref="cl:cluster_ip" />
+				<xs:element ref="cl:java_home" minOccurs="0" />
+				<xs:element ref="cl:log_dir" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+	<xs:element name="property">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="cl:key" />
+				<xs:element ref="cl:value" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+	<xs:element name="env">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="cl:property" minOccurs="0" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+	<xs:element name="node">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="cl:id" />
+				<xs:element ref="cl:cluster_ip" />
+				<xs:element ref="cl:java_home" minOccurs="0" />
+				<xs:element ref="cl:log_dir" minOccurs="0" />
+				<xs:element ref="cl:txn_log_dir" minOccurs="0" />
+				<xs:element ref="cl:store" minOccurs="0" />
+				<xs:element ref="cl:iodevices" minOccurs="0" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+	<xs:element name="cluster">
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element ref="cl:name" />
+				<xs:element ref="cl:username" />
+				<xs:element ref="cl:env" minOccurs="0" />
+				<xs:element ref="cl:java_home" minOccurs="0" />
+				<xs:element ref="cl:log_dir" minOccurs="0" />
+				<xs:element ref="cl:txn_log_dir" minOccurs="0" />
+				<xs:element ref="cl:store" minOccurs="0" />
+				<xs:element ref="cl:iodevices" minOccurs="0" />
+				<xs:element ref="cl:working_dir" />
+				<xs:element ref="cl:master_node" />
+				<xs:element ref="cl:node" maxOccurs="unbounded" />
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+
+</xs:schema>     
diff --git a/asterix/asterix-events/src/main/resources/schema/event.xsd b/asterix-events/src/main/resources/schema/event.xsd
similarity index 100%
rename from asterix/asterix-events/src/main/resources/schema/event.xsd
rename to asterix-events/src/main/resources/schema/event.xsd
diff --git a/asterix/asterix-events/src/main/resources/schema/jaxb-bindings.xjb b/asterix-events/src/main/resources/schema/jaxb-bindings.xjb
similarity index 100%
rename from asterix/asterix-events/src/main/resources/schema/jaxb-bindings.xjb
rename to asterix-events/src/main/resources/schema/jaxb-bindings.xjb
diff --git a/asterix/asterix-events/src/main/resources/schema/pattern.xsd b/asterix-events/src/main/resources/schema/pattern.xsd
similarity index 100%
rename from asterix/asterix-events/src/main/resources/schema/pattern.xsd
rename to asterix-events/src/main/resources/schema/pattern.xsd
diff --git a/asterix/asterix-events/src/main/resources/scripts/execute.sh b/asterix-events/src/main/resources/scripts/execute.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/scripts/execute.sh
rename to asterix-events/src/main/resources/scripts/execute.sh
diff --git a/asterix/asterix-events/src/main/resources/scripts/prepare.sh b/asterix-events/src/main/resources/scripts/prepare.sh
similarity index 100%
rename from asterix/asterix-events/src/main/resources/scripts/prepare.sh
rename to asterix-events/src/main/resources/scripts/prepare.sh
diff --git a/asterix-external-data/pom.xml b/asterix-external-data/pom.xml
new file mode 100644
index 0000000..2e99b7c
--- /dev/null
+++ b/asterix-external-data/pom.xml
@@ -0,0 +1,139 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-external-data</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>appassembler-maven-plugin</artifactId>
+				<version>1.0</version>
+				<executions>
+					<execution>
+						<configuration>
+							<programs>
+								<program>
+									<mainClass>edu.uci.ics.asterix.drivers.AsterixWebServer</mainClass>
+									<name>asterix-web</name>
+								</program>
+								<program>
+									<mainClass>edu.uci.ics.asterix.drivers.AsterixClientDriver</mainClass>
+									<name>asterix-cmd</name>
+								</program>
+							</programs>
+							<repositoryLayout>flat</repositoryLayout>
+							<repositoryName>lib</repositoryName>
+						</configuration>
+						<phase>package</phase>
+						<goals>
+							<goal>assemble</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.7.2</version>
+				<configuration>
+					<!-- doesn't work from m2eclipse, currently <additionalClasspathElements> 
+						<additionalClasspathElement>${basedir}/src/main/resources</additionalClasspathElement> 
+						</additionalClasspathElements> -->
+					<forkMode>pertest</forkMode>
+					<argLine>-enableassertions -Xmx${test.heap.size}m
+						-Dfile.encoding=UTF-8
+						-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
+					<includes>
+						<include>**/*TestSuite.java</include>
+						<include>**/*Test.java</include>
+					</includes>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>javax.servlet</groupId>
+			<artifactId>servlet-api</artifactId>
+			<version>2.5</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.8.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-om</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-runtime</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>com.kenai.nbpwr</groupId>
+			<artifactId>org-apache-commons-io</artifactId>
+			<version>1.3.1-201002241208</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.twitter4j</groupId>
+			<artifactId>twitter4j-core</artifactId>
+			<version>2.2.3</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-core</artifactId>
+			<version>0.20.2</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>net.java.dev.rome</groupId>
+			<artifactId>rome-fetcher</artifactId>
+			<version>1.0.0</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>rome</groupId>
+			<artifactId>rome</artifactId>
+			<version>1.0.1-modified-01</version>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-dataflow-hadoop</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>jdom</groupId>
+			<artifactId>jdom</artifactId>
+			<version>1.0</version>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/CNNFeedAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/CNNFeedAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/CNNFeedAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/CNNFeedAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HDFSAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HDFSAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HDFSAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HDFSAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HiveAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HiveAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HiveAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/HiveAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IGenericDatasetAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IGenericDatasetAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IGenericDatasetAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/IGenericDatasetAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/ITypedDatasetAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/ITypedDatasetAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/ITypedDatasetAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/ITypedDatasetAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/NCFileSystemAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/NCFileSystemAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/NCFileSystemAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/NCFileSystemAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/PullBasedTwitterAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/PullBasedTwitterAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/PullBasedTwitterAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/PullBasedTwitterAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/RSSFeedAdapterFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/RSSFeedAdapterFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/RSSFeedAdapterFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/adapter/factory/RSSFeedAdapterFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/ExternalDataScanOperatorDescriptor.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/ExternalDataScanOperatorDescriptor.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/ExternalDataScanOperatorDescriptor.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/ExternalDataScanOperatorDescriptor.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorDescriptor.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorDescriptor.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorDescriptor.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorDescriptor.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorNodePushable.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorNodePushable.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorNodePushable.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedIntakeOperatorNodePushable.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorDescriptor.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorDescriptor.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorDescriptor.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorDescriptor.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorNodePushable.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorNodePushable.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorNodePushable.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/data/operator/FeedMessageOperatorNodePushable.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AbstractDatasourceAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AbstractDatasourceAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AbstractDatasourceAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AbstractDatasourceAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AdapterIdentifier.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AdapterIdentifier.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AdapterIdentifier.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/AdapterIdentifier.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/CNNFeedAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/CNNFeedAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/CNNFeedAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/CNNFeedAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/FileSystemBasedAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/FileSystemBasedAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/FileSystemBasedAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/FileSystemBasedAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HDFSAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HDFSAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HDFSAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HDFSAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HiveAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HiveAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HiveAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/HiveAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IDatasourceAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IDatasourceAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IDatasourceAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IDatasourceAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IPullBasedFeedClient.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IPullBasedFeedClient.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IPullBasedFeedClient.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/IPullBasedFeedClient.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/ITypedDatasourceAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/ITypedDatasourceAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/ITypedDatasourceAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/ITypedDatasourceAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/NCFileSystemAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/NCFileSystemAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/NCFileSystemAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/NCFileSystemAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedFeedClient.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedFeedClient.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedFeedClient.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedFeedClient.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterFeedClient.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterFeedClient.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterFeedClient.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/PullBasedTwitterFeedClient.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedAdapter.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedClient.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedClient.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedClient.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/dataset/adapter/RSSFeedClient.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/AlterFeedMessage.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/AlterFeedMessage.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/AlterFeedMessage.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/AlterFeedMessage.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedId.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedId.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedId.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedId.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedManager.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedManager.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedManager.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedManager.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedMessage.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedMessage.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedMessage.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/FeedMessage.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedManager.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedManager.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedManager.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedManager.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedMessage.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedMessage.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedMessage.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/feed/lifecycle/IFeedMessage.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolver.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolver.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolver.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolver.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolverFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolverFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolverFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/DNSResolverFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolver.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolver.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolver.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolver.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolverFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolverFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolverFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/INodeResolverFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentitiyResolverFactory.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentitiyResolverFactory.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentitiyResolverFactory.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentitiyResolverFactory.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentityResolver.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentityResolver.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentityResolver.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/external/util/IdentityResolver.java
diff --git a/asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/feed/managed/adapter/IManagedFeedAdapter.java b/asterix-external-data/src/main/java/edu/uci/ics/asterix/feed/managed/adapter/IManagedFeedAdapter.java
similarity index 100%
rename from asterix/asterix-external-data/src/main/java/edu/uci/ics/asterix/feed/managed/adapter/IManagedFeedAdapter.java
rename to asterix-external-data/src/main/java/edu/uci/ics/asterix/feed/managed/adapter/IManagedFeedAdapter.java
diff --git a/asterix-installer/pom.xml b/asterix-installer/pom.xml
new file mode 100644
index 0000000..4b1add5
--- /dev/null
+++ b/asterix-installer/pom.xml
@@ -0,0 +1,188 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+          <artifactId>asterix</artifactId>
+          <groupId>edu.uci.ics.asterix</groupId>
+          <version>0.0.6-SNAPSHOT</version>
+  </parent>
+  <artifactId>asterix-installer</artifactId>
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.6</source>
+					<target>1.6</target>
+				</configuration>
+			</plugin>
+
+			<plugin>
+				<groupId>org.jvnet.jaxb2.maven2</groupId>
+				<artifactId>maven-jaxb2-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>configuration</id>
+						<goals>
+							<goal>generate</goal>
+						</goals>
+						<configuration>
+							<args>
+								<arg>-Xsetters</arg>
+								<arg>-Xvalue-constructor</arg>
+							</args>
+							<plugins>
+								<plugin>
+									<groupId>org.jvnet.jaxb2_commons</groupId>
+									<artifactId>jaxb2-basics</artifactId>
+									<version>0.6.2</version>
+								</plugin>
+								<plugin>
+									<groupId>org.jvnet.jaxb2_commons</groupId>
+									<artifactId>jaxb2-value-constructor</artifactId>
+									<version>3.0</version>
+								</plugin>
+							</plugins>
+							<schemaDirectory>src/main/resources/schema</schemaDirectory>
+							<schemaIncludes>
+								<include>installer-conf.xsd</include>
+							</schemaIncludes>
+							<generatePackage>edu.uci.ics.asterix.installer.schema.conf</generatePackage>
+							<generateDirectory>${project.build.directory}/generated-sources/configuration</generateDirectory>
+						</configuration>
+					</execution>
+					<execution>
+						<id>cluster</id>
+						<goals>
+							<goal>generate</goal>
+						</goals>
+						<configuration>
+							<args>
+								<arg>-Xsetters</arg>
+								<arg>-Xvalue-constructor</arg>
+							</args>
+							<schemaDirectory>src/main/resources/schema</schemaDirectory>
+							<schemaIncludes>
+								<include>cluster.xsd</include>
+							</schemaIncludes>
+							<generatePackage>edu.uci.ics.asterix.installer.schema.cluster</generatePackage>
+							<bindingDirectory>src/main/resources/schema</bindingDirectory>
+							<bindingIncludes>
+								<bindingInclude>jaxb-bindings.xjb</bindingInclude>
+							</bindingIncludes>
+							<generateDirectory>${project.build.directory}/generated-sources/cluster</generateDirectory>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.2-beta-5</version>
+				<executions>
+					<execution>
+						<configuration>
+							<descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+						</configuration>
+						<phase>package</phase>
+						<goals>
+							<goal>attached</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-failsafe-plugin</artifactId>
+				<version>2.6</version>
+				<executions>
+					<execution>
+						<goals>
+							<goal>integration-test</goal>
+							<goal>verify</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.8.1</version>
+			<scope>test</scope>
+		</dependency>
+		<dependency>
+			<groupId>args4j</groupId>
+			<artifactId>args4j</artifactId>
+			<version>2.0.12</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.zookeeper</groupId>
+			<artifactId>zookeeper</artifactId>
+			<version>3.4.5</version>
+			<exclusions>
+				<exclusion>
+					<groupId>com.sun.jmx</groupId>
+					<artifactId>jmxri</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>com.sun.jdmk</groupId>
+					<artifactId>jmxtools</artifactId>
+				</exclusion>
+				<exclusion>
+					<groupId>javax.jms</groupId>
+					<artifactId>jms</artifactId>
+				</exclusion>
+			</exclusions>
+		</dependency>
+		<dependency>
+			<groupId>commons-io</groupId>
+			<artifactId>commons-io</artifactId>
+			<version>1.4</version>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-events</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-common</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+                <dependency>
+                        <groupId>edu.uci.ics.asterix</groupId>
+                        <artifactId>asterix-common</artifactId>
+                        <version>0.0.6-SNAPSHOT</version>
+                        <type>test-jar</type>
+                        <scope>test</scope>
+                </dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-server</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<type>zip</type>
+			<classifier>binary-assembly</classifier>
+		</dependency>
+                <dependency>
+                        <groupId>edu.uci.ics.asterix</groupId>
+                        <artifactId>asterix-test-framework</artifactId>
+                        <version>0.0.6-SNAPSHOT</version>
+                        <scope>test</scope>
+                </dependency>
+	</dependencies>
+
+</project>
diff --git a/asterix-installer/src/main/assembly/binary-assembly.xml b/asterix-installer/src/main/assembly/binary-assembly.xml
new file mode 100644
index 0000000..66d6cfe
--- /dev/null
+++ b/asterix-installer/src/main/assembly/binary-assembly.xml
@@ -0,0 +1,110 @@
+<assembly>
+  <id>binary-assembly</id>
+  <formats>
+    <format>zip</format>
+    <format>dir</format>
+  </formats>
+  <includeBaseDirectory>false</includeBaseDirectory>
+  <fileSets>
+    <fileSet>
+      <directory>src/main/resources/conf</directory>
+      <outputDirectory>conf</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources/clusters</directory>
+      <outputDirectory>clusters</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources/zookeeper</directory>
+      <fileMode>0755</fileMode>
+      <outputDirectory>.installer/zookeeper/bin</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources/scripts</directory>
+      <fileMode>0755</fileMode>
+      <includes>
+        <include>managix</include>
+      </includes>
+      <outputDirectory>bin</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources/scripts</directory>
+      <fileMode>0755</fileMode>
+      <excludes>
+        <exclude>managix</exclude>
+      </excludes>
+      <outputDirectory>.installer/scripts</outputDirectory>
+    </fileSet>
+    <fileSet>
+      <directory>src/main/resources/hadoop-0.20.2</directory>
+      <outputDirectory>.installer/hadoop-0.20.2</outputDirectory>
+      <fileMode>0755</fileMode>
+    </fileSet>
+    <fileSet>
+      <directory>target</directory>
+      <outputDirectory>lib</outputDirectory>
+      <includes>
+        <include>*.jar</include>
+      </includes>
+    </fileSet>
+    <fileSet>
+      <directory>../asterix-events/src/main/resources/events</directory>
+      <outputDirectory>.installer/eventrix/events</outputDirectory>
+      <fileMode>0755</fileMode>
+    </fileSet>
+    <fileSet>
+      <directory>../asterix-events/src/main/resources/scripts</directory>
+      <outputDirectory>.installer/eventrix/scripts</outputDirectory>
+    </fileSet>
+  </fileSets>
+  <dependencySets>
+    <dependencySet>
+      <includes>
+         <include>log4j:log4j</include>
+         <include>edu.uci.ics.asterix:asterix-events</include>
+         <include>edu.uci.ics.asterix:asterix-common</include>
+         <include>org.apache.zookeeper:zookeeper</include>
+         <include>args4j:args4j</include>
+         <include>log4j:log4j</include>
+         <include>commons-io:commons-io</include>
+         <include>org.slf4j:slf4j-api</include>
+         <include>org.slf4j:slf4j-log4j12</include>
+       </includes>
+       <unpack>false</unpack>
+       <outputDirectory>lib</outputDirectory>
+    </dependencySet>
+    <dependencySet>
+      <includes>
+        <include>org.apache.hadoop:hadoop-core</include>
+        <include>commons-cli:commons-cli</include>
+        <include>commons-logging:commons-logging</include>
+      </includes>
+      <unpack>false</unpack>
+      <outputDirectory>.installer/hadoop-0.20.2/lib</outputDirectory>
+    </dependencySet>
+    <dependencySet>
+      <includes>
+        <include>org.apache.zookeeper:zookeeper</include>
+        <include>log4j:log4j</include>
+        <include>org.slf4j:slf4j-api</include>
+      </includes>
+      <unpack>false</unpack>
+      <outputDirectory>.installer/zookeeper/lib</outputDirectory>
+    </dependencySet>
+    <dependencySet>
+      <outputDirectory>asterix</outputDirectory>
+      <includes>
+        <include>asterix-server*</include>
+      </includes>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+    </dependencySet>
+    <dependencySet>
+      <outputDirectory>.installer/eventrix</outputDirectory>
+      <includes>
+        <include>asterix-events*</include>
+      </includes>
+      <unpack>false</unpack>
+      <useTransitiveDependencies>false</useTransitiveDependencies>
+    </dependencySet>
+  </dependencySets>
+</assembly>
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AbstractCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AbstractCommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AbstractCommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AbstractCommand.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
new file mode 100644
index 0000000..814f3c9
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.command;
+
+import java.util.Date;
+
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.asterix.common.configuration.AsterixConfiguration;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.service.ILookupService;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class AlterCommand extends AbstractCommand {
+
+    @Override
+    protected void execCommand() throws Exception {
+        InstallerDriver.initConfig();
+        String instanceName = ((AlterConfig) config).name;
+        InstallerUtil.validateAsterixInstanceExists(instanceName, State.INACTIVE);
+        ILookupService lookupService = ServiceProvider.INSTANCE.getLookupService();
+        AsterixInstance instance = lookupService.getAsterixInstance(instanceName);
+        InstallerUtil.createClusterProperties(instance.getCluster(), instance.getAsterixConfiguration());
+        AsterixConfiguration asterixConfiguration = InstallerUtil
+                .getAsterixConfiguration(((AlterConfig) config).confPath);
+        instance.setAsterixConfiguration(asterixConfiguration);
+        instance.setModifiedTimestamp(new Date());
+        lookupService.updateAsterixInstance(instance);
+        LOGGER.info("Altered configuration settings for Asterix instance: " + instanceName);
+
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new AlterConfig();
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nAlter the instance's configuration settings."
+                + "\nPrior to running this command, the instance is required to be INACTIVE state."
+                + "\nChanged configuration settings will be reflected when the instance is started."
+                + "\n\nAvailable arguments/options" + "\n-n name of the ASTERIX instance.";
+    }
+
+}
+
+class AlterConfig extends CommandConfig {
+
+    @Option(name = "-n", required = true, usage = "Name of Asterix Instance")
+    public String name;
+
+    @Option(name = "-a", required = true, usage = "Path to asterix instance configuration")
+    public String confPath;
+
+}
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/BackupCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/BackupCommand.java
new file mode 100644
index 0000000..261de22
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/BackupCommand.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.command;
+
+import java.util.Date;
+import java.util.List;
+
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.asterix.event.schema.pattern.Patterns;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.events.PatternCreator;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.model.BackupInfo;
+import edu.uci.ics.asterix.installer.schema.conf.Backup;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class BackupCommand extends AbstractCommand {
+
+    public static final String ASTERIX_ROOT_METADATA_DIR = "asterix_root_metadata";
+
+    @Override
+    protected void execCommand() throws Exception {
+        InstallerDriver.initConfig();
+        String asterixInstanceName = ((BackupConfig) config).name;
+        AsterixInstance instance = InstallerUtil.validateAsterixInstanceExists(asterixInstanceName, State.INACTIVE);
+        List<BackupInfo> backupInfo = instance.getBackupInfo();
+        PatternCreator pc = new PatternCreator();
+        Backup backupConf = InstallerDriver.getConfiguration().getBackup();
+        Patterns patterns = pc.getBackUpAsterixPattern(instance, backupConf);
+        InstallerUtil.getEventrixClient(instance.getCluster()).submit(patterns);
+        int backupId = backupInfo.size();
+        BackupInfo binfo = new BackupInfo(backupId, new Date(), backupConf);
+        backupInfo.add(binfo);
+        LOGGER.info(asterixInstanceName + " backed up " + binfo);
+        ServiceProvider.INSTANCE.getLookupService().updateAsterixInstance(instance);
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new BackupConfig();
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nThe backup command allows you to take a"
+                + "\nbackup of the data stored with an ASTERIX instance. "
+                + "\nThe backed up snapshot is stored either in HDFS or on the local file system of each node in the ASTERIX cluster."
+                + "\nThe target location of backup can be configured in $MANAGIX_HOME/conf/managix-conf.xml"
+                + "\n\nAvailable arguments/options:" + "\n-n name of the Asterix instance";
+
+    }
+
+}
+
+class BackupConfig extends CommandConfig {
+
+    @Option(name = "-n", required = true, usage = "Name of the Asterix instance")
+    public String name;
+
+}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandConfig.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandConfig.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandConfig.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandConfig.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandHandler.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandHandler.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandHandler.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CommandHandler.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ConfigureCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ConfigureCommand.java
new file mode 100644
index 0000000..43400ea
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ConfigureCommand.java
@@ -0,0 +1,70 @@
+package edu.uci.ics.asterix.installer.command;
+
+import java.io.File;
+import java.io.FileOutputStream;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import edu.uci.ics.asterix.event.management.EventUtil;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.WorkingDir;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.schema.conf.Configuration;
+
+public class ConfigureCommand extends AbstractCommand {
+
+    @Override
+    protected void execCommand() throws Exception {
+        String localClusterPath = InstallerDriver.getManagixHome() + File.separator + "clusters" + File.separator
+                + "local" + File.separator + "local.xml";
+
+        Cluster cluster = EventUtil.getCluster(localClusterPath);
+        String workingDir = InstallerDriver.getManagixHome() + File.separator + "clusters" + File.separator + "local"
+                + File.separator + "working_dir";
+        cluster.setWorkingDir(new WorkingDir(workingDir, true));
+        cluster.setIodevices(workingDir);
+        cluster.setStore("storage");
+        cluster.setLogDir(workingDir + File.separator + "logs");
+        cluster.setTxnLogDir(workingDir + File.separator + "txnLogs");
+        cluster.setJavaHome(System.getProperty("java.home"));
+
+        JAXBContext ctx = JAXBContext.newInstance(Cluster.class);
+        Marshaller marshaller = ctx.createMarshaller();
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        marshaller.marshal(cluster, new FileOutputStream(localClusterPath));
+
+        String installerConfPath = InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_CONF_XML;
+        ctx = JAXBContext.newInstance(Configuration.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+        Configuration configuration = (Configuration) unmarshaller.unmarshal(new File(installerConfPath));
+
+        configuration.getBackup().setBackupDir(workingDir + File.separator + "backup");
+        configuration.getZookeeper().setHomeDir(
+                InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_INTERNAL_DIR
+                        + File.separator + "zookeeper_home");
+        configuration.getZookeeper().getServers().setJavaHome(System.getProperty("java.home"));
+
+        marshaller = ctx.createMarshaller();
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        marshaller.marshal(configuration, new FileOutputStream(installerConfPath));
+
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nAuto-generates the ASTERIX installer configruation settings and ASTERIX cluster "
+                + "\nconfiguration settings for a single node setup.";
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new ConfigureConfig();
+    }
+
+}
+
+class ConfigureConfig extends CommandConfig {
+
+}
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
new file mode 100644
index 0000000..01a409e
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.command;
+
+import java.io.File;
+
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.asterix.common.configuration.AsterixConfiguration;
+import edu.uci.ics.asterix.event.management.EventUtil;
+import edu.uci.ics.asterix.event.management.EventrixClient;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.pattern.Patterns;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.error.VerificationUtil;
+import edu.uci.ics.asterix.installer.events.PatternCreator;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class CreateCommand extends AbstractCommand {
+
+    private String asterixInstanceName;
+    private Cluster cluster;
+    private AsterixConfiguration asterixConfiguration;
+
+    @Override
+    protected void execCommand() throws Exception {
+        InstallerDriver.initConfig();
+        ValidateCommand validateCommand = new ValidateCommand();
+        boolean valid = validateCommand.validateCluster(((CreateConfig) config).clusterPath);
+        if (!valid) {
+            throw new Exception("Cannot create an Asterix instance.");
+        }
+        asterixInstanceName = ((CreateConfig) config).name;
+        InstallerUtil.validateAsterixInstanceNotExists(asterixInstanceName);
+        CreateConfig createConfig = (CreateConfig) config;
+        cluster = EventUtil.getCluster(createConfig.clusterPath);
+        asterixConfiguration = InstallerUtil.getAsterixConfiguration(createConfig.asterixConfPath);
+        AsterixInstance asterixInstance = InstallerUtil.createAsterixInstance(asterixInstanceName, cluster,
+                asterixConfiguration);
+        InstallerUtil.evaluateConflictWithOtherInstances(asterixInstance);
+        InstallerUtil.createAsterixZip(asterixInstance);
+        InstallerUtil.createClusterProperties(cluster, asterixConfiguration);
+        EventrixClient eventrixClient = InstallerUtil.getEventrixClient(cluster);
+        PatternCreator pc = new PatternCreator();
+
+        Patterns asterixBinarytrasnferPattern = pc.getAsterixBinaryTransferPattern(asterixInstanceName, cluster);
+        eventrixClient.submit(asterixBinarytrasnferPattern);
+
+        Patterns patterns = pc.getStartAsterixPattern(asterixInstanceName, cluster);
+        eventrixClient.submit(patterns);
+
+        AsterixRuntimeState runtimeState = VerificationUtil.getAsterixRuntimeState(asterixInstance);
+        VerificationUtil.updateInstanceWithRuntimeDescription(asterixInstance, runtimeState, true);
+        ServiceProvider.INSTANCE.getLookupService().writeAsterixInstance(asterixInstance);
+        InstallerUtil.deleteDirectory(InstallerDriver.getManagixHome() + File.separator + InstallerDriver.ASTERIX_DIR
+                + File.separator + asterixInstanceName);
+        LOGGER.info(asterixInstance.getDescription(false));
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new CreateConfig();
+    }
+
+    public Cluster getCluster() {
+        return cluster;
+    }
+
+    public String getAsterixInstanceName() {
+        return asterixInstanceName;
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nCreates an ASTERIX instance with a specified name."
+                + "\n\nPost creation, the instance is in ACTIVE state, indicating its "
+                + "\navailability for executing statements/queries." + "\n\nUsage arguments/options:"
+                + "\n-n Name of the ASTERIX instance." + "\n-c Path to the cluster configuration file"
+                + "\n[-a] Path to asterix configuration file" + "\n [..] indicates optional flag";
+    }
+
+}
+
+class CreateConfig extends CommandConfig {
+
+    @Option(name = "-n", required = true, usage = "Name of Asterix Instance")
+    public String name;
+
+    @Option(name = "-c", required = true, usage = "Path to cluster configuration")
+    public String clusterPath;
+
+    @Option(name = "-a", required = false, usage = "Path to asterix configuration")
+    public String asterixConfPath;
+
+}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DeleteCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DeleteCommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DeleteCommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DeleteCommand.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DescribeCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DescribeCommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DescribeCommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/DescribeCommand.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/HelpCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/HelpCommand.java
new file mode 100644
index 0000000..3bc700d
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/HelpCommand.java
@@ -0,0 +1,88 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.command;
+
+import org.kohsuke.args4j.Option;
+
+public class HelpCommand extends AbstractCommand {
+
+    @Override
+    protected void execCommand() throws Exception {
+        HelpConfig helpConfig = (HelpConfig) config;
+        String command = helpConfig.command;
+        CommandType cmdType = CommandType.valueOf(command.toUpperCase());
+        String helpMessage = null;
+        switch (cmdType) {
+            case CREATE:
+                helpMessage = new CreateCommand().getUsageDescription();
+                break;
+            case CONFIGURE:
+                helpMessage = new ConfigureCommand().getUsageDescription();
+                break;
+            case DELETE:
+                helpMessage = new DeleteCommand().getUsageDescription();
+                break;
+            case DESCRIBE:
+                helpMessage = new DescribeCommand().getUsageDescription();
+                break;
+            case RESTORE:
+                helpMessage = new RestoreCommand().getUsageDescription();
+                break;
+            case START:
+                helpMessage = new StartCommand().getUsageDescription();
+                break;
+            case SHUTDOWN:
+                helpMessage = new ShutdownCommand().getUsageDescription();
+                break;
+            case BACKUP:
+                helpMessage = new BackupCommand().getUsageDescription();
+                break;
+            case STOP:
+                helpMessage = new StopCommand().getUsageDescription();
+                break;
+            case VALIDATE:
+                helpMessage = new ValidateCommand().getUsageDescription();
+                break;
+            case ALTER:
+                helpMessage = new AlterCommand().getUsageDescription();
+                break;
+            default:
+                helpMessage = "Unknown command " + command;
+        }
+
+        System.out.println(helpMessage);
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new HelpConfig();
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nAlter the instance's configuration settings."
+                + "\nPrior to running this command, the instance is required to be INACTIVE state."
+                + "\n\nAvailable arguments/options" + "\n-n name of the ASTERIX instance"
+                + "\n-conf path to the ASTERIX configuration file.";
+    }
+
+}
+
+class HelpConfig extends CommandConfig {
+
+    @Option(name = "-cmd", required = true, usage = "Name of Asterix Instance")
+    public String command;
+
+}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ICommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ICommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ICommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ICommand.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/RestoreCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/RestoreCommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/RestoreCommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/RestoreCommand.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ShutdownCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ShutdownCommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ShutdownCommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ShutdownCommand.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StartCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StartCommand.java
new file mode 100644
index 0000000..1180a4e
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StartCommand.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.command;
+
+import java.io.File;
+
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.asterix.event.management.EventrixClient;
+import edu.uci.ics.asterix.event.schema.pattern.Patterns;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.error.VerificationUtil;
+import edu.uci.ics.asterix.installer.events.PatternCreator;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
+import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class StartCommand extends AbstractCommand {
+
+    @Override
+    protected void execCommand() throws Exception {
+        InstallerDriver.initConfig();
+        String asterixInstanceName = ((StartConfig) config).name;
+        AsterixInstance instance = InstallerUtil.validateAsterixInstanceExists(asterixInstanceName, State.INACTIVE);
+        InstallerUtil.createAsterixZip(instance);
+        PatternCreator pc = new PatternCreator();
+        EventrixClient client = InstallerUtil.getEventrixClient(instance.getCluster());
+        Patterns asterixBinaryTransferPattern = pc.getAsterixBinaryTransferPattern(asterixInstanceName,
+                instance.getCluster());
+        client.submit(asterixBinaryTransferPattern);
+        InstallerUtil.createClusterProperties(instance.getCluster(), instance.getAsterixConfiguration());
+        Patterns patterns = pc.getStartAsterixPattern(asterixInstanceName, instance.getCluster());
+        client.submit(patterns);
+        InstallerUtil.deleteDirectory(InstallerDriver.getManagixHome() + File.separator + InstallerDriver.ASTERIX_DIR
+                + File.separator + asterixInstanceName);
+        AsterixRuntimeState runtimeState = VerificationUtil.getAsterixRuntimeState(instance);
+        VerificationUtil.updateInstanceWithRuntimeDescription(instance, runtimeState, true);
+        LOGGER.info(instance.getDescription(false));
+        ServiceProvider.INSTANCE.getLookupService().updateAsterixInstance(instance);
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new StartConfig();
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nStarts an ASTERIX instance that is in INACTIVE state."
+                + "\nAfter executing the start command, the ASTERIX instance transits to the ACTIVE state,"
+                + "\nindicating that it is now available for executing statements/queries."
+                + "\n\nAvailable arguments/options" + "\n-n name of the ASTERIX instance. ";
+    }
+}
+
+class StartConfig extends CommandConfig {
+
+    @Option(name = "-n", required = true, usage = "Name of Asterix Instance")
+    public String name;
+
+}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StopCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StopCommand.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StopCommand.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StopCommand.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ValidateCommand.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ValidateCommand.java
new file mode 100644
index 0000000..10e7df2
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ValidateCommand.java
@@ -0,0 +1,266 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.command;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+
+import org.kohsuke.args4j.Option;
+
+import edu.uci.ics.asterix.event.management.EventUtil;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.MasterNode;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.schema.conf.Configuration;
+import edu.uci.ics.asterix.installer.schema.conf.Zookeeper;
+
+public class ValidateCommand extends AbstractCommand {
+
+    private static final String OK = " [" + "OK" + "]";
+    private static final String ERROR = " [" + "ERROR" + "]";
+    private static final String WARNING = " [" + "WARNING" + "]";
+
+    @Override
+    protected void execCommand() throws Exception {
+        ValidateConfig vConfig = (ValidateConfig) config;
+        logValidationResult("Environment", validateEnvironment());
+        if (((ValidateConfig) config).cluster != null) {
+            logValidationResult("Cluster configuration", validateCluster(vConfig.cluster));
+        } else {
+            logValidationResult("Managix Configuration", validateConfiguration());
+        }
+    }
+
+    private void logValidationResult(String prefix, boolean isValid) {
+        if (!isValid) {
+            LOGGER.fatal(prefix + ERROR);
+        } else {
+            LOGGER.info(prefix + OK);
+        }
+    }
+
+    @Override
+    protected CommandConfig getCommandConfig() {
+        return new ValidateConfig();
+    }
+
+    @Override
+    protected String getUsageDescription() {
+        return "\nValidate the installer's configuration or a cluster configuration" + "\nUsage"
+                + "\nFor validating the installer configuration" + "\nuse managix validate"
+                + "\n\nFor validating a cluster configuration"
+                + "\nuse managix validate -c <path to the cluster configuration file>";
+    }
+
+    public boolean validateEnvironment() throws Exception {
+        boolean valid = true;
+        String managixHome = System.getenv(InstallerDriver.ENV_MANAGIX_HOME);
+        if (managixHome == null) {
+            valid = false;
+            LOGGER.fatal(InstallerDriver.ENV_MANAGIX_HOME + " not set " + ERROR);
+        } else {
+            File home = new File(managixHome);
+            if (!home.exists()) {
+                valid = false;
+                LOGGER.fatal(InstallerDriver.ENV_MANAGIX_HOME + ": " + home.getAbsolutePath() + " does not exist!"
+                        + ERROR);
+            }
+        }
+        return valid;
+
+    }
+
+    public boolean validateCluster(String clusterPath) throws Exception {
+        boolean valid = true;
+        Cluster cluster = null;
+        File f = new File(clusterPath);
+        List<String> ipAddresses = new ArrayList<String>();
+        if (!f.exists() || !f.isFile()) {
+            LOGGER.error(" Invalid path " + f.getAbsolutePath() + ERROR);
+            valid = false;
+        } else {
+            cluster = EventUtil.getCluster(clusterPath);
+            validateClusterProperties(cluster);
+
+            Set<String> servers = new HashSet<String>();
+            Set<String> serverIds = new HashSet<String>();
+            servers.add(cluster.getMasterNode().getClusterIp());
+            serverIds.add(cluster.getMasterNode().getId());
+
+            MasterNode masterNode = cluster.getMasterNode();
+            Node master = new Node(masterNode.getId(), masterNode.getClusterIp(), masterNode.getJavaHome(),
+                    masterNode.getLogDir(), null, null, null);
+            ipAddresses.add(masterNode.getClusterIp());
+
+            valid = valid & validateNodeConfiguration(master, cluster);
+
+            for (Node node : cluster.getNode()) {
+                servers.add(node.getClusterIp());
+                if (serverIds.contains(node.getId())) {
+                    valid = false;
+                    LOGGER.error("Duplicate node id :" + node.getId() + ERROR);
+                } else {
+                    valid = valid & validateNodeConfiguration(node, cluster);
+                    if (!ipAddresses.contains(node.getClusterIp())) {
+                        ipAddresses.add(node.getClusterIp());
+                    }
+                }
+            }
+        }
+
+        if (valid) {
+            String username = cluster.getUsername();
+            if (username == null) {
+                username = System.getProperty("user.name");
+            }
+            valid = checkPasswordLessSSHLogin(username, ipAddresses);
+        }
+        return valid;
+    }
+
+    private boolean checkPasswordLessSSHLogin(String username, List<String> ipAddresses) throws Exception {
+        String script = InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_INTERNAL_DIR
+                + File.separator + "scripts" + File.separator + "validate_ssh.sh";
+        List<String> args = ipAddresses;
+        args.add(0, username);
+        String output = InstallerUtil.executeLocalScript(script, args);
+        ipAddresses.remove(0);
+        for (String line : output.split("\n")) {
+            ipAddresses.remove(line);
+        }
+        if (ipAddresses.size() > 0) {
+            LOGGER.error(" Password-less SSH (from user account: " + username + " )"
+                    + " not configured for the following hosts");
+            for (String failedIp : ipAddresses) {
+                System.out.println(failedIp);
+            }
+            return false;
+        }
+        return true;
+    }
+
+    private void validateClusterProperties(Cluster cluster) {
+        List<String> tempDirs = new ArrayList<String>();
+        if (cluster.getLogDir() != null && checkTemporaryPath(cluster.getLogDir())) {
+            tempDirs.add("Log directory: " + cluster.getLogDir());
+        }
+        if (cluster.getIodevices() != null && checkTemporaryPath(cluster.getIodevices())) {
+            tempDirs.add("IO Device: " + cluster.getIodevices());
+        }
+
+        if (tempDirs.size() > 0) {
+            StringBuffer msg = new StringBuffer();
+            msg.append("The following paths are subject to be cleaned up by OS");
+            for (String tempDir : tempDirs) {
+                msg.append("\n" + tempDir + WARNING);
+            }
+            LOGGER.warn(msg);
+        }
+
+    }
+
+    private boolean validateNodeConfiguration(Node node, Cluster cluster) {
+        boolean valid = true;
+        if (node.getJavaHome() == null || node.getJavaHome().length() == 0) {
+            if (cluster.getJavaHome() == null || cluster.getJavaHome().length() == 0) {
+                valid = false;
+                LOGGER.fatal("java_home not defined at cluster/node level for node: " + node.getId() + ERROR);
+            }
+        }
+
+        if (node.getLogDir() == null || node.getLogDir().length() == 0) {
+            if (cluster.getLogDir() == null || cluster.getLogDir().length() == 0) {
+                valid = false;
+                LOGGER.fatal("log_dir not defined at cluster/node level for node: " + node.getId() + ERROR);
+            }
+        }
+
+        if (node.getStore() == null || node.getStore().length() == 0) {
+            if (!cluster.getMasterNode().getId().equals(node.getId())
+                    && (cluster.getStore() == null || cluster.getStore().length() == 0)) {
+                valid = false;
+                LOGGER.fatal("store not defined at cluster/node level for node: " + node.getId() + ERROR);
+            }
+        }
+
+        if (node.getIodevices() == null || node.getIodevices().length() == 0) {
+            if (!cluster.getMasterNode().getId().equals(node.getId())
+                    && (cluster.getIodevices() == null || cluster.getIodevices().length() == 0)) {
+                valid = false;
+                LOGGER.fatal("iodevice(s) not defined at cluster/node level for node: " + node.getId() + ERROR);
+            }
+        }
+
+        return valid;
+    }
+
+    private boolean checkTemporaryPath(String logdir) {
+        return logdir.startsWith(System.getProperty("java.io.tmpdir"));
+    }
+
+    public boolean validateConfiguration() throws Exception {
+        String managixHome = System.getenv(InstallerDriver.ENV_MANAGIX_HOME);
+        File configFile = new File(managixHome + File.separator + InstallerDriver.MANAGIX_CONF_XML);
+        JAXBContext configCtx = JAXBContext.newInstance(Configuration.class);
+        Unmarshaller unmarshaller = configCtx.createUnmarshaller();
+        Configuration conf = (Configuration) unmarshaller.unmarshal(configFile);
+        return validateZookeeperConfiguration(conf);
+    }
+
+    private boolean validateZookeeperConfiguration(Configuration conf) throws Exception {
+        boolean valid = true;
+        Zookeeper zk = conf.getZookeeper();
+
+        if (zk.getHomeDir() == null || zk.getHomeDir().length() == 0) {
+            valid = false;
+            LOGGER.fatal("Zookeeper home dir not configured" + ERROR);
+        } else if (checkTemporaryPath(zk.getHomeDir())) {
+            LOGGER.warn("Zookeeper home dir is subject to be cleaned up by OS" + WARNING);
+        }
+
+        if (zk.getServers().getServer() == null || zk.getServers().getServer().isEmpty()) {
+            valid = false;
+            LOGGER.fatal("Zookeeper servers not configured" + ERROR);
+        }
+
+        if (zk.getServers().getJavaHome() == null || zk.getServers().getJavaHome().length() == 0) {
+            valid = false;
+            LOGGER.fatal("Java home not set for Zookeeper server in " + InstallerDriver.getManagixHome()
+                    + File.separator + InstallerDriver.MANAGIX_CONF_XML);
+        }
+
+        if (valid) {
+            valid = valid & checkPasswordLessSSHLogin(System.getProperty("user.name"), zk.getServers().getServer());
+        }
+
+        return valid;
+    }
+
+}
+
+class ValidateConfig extends CommandConfig {
+
+    @Option(name = "-c", required = false, usage = "Path to the cluster configuration xml")
+    public String cluster;
+
+}
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerDriver.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerDriver.java
new file mode 100644
index 0000000..08249ee
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerDriver.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.driver;
+
+import java.io.File;
+import java.io.FileFilter;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+
+import edu.uci.ics.asterix.installer.command.CommandHandler;
+import edu.uci.ics.asterix.installer.schema.conf.Configuration;
+import edu.uci.ics.asterix.installer.service.ILookupService;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class InstallerDriver {
+
+    public static final String MANAGIX_INTERNAL_DIR = ".installer";
+    public static final String MANAGIX_EVENT_DIR = MANAGIX_INTERNAL_DIR + File.separator + "eventrix";
+    public static final String MANAGIX_EVENT_SCRIPTS_DIR = MANAGIX_INTERNAL_DIR + File.separator + "eventrix"
+            + File.separator + "scripts";
+    public static final String DEFAULT_ASTERIX_CONFIGURATION_PATH = "conf" + File.separator + File.separator
+            + "asterix-configuration.xml";
+    public static final String ASTERIX_DIR = "asterix";
+    public static final String EVENTS_DIR = "events";
+
+    private static final Logger LOGGER = Logger.getLogger(InstallerDriver.class.getName());
+    public static final String ENV_MANAGIX_HOME = "MANAGIX_HOME";
+    public static final String MANAGIX_CONF_XML = "conf" + File.separator + "managix-conf.xml";
+
+    private static Configuration conf;
+    private static String managixHome;
+    private static String asterixZip;
+
+    public static String getAsterixZip() {
+        return asterixZip;
+    }
+
+    public static Configuration getConfiguration() {
+        return conf;
+    }
+
+    public static void initConfig() throws Exception {
+        File configFile = new File(managixHome + File.separator + MANAGIX_CONF_XML);
+        JAXBContext configCtx = JAXBContext.newInstance(Configuration.class);
+        Unmarshaller unmarshaller = configCtx.createUnmarshaller();
+        conf = (Configuration) unmarshaller.unmarshal(configFile);
+        asterixZip = initBinary("asterix-server");
+
+        ILookupService lookupService = ServiceProvider.INSTANCE.getLookupService();
+        if (!lookupService.isRunning(conf)) {
+            lookupService.startService(conf);
+        }
+    }
+
+    private static String initBinary(final String fileNamePattern) {
+        String asterixDir = InstallerDriver.getAsterixDir();
+        File file = new File(asterixDir);
+        File[] zipFiles = file.listFiles(new FileFilter() {
+            public boolean accept(File arg0) {
+                return arg0.getAbsolutePath().contains(fileNamePattern) && arg0.isFile();
+            }
+        });
+        if (zipFiles.length == 0) {
+            String msg = " Binary not found at " + asterixDir;
+            LOGGER.log(Level.FATAL, msg);
+            throw new IllegalStateException(msg);
+        }
+        if (zipFiles.length > 1) {
+            String msg = " Multiple binaries found at " + asterixDir;
+            LOGGER.log(Level.FATAL, msg);
+            throw new IllegalStateException(msg);
+        }
+
+        return zipFiles[0].getAbsolutePath();
+    }
+
+    public static String getManagixHome() {
+        return managixHome;
+    }
+
+    public static void setManagixHome(String managixHome) {
+        InstallerDriver.managixHome = managixHome;
+    }
+
+    public static String getAsterixDir() {
+        return managixHome + File.separator + ASTERIX_DIR;
+    }
+
+    public static void main(String args[]) {
+        try {
+            if (args.length != 0) {
+                managixHome = System.getenv(ENV_MANAGIX_HOME);
+                CommandHandler cmdHandler = new CommandHandler();
+                cmdHandler.processCommand(args);
+            } else {
+                printUsage();
+            }
+        } catch (IllegalArgumentException iae) {
+            LOGGER.error("Unknown command");
+            printUsage();
+        } catch (Exception e) {
+            LOGGER.error(e.getMessage());
+            if (e.getMessage() == null || e.getMessage().length() == 0) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    private static void printUsage() {
+        StringBuffer buffer = new StringBuffer("managix <command> <options>" + "\n");
+        buffer.append("Commands" + "\n");
+        buffer.append("create   " + ":" + " Creates a new asterix instance" + "\n");
+        buffer.append("delete   " + ":" + " Deletes an asterix instance" + "\n");
+        buffer.append("start    " + ":" + " Starts an  asterix instance" + "\n");
+        buffer.append("stop     " + ":" + " Stops an asterix instance that is in ACTIVE state" + "\n");
+        buffer.append("backup   " + ":" + " Creates a back up for an existing asterix instance" + "\n");
+        buffer.append("restore  " + ":" + " Restores an asterix instance" + "\n");
+        buffer.append("alter    " + ":" + " Alter the instance's configuration settings" + "\n");
+        buffer.append("describe " + ":" + " Describes an existing asterix instance" + "\n");
+        buffer.append("validate " + ":" + " Validates the installer/cluster configuration" + "\n");
+        buffer.append("configure" + ":" + " Configure the Asterix installer" + "\n");
+        buffer.append("shutdown " + ":" + " Shutdown the installer service" + "\n");
+        buffer.append("help     " + ":" + " Provides usage description of a command" + "\n");
+        buffer.append("\nTo get more information about a command, use managix help -cmd <command>");
+        LOGGER.info(buffer.toString());
+    }
+}
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
new file mode 100644
index 0000000..c9395ca
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
@@ -0,0 +1,471 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.driver;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.StringWriter;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Random;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+import java.util.jar.JarOutputStream;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import org.apache.commons.io.IOUtils;
+
+import edu.uci.ics.asterix.common.configuration.AsterixConfiguration;
+import edu.uci.ics.asterix.common.configuration.Store;
+import edu.uci.ics.asterix.event.driver.EventDriver;
+import edu.uci.ics.asterix.event.management.EventrixClient;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.Env;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.event.schema.cluster.Property;
+import edu.uci.ics.asterix.installer.error.InstallerException;
+import edu.uci.ics.asterix.installer.error.OutputHandler;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class InstallerUtil {
+
+    public static final String TXN_LOG_DIR = "txnLogs";
+    public static final String TXN_LOG_DIR_KEY_SUFFIX = "txnLogDir";
+    public static final String ASTERIX_CONFIGURATION_FILE = "asterix-configuration.xml";
+    public static final String TXN_LOG_CONFIGURATION_FILE = "log.properties";
+
+    public static AsterixInstance createAsterixInstance(String asterixInstanceName, Cluster cluster,
+            AsterixConfiguration asterixConfiguration) throws FileNotFoundException, IOException {
+        Node metadataNode = getMetadataNode(cluster);
+        String asterixZipName = InstallerDriver.getAsterixZip().substring(
+                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
+        String asterixVersion = asterixZipName.substring("asterix-server-".length(),
+                asterixZipName.indexOf("-binary-assembly"));
+        AsterixInstance instance = new AsterixInstance(asterixInstanceName, cluster, asterixConfiguration,
+                metadataNode.getId(), asterixVersion);
+        return instance;
+    }
+
+    public static void createAsterixZip(AsterixInstance asterixInstance) throws IOException, InterruptedException,
+            JAXBException, InstallerException {
+
+        String modifiedZipPath = injectAsterixPropertyFile(InstallerDriver.getAsterixZip(), asterixInstance);
+        injectAsterixLogPropertyFile(modifiedZipPath, asterixInstance);
+    }
+
+    public static void createClusterProperties(Cluster cluster, AsterixConfiguration asterixConfiguration) {
+        List<Property> clusterProperties = null;
+        if (cluster.getEnv() != null && cluster.getEnv().getProperty() != null) {
+            clusterProperties = cluster.getEnv().getProperty();
+            clusterProperties.clear();
+        } else {
+            clusterProperties = new ArrayList<Property>();
+        }
+        for (edu.uci.ics.asterix.common.configuration.Property property : asterixConfiguration.getProperty()) {
+            if (property.getName().equalsIgnoreCase(AsterixInstance.CC_JAVA_OPTS)) {
+                clusterProperties.add(new Property("CC_JAVA_OPTS", property.getValue()));
+            } else if (property.getName().equalsIgnoreCase(AsterixInstance.NC_JAVA_OPTS)) {
+                clusterProperties.add(new Property("NC_JAVA_OPTS", property.getValue()));
+            }
+        }
+        clusterProperties.add(new Property("ASTERIX_HOME", cluster.getWorkingDir().getDir() + File.separator
+                + "asterix"));
+        clusterProperties.add(new Property("CLUSTER_NET_IP", cluster.getMasterNode().getClusterIp()));
+        clusterProperties.add(new Property("CLIENT_NET_IP", cluster.getMasterNode().getClientIp()));
+        clusterProperties.add(new Property("LOG_DIR", cluster.getLogDir()));
+        clusterProperties.add(new Property("JAVA_HOME", cluster.getJavaHome()));
+        clusterProperties.add(new Property("WORKING_DIR", cluster.getWorkingDir().getDir()));
+        cluster.setEnv(new Env(clusterProperties));
+    }
+
+    private static String injectAsterixPropertyFile(String origZipFile, AsterixInstance asterixInstance)
+            throws IOException, JAXBException {
+        writeAsterixConfigurationFile(asterixInstance);
+        String asterixInstanceDir = InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName();
+        unzip(origZipFile, asterixInstanceDir);
+        File sourceJar = new File(asterixInstanceDir + File.separator + "lib" + File.separator + "asterix-app-"
+                + asterixInstance.getAsterixVersion() + ".jar");
+        File replacementFile = new File(asterixInstanceDir + File.separator + ASTERIX_CONFIGURATION_FILE);
+        replaceInJar(sourceJar, ASTERIX_CONFIGURATION_FILE, replacementFile);
+        new File(asterixInstanceDir + File.separator + ASTERIX_CONFIGURATION_FILE).delete();
+        String asterixZipName = InstallerDriver.getAsterixZip().substring(
+                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
+        zipDir(new File(asterixInstanceDir), new File(asterixInstanceDir + File.separator + asterixZipName));
+        return asterixInstanceDir + File.separator + asterixZipName;
+    }
+
+    private static String injectAsterixLogPropertyFile(String origZipFile, AsterixInstance asterixInstance)
+            throws IOException, InstallerException {
+        String asterixInstanceDir = InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName();
+        unzip(origZipFile, asterixInstanceDir);
+        File sourceJar1 = new File(asterixInstanceDir + File.separator + "lib" + File.separator + "asterix-app-"
+                + asterixInstance.getAsterixVersion() + ".jar");
+        Properties txnLogProperties = new Properties();
+        URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { sourceJar1.toURI().toURL() });
+        InputStream in = urlClassLoader.getResourceAsStream(TXN_LOG_CONFIGURATION_FILE);
+        if (in != null) {
+            txnLogProperties.load(in);
+        }
+
+        writeAsterixLogConfigurationFile(asterixInstance, txnLogProperties);
+
+        File sourceJar2 = new File(asterixInstanceDir + File.separator + "lib" + File.separator + "asterix-app-"
+                + asterixInstance.getAsterixVersion() + ".jar");
+        File replacementFile = new File(asterixInstanceDir + File.separator + "log.properties");
+        replaceInJar(sourceJar2, TXN_LOG_CONFIGURATION_FILE, replacementFile);
+
+        new File(asterixInstanceDir + File.separator + "log.properties").delete();
+        String asterixZipName = InstallerDriver.getAsterixZip().substring(
+                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
+        zipDir(new File(asterixInstanceDir), new File(asterixInstanceDir + File.separator + asterixZipName));
+        return asterixInstanceDir + File.separator + asterixZipName;
+    }
+
+    public static void addLibraryToAsterixZip(AsterixInstance asterixInstance, String dataverseName,
+            String libraryName, String libraryPath) throws IOException {
+        File instanceDir = new File(InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName());
+        if (!instanceDir.exists()) {
+            instanceDir.mkdirs();
+        }
+        String asterixZipName = InstallerDriver.getAsterixZip().substring(
+                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
+
+        String sourceZip = instanceDir.getAbsolutePath() + File.separator + asterixZipName;
+        unzip(sourceZip, instanceDir.getAbsolutePath());
+        File libraryPathInZip = new File(instanceDir.getAbsolutePath() + File.separator + "external" + File.separator
+                + "library" + dataverseName + File.separator + "to-add" + File.separator + libraryName);
+        libraryPathInZip.mkdirs();
+        Runtime.getRuntime().exec("cp" + " " + libraryPath + " " + libraryPathInZip.getAbsolutePath());
+        Runtime.getRuntime().exec("rm " + sourceZip);
+        String destZip = InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName() + File.separator
+                + asterixZipName;
+        zipDir(instanceDir, new File(destZip));
+        Runtime.getRuntime().exec("mv" + " " + destZip + " " + sourceZip);
+    }
+
+    private static Node getMetadataNode(Cluster cluster) {
+        Random random = new Random();
+        int nNodes = cluster.getNode().size();
+        return cluster.getNode().get(random.nextInt(nNodes));
+    }
+
+    public static String getNodeDirectories(String asterixInstanceName, Node node, Cluster cluster) {
+        String storeDataSubDir = asterixInstanceName + File.separator + "data" + File.separator;
+        String[] storeDirs = null;
+        StringBuffer nodeDataStore = new StringBuffer();
+        String storeDirValue = node.getStore();
+        if (storeDirValue == null) {
+            storeDirValue = cluster.getStore();
+            if (storeDirValue == null) {
+                throw new IllegalStateException(" Store not defined for node " + node.getId());
+            }
+            storeDataSubDir = node.getId() + File.separator + storeDataSubDir;
+        }
+
+        storeDirs = storeDirValue.split(",");
+        for (String ns : storeDirs) {
+            nodeDataStore.append(ns + File.separator + storeDataSubDir.trim());
+            nodeDataStore.append(",");
+        }
+        nodeDataStore.deleteCharAt(nodeDataStore.length() - 1);
+        return nodeDataStore.toString();
+    }
+
+    private static void writeAsterixConfigurationFile(AsterixInstance asterixInstance) throws IOException,
+            JAXBException {
+        String asterixInstanceName = asterixInstance.getName();
+        Cluster cluster = asterixInstance.getCluster();
+        String metadataNodeId = asterixInstance.getMetadataNodeId();
+
+        AsterixConfiguration configuration = asterixInstance.getAsterixConfiguration();
+        configuration.setMetadataNode(asterixInstanceName + "_" + metadataNodeId);
+
+        String storeDir = null;
+        List<Store> stores = new ArrayList<Store>();
+        for (Node node : cluster.getNode()) {
+            storeDir = node.getStore() == null ? cluster.getStore() : node.getStore();
+            stores.add(new Store(asterixInstanceName + "_" + node.getId(), storeDir));
+        }
+        configuration.setStore(stores);
+
+        File asterixConfDir = new File(InstallerDriver.getAsterixDir() + File.separator + asterixInstanceName);
+        asterixConfDir.mkdirs();
+
+        JAXBContext ctx = JAXBContext.newInstance(AsterixConfiguration.class);
+        Marshaller marshaller = ctx.createMarshaller();
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        marshaller.marshal(configuration, new FileOutputStream(asterixConfDir + File.separator
+                + ASTERIX_CONFIGURATION_FILE));
+    }
+
+    private static void writeAsterixLogConfigurationFile(AsterixInstance asterixInstance, Properties logProperties)
+            throws IOException, InstallerException {
+        String asterixInstanceName = asterixInstance.getName();
+        Cluster cluster = asterixInstance.getCluster();
+        StringBuffer conf = new StringBuffer();
+        for (Map.Entry<Object, Object> p : logProperties.entrySet()) {
+            conf.append(p.getKey() + "=" + p.getValue() + "\n");
+        }
+
+        for (Node node : cluster.getNode()) {
+            String txnLogDir = node.getTxnLogDir() == null ? cluster.getTxnLogDir() : node.getTxnLogDir();
+            if (txnLogDir == null) {
+                throw new InstallerException("Transaction log directory (txn_log_dir) not configured for node: "
+                        + node.getId());
+            }
+            conf.append(asterixInstanceName + "_" + node.getId() + "." + TXN_LOG_DIR_KEY_SUFFIX + "=" + txnLogDir
+                    + "\n");
+        }
+        List<edu.uci.ics.asterix.common.configuration.Property> properties = asterixInstance.getAsterixConfiguration()
+                .getProperty();
+        for (edu.uci.ics.asterix.common.configuration.Property p : properties) {
+            if (p.getName().trim().toLowerCase().contains("log")) {
+                conf.append(p.getValue() + "=" + p.getValue());
+            }
+        }
+        dumpToFile(InstallerDriver.getAsterixDir() + File.separator + asterixInstanceName + File.separator
+                + "log.properties", conf.toString());
+
+    }
+
+    public static AsterixConfiguration getAsterixConfiguration(String asterixConf) throws FileNotFoundException,
+            IOException, JAXBException {
+        if (asterixConf == null) {
+            asterixConf = InstallerDriver.getManagixHome() + File.separator
+                    + InstallerDriver.DEFAULT_ASTERIX_CONFIGURATION_PATH;
+        }
+        File file = new File(asterixConf);
+        JAXBContext ctx = JAXBContext.newInstance(AsterixConfiguration.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+        AsterixConfiguration asterixConfiguration = (AsterixConfiguration) unmarshaller.unmarshal(file);
+        return asterixConfiguration;
+    }
+
+    public static void unzip(String sourceFile, String destDir) throws IOException {
+        BufferedOutputStream dest = null;
+        FileInputStream fis = new FileInputStream(sourceFile);
+        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
+        ZipEntry entry = null;
+
+        int BUFFER_SIZE = 4096;
+        while ((entry = zis.getNextEntry()) != null) {
+            String dst = destDir + File.separator + entry.getName();
+            if (entry.isDirectory()) {
+                createDir(destDir, entry);
+                continue;
+            }
+            int count;
+            byte data[] = new byte[BUFFER_SIZE];
+
+            // write the file to the disk
+            FileOutputStream fos = new FileOutputStream(dst);
+            dest = new BufferedOutputStream(fos, BUFFER_SIZE);
+            while ((count = zis.read(data, 0, BUFFER_SIZE)) != -1) {
+                dest.write(data, 0, count);
+            }
+            // close the output streams
+            dest.flush();
+            dest.close();
+        }
+
+        zis.close();
+    }
+
+    public static void zipDir(File sourceDir, File destFile) throws IOException {
+        FileOutputStream fos = new FileOutputStream(destFile);
+        ZipOutputStream zos = new ZipOutputStream(fos);
+        zipDir(sourceDir, destFile, zos);
+        zos.close();
+    }
+
+    private static void zipDir(File sourceDir, final File destFile, ZipOutputStream zos) throws IOException {
+        File[] dirList = sourceDir.listFiles(new FileFilter() {
+            public boolean accept(File f) {
+                return !f.getName().endsWith(destFile.getName());
+            }
+        });
+        for (int i = 0; i < dirList.length; i++) {
+            File f = dirList[i];
+            if (f.isDirectory()) {
+                zipDir(f, destFile, zos);
+            } else {
+                int bytesIn = 0;
+                byte[] readBuffer = new byte[2156];
+                FileInputStream fis = new FileInputStream(f);
+                ZipEntry entry = new ZipEntry(sourceDir.getName() + File.separator + f.getName());
+                zos.putNextEntry(entry);
+                while ((bytesIn = fis.read(readBuffer)) != -1) {
+                    zos.write(readBuffer, 0, bytesIn);
+                }
+                fis.close();
+            }
+        }
+    }
+
+    private static void replaceInJar(File sourceJar, String origFile, File replacementFile) throws IOException {
+        File destJar = new File(sourceJar.getAbsolutePath() + ".modified");
+        InputStream jarIs = null;
+        FileInputStream fis = new FileInputStream(replacementFile);
+        JarFile sourceJarFile = new JarFile(sourceJar);
+        Enumeration<JarEntry> entries = sourceJarFile.entries();
+        JarOutputStream jos = new JarOutputStream(new FileOutputStream(destJar));
+        byte[] buffer = new byte[2048];
+        int read;
+        while (entries.hasMoreElements()) {
+            JarEntry entry = (JarEntry) entries.nextElement();
+            String name = entry.getName();
+            if (name.equals(origFile)) {
+                continue;
+            }
+            jarIs = sourceJarFile.getInputStream(entry);
+            jos.putNextEntry(entry);
+            while ((read = jarIs.read(buffer)) != -1) {
+                jos.write(buffer, 0, read);
+            }
+        }
+        JarEntry entry = new JarEntry(origFile);
+        jos.putNextEntry(entry);
+        while ((read = fis.read(buffer)) != -1) {
+            jos.write(buffer, 0, read);
+        }
+        fis.close();
+        jos.close();
+        jarIs.close();
+        sourceJar.delete();
+        destJar.renameTo(sourceJar);
+        sourceJar.setExecutable(true);
+    }
+
+    public static void dumpToFile(String dest, String content) throws IOException {
+        FileWriter writer = new FileWriter(dest);
+        writer.write(content);
+        writer.close();
+    }
+
+    private static void createDir(String destDirectory, ZipEntry entry) {
+        String name = entry.getName();
+        int index = name.lastIndexOf(File.separator);
+        String dirSequence = name.substring(0, index);
+        File newDirs = new File(destDirectory + File.separator + dirSequence);
+        newDirs.mkdirs();
+    }
+
+    public static AsterixInstance validateAsterixInstanceExists(String name, State... permissibleStates)
+            throws Exception {
+        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(name);
+        if (instance == null) {
+            throw new InstallerException("Asterix instance by name " + name + " does not exist.");
+        }
+        boolean valid = false;
+        for (State state : permissibleStates) {
+            if (state.equals(instance.getState())) {
+                valid = true;
+                break;
+            }
+        }
+        if (!valid) {
+            throw new InstallerException("Asterix instance by the name " + name + " is in " + instance.getState()
+                    + " state ");
+        }
+        return instance;
+    }
+
+    public static void validateAsterixInstanceNotExists(String name) throws Exception {
+        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(name);
+        if (instance != null) {
+            throw new InstallerException("Asterix instance by name " + name + " already exists.");
+        }
+    }
+
+    public static void evaluateConflictWithOtherInstances(AsterixInstance instance) throws Exception {
+        List<AsterixInstance> existingInstances = ServiceProvider.INSTANCE.getLookupService().getAsterixInstances();
+        List<String> usedIps = new ArrayList<String>();
+        String masterIp = instance.getCluster().getMasterNode().getClusterIp();
+        for (Node node : instance.getCluster().getNode()) {
+            usedIps.add(node.getClusterIp());
+        }
+        usedIps.add(instance.getCluster().getMasterNode().getClusterIp());
+        boolean conflictFound = false;
+        AsterixInstance conflictingInstance = null;
+        for (AsterixInstance existing : existingInstances) {
+            conflictFound = existing.getCluster().getMasterNode().getClusterIp().equals(masterIp);
+            if (conflictFound) {
+                conflictingInstance = existing;
+                break;
+            }
+            for (Node n : existing.getCluster().getNode()) {
+                if (usedIps.contains(n.getClusterIp())) {
+                    conflictFound = true;
+                    conflictingInstance = existing;
+                    break;
+                }
+            }
+        }
+        if (conflictFound) {
+            throw new Exception("Cluster definition conflicts with an existing instance of Asterix: "
+                    + conflictingInstance.getName());
+        }
+    }
+
+    public static void deleteDirectory(String path) throws IOException {
+        Runtime.getRuntime().exec("rm -rf " + path);
+    }
+
+    public static String executeLocalScript(String path, List<String> args) throws Exception {
+        List<String> pargs = new ArrayList<String>();
+        pargs.add("/bin/bash");
+        pargs.add(path);
+        if (args != null) {
+            pargs.addAll(args);
+        }
+        ProcessBuilder pb = new ProcessBuilder(pargs);
+        pb.environment().putAll(EventDriver.getEnvironment());
+        pb.environment().put("IP_LOCATION", EventDriver.CLIENT_NODE.getClusterIp());
+        Process p = pb.start();
+        BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
+        StringWriter writer = new StringWriter();
+        IOUtils.copy(bis, writer, "UTF-8");
+        return writer.toString();
+    }
+
+    public static EventrixClient getEventrixClient(Cluster cluster) throws Exception {
+        return new EventrixClient(
+                InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_EVENT_DIR, cluster, false,
+                OutputHandler.INSTANCE);
+    }
+
+}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/InstallerException.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/InstallerException.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/InstallerException.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/InstallerException.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/OutputHandler.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/OutputHandler.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/OutputHandler.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/OutputHandler.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/VerificationUtil.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/VerificationUtil.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/VerificationUtil.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/error/VerificationUtil.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/events/PatternCreator.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/events/PatternCreator.java
new file mode 100644
index 0000000..4216978
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/events/PatternCreator.java
@@ -0,0 +1,485 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.events;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import edu.uci.ics.asterix.event.driver.EventDriver;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+import edu.uci.ics.asterix.event.schema.pattern.Delay;
+import edu.uci.ics.asterix.event.schema.pattern.Event;
+import edu.uci.ics.asterix.event.schema.pattern.Nodeid;
+import edu.uci.ics.asterix.event.schema.pattern.Pattern;
+import edu.uci.ics.asterix.event.schema.pattern.Patterns;
+import edu.uci.ics.asterix.event.schema.pattern.Value;
+import edu.uci.ics.asterix.installer.command.BackupCommand;
+import edu.uci.ics.asterix.installer.command.StopCommand;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.error.VerificationUtil;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.BackupInfo;
+import edu.uci.ics.asterix.installer.model.BackupInfo.BackupType;
+import edu.uci.ics.asterix.installer.schema.conf.Backup;
+import edu.uci.ics.asterix.installer.service.ILookupService;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+
+public class PatternCreator {
+
+    private ILookupService lookupService = ServiceProvider.INSTANCE.getLookupService();
+
+    private void addInitialDelay(Pattern p, int delay, String unit) {
+        Delay d = new Delay(new Value(null, "" + delay), unit);
+        p.setDelay(d);
+    }
+
+    public Patterns getAsterixBinaryTransferPattern(String asterixInstanceName, Cluster cluster) throws Exception {
+        String ccLocationIp = cluster.getMasterNode().getClusterIp();
+        String destDir = cluster.getWorkingDir().getDir() + File.separator + "asterix";
+        List<Pattern> ps = new ArrayList<Pattern>();
+
+        Pattern copyHyracks = createCopyHyracksPattern(asterixInstanceName, cluster, ccLocationIp, destDir);
+        ps.add(copyHyracks);
+
+        boolean copyHyracksToNC = !cluster.getWorkingDir().isNFS();
+
+        for (Node node : cluster.getNode()) {
+            if (copyHyracksToNC) {
+                Pattern copyHyracksForNC = createCopyHyracksPattern(asterixInstanceName, cluster, node.getClusterIp(),
+                        destDir);
+                ps.add(copyHyracksForNC);
+            }
+        }
+        ps.addAll(createHadoopLibraryTransferPattern(cluster).getPattern());
+        Patterns patterns = new Patterns(ps);
+        return patterns;
+    }
+
+    public Patterns getStartAsterixPattern(String asterixInstanceName, Cluster cluster) throws Exception {
+        String ccLocationId = cluster.getMasterNode().getId();
+        List<Pattern> ps = new ArrayList<Pattern>();
+
+        Pattern createCC = createCCStartPattern(ccLocationId);
+        addInitialDelay(createCC, 3, "sec");
+        ps.add(createCC);
+
+        for (Node node : cluster.getNode()) {
+            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
+            Pattern createNC = createNCStartPattern(cluster.getMasterNode().getClusterIp(), node.getId(),
+                    asterixInstanceName + "_" + node.getId(), iodevices);
+            addInitialDelay(createNC, 5, "sec");
+            ps.add(createNC);
+        }
+
+        Patterns patterns = new Patterns(ps);
+        return patterns;
+    }
+
+    public Patterns getStopCommandPattern(StopCommand stopCommand) throws Exception {
+        List<Pattern> ps = new ArrayList<Pattern>();
+        AsterixInstance asterixInstance = lookupService.getAsterixInstance(stopCommand.getAsterixInstanceName());
+        Cluster cluster = asterixInstance.getCluster();
+
+        String ccLocation = cluster.getMasterNode().getId();
+        Pattern createCC = createCCStopPattern(ccLocation);
+        addInitialDelay(createCC, 5, "sec");
+        ps.add(createCC);
+
+        String asterixInstanceName = stopCommand.getAsterixInstanceName();
+        int nodeControllerIndex = 1;
+        for (Node node : cluster.getNode()) {
+            Pattern createNC = createNCStopPattern(node.getId(), asterixInstanceName + "_" + nodeControllerIndex);
+            ps.add(createNC);
+            nodeControllerIndex++;
+        }
+
+        Patterns patterns = new Patterns(ps);
+        return patterns;
+    }
+
+    public Patterns getBackUpAsterixPattern(AsterixInstance instance, Backup backupConf) throws Exception {
+        BackupType backupType = BackupInfo.getBackupType(backupConf);
+        Patterns patterns = null;
+        switch (backupType) {
+            case HDFS:
+                patterns = getHDFSBackUpAsterixPattern(instance, backupConf);
+                break;
+            case LOCAL:
+                patterns = getLocalBackUpAsterixPattern(instance, backupConf);
+                break;
+        }
+        return patterns;
+    }
+
+    public Patterns getRestoreAsterixPattern(AsterixInstance instance, BackupInfo backupInfo) throws Exception {
+        BackupType backupType = backupInfo.getBackupType();
+        Patterns patterns = null;
+        switch (backupType) {
+            case HDFS:
+                patterns = getHDFSRestoreAsterixPattern(instance, backupInfo);
+                break;
+            case LOCAL:
+                patterns = getLocalRestoreAsterixPattern(instance, backupInfo);
+                break;
+        }
+        return patterns;
+    }
+
+    private Patterns getHDFSBackUpAsterixPattern(AsterixInstance instance, Backup backupConf) throws Exception {
+        Cluster cluster = instance.getCluster();
+        String hdfsUrl = backupConf.getHdfs().getUrl();
+        String hadoopVersion = backupConf.getHdfs().getVersion();
+        String hdfsBackupDir = backupConf.getBackupDir();
+        VerificationUtil.verifyBackupRestoreConfiguration(hdfsUrl, hadoopVersion, hdfsBackupDir);
+        String workingDir = cluster.getWorkingDir().getDir();
+        String backupId = "" + instance.getBackupInfo().size();
+        String store;
+        String pargs;
+        String iodevices;
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        for (Node node : cluster.getNode()) {
+            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
+            iodevices = node.getIodevices() == null ? instance.getCluster().getIodevices() : node.getIodevices();
+            store = node.getStore() == null ? cluster.getStore() : node.getStore();
+            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + store + " "
+                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
+                    + hdfsBackupDir + " " + "hdfs" + " " + node.getId() + " " + hdfsUrl + " " + hadoopVersion;
+            Event event = new Event("backup", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+        return new Patterns(patternList);
+    }
+
+    private Patterns getLocalBackUpAsterixPattern(AsterixInstance instance, Backup backupConf) throws Exception {
+        Cluster cluster = instance.getCluster();
+        String backupDir = backupConf.getBackupDir();
+        String workingDir = cluster.getWorkingDir().getDir();
+        String backupId = "" + instance.getBackupInfo().size();
+        String iodevices;
+        String txnLogDir;
+        String store;
+        String pargs;
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        for (Node node : cluster.getNode()) {
+            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
+            iodevices = node.getIodevices() == null ? instance.getCluster().getIodevices() : node.getIodevices();
+            txnLogDir = node.getTxnLogDir() == null ? instance.getCluster().getTxnLogDir() : node.getTxnLogDir();
+            store = node.getStore() == null ? cluster.getStore() : node.getStore();
+            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + store + " "
+                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + txnLogDir + " " + backupId + " " + backupDir
+                    + " " + "local" + " " + node.getId();
+            Event event = new Event("backup", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+        return new Patterns(patternList);
+    }
+
+    public Patterns getHDFSRestoreAsterixPattern(AsterixInstance instance, BackupInfo backupInfo) throws Exception {
+        Cluster cluster = instance.getCluster();
+        String clusterStore = instance.getCluster().getStore();
+        String hdfsUrl = backupInfo.getBackupConf().getHdfs().getUrl();
+        String hadoopVersion = backupInfo.getBackupConf().getHdfs().getVersion();
+        String hdfsBackupDir = backupInfo.getBackupConf().getBackupDir();
+        VerificationUtil.verifyBackupRestoreConfiguration(hdfsUrl, hadoopVersion, hdfsBackupDir);
+        String workingDir = cluster.getWorkingDir().getDir();
+        int backupId = backupInfo.getId();
+        String nodeStore;
+        String pargs;
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        for (Node node : cluster.getNode()) {
+            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
+            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
+            nodeStore = node.getStore() == null ? clusterStore : node.getStore();
+            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + nodeStore + " "
+                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
+                    + " " + hdfsBackupDir + " " + "hdfs" + " " + node.getId() + " " + hdfsUrl + " " + hadoopVersion;
+            Event event = new Event("restore", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+        return new Patterns(patternList);
+    }
+
+    public Patterns getLocalRestoreAsterixPattern(AsterixInstance instance, BackupInfo backupInfo) throws Exception {
+        Cluster cluster = instance.getCluster();
+        String clusterStore = instance.getCluster().getStore();
+        String backupDir = backupInfo.getBackupConf().getBackupDir();
+        String workingDir = cluster.getWorkingDir().getDir();
+        int backupId = backupInfo.getId();
+        String nodeStore;
+        String pargs;
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        for (Node node : cluster.getNode()) {
+            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
+            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
+            nodeStore = node.getStore() == null ? clusterStore : node.getStore();
+            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + nodeStore + " "
+                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
+                    + backupDir + " " + "local" + " " + node.getId();
+            Event event = new Event("restore", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+        return new Patterns(patternList);
+    }
+
+    public Patterns createHadoopLibraryTransferPattern(Cluster cluster) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        String workingDir = cluster.getWorkingDir().getDir();
+        String hadoopVersion = InstallerDriver.getConfiguration().getBackup().getHdfs().getVersion();
+        File hadoopDir = new File(InstallerDriver.getManagixHome() + File.separator
+                + InstallerDriver.MANAGIX_INTERNAL_DIR + File.separator + "hadoop-" + hadoopVersion);
+        if (!hadoopDir.exists()) {
+            throw new IllegalStateException("Hadoop version :" + hadoopVersion + " not supported");
+        }
+
+        Nodeid nodeid = new Nodeid(new Value(null, EventDriver.CLIENT_NODE.getId()));
+        String username = cluster.getUsername() != null ? cluster.getUsername() : System.getProperty("user.name");
+        String pargs = username + " " + hadoopDir.getAbsolutePath() + " " + cluster.getMasterNode().getClusterIp()
+                + " " + workingDir;
+        Event event = new Event("directory_transfer", nodeid, pargs);
+        Pattern p = new Pattern(null, 1, null, event);
+        addInitialDelay(p, 2, "sec");
+        patternList.add(p);
+
+        boolean copyToNC = !cluster.getWorkingDir().isNFS();
+        if (copyToNC) {
+            for (Node node : cluster.getNode()) {
+                nodeid = new Nodeid(new Value(null, node.getId()));
+                pargs = cluster.getUsername() + " " + hadoopDir.getAbsolutePath() + " " + node.getClusterIp() + " "
+                        + workingDir;
+                event = new Event("directory_transfer", nodeid, pargs);
+                p = new Pattern(null, 1, null, event);
+                addInitialDelay(p, 2, "sec");
+                patternList.add(p);
+            }
+        }
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    public Patterns createDeleteInstancePattern(AsterixInstance instance) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        patternList.addAll(createRemoveAsterixStoragePattern(instance).getPattern());
+        if (instance.getBackupInfo() != null && instance.getBackupInfo().size() > 0) {
+            List<BackupInfo> backups = instance.getBackupInfo();
+            Set<String> removedBackupDirsHDFS = new HashSet<String>();
+            Set<String> removedBackupDirsLocal = new HashSet<String>();
+
+            String backupDir;
+            for (BackupInfo binfo : backups) {
+                backupDir = binfo.getBackupConf().getBackupDir();
+                switch (binfo.getBackupType()) {
+                    case HDFS:
+                        if (removedBackupDirsHDFS.contains(backups)) {
+                            continue;
+                        }
+                        patternList.addAll(createRemoveHDFSBackupPattern(instance, backupDir).getPattern());
+                        removedBackupDirsHDFS.add(backupDir);
+                        break;
+
+                    case LOCAL:
+                        if (removedBackupDirsLocal.contains(backups)) {
+                            continue;
+                        }
+                        patternList.addAll(createRemoveLocalBackupPattern(instance, backupDir).getPattern());
+                        removedBackupDirsLocal.add(backupDir);
+                        break;
+                }
+
+            }
+        }
+        patternList.addAll(createRemoveAsterixLogDirPattern(instance).getPattern());
+        patternList.addAll(createRemoveAsterixRootMetadata(instance).getPattern());
+        patternList.addAll(createRemoveAsterixTxnLogs(instance).getPattern());
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Patterns createRemoveAsterixTxnLogs(AsterixInstance instance) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+        Nodeid nodeid = null;
+        String pargs = null;
+        Event event = null;
+        for (Node node : cluster.getNode()) {
+            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
+            String primaryIODevice = iodevices.split(",")[0].trim();
+            pargs = primaryIODevice + File.separator + InstallerUtil.TXN_LOG_DIR;
+            nodeid = new Nodeid(new Value(null, node.getId()));
+            event = new Event("file_delete", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Patterns createRemoveHDFSBackupPattern(AsterixInstance instance, String hdfsBackupDir) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+        String hdfsUrl = InstallerDriver.getConfiguration().getBackup().getHdfs().getUrl();
+        String hadoopVersion = InstallerDriver.getConfiguration().getBackup().getHdfs().getVersion();
+        String workingDir = cluster.getWorkingDir().getDir();
+        Node launchingNode = cluster.getNode().get(0);
+        Nodeid nodeid = new Nodeid(new Value(null, launchingNode.getId()));
+        String pathToDelete = hdfsBackupDir + File.separator + instance.getName();
+        String pargs = workingDir + " " + hadoopVersion + " " + hdfsUrl + " " + pathToDelete;
+        Event event = new Event("hdfs_delete", nodeid, pargs);
+        patternList.add(new Pattern(null, 1, null, event));
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Patterns createRemoveLocalBackupPattern(AsterixInstance instance, String localBackupDir) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+
+        String pathToDelete = localBackupDir + File.separator + instance.getName();
+        String pargs = pathToDelete;
+        List<String> removedBackupDirs = new ArrayList<String>();
+        for (Node node : cluster.getNode()) {
+            if (removedBackupDirs.contains(node.getClusterIp())) {
+                continue;
+            }
+            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
+            Event event = new Event("file_delete", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+            removedBackupDirs.add(node.getClusterIp());
+        }
+
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    public Patterns createRemoveAsterixWorkingDirPattern(AsterixInstance instance) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+        String workingDir = cluster.getWorkingDir().getDir();
+        String pargs = workingDir;
+        Nodeid nodeid = new Nodeid(new Value(null, cluster.getMasterNode().getId()));
+        Event event = new Event("file_delete", nodeid, pargs);
+        patternList.add(new Pattern(null, 1, null, event));
+
+        if (!cluster.getWorkingDir().isNFS()) {
+            for (Node node : cluster.getNode()) {
+                nodeid = new Nodeid(new Value(null, node.getId()));
+                event = new Event("file_delete", nodeid, pargs);
+                patternList.add(new Pattern(null, 1, null, event));
+            }
+        }
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Patterns createRemoveAsterixRootMetadata(AsterixInstance instance) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+        Nodeid nodeid = null;
+        String pargs = null;
+        Event event = null;
+        for (Node node : cluster.getNode()) {
+            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
+            String primaryIODevice = iodevices.split(",")[0].trim();
+            pargs = primaryIODevice + File.separator + BackupCommand.ASTERIX_ROOT_METADATA_DIR;
+            nodeid = new Nodeid(new Value(null, node.getId()));
+            event = new Event("file_delete", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Patterns createRemoveAsterixLogDirPattern(AsterixInstance instance) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+        String pargs = instance.getCluster().getLogDir();
+        Nodeid nodeid = new Nodeid(new Value(null, cluster.getMasterNode().getId()));
+        Event event = new Event("file_delete", nodeid, pargs);
+        patternList.add(new Pattern(null, 1, null, event));
+
+        for (Node node : cluster.getNode()) {
+            nodeid = new Nodeid(new Value(null, node.getId()));
+            event = new Event("file_delete", nodeid, pargs);
+            patternList.add(new Pattern(null, 1, null, event));
+        }
+
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Patterns createRemoveAsterixStoragePattern(AsterixInstance instance) throws Exception {
+        List<Pattern> patternList = new ArrayList<Pattern>();
+        Cluster cluster = instance.getCluster();
+        String pargs = null;
+
+        for (Node node : cluster.getNode()) {
+            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
+            String[] nodeIODevices;
+            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
+            nodeIODevices = iodevices.trim().split(",");
+            for (String nodeIODevice : nodeIODevices) {
+                String nodeStore = node.getStore() == null ? cluster.getStore() : node.getStore();
+                pargs = nodeIODevice.trim() + File.separator + nodeStore;
+                Event event = new Event("file_delete", nodeid, pargs);
+                patternList.add(new Pattern(null, 1, null, event));
+            }
+        }
+        Patterns patterns = new Patterns(patternList);
+        return patterns;
+    }
+
+    private Pattern createCopyHyracksPattern(String instanceName, Cluster cluster, String destinationIp, String destDir) {
+        Nodeid nodeid = new Nodeid(new Value(null, EventDriver.CLIENT_NODE.getId()));
+        String username = cluster.getUsername() != null ? cluster.getUsername() : System.getProperty("user.name");
+        String asterixZipName = InstallerDriver.getAsterixZip().substring(
+                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
+        String fileToTransfer = new File(InstallerDriver.getAsterixDir() + File.separator + instanceName
+                + File.separator + asterixZipName).getAbsolutePath();
+        String pargs = username + " " + fileToTransfer + " " + destinationIp + " " + destDir + " " + "unpack";
+        Event event = new Event("file_transfer", nodeid, pargs);
+        return new Pattern(null, 1, null, event);
+    }
+
+    private Pattern createCCStartPattern(String hostId) {
+        Nodeid nodeid = new Nodeid(new Value(null, hostId));
+        Event event = new Event("cc_start", nodeid, "");
+        return new Pattern(null, 1, null, event);
+    }
+
+    public Pattern createCCStopPattern(String hostId) {
+        Nodeid nodeid = new Nodeid(new Value(null, hostId));
+        Event event = new Event("cc_failure", nodeid, null);
+        return new Pattern(null, 1, null, event);
+    }
+
+    public Pattern createNCStartPattern(String ccHost, String hostId, String nodeControllerId, String iodevices) {
+        Nodeid nodeid = new Nodeid(new Value(null, hostId));
+        String pargs = ccHost + " " + nodeControllerId + " " + iodevices;
+        Event event = new Event("node_join", nodeid, pargs);
+        return new Pattern(null, 1, null, event);
+    }
+
+    public Pattern createNCStopPattern(String hostId, String nodeControllerId) {
+        Nodeid nodeid = new Nodeid(new Value(null, hostId));
+        Event event = new Event("node_failure", nodeid, nodeControllerId);
+        return new Pattern(null, 1, null, event);
+    }
+
+}
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
new file mode 100644
index 0000000..1eba89f
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
@@ -0,0 +1,192 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.model;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.configuration.AsterixConfiguration;
+import edu.uci.ics.asterix.common.configuration.Property;
+import edu.uci.ics.asterix.event.schema.cluster.Cluster;
+import edu.uci.ics.asterix.event.schema.cluster.Node;
+
+public class AsterixInstance implements Serializable {
+
+    private static final long serialVersionUID = 2874439550187520449L;
+
+    public static final String CC_JAVA_OPTS = "cc_java_opts";
+    public static final String NC_JAVA_OPTS = "nc_java_opts";
+
+    public enum State {
+        ACTIVE,
+        INACTIVE,
+        UNUSABLE
+    }
+
+    private final Cluster cluster;
+    private final String name;
+    private final Date createdTimestamp;
+    private Date stateChangeTimestamp;
+    private Date modifiedTimestamp;
+    private AsterixConfiguration asterixConfiguration;
+    private State state;
+    private final String metadataNodeId;
+    private final String asterixVersion;
+    private final List<BackupInfo> backupInfo;
+    private final String webInterfaceUrl;
+    private AsterixRuntimeState runtimeState;
+    private State previousState;
+
+    public AsterixInstance(String name, Cluster cluster, AsterixConfiguration asterixConfiguration,
+            String metadataNodeId, String asterixVersion) {
+        this.name = name;
+        this.cluster = cluster;
+        this.asterixConfiguration = asterixConfiguration;
+        this.metadataNodeId = metadataNodeId;
+        this.state = State.ACTIVE;
+        this.previousState = State.UNUSABLE;
+        this.asterixVersion = asterixVersion;
+        this.createdTimestamp = new Date();
+        this.backupInfo = new ArrayList<BackupInfo>();
+        this.webInterfaceUrl = "http://" + cluster.getMasterNode().getClientIp() + ":" + 19001;
+    }
+
+    public Date getModifiedTimestamp() {
+        return stateChangeTimestamp;
+    }
+
+    public State getState() {
+        return state;
+    }
+
+    public void setState(State state) {
+        this.previousState = this.state;
+        this.state = state;
+    }
+
+    public Cluster getCluster() {
+        return cluster;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public Date getCreatedTimestamp() {
+        return createdTimestamp;
+    }
+
+    public Date getStateChangeTimestamp() {
+        return stateChangeTimestamp;
+    }
+
+    public void setStateChangeTimestamp(Date stateChangeTimestamp) {
+        this.stateChangeTimestamp = stateChangeTimestamp;
+    }
+
+    public void setModifiedTimestamp(Date modifiedTimestamp) {
+        this.modifiedTimestamp = modifiedTimestamp;
+    }
+
+    public String getMetadataNodeId() {
+        return metadataNodeId;
+    }
+
+    public String getAsterixVersion() {
+        return asterixVersion;
+    }
+
+    public String getDescription(boolean detailed) {
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("Name:" + name + "\n");
+        buffer.append("Created:" + createdTimestamp + "\n");
+        buffer.append("Web-Url:" + webInterfaceUrl + "\n");
+        buffer.append("State:" + state);
+        if (!state.equals(State.UNUSABLE) && stateChangeTimestamp != null) {
+            buffer.append(" (" + stateChangeTimestamp + ")" + "\n");
+        } else {
+            buffer.append("\n");
+        }
+        if (modifiedTimestamp != null) {
+            buffer.append("Last modified timestamp:" + modifiedTimestamp + "\n");
+        }
+
+        if (runtimeState.getSummary() != null && runtimeState.getSummary().length() > 0) {
+            buffer.append("\nWARNING!:" + runtimeState.getSummary() + "\n");
+        }
+        if (detailed) {
+            addDetailedInformation(buffer);
+        }
+        return buffer.toString();
+    }
+
+    public List<BackupInfo> getBackupInfo() {
+        return backupInfo;
+    }
+
+    public String getWebInterfaceUrl() {
+        return webInterfaceUrl;
+    }
+
+    public AsterixRuntimeState getAsterixRuntimeState() {
+        return runtimeState;
+    }
+
+    public void setAsterixRuntimeStates(AsterixRuntimeState runtimeState) {
+        this.runtimeState = runtimeState;
+    }
+
+    private void addDetailedInformation(StringBuffer buffer) {
+        buffer.append("Master node:" + cluster.getMasterNode().getId() + ":" + cluster.getMasterNode().getClusterIp()
+                + "\n");
+        for (Node node : cluster.getNode()) {
+            buffer.append(node.getId() + ":" + node.getClusterIp() + "\n");
+        }
+
+        if (backupInfo != null && backupInfo.size() > 0) {
+            for (BackupInfo info : backupInfo) {
+                buffer.append(info + "\n");
+            }
+        }
+        buffer.append("\n");
+        buffer.append("Asterix version:" + asterixVersion + "\n");
+        buffer.append("Metadata Node:" + metadataNodeId + "\n");
+        buffer.append("Processes" + "\n");
+        for (ProcessInfo pInfo : runtimeState.getProcesses()) {
+            buffer.append(pInfo + "\n");
+        }
+
+        buffer.append("\n");
+        buffer.append("Asterix Configuration\n");
+        for (Property property : asterixConfiguration.getProperty()) {
+            buffer.append(property.getName() + ":" + property.getValue() + "\n");
+        }
+
+    }
+
+    public State getPreviousState() {
+        return previousState;
+    }
+
+    public AsterixConfiguration getAsterixConfiguration() {
+        return asterixConfiguration;
+    }
+
+    public void setAsterixConfiguration(AsterixConfiguration asterixConfiguration) {
+        this.asterixConfiguration = asterixConfiguration;
+    }
+}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixRuntimeState.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixRuntimeState.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixRuntimeState.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixRuntimeState.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/BackupInfo.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/BackupInfo.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/BackupInfo.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/BackupInfo.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/EventList.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/EventList.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/EventList.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/EventList.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/ProcessInfo.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/ProcessInfo.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/ProcessInfo.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/ProcessInfo.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ILookupService.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ILookupService.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ILookupService.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ILookupService.java
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ServiceProvider.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ServiceProvider.java
similarity index 100%
rename from asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ServiceProvider.java
rename to asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ServiceProvider.java
diff --git a/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ZooKeeperService.java b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ZooKeeperService.java
new file mode 100644
index 0000000..b43fcdf
--- /dev/null
+++ b/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ZooKeeperService.java
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.service;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.log4j.Logger;
+import org.apache.zookeeper.CreateMode;
+import org.apache.zookeeper.KeeperException;
+import org.apache.zookeeper.WatchedEvent;
+import org.apache.zookeeper.Watcher;
+import org.apache.zookeeper.ZooDefs.Ids;
+import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.Stat;
+
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.driver.InstallerUtil;
+import edu.uci.ics.asterix.installer.error.InstallerException;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.schema.conf.Configuration;
+
+public class ZooKeeperService implements ILookupService {
+
+    private static final Logger LOGGER = Logger.getLogger(ZooKeeperService.class.getName());
+
+    private static final int ZOOKEEPER_LEADER_CONN_PORT = 2222;
+    private static final int ZOOKEEPER_LEADER_ELEC_PORT = 2223;
+    private static final int ZOOKEEPER_SESSION_TIME_OUT = 40 * 1000; //milliseconds
+    private static final String ZOOKEEPER_HOME = InstallerDriver.getManagixHome() + File.separator
+            + InstallerDriver.MANAGIX_INTERNAL_DIR + File.separator + "zookeeper";
+    private static final String ZOO_KEEPER_CONFIG = ZOOKEEPER_HOME + File.separator + "zk.cfg";
+
+    private boolean isRunning = false;
+    private ZooKeeper zk;
+    private String zkConnectionString;
+    private static final String ASTERIX_INSTANCE_BASE_PATH = "/Asterix";
+    private static final int DEFAULT_NODE_VERSION = -1;
+    private LinkedBlockingQueue<String> msgQ = new LinkedBlockingQueue<String>();
+    private ZooKeeperWatcher watcher = new ZooKeeperWatcher(msgQ);
+
+    public boolean isRunning(Configuration conf) throws Exception {
+        List<String> servers = conf.getZookeeper().getServers().getServer();
+        int clientPort = conf.getZookeeper().getClientPort().intValue();
+        StringBuffer connectionString = new StringBuffer();
+        for (String serverAddress : servers) {
+            connectionString.append(serverAddress);
+            connectionString.append(":");
+            connectionString.append(clientPort);
+            connectionString.append(",");
+        }
+        if (connectionString.length() > 0) {
+            connectionString.deleteCharAt(connectionString.length() - 1);
+        }
+        zkConnectionString = connectionString.toString();
+
+        zk = new ZooKeeper(zkConnectionString, ZOOKEEPER_SESSION_TIME_OUT, watcher);
+        try {
+            zk.exists("/dummy", watcher);
+            if (LOGGER.isDebugEnabled()) {
+                LOGGER.debug("ZooKeeper running at " + connectionString);
+            }
+            createRootIfNotExist();
+            isRunning = true;
+        } catch (KeeperException ke) {
+            isRunning = false;
+        }
+        return isRunning;
+    }
+
+    public void startService(Configuration conf) throws Exception {
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Starting ZooKeeper at " + zkConnectionString);
+        }
+        ZookeeperUtil.writeConfiguration(ZOO_KEEPER_CONFIG, conf, ZOOKEEPER_LEADER_CONN_PORT,
+                ZOOKEEPER_LEADER_ELEC_PORT);
+        String initScript = ZOOKEEPER_HOME + File.separator + "bin" + File.separator + "zk.init";
+        StringBuffer cmdBuffer = new StringBuffer();
+        cmdBuffer.append(initScript + " ");
+        cmdBuffer.append(conf.getZookeeper().getHomeDir() + " ");
+        cmdBuffer.append(conf.getZookeeper().getServers().getJavaHome() + " ");
+        List<String> zkServers = conf.getZookeeper().getServers().getServer();
+        for (String zkServer : zkServers) {
+            cmdBuffer.append(zkServer + " ");
+        }
+        Runtime.getRuntime().exec(cmdBuffer.toString());
+        zk = new ZooKeeper(zkConnectionString, ZOOKEEPER_SESSION_TIME_OUT, watcher);
+        String head = msgQ.poll(10, TimeUnit.SECONDS);
+        if (head == null) {
+            StringBuilder msg = new StringBuilder(
+                    "Unable to start Zookeeper Service. This could be because of the following reasons.\n");
+            msg.append("1) Managix is incorrectly configured. Please run " + InstallerDriver.getManagixHome()
+                    + "/bin/managix validate" + " to run a validation test and correct the errors reported.");
+            msg.append("\n2) If validation in (1) is successful, ensure that java_home parameter is set correctly in Managix configuration ("
+                    + InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_CONF_XML + ")");
+            throw new Exception(msg.toString());
+        }
+        msgQ.take();
+        createRootIfNotExist();
+    }
+
+    public void stopService(Configuration conf) throws Exception {
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Stopping ZooKeeper running at " + zkConnectionString);
+        }
+        String stopScript = ZOOKEEPER_HOME + File.separator + "bin" + File.separator + "stop_zk";
+        StringBuffer cmdBuffer = new StringBuffer();
+        cmdBuffer.append(stopScript + " ");
+        cmdBuffer.append(conf.getZookeeper().getHomeDir() + " ");
+        List<String> zkServers = conf.getZookeeper().getServers().getServer();
+        for (String zkServer : zkServers) {
+            cmdBuffer.append(zkServer + " ");
+        }
+        Runtime.getRuntime().exec(cmdBuffer.toString());
+        if (LOGGER.isDebugEnabled()) {
+            LOGGER.debug("Stopped ZooKeeper service at " + zkConnectionString);
+        }
+    }
+
+    public void writeAsterixInstance(AsterixInstance asterixInstance) throws Exception {
+        String instanceBasePath = ASTERIX_INSTANCE_BASE_PATH + File.separator + asterixInstance.getName();
+        ByteArrayOutputStream b = new ByteArrayOutputStream();
+        ObjectOutputStream o = new ObjectOutputStream(b);
+        o.writeObject(asterixInstance);
+        zk.create(instanceBasePath, b.toByteArray(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+    }
+
+    private void createRootIfNotExist() throws Exception {
+        try {
+            Stat stat = zk.exists(ASTERIX_INSTANCE_BASE_PATH, false);
+            if (stat == null) {
+                zk.create(ASTERIX_INSTANCE_BASE_PATH, "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+            }
+        } catch (Exception e) {
+            createRootIfNotExist();
+        }
+    }
+
+    public AsterixInstance getAsterixInstance(String name) throws Exception {
+        String path = ASTERIX_INSTANCE_BASE_PATH + File.separator + name;
+        Stat stat = zk.exists(ASTERIX_INSTANCE_BASE_PATH + File.separator + name, false);
+        if (stat == null) {
+            return null;
+        }
+        byte[] asterixInstanceBytes = zk.getData(path, false, new Stat());
+        return readAsterixInstanceObject(asterixInstanceBytes);
+    }
+
+    public boolean exists(String asterixInstanceName) throws Exception {
+        return zk.exists(ASTERIX_INSTANCE_BASE_PATH + File.separator + asterixInstanceName, false) != null;
+    }
+
+    public void removeAsterixInstance(String name) throws Exception {
+        if (!exists(name)) {
+            throw new InstallerException("Asterix instance by name " + name + " does not exists.");
+        }
+        zk.delete(ASTERIX_INSTANCE_BASE_PATH + File.separator + name, DEFAULT_NODE_VERSION);
+    }
+
+    public List<AsterixInstance> getAsterixInstances() throws Exception {
+        List<String> instanceNames = zk.getChildren(ASTERIX_INSTANCE_BASE_PATH, false);
+        List<AsterixInstance> asterixInstances = new ArrayList<AsterixInstance>();
+        String path;
+        for (String instanceName : instanceNames) {
+            path = ASTERIX_INSTANCE_BASE_PATH + File.separator + instanceName;
+            byte[] asterixInstanceBytes = zk.getData(path, false, new Stat());
+            asterixInstances.add(readAsterixInstanceObject(asterixInstanceBytes));
+        }
+        return asterixInstances;
+    }
+
+    private AsterixInstance readAsterixInstanceObject(byte[] asterixInstanceBytes) throws IOException,
+            ClassNotFoundException {
+        ByteArrayInputStream b = new ByteArrayInputStream(asterixInstanceBytes);
+        ObjectInputStream ois = new ObjectInputStream(b);
+        return (AsterixInstance) ois.readObject();
+    }
+
+    public void updateAsterixInstance(AsterixInstance updatedInstance) throws Exception {
+        removeAsterixInstance(updatedInstance.getName());
+        writeAsterixInstance(updatedInstance);
+    }
+
+}
+
+class ZooKeeperWatcher implements Watcher {
+
+    private boolean isRunning = true;
+    private LinkedBlockingQueue<String> msgQ;
+
+    public ZooKeeperWatcher(LinkedBlockingQueue<String> msgQ) {
+        this.msgQ = msgQ;
+    }
+
+    public void process(WatchedEvent wEvent) {
+        switch (wEvent.getState()) {
+            case SyncConnected:
+                msgQ.add("connected");
+                break;
+        }
+    }
+
+    public boolean isRunning() {
+        return isRunning;
+    }
+
+}
+
+class ZookeeperUtil {
+
+    public static void writeConfiguration(String zooKeeperConfigPath, Configuration conf, int leaderConnPort,
+            int leaderElecPort) throws IOException {
+
+        StringBuffer buffer = new StringBuffer();
+        buffer.append("tickTime=1000" + "\n");
+        buffer.append("dataDir=" + conf.getZookeeper().getHomeDir() + File.separator + "data" + "\n");
+        buffer.append("clientPort=" + conf.getZookeeper().getClientPort().intValue() + "\n");
+        buffer.append("initLimit=" + 2 + "\n");
+        buffer.append("syncLimit=" + 2 + "\n");
+
+        List<String> servers = conf.getZookeeper().getServers().getServer();
+        int serverId = 1;
+        for (String server : servers) {
+            buffer.append("server" + "." + serverId + "=" + server + ":" + leaderConnPort + ":" + leaderElecPort + "\n");
+            serverId++;
+        }
+        InstallerUtil.dumpToFile(zooKeeperConfigPath, buffer.toString());
+    }
+
+}
diff --git a/asterix-installer/src/main/resources/clusters/local/local.xml b/asterix-installer/src/main/resources/clusters/local/local.xml
new file mode 100644
index 0000000..0af8dfc
--- /dev/null
+++ b/asterix-installer/src/main/resources/clusters/local/local.xml
@@ -0,0 +1,21 @@
+<cluster xmlns="cluster">
+  <name>local</name>
+  <working_dir>
+    <dir>/tmp/asterix-installer</dir>
+    <NFS>true</NFS>
+  </working_dir>
+  <log_dir>/tmp/asterix/logs</log_dir>
+  <txn_log_dir>/tmp/asterix/logs</txn_log_dir>
+  <iodevices>/tmp</iodevices>
+  <store>asterix/storage</store>
+  <java_home></java_home>
+  <master_node>
+    <id>master</id>
+    <client_ip>127.0.0.1</client_ip>
+    <cluster_ip>127.0.0.1</cluster_ip>
+  </master_node>
+  <node>
+    <id>node1</id>
+    <cluster_ip>127.0.0.1</cluster_ip>
+  </node>
+</cluster>
diff --git a/asterix-installer/src/main/resources/conf/asterix-configuration.xml b/asterix-installer/src/main/resources/conf/asterix-configuration.xml
new file mode 100644
index 0000000..37ddf88
--- /dev/null
+++ b/asterix-installer/src/main/resources/conf/asterix-configuration.xml
@@ -0,0 +1,116 @@
+<asterixConfiguration xmlns="asterixconf">
+
+	<property>
+		<name>nc_java_opts</name>
+		<value>-Xmx1024m</value>
+                <description>JVM parameters for each Node Contoller (NC)</description>
+	</property>
+
+	<property>
+		<name>cc_java_opts</name>
+		<value>-Xmx1024m</value>
+                <description>JVM parameters for each Cluster Contoller (CC)</description>
+	</property>
+
+	<property>
+		<name>size_memory_component</name>
+		<value>512m</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>total_size_memory_component</name>
+		<value>512m</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>log_buffer_num_pages</name>
+		<value>8</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>group_commit_interval</name>
+		<value>200ms</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>sort_op_memory</name>
+		<value>200m</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>join_op_memory</name>
+		<value>200m</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>web_interface_port</name>
+		<value>19001</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>num_pages_buffer_cache</name>
+		<value>8</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>log_level</name>
+		<value>INFO</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>lsn_threshold</name>
+		<value>64m</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>checkpointTermsInSecs</name>
+		<value>120</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>escalate_threshold_entity_to_dataset</name>
+		<value>8</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>num_pages_buffer_cache</name>
+		<value>1000</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>log_buffer_page_size</name>
+		<value>128k</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>log_partition_size</name>
+		<value>2147483648</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>shrink_timer_threshold</name>
+		<value>120000</value>
+                <description></description>
+	</property>
+
+	<property>
+		<name>log_buffer_num_pages</name>
+		<value>8</value>
+                <description></description>
+	</property>
+</asterixConfiguration>
diff --git a/asterix/asterix-installer/src/main/resources/conf/log4j.properties b/asterix-installer/src/main/resources/conf/log4j.properties
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/conf/log4j.properties
rename to asterix-installer/src/main/resources/conf/log4j.properties
diff --git a/asterix/asterix-installer/src/main/resources/conf/managix-conf.xml b/asterix-installer/src/main/resources/conf/managix-conf.xml
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/conf/managix-conf.xml
rename to asterix-installer/src/main/resources/conf/managix-conf.xml
diff --git a/asterix/asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop b/asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop
rename to asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop
diff --git a/asterix/asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop-config.sh b/asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop-config.sh
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop-config.sh
rename to asterix-installer/src/main/resources/hadoop-0.20.2/bin/hadoop-config.sh
diff --git a/asterix/asterix-installer/src/main/resources/hadoop-0.20.2/conf/hadoop-env.sh b/asterix-installer/src/main/resources/hadoop-0.20.2/conf/hadoop-env.sh
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/hadoop-0.20.2/conf/hadoop-env.sh
rename to asterix-installer/src/main/resources/hadoop-0.20.2/conf/hadoop-env.sh
diff --git a/asterix/asterix-installer/src/main/resources/schema/installer-conf.xsd b/asterix-installer/src/main/resources/schema/installer-conf.xsd
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/schema/installer-conf.xsd
rename to asterix-installer/src/main/resources/schema/installer-conf.xsd
diff --git a/asterix/asterix-installer/src/main/resources/schema/jaxb-bindings.xjb b/asterix-installer/src/main/resources/schema/jaxb-bindings.xjb
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/schema/jaxb-bindings.xjb
rename to asterix-installer/src/main/resources/schema/jaxb-bindings.xjb
diff --git a/asterix-installer/src/main/resources/scripts/managix b/asterix-installer/src/main/resources/scripts/managix
new file mode 100755
index 0000000..3d2ac10
--- /dev/null
+++ b/asterix-installer/src/main/resources/scripts/managix
@@ -0,0 +1,19 @@
+if [ -z $MANAGIX_HOME ] 
+ then
+   echo "MANAGIX_HOME is not defined"
+   exit 1
+fi
+
+
+for jar in `ls $MANAGIX_HOME/lib/*.jar`
+  do 
+  if [ -z $MANAGIX_CLASSPATH ] 
+  then 
+    MANAGIX_CLASSPATH=$jar 
+  else
+    MANAGIX_CLASSPATH=$MANAGIX_CLASSPATH:$jar 
+  fi
+done
+
+MANAGIX_CLASSPATH=$MANAGIX_CLASSPATH:$MANAGIX_HOME/conf/log4j.properties
+java $JAVA_OPTS -Dlog4j.configuration=file:$MANAGIX_HOME/conf/log4j.properties -cp $MANAGIX_CLASSPATH edu.uci.ics.asterix.installer.driver.InstallerDriver $@
diff --git a/asterix-installer/src/main/resources/scripts/validate_ssh.sh b/asterix-installer/src/main/resources/scripts/validate_ssh.sh
new file mode 100755
index 0000000..de6d79c
--- /dev/null
+++ b/asterix-installer/src/main/resources/scripts/validate_ssh.sh
@@ -0,0 +1,9 @@
+USERNAME=$1
+shift 1
+numargs=$#
+for ((i=1 ; i <= numargs ; i=i+1))
+do
+ host=$1
+ ssh -l $USERNAME -oNumberOfPasswordPrompts=0 $host "echo $host"
+ shift 1
+done
diff --git a/asterix/asterix-installer/src/main/resources/scripts/verify.sh b/asterix-installer/src/main/resources/scripts/verify.sh
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/scripts/verify.sh
rename to asterix-installer/src/main/resources/scripts/verify.sh
diff --git a/asterix/asterix-installer/src/main/resources/zookeeper/start_zk.sh b/asterix-installer/src/main/resources/zookeeper/start_zk.sh
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/zookeeper/start_zk.sh
rename to asterix-installer/src/main/resources/zookeeper/start_zk.sh
diff --git a/asterix/asterix-installer/src/main/resources/zookeeper/stop_zk b/asterix-installer/src/main/resources/zookeeper/stop_zk
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/zookeeper/stop_zk
rename to asterix-installer/src/main/resources/zookeeper/stop_zk
diff --git a/asterix/asterix-installer/src/main/resources/zookeeper/zk.init b/asterix-installer/src/main/resources/zookeeper/zk.init
similarity index 100%
rename from asterix/asterix-installer/src/main/resources/zookeeper/zk.init
rename to asterix-installer/src/main/resources/zookeeper/zk.init
diff --git a/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/test/AsterixInstallerIntegrationUtil.java b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/test/AsterixInstallerIntegrationUtil.java
new file mode 100644
index 0000000..dc6f643
--- /dev/null
+++ b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/test/AsterixInstallerIntegrationUtil.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.installer.test;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.math.BigInteger;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+
+import edu.uci.ics.asterix.installer.command.CommandHandler;
+import edu.uci.ics.asterix.installer.command.ShutdownCommand;
+import edu.uci.ics.asterix.installer.driver.InstallerDriver;
+import edu.uci.ics.asterix.installer.error.VerificationUtil;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
+import edu.uci.ics.asterix.installer.schema.conf.Configuration;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+import edu.uci.ics.hyracks.api.client.HyracksConnection;
+import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
+
+public class AsterixInstallerIntegrationUtil {
+
+    private static String managixHome;
+    private static String clusterConfigurationPath;
+    private static final CommandHandler cmdHandler = new CommandHandler();
+    public static final String ASTERIX_INSTANCE_NAME = "asterix";
+    private static final String CC_IP_ADDRESS = "127.0.0.1";
+    private static final int DEFAULT_HYRACKS_CC_CLIENT_PORT = 1098;
+    private static final int zookeeperClientPort = 2900;
+    private static final int zookeeperTestClientPort = 3945;
+
+    private static IHyracksClientConnection hcc;
+
+    private static final Logger LOGGER = Logger.getLogger(AsterixInstallerIntegrationUtil.class.getName());
+
+    public static void deinit() throws Exception {
+        deleteInstance();
+        stopZookeeper();
+    }
+
+    public static void init() throws Exception {
+        File asterixProjectDir = new File(System.getProperty("user.dir"));
+        File installerTargetDir = new File(asterixProjectDir, "target");
+        String managixHomeDirName = installerTargetDir.list(new FilenameFilter() {
+            @Override
+            public boolean accept(File dir, String name) {
+                return new File(dir, name).isDirectory() && name.startsWith("asterix-installer")
+                        && name.endsWith("binary-assembly");
+            }
+
+        })[0];
+        managixHome = new File(installerTargetDir, managixHomeDirName).getAbsolutePath();
+        System.setProperty("log4j.configuration", managixHome + File.separator + "conf" + File.separator
+                + "log4j.properties");
+
+        managixHome = AsterixInstallerIntegrationUtil.getManagixHome();
+        clusterConfigurationPath = managixHome + File.separator + "clusters" + File.separator + "local"
+                + File.separator + "local.xml";
+
+        InstallerDriver.setManagixHome(managixHome);
+
+        String command = "configure";
+        cmdHandler.processCommand(command.split(" "));
+        command = "validate -c " + clusterConfigurationPath;
+        cmdHandler.processCommand(command.split(" "));
+
+        startZookeeper();
+        InstallerDriver.initConfig();
+        createInstance();
+        hcc = new HyracksConnection(CC_IP_ADDRESS, DEFAULT_HYRACKS_CC_CLIENT_PORT);
+    }
+
+    public static IHyracksClientConnection getHyracksConnection() {
+        return hcc;
+    }
+
+    private static void startZookeeper() throws Exception {
+        initZookeeperTestConfiguration(zookeeperClientPort);
+        String script = managixHome + File.separator + "bin" + File.separator + "managix";
+
+        // shutdown zookeeper if running
+        String command = "shutdown";
+        cmdHandler.processCommand(command.split(" "));
+
+         Thread.sleep(2000);
+
+        // start zookeeper 
+        initZookeeperTestConfiguration(zookeeperTestClientPort);
+        ProcessBuilder pb2 = new ProcessBuilder(script, "describe");
+        Map<String, String> env2 = pb2.environment();
+        env2.put("MANAGIX_HOME", managixHome);
+        pb2.start();
+
+        Thread.sleep(2000);
+    }
+
+    public static void createInstance() throws Exception {
+
+        String command = null;
+        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService()
+                .getAsterixInstance(ASTERIX_INSTANCE_NAME);
+        if (instance != null) {
+            transformIntoRequiredState(State.INACTIVE);
+            command = "delete -n " + ASTERIX_INSTANCE_NAME;
+            cmdHandler.processCommand(command.split(" "));
+        }
+
+        command = "create -n " + ASTERIX_INSTANCE_NAME + " " + "-c" + " " + clusterConfigurationPath;
+        cmdHandler.processCommand(command.split(" "));
+
+        instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(ASTERIX_INSTANCE_NAME);
+        AsterixRuntimeState state = VerificationUtil.getAsterixRuntimeState(instance);
+        assert (state.getFailedNCs().isEmpty() && state.isCcRunning());
+    }
+
+    private static void initZookeeperTestConfiguration(int port) throws JAXBException, FileNotFoundException {
+        String installerConfPath = InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_CONF_XML;
+        JAXBContext ctx = JAXBContext.newInstance(Configuration.class);
+        Unmarshaller unmarshaller = ctx.createUnmarshaller();
+        Configuration configuration = (Configuration) unmarshaller.unmarshal(new File(installerConfPath));
+        configuration.getZookeeper().setClientPort(new BigInteger("" + port));
+        Marshaller marshaller = ctx.createMarshaller();
+        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+        marshaller.marshal(configuration, new FileOutputStream(installerConfPath));
+    }
+
+    public static void transformIntoRequiredState(AsterixInstance.State state) throws Exception {
+        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService()
+                .getAsterixInstance(ASTERIX_INSTANCE_NAME);
+        assert (instance != null);
+        if (instance.getState().equals(state)) {
+            return;
+        }
+        if (state.equals(AsterixInstance.State.UNUSABLE)) {
+            throw new IllegalArgumentException("Invalid desired state");
+        }
+
+        String command = null;
+        switch (instance.getState()) {
+            case ACTIVE:
+                command = "stop -n " + ASTERIX_INSTANCE_NAME;
+                break;
+            case INACTIVE:
+                command = "start -n " + ASTERIX_INSTANCE_NAME;
+                break;
+        }
+        cmdHandler.processCommand(command.split(" "));
+    }
+
+    private static void stopZookeeper() throws IOException, JAXBException {
+        String script = managixHome + File.separator + "bin" + File.separator + "managix";
+        // shutdown zookeeper if running
+        ProcessBuilder pb = new ProcessBuilder(script, "shutdown");
+        Map<String, String> env = pb.environment();
+        env.put("MANAGIX_HOME", managixHome);
+        pb.start();
+    }
+
+    private static void deleteInstance() throws Exception {
+        String command = null;
+        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService()
+                .getAsterixInstance(ASTERIX_INSTANCE_NAME);
+
+        if (instance == null) {
+            return;
+        } else {
+            transformIntoRequiredState(State.INACTIVE);
+            command = "delete -n " + ASTERIX_INSTANCE_NAME;
+            cmdHandler.processCommand(command.split(" "));
+        }
+        instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(ASTERIX_INSTANCE_NAME);
+        assert (instance == null);
+    }
+
+    public static String getManagixHome() {
+        return managixHome;
+    }
+
+    public static void installLibrary(String libraryName, String libraryDataverse, String libraryPath) throws Exception {
+        transformIntoRequiredState(State.INACTIVE);
+        String command = "install -n " + ASTERIX_INSTANCE_NAME + " -d " + libraryDataverse + " -l " + libraryName
+                + " -p " + libraryPath;
+        cmdHandler.processCommand(command.split(" "));
+    }
+
+    public static void uninstallLibrary(String dataverseName, String libraryName) throws Exception {
+        transformIntoRequiredState(State.INACTIVE);
+        String command = "uninstall -n " + ASTERIX_INSTANCE_NAME + " -d " + dataverseName + " -l " + "libraryName";
+        cmdHandler.processCommand(command.split(" "));
+    }
+
+    public static void executeCommand(String command) throws Exception {
+        cmdHandler.processCommand(command.trim().split(" "));
+    }
+
+}
diff --git a/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/test/AsterixLifecycleIT.java b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/test/AsterixLifecycleIT.java
new file mode 100644
index 0000000..98c6bf0
--- /dev/null
+++ b/asterix-installer/src/test/java/edu/uci/ics/asterix/installer/test/AsterixLifecycleIT.java
@@ -0,0 +1,119 @@
+package edu.uci.ics.asterix.installer.test;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.logging.Logger;
+
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.junit.runners.Parameterized.Parameters;
+
+import edu.uci.ics.asterix.installer.command.CommandHandler;
+import edu.uci.ics.asterix.installer.error.VerificationUtil;
+import edu.uci.ics.asterix.installer.model.AsterixInstance;
+import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
+import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
+import edu.uci.ics.asterix.installer.service.ServiceProvider;
+import edu.uci.ics.asterix.test.aql.TestsUtils;
+import edu.uci.ics.asterix.testframework.context.TestCaseContext;
+
+public class AsterixLifecycleIT {
+
+    private static final int NUM_NC = 1;
+    private static final CommandHandler cmdHandler = new CommandHandler();
+    private static final String PATH_BASE = "src/test/resources/integrationts/lifecycle";
+    private static final String PATH_ACTUAL = "ittest/";
+    private static final Logger LOGGER = Logger.getLogger(AsterixLifecycleIT.class.getName());
+    private static List<TestCaseContext> testCaseCollection;
+
+    @BeforeClass
+    public static void setUp() throws Exception {
+        AsterixInstallerIntegrationUtil.init();
+        TestCaseContext.Builder b = new TestCaseContext.Builder();
+        testCaseCollection = b.build(new File(PATH_BASE));
+    }
+
+    @AfterClass
+    public static void tearDown() throws Exception {
+        AsterixInstallerIntegrationUtil.deinit();
+    }
+
+    @Parameters
+    public static Collection<Object[]> tests() throws Exception {
+        Collection<Object[]> testArgs = new ArrayList<Object[]>();
+        return testArgs;
+    }
+
+    @Test
+    public void testStopActiveInstance() throws Exception {
+        try {
+            AsterixInstallerIntegrationUtil.transformIntoRequiredState(State.ACTIVE);
+            String command = "stop -n " + AsterixInstallerIntegrationUtil.ASTERIX_INSTANCE_NAME;
+            cmdHandler.processCommand(command.split(" "));
+            AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(
+                    AsterixInstallerIntegrationUtil.ASTERIX_INSTANCE_NAME);
+            AsterixRuntimeState state = VerificationUtil.getAsterixRuntimeState(instance);
+            assert (state.getFailedNCs().size() == NUM_NC && !state.isCcRunning());
+            LOGGER.info("Test stop active instance PASSED");
+        } catch (Exception e) {
+            throw new Exception("Test configure installer " + "\" FAILED!", e);
+        }
+    }
+
+    @Test
+    public void testStartActiveInstance() throws Exception {
+        try {
+            AsterixInstallerIntegrationUtil.transformIntoRequiredState(State.INACTIVE);
+            String command = "start -n " + AsterixInstallerIntegrationUtil.ASTERIX_INSTANCE_NAME;
+            cmdHandler.processCommand(command.split(" "));
+            AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(
+                    AsterixInstallerIntegrationUtil.ASTERIX_INSTANCE_NAME);
+            AsterixRuntimeState state = VerificationUtil.getAsterixRuntimeState(instance);
+            assert (state.getFailedNCs().size() == 0 && state.isCcRunning());
+            LOGGER.info("Test start active instance PASSED");
+        } catch (Exception e) {
+            throw new Exception("Test configure installer " + "\" FAILED!", e);
+        }
+    }
+
+    @Test
+    public void testDeleteActiveInstance() throws Exception {
+        try {
+            AsterixInstallerIntegrationUtil.transformIntoRequiredState(State.INACTIVE);
+            String command = "delete -n " + AsterixInstallerIntegrationUtil.ASTERIX_INSTANCE_NAME;
+            cmdHandler.processCommand(command.split(" "));
+            AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(
+                    AsterixInstallerIntegrationUtil.ASTERIX_INSTANCE_NAME);
+            assert (instance == null);
+            LOGGER.info("Test delete active instance PASSED");
+        } catch (Exception e) {
+            throw new Exception("Test delete active instance " + "\" FAILED!", e);
+        } finally {
+            // recreate instance
+            AsterixInstallerIntegrationUtil.createInstance();
+        }
+    }
+
+    @Test
+    public void test() throws Exception {
+        for (TestCaseContext testCaseCtx : testCaseCollection) {
+            TestsUtils.executeTest(PATH_ACTUAL, testCaseCtx);
+        }
+    }
+
+    public static void main(String[] args) throws Exception {
+        try {
+            setUp();
+            new AsterixLifecycleIT().test();
+        } catch (Exception e) {
+            e.printStackTrace();
+            LOGGER.info("TEST CASE(S) FAILED");
+        } finally {
+            tearDown();
+        }
+    }
+
+}
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.1.ddl.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.1.ddl.aql
new file mode 100644
index 0000000..87b762b
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.1.ddl.aql
@@ -0,0 +1 @@
+create dataverse backupDataverse;
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.2.mgx.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.2.mgx.aql
new file mode 100644
index 0000000..2d8a23e
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.2.mgx.aql
@@ -0,0 +1 @@
+stop -n asterix
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.3.mgx.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.3.mgx.aql
new file mode 100644
index 0000000..baf9551
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.3.mgx.aql
@@ -0,0 +1 @@
+backup -n asterix
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.4.mgx.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.4.mgx.aql
new file mode 100644
index 0000000..4e99f33
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.4.mgx.aql
@@ -0,0 +1 @@
+start -n asterix
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.5.ddl.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.5.ddl.aql
new file mode 100644
index 0000000..3b6f51b
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.5.ddl.aql
@@ -0,0 +1,2 @@
+drop dataverse backupDataverse;
+
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.6.mgx.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.6.mgx.aql
new file mode 100644
index 0000000..2d8a23e
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.6.mgx.aql
@@ -0,0 +1 @@
+stop -n asterix
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.7.mgx.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.7.mgx.aql
new file mode 100644
index 0000000..063616b
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.7.mgx.aql
@@ -0,0 +1 @@
+restore -n asterix -b 0
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.8.mgx.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.8.mgx.aql
new file mode 100644
index 0000000..4e99f33
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.8.mgx.aql
@@ -0,0 +1 @@
+start -n asterix
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.9.query.aql b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.9.query.aql
new file mode 100644
index 0000000..4833c1b
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/queries/asterix-lifecycle/backupRestore/backupRestore.9.query.aql
@@ -0,0 +1,3 @@
+for $x in dataset Metadata.Dataverse
+where $x.DataverseName='backupDataverse'
+return $x
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/results/asterix-lifecycle/backupRestore/backupRestore.1.adm b/asterix-installer/src/test/resources/integrationts/lifecycle/results/asterix-lifecycle/backupRestore/backupRestore.1.adm
new file mode 100644
index 0000000..722abfd
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/results/asterix-lifecycle/backupRestore/backupRestore.1.adm
@@ -0,0 +1 @@
+{ "DataverseName": "backupDataverse", "DataFormat": "edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat", "Timestamp": "Wed Apr 24 16:13:46 PDT 2013", "PendingOp": 0 }
diff --git a/asterix-installer/src/test/resources/integrationts/lifecycle/testsuite.xml b/asterix-installer/src/test/resources/integrationts/lifecycle/testsuite.xml
new file mode 100644
index 0000000..48f548f
--- /dev/null
+++ b/asterix-installer/src/test/resources/integrationts/lifecycle/testsuite.xml
@@ -0,0 +1,10 @@
+<test-suite xmlns="urn:xml.testframework.asterix.ics.uci.edu" ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql">
+  <test-group name="lifecycle">
+    <test-case FilePath="asterix-lifecycle">
+      <compilation-unit name="backupRestore">
+        <output-dir compare="Text">backupRestore</output-dir>
+      </compilation-unit>
+    </test-case>
+  </test-group>
+</test-suite>
+
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/Asterix_ADM_Parser.md b/asterix-maven-plugins/lexer-generator-maven-plugin/Asterix_ADM_Parser.md
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/Asterix_ADM_Parser.md
rename to asterix-maven-plugins/lexer-generator-maven-plugin/Asterix_ADM_Parser.md
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/README.md b/asterix-maven-plugins/lexer-generator-maven-plugin/README.md
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/README.md
rename to asterix-maven-plugins/lexer-generator-maven-plugin/README.md
diff --git a/asterix-maven-plugins/lexer-generator-maven-plugin/pom.xml b/asterix-maven-plugins/lexer-generator-maven-plugin/pom.xml
new file mode 100644
index 0000000..6b444e8
--- /dev/null
+++ b/asterix-maven-plugins/lexer-generator-maven-plugin/pom.xml
@@ -0,0 +1,42 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>edu.uci.ics.asterix</groupId>
+  <artifactId>lexer-generator-maven-plugin</artifactId>
+	<parent>
+		<artifactId>asterix-maven-plugins</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+
+  <packaging>maven-plugin</packaging>
+  <name>lexer-generator-maven-plugin</name>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>2.0.2</version>
+        <configuration>
+          <source>1.6</source>
+          <target>1.6</target>
+	  <fork>true</fork>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.1</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>2.0.2</version>
+    </dependency>
+  </dependencies>    
+</project>
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGenerator.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGenerator.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGenerator.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGenerator.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGeneratorMojo.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGeneratorMojo.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGeneratorMojo.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerGeneratorMojo.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerNode.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerNode.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerNode.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/LexerNode.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/NodeChainFactory.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/NodeChainFactory.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/NodeChainFactory.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/NodeChainFactory.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/Token.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/Token.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/Token.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/Token.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/TokenAux.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/TokenAux.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/TokenAux.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/TokenAux.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGenerator.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGenerator.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGenerator.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGenerator.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorAnythingUntil.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorAnythingUntil.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorAnythingUntil.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorAnythingUntil.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCaseInsensitiveChar.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCaseInsensitiveChar.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCaseInsensitiveChar.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCaseInsensitiveChar.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorChar.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorChar.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorChar.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorChar.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCharOrNothing.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCharOrNothing.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCharOrNothing.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorCharOrNothing.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorDigitSequence.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorDigitSequence.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorDigitSequence.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorDigitSequence.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorNothing.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorNothing.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorNothing.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorNothing.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSign.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSign.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSign.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSign.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSignOrNothing.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSignOrNothing.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSignOrNothing.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorSignOrNothing.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorString.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorString.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorString.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorString.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorToken.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorToken.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorToken.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rulegenerators/RuleGeneratorToken.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/Rule.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/Rule.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/Rule.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/Rule.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleAnythingUntil.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleAnythingUntil.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleAnythingUntil.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleAnythingUntil.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleChar.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleChar.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleChar.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleChar.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleDigitSequence.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleDigitSequence.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleDigitSequence.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleDigitSequence.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleEpsilon.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleEpsilon.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleEpsilon.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RuleEpsilon.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RulePartial.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RulePartial.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RulePartial.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/java/edu/uci/ics/asterix/lexergenerator/rules/RulePartial.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/Lexer.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/LexerException.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/default.config b/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/default.config
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/default.config
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/main/resources/default.config
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/Fixtures.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/Fixtures.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/Fixtures.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/Fixtures.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAddRuleTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAddRuleTest.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAddRuleTest.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAddRuleTest.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendNodeTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendNodeTest.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendNodeTest.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendNodeTest.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendRuleTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendRuleTest.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendRuleTest.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAppendRuleTest.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeAuxFunctionsTest.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeCloneTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeCloneTest.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeCloneTest.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeCloneTest.java
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeMergeNodeTest.java b/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeMergeNodeTest.java
similarity index 100%
rename from asterix/asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeMergeNodeTest.java
rename to asterix-maven-plugins/lexer-generator-maven-plugin/src/test/java/edu/uci/ics/asterix/lexergenerator/LexerNodeMergeNodeTest.java
diff --git a/asterix-maven-plugins/pom.xml b/asterix-maven-plugins/pom.xml
new file mode 100644
index 0000000..d71f2e9
--- /dev/null
+++ b/asterix-maven-plugins/pom.xml
@@ -0,0 +1,25 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>edu.uci.ics.asterix</groupId>
+  <artifactId>asterix-maven-plugins</artifactId>
+  <packaging>pom</packaging>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+
+  <dependencies>
+  	<dependency>
+  		<groupId>org.apache.maven</groupId>
+  		<artifactId>maven-plugin-api</artifactId>
+  		<version>2.2.1</version>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  </dependencies>
+
+  <modules>
+    <module>lexer-generator-maven-plugin</module>
+  </modules>
+</project>
diff --git a/asterix-metadata/pom.xml b/asterix-metadata/pom.xml
new file mode 100644
index 0000000..425e8ff
--- /dev/null
+++ b/asterix-metadata/pom.xml
@@ -0,0 +1,71 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-metadata</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-common</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-om</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-external-data</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-core</artifactId>
+			<version>0.20.2</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-btree</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-core</artifactId>
+			<version>0.20.2</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/IDatasetDetails.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/IDatasetDetails.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/IDatasetDetails.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/IDatasetDetails.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataCache.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataCache.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataCache.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataCache.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataException.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataException.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataException.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataException.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
new file mode 100644
index 0000000..994262d
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
@@ -0,0 +1,613 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata;
+
+import java.rmi.RemoteException;
+import java.util.List;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
+import edu.uci.ics.asterix.metadata.api.IMetadataManager;
+import edu.uci.ics.asterix.metadata.api.IMetadataNode;
+import edu.uci.ics.asterix.metadata.bootstrap.MetadataConstants;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.Node;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobIdFactory;
+
+/**
+ * Provides access to Asterix metadata via remote methods to the metadata node.
+ * This metadata manager maintains a local cache of metadata Java objects
+ * received from the metadata node, to avoid contacting the metadata node
+ * repeatedly. We assume that this metadata manager is the only metadata manager
+ * in an Asterix cluster. Therefore, no separate cache-invalidation mechanism is
+ * needed at this point.
+ * Assumptions/Limitations:
+ * The metadata subsystem is started during NC Bootstrap start, i.e., when
+ * Asterix is deployed.
+ * The metadata subsystem is destroyed in NC Bootstrap end, i.e., when Asterix
+ * is undeployed.
+ * The metadata subsystem consists of the MetadataManager and the MatadataNode.
+ * The MetadataManager provides users access to the metadata.
+ * The MetadataNode implements direct access to the storage layer on behalf of
+ * the MetadataManager, and translates the binary representation of ADM into
+ * Java objects for consumption by the MetadataManager's users.
+ * There is exactly one instance of the MetadataManager and of the MetadataNode
+ * in the cluster, which may or may not be co-located on the same machine (or in
+ * the same JVM).
+ * The MetadataManager exists in the same JVM as its user's (e.g., the query
+ * compiler).
+ * The MetadataNode exists in the same JVM as it's transactional components
+ * (LockManager, LogManager, etc.)
+ * Users shall access the metadata only through the MetadataManager, and never
+ * via the MetadataNode directly.
+ * Multiple threads may issue requests to the MetadataManager concurrently. For
+ * the sake of accessing metadata, we assume a transaction consists of one
+ * thread.
+ * Users are responsible for locking the metadata (using the MetadataManager
+ * API) before issuing requests.
+ * The MetadataNode is responsible for acquiring finer-grained locks on behalf
+ * of requests from the MetadataManager. Currently, locks are acquired per
+ * BTree, since the BTree does not acquire even finer-grained locks yet
+ * internally.
+ * The metadata can be queried with AQL DML like any other dataset, but can only
+ * be changed with AQL DDL.
+ * The transaction ids for metadata transactions must be unique across the
+ * cluster, i.e., metadata transaction ids shall never "accidentally" overlap
+ * with transaction ids of regular jobs or other metadata transactions.
+ */
+public class MetadataManager implements IMetadataManager {
+    // Set in init().
+    public static MetadataManager INSTANCE;
+    private final MetadataCache cache = new MetadataCache();
+    private IAsterixStateProxy proxy;
+    private IMetadataNode metadataNode;
+    private final ReadWriteLock metadataLatch;
+
+    public MetadataManager(IAsterixStateProxy proxy) {
+        if (proxy == null) {
+            throw new Error("Null proxy given to MetadataManager.");
+        }
+        this.proxy = proxy;
+        this.metadataNode = null;
+        this.metadataLatch = new ReentrantReadWriteLock(true);
+    }
+
+    @Override
+    public void init() throws RemoteException {
+        // Could be synchronized on any object. Arbitrarily chose proxy.
+        synchronized (proxy) {
+            if (metadataNode != null) {
+                return;
+            }
+            metadataNode = proxy.getMetadataNode();
+            if (metadataNode == null) {
+                throw new Error("Failed to get the MetadataNode.\n" + "The MetadataNode was configured to run on NC: "
+                        + proxy.getAsterixProperties().getMetadataNodeName());
+            }
+        }
+    }
+
+    @Override
+    public MetadataTransactionContext beginTransaction() throws RemoteException, ACIDException {
+        JobId jobId = JobIdFactory.generateJobId();
+        metadataNode.beginTransaction(jobId);
+        return new MetadataTransactionContext(jobId);
+    }
+
+    @Override
+    public void commitTransaction(MetadataTransactionContext ctx) throws RemoteException, ACIDException {
+        metadataNode.commitTransaction(ctx.getJobId());
+        cache.commit(ctx);
+    }
+
+    @Override
+    public void abortTransaction(MetadataTransactionContext ctx) throws RemoteException, ACIDException {
+        metadataNode.abortTransaction(ctx.getJobId());
+    }
+
+    @Override
+    public void lock(MetadataTransactionContext ctx, byte lockMode) throws RemoteException, ACIDException {
+        metadataNode.lock(ctx.getJobId(), lockMode);
+    }
+
+    @Override
+    public void unlock(MetadataTransactionContext ctx) throws RemoteException, ACIDException {
+        metadataNode.unlock(ctx.getJobId());
+    }
+
+    @Override
+    public void addDataverse(MetadataTransactionContext ctx, Dataverse dataverse) throws MetadataException {
+        try {
+            metadataNode.addDataverse(ctx.getJobId(), dataverse);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.addDataverse(dataverse);
+    }
+
+    @Override
+    public void dropDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException {
+        try {
+            metadataNode.dropDataverse(ctx.getJobId(), dataverseName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.dropDataverse(dataverseName);
+    }
+
+    @Override
+    public List<Dataverse> getDataverses(MetadataTransactionContext ctx) throws MetadataException {
+        try {
+            return metadataNode.getDataverses(ctx.getJobId());
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public Dataverse getDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException {
+        // First look in the context to see if this transaction created the
+        // requested dataverse itself (but the dataverse is still uncommitted).
+        Dataverse dataverse = ctx.getDataverse(dataverseName);
+        if (dataverse != null) {
+            // Don't add this dataverse to the cache, since it is still
+            // uncommitted.
+            return dataverse;
+        }
+        if (ctx.dataverseIsDropped(dataverseName)) {
+            // Dataverse has been dropped by this transaction but could still be
+            // in the cache.
+            return null;
+        }
+        dataverse = cache.getDataverse(dataverseName);
+        if (dataverse != null) {
+            // Dataverse is already in the cache, don't add it again.
+            return dataverse;
+        }
+        try {
+            dataverse = metadataNode.getDataverse(ctx.getJobId(), dataverseName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // We fetched the dataverse from the MetadataNode. Add it to the cache
+        // when this transaction commits.
+        if (dataverse != null) {
+            ctx.addDataverse(dataverse);
+        }
+        return dataverse;
+    }
+
+    @Override
+    public List<Dataset> getDataverseDatasets(MetadataTransactionContext ctx, String dataverseName)
+            throws MetadataException {
+        List<Dataset> dataverseDatasets;
+        try {
+            // Assuming that the transaction can read its own writes on the
+            // metadata node.
+            dataverseDatasets = metadataNode.getDataverseDatasets(ctx.getJobId(), dataverseName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // Don't update the cache to avoid checking against the transaction's
+        // uncommitted datasets.
+        return dataverseDatasets;
+    }
+
+    @Override
+    public void addDataset(MetadataTransactionContext ctx, Dataset dataset) throws MetadataException {
+        // add dataset into metadataNode 
+        try {
+            metadataNode.addDataset(ctx.getJobId(), dataset);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+
+        // reflect the dataset into the cache
+        ctx.addDataset(dataset);
+    }
+
+    @Override
+    public void dropDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
+            throws MetadataException {
+        try {
+            metadataNode.dropDataset(ctx.getJobId(), dataverseName, datasetName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.dropDataset(dataverseName, datasetName);
+    }
+
+    @Override
+    public Dataset getDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
+            throws MetadataException {
+
+        // First look in the context to see if this transaction created the
+        // requested dataset itself (but the dataset is still uncommitted).
+        Dataset dataset = ctx.getDataset(dataverseName, datasetName);
+        if (dataset != null) {
+            // Don't add this dataverse to the cache, since it is still
+            // uncommitted.
+            return dataset;
+        }
+        if (ctx.datasetIsDropped(dataverseName, datasetName)) {
+            // Dataset has been dropped by this transaction but could still be
+            // in the cache.
+            return null;
+        }
+
+        dataset = cache.getDataset(dataverseName, datasetName);
+        if (dataset != null) {
+            // Dataset is already in the cache, don't add it again.
+            return dataset;
+        }
+        try {
+            dataset = metadataNode.getDataset(ctx.getJobId(), dataverseName, datasetName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // We fetched the dataset from the MetadataNode. Add it to the cache
+        // when this transaction commits.
+        if (dataset != null) {
+            ctx.addDataset(dataset);
+        }
+        return dataset;
+    }
+
+    @Override
+    public List<Index> getDatasetIndexes(MetadataTransactionContext ctx, String dataverseName, String datasetName)
+            throws MetadataException {
+        List<Index> datsetIndexes;
+        try {
+            datsetIndexes = metadataNode.getDatasetIndexes(ctx.getJobId(), dataverseName, datasetName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        return datsetIndexes;
+    }
+
+    @Override
+    public void addDatatype(MetadataTransactionContext ctx, Datatype datatype) throws MetadataException {
+        try {
+            metadataNode.addDatatype(ctx.getJobId(), datatype);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.addDatatype(datatype);
+    }
+
+    @Override
+    public void dropDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
+            throws MetadataException {
+        try {
+            metadataNode.dropDatatype(ctx.getJobId(), dataverseName, datatypeName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.dropDataDatatype(dataverseName, datatypeName);
+    }
+
+    @Override
+    public Datatype getDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
+            throws MetadataException {
+        // First look in the context to see if this transaction created the
+        // requested datatype itself (but the datatype is still uncommitted).
+        Datatype datatype = ctx.getDatatype(dataverseName, datatypeName);
+        if (datatype != null) {
+            // Don't add this dataverse to the cache, since it is still
+            // uncommitted.
+            return datatype;
+        }
+        if (ctx.datatypeIsDropped(dataverseName, datatypeName)) {
+            // Datatype has been dropped by this transaction but could still be
+            // in the cache.
+            return null;
+        }
+
+        datatype = cache.getDatatype(dataverseName, datatypeName);
+        if (datatype != null) {
+            // Datatype is already in the cache, don't add it again.
+            return datatype;
+        }
+        try {
+            datatype = metadataNode.getDatatype(ctx.getJobId(), dataverseName, datatypeName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // We fetched the datatype from the MetadataNode. Add it to the cache
+        // when this transaction commits.
+        if (datatype != null) {
+            ctx.addDatatype(datatype);
+        }
+        return datatype;
+    }
+
+    @Override
+    public void addIndex(MetadataTransactionContext ctx, Index index) throws MetadataException {
+        try {
+            metadataNode.addIndex(ctx.getJobId(), index);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.addIndex(index);
+    }
+
+    @Override
+    public void addAdapter(MetadataTransactionContext mdTxnCtx, DatasourceAdapter adapter) throws MetadataException {
+        try {
+            metadataNode.addAdapter(mdTxnCtx.getJobId(), adapter);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        mdTxnCtx.addAdapter(adapter);
+
+    }
+
+    @Override
+    public void dropIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
+            throws MetadataException {
+        try {
+            metadataNode.dropIndex(ctx.getJobId(), dataverseName, datasetName, indexName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.dropIndex(dataverseName, datasetName, indexName);
+    }
+
+    @Override
+    public Index getIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
+            throws MetadataException {
+
+        // First look in the context to see if this transaction created the
+        // requested index itself (but the index is still uncommitted).
+        Index index = ctx.getIndex(dataverseName, datasetName, indexName);
+        if (index != null) {
+            // Don't add this index to the cache, since it is still
+            // uncommitted.
+            return index;
+        }
+
+        if (ctx.indexIsDropped(dataverseName, datasetName, indexName)) {
+            // Index has been dropped by this transaction but could still be
+            // in the cache.
+            return null;
+        }
+
+        index = cache.getIndex(dataverseName, datasetName, indexName);
+        if (index != null) {
+            // Index is already in the cache, don't add it again.
+            return index;
+        }
+        try {
+            index = metadataNode.getIndex(ctx.getJobId(), dataverseName, datasetName, indexName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // We fetched the index from the MetadataNode. Add it to the cache
+        // when this transaction commits.
+        if (index != null) {
+            ctx.addIndex(index);
+        }
+        return index;
+    }
+
+    @Override
+    public void addNode(MetadataTransactionContext ctx, Node node) throws MetadataException {
+        try {
+            metadataNode.addNode(ctx.getJobId(), node);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addNodegroup(MetadataTransactionContext ctx, NodeGroup nodeGroup) throws MetadataException {
+        try {
+            metadataNode.addNodeGroup(ctx.getJobId(), nodeGroup);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.addNogeGroup(nodeGroup);
+    }
+
+    @Override
+    public void dropNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException {
+        try {
+            metadataNode.dropNodegroup(ctx.getJobId(), nodeGroupName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.dropNodeGroup(nodeGroupName);
+    }
+
+    @Override
+    public NodeGroup getNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException {
+        // First look in the context to see if this transaction created the
+        // requested dataverse itself (but the dataverse is still uncommitted).
+        NodeGroup nodeGroup = ctx.getNodeGroup(nodeGroupName);
+        if (nodeGroup != null) {
+            // Don't add this dataverse to the cache, since it is still
+            // uncommitted.
+            return nodeGroup;
+        }
+        if (ctx.nodeGroupIsDropped(nodeGroupName)) {
+            // NodeGroup has been dropped by this transaction but could still be
+            // in the cache.
+            return null;
+        }
+        nodeGroup = cache.getNodeGroup(nodeGroupName);
+        if (nodeGroup != null) {
+            // NodeGroup is already in the cache, don't add it again.
+            return nodeGroup;
+        }
+        try {
+            nodeGroup = metadataNode.getNodeGroup(ctx.getJobId(), nodeGroupName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // We fetched the nodeGroup from the MetadataNode. Add it to the cache
+        // when this transaction commits.
+        if (nodeGroup != null) {
+            ctx.addNogeGroup(nodeGroup);
+        }
+        return nodeGroup;
+    }
+
+    @Override
+    public void addFunction(MetadataTransactionContext mdTxnCtx, Function function) throws MetadataException {
+        try {
+            metadataNode.addFunction(mdTxnCtx.getJobId(), function);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        mdTxnCtx.addFunction(function);
+    }
+
+    @Override
+    public void dropFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
+            throws MetadataException {
+        try {
+            metadataNode.dropFunction(ctx.getJobId(), functionSignature);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        ctx.dropFunction(functionSignature);
+    }
+
+    @Override
+    public Function getFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
+            throws MetadataException {
+        // First look in the context to see if this transaction created the
+        // requested dataset itself (but the dataset is still uncommitted).
+        Function function = ctx.getFunction(functionSignature);
+        if (function != null) {
+            // Don't add this dataverse to the cache, since it is still
+            // uncommitted.
+            return function;
+        }
+        if (ctx.functionIsDropped(functionSignature)) {
+            // Function has been dropped by this transaction but could still be
+            // in the cache.
+            return null;
+        }
+        if (ctx.getDataverse(functionSignature.getNamespace()) != null) {
+            // This transaction has dropped and subsequently created the same
+            // dataverse.
+            return null;
+        }
+        function = cache.getFunction(functionSignature);
+        if (function != null) {
+            // Function is already in the cache, don't add it again.
+            return function;
+        }
+        try {
+            function = metadataNode.getFunction(ctx.getJobId(), functionSignature);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // We fetched the function from the MetadataNode. Add it to the cache
+        // when this transaction commits.
+        if (function != null) {
+            ctx.addFunction(function);
+        }
+        return function;
+
+    }
+
+    @Override
+    public void initializeDatasetIdFactory(MetadataTransactionContext ctx) throws MetadataException {
+        try {
+            metadataNode.initializeDatasetIdFactory(ctx.getJobId());
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+    }
+    
+    @Override
+    public int getMostRecentDatasetId() throws MetadataException {
+        try { 
+            return metadataNode.getMostRecentDatasetId();
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public List<Function> getDataverseFunctions(MetadataTransactionContext ctx, String dataverseName)
+            throws MetadataException {
+        List<Function> dataverseFunctions;
+        try {
+            // Assuming that the transaction can read its own writes on the
+            // metadata node.
+            dataverseFunctions = metadataNode.getDataverseFunctions(ctx.getJobId(), dataverseName);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        // Don't update the cache to avoid checking against the transaction's
+        // uncommitted functions.
+        return dataverseFunctions;
+    }
+
+    @Override
+    public void dropAdapter(MetadataTransactionContext ctx, String dataverseName, String name) throws MetadataException {
+        try {
+            metadataNode.dropAdapter(ctx.getJobId(), dataverseName, name);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public DatasourceAdapter getAdapter(MetadataTransactionContext ctx, String dataverseName, String name)
+            throws MetadataException {
+        DatasourceAdapter adapter = null;
+        try {
+            adapter = metadataNode.getAdapter(ctx.getJobId(), dataverseName, name);
+        } catch (RemoteException e) {
+            throw new MetadataException(e);
+        }
+        return adapter;
+    }
+
+    @Override
+    public void acquireWriteLatch() {
+        metadataLatch.writeLock().lock();
+    }
+
+    @Override
+    public void releaseWriteLatch() {
+        metadataLatch.writeLock().unlock();
+    }
+
+    @Override
+    public void acquireReadLatch() {
+        metadataLatch.readLock().lock();
+    }
+
+    @Override
+    public void releaseReadLatch() {
+        metadataLatch.readLock().unlock();
+    }
+}
\ No newline at end of file
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
new file mode 100644
index 0000000..5bdf086
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
@@ -0,0 +1,1129 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.common.context.AsterixAppRuntimeContext;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.metadata.api.IMetadataIndex;
+import edu.uci.ics.asterix.metadata.api.IMetadataNode;
+import edu.uci.ics.asterix.metadata.api.IValueExtractor;
+import edu.uci.ics.asterix.metadata.bootstrap.MetadataPrimaryIndexes;
+import edu.uci.ics.asterix.metadata.bootstrap.MetadataSecondaryIndexes;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.Node;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.DatasetTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.DatasourceAdapterTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.DatatypeTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.DataverseTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.FunctionTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.IndexTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.NodeGroupTupleTranslator;
+import edu.uci.ics.asterix.metadata.entitytupletranslators.NodeTupleTranslator;
+import edu.uci.ics.asterix.metadata.valueextractors.DatasetNameValueExtractor;
+import edu.uci.ics.asterix.metadata.valueextractors.DatatypeNameValueExtractor;
+import edu.uci.ics.asterix.metadata.valueextractors.MetadataEntityValueExtractor;
+import edu.uci.ics.asterix.metadata.valueextractors.NestedDatatypeNameValueExtractor;
+import edu.uci.ics.asterix.metadata.valueextractors.TupleCopyValueExtractor;
+import edu.uci.ics.asterix.om.base.AMutableString;
+import edu.uci.ics.asterix.om.base.AString;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexModificationOperationCallback;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.SecondaryIndexModificationOperationCallback;
+import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetId;
+import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetIdFactory;
+import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext.TransactionType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleReference;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.dataflow.common.util.TupleUtils;
+import edu.uci.ics.hyracks.storage.am.btree.exceptions.BTreeDuplicateKeyException;
+import edu.uci.ics.hyracks.storage.am.btree.impls.RangePredicate;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndex;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexAccessor;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexCursor;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexLifecycleManager;
+import edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallback;
+import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexCursor;
+import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
+import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallback;
+import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOperation;
+import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
+
+public class MetadataNode implements IMetadataNode {
+    private static final long serialVersionUID = 1L;
+
+    private static final DatasetId METADATA_DATASET_ID = new DatasetId(MetadataPrimaryIndexes.METADATA_DATASET_ID);
+
+    private IIndexLifecycleManager indexLifecycleManager;
+    private TransactionSubsystem transactionSubsystem;
+
+    public static final MetadataNode INSTANCE = new MetadataNode();
+
+    private MetadataNode() {
+        super();
+    }
+
+    public void initialize(AsterixAppRuntimeContext runtimeContext) {
+        this.transactionSubsystem = runtimeContext.getTransactionSubsystem();
+        this.indexLifecycleManager = runtimeContext.getIndexLifecycleManager();
+    }
+
+    @Override
+    public void beginTransaction(JobId transactionId) throws ACIDException, RemoteException {
+        transactionSubsystem.getTransactionManager().beginTransaction(transactionId);
+    }
+
+    @Override
+    public void commitTransaction(JobId jobId) throws RemoteException, ACIDException {
+        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+        transactionSubsystem.getTransactionManager().commitTransaction(txnCtx, new DatasetId(-1), -1);
+    }
+
+    @Override
+    public void abortTransaction(JobId jobId) throws RemoteException, ACIDException {
+        try {
+            TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+            transactionSubsystem.getTransactionManager().abortTransaction(txnCtx, new DatasetId(-1), -1);
+        } catch (ACIDException e) {
+            e.printStackTrace();
+            throw e;
+        }
+    }
+
+    @Override
+    public void lock(JobId jobId, byte lockMode) throws ACIDException, RemoteException {
+        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+        transactionSubsystem.getLockManager().lock(METADATA_DATASET_ID, -1, lockMode, txnCtx);
+    }
+
+    @Override
+    public void unlock(JobId jobId) throws ACIDException, RemoteException {
+        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+        transactionSubsystem.getLockManager().unlock(METADATA_DATASET_ID, -1, txnCtx);
+    }
+
+    @Override
+    public void addDataverse(JobId jobId, Dataverse dataverse) throws MetadataException, RemoteException {
+        try {
+            DataverseTupleTranslator tupleReaderWriter = new DataverseTupleTranslator(true);
+            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(dataverse);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, tuple);
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A dataverse with this name " + dataverse.getDataverseName()
+                    + " already exists.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addDataset(JobId jobId, Dataset dataset) throws MetadataException, RemoteException {
+        try {
+            // Insert into the 'dataset' dataset.
+            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(true);
+            ITupleReference datasetTuple = tupleReaderWriter.getTupleFromMetadataEntity(dataset);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, datasetTuple);
+            if (dataset.getDatasetType() == DatasetType.INTERNAL || dataset.getDatasetType() == DatasetType.FEED) {
+                // Add the primary index for the dataset.
+                InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails();
+                Index primaryIndex = new Index(dataset.getDataverseName(), dataset.getDatasetName(),
+                        dataset.getDatasetName(), IndexType.BTREE, id.getPrimaryKey(), true, dataset.getPendingOp());
+
+                addIndex(jobId, primaryIndex);
+                ITupleReference nodeGroupTuple = createTuple(id.getNodeGroupName(), dataset.getDataverseName(),
+                        dataset.getDatasetName());
+                insertTupleIntoIndex(jobId, MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, nodeGroupTuple);
+            }
+            // Add entry in datatype secondary index.
+            ITupleReference dataTypeTuple = createTuple(dataset.getDataverseName(), dataset.getItemTypeName(),
+                    dataset.getDatasetName());
+            insertTupleIntoIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, dataTypeTuple);
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A dataset with this name " + dataset.getDatasetName()
+                    + " already exists in dataverse '" + dataset.getDataverseName() + "'.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addIndex(JobId jobId, Index index) throws MetadataException, RemoteException {
+        try {
+            IndexTupleTranslator tupleWriter = new IndexTupleTranslator(true);
+            ITupleReference tuple = tupleWriter.getTupleFromMetadataEntity(index);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, tuple);
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("An index with name '" + index.getIndexName() + "' already exists.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addNode(JobId jobId, Node node) throws MetadataException, RemoteException {
+        try {
+            NodeTupleTranslator tupleReaderWriter = new NodeTupleTranslator(true);
+            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(node);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.NODE_DATASET, tuple);
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A node with name '" + node.getNodeName() + "' already exists.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addNodeGroup(JobId jobId, NodeGroup nodeGroup) throws MetadataException, RemoteException {
+        try {
+            NodeGroupTupleTranslator tupleReaderWriter = new NodeGroupTupleTranslator(true);
+            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(nodeGroup);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A nodegroup with name '" + nodeGroup.getNodeGroupName() + "' already exists.",
+                    e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addDatatype(JobId jobId, Datatype datatype) throws MetadataException, RemoteException {
+        try {
+            DatatypeTupleTranslator tupleReaderWriter = new DatatypeTupleTranslator(jobId, this, true);
+            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(datatype);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A datatype with name '" + datatype.getDatatypeName() + "' already exists.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addFunction(JobId jobId, Function function) throws MetadataException, RemoteException {
+        try {
+            // Insert into the 'function' dataset.
+            FunctionTupleTranslator tupleReaderWriter = new FunctionTupleTranslator(true);
+            ITupleReference functionTuple = tupleReaderWriter.getTupleFromMetadataEntity(function);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, functionTuple);
+
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A function with this name " + function.getName() + " and arity "
+                    + function.getArity() + " already exists in dataverse '" + function.getDataverseName() + "'.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    public void insertIntoDatatypeSecondaryIndex(JobId jobId, String dataverseName, String nestedTypeName,
+            String topTypeName) throws Exception {
+        ITupleReference tuple = createTuple(dataverseName, nestedTypeName, topTypeName);
+        insertTupleIntoIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, tuple);
+    }
+
+    private void insertTupleIntoIndex(JobId jobId, IMetadataIndex metadataIndex, ITupleReference tuple)
+            throws Exception {
+        long resourceID = metadataIndex.getResourceID();
+        ILSMIndex lsmIndex = (ILSMIndex) indexLifecycleManager.getIndex(resourceID);
+        indexLifecycleManager.open(resourceID);
+
+        //prepare a Callback for logging
+        IModificationOperationCallback modCallback = createIndexModificationCallback(jobId, resourceID, metadataIndex,
+                lsmIndex, IndexOperation.INSERT);
+
+        IIndexAccessor indexAccessor = lsmIndex.createAccessor(modCallback, NoOpOperationCallback.INSTANCE);
+
+        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+        txnCtx.setTransactionType(TransactionType.READ_WRITE);
+
+        // TODO: fix exceptions once new BTree exception model is in hyracks.
+        indexAccessor.insert(tuple);
+
+        indexLifecycleManager.close(resourceID);
+    }
+
+    private IModificationOperationCallback createIndexModificationCallback(JobId jobId, long resourceId,
+            IMetadataIndex metadataIndex, ILSMIndex lsmIndex, IndexOperation indexOp) throws Exception {
+        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+
+        if (metadataIndex.isPrimaryIndex()) {
+            return new PrimaryIndexModificationOperationCallback(metadataIndex.getDatasetId().getId(),
+                    metadataIndex.getPrimaryKeyIndexes(), txnCtx, transactionSubsystem.getLockManager(),
+                    transactionSubsystem, resourceId, ResourceType.LSM_BTREE, indexOp);
+        } else {
+            return new SecondaryIndexModificationOperationCallback(metadataIndex.getDatasetId().getId(),
+                    metadataIndex.getPrimaryKeyIndexes(), txnCtx, transactionSubsystem.getLockManager(),
+                    transactionSubsystem, resourceId, ResourceType.LSM_BTREE, indexOp);
+        }
+    }
+
+    @Override
+    public void dropDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException {
+        try {
+            List<Dataset> dataverseDatasets;
+
+            dataverseDatasets = getDataverseDatasets(jobId, dataverseName);
+            if (dataverseDatasets != null && dataverseDatasets.size() > 0) {
+                // Drop all datasets in this dataverse.
+                for (int i = 0; i < dataverseDatasets.size(); i++) {
+                    dropDataset(jobId, dataverseName, dataverseDatasets.get(i).getDatasetName());
+                }
+            }
+            List<Datatype> dataverseDatatypes;
+            // As a side effect, acquires an S lock on the 'datatype' dataset
+            // on behalf of txnId.
+            dataverseDatatypes = getDataverseDatatypes(jobId, dataverseName);
+            if (dataverseDatatypes != null && dataverseDatatypes.size() > 0) {
+                // Drop all types in this dataverse.
+                for (int i = 0; i < dataverseDatatypes.size(); i++) {
+                    forceDropDatatype(jobId, dataverseName, dataverseDatatypes.get(i).getDatatypeName());
+                }
+            }
+
+            // As a side effect, acquires an S lock on the 'Function' dataset
+            // on behalf of txnId.
+            List<Function> dataverseFunctions = getDataverseFunctions(jobId, dataverseName);
+            if (dataverseFunctions != null && dataverseFunctions.size() > 0) {
+                // Drop all functions in this dataverse.
+                for (Function function : dataverseFunctions) {
+                    dropFunction(jobId, new FunctionSignature(dataverseName, function.getName(), function.getArity()));
+                }
+            }
+
+            // As a side effect, acquires an S lock on the 'Adapter' dataset
+            // on behalf of txnId.
+            List<DatasourceAdapter> dataverseAdapters = getDataverseAdapters(jobId, dataverseName);
+            if (dataverseAdapters != null && dataverseAdapters.size() > 0) {
+                // Drop all functions in this dataverse.
+                for (DatasourceAdapter adapter : dataverseAdapters) {
+                    dropAdapter(jobId, dataverseName, adapter.getAdapterIdentifier().getAdapterName());
+                }
+            }
+
+            // Delete the dataverse entry from the 'dataverse' dataset.
+            ITupleReference searchKey = createTuple(dataverseName);
+            // As a side effect, acquires an S lock on the 'dataverse' dataset
+            // on behalf of txnId.
+            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, searchKey);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, tuple);
+
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new MetadataException("Cannot drop dataverse '" + dataverseName + "' because it doesn't exist.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void dropDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
+            RemoteException {
+        Dataset dataset;
+        try {
+            dataset = getDataset(jobId, dataverseName, datasetName);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+        if (dataset == null) {
+            throw new MetadataException("Cannot drop dataset '" + datasetName + "' because it doesn't exist.");
+        }
+        try {
+            // Delete entry from the 'datasets' dataset.
+            ITupleReference searchKey = createTuple(dataverseName, datasetName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'dataset' dataset.
+            try {
+                ITupleReference datasetTuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATASET_DATASET,
+                        searchKey);
+                deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, datasetTuple);
+            } catch (TreeIndexException tie) {
+                //ignore this exception and continue deleting all relevant artifacts. 
+            }
+
+            // Delete entry from secondary index 'group'.
+            if (dataset.getDatasetType() == DatasetType.INTERNAL || dataset.getDatasetType() == DatasetType.FEED) {
+                InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails();
+                ITupleReference groupNameSearchKey = createTuple(id.getNodeGroupName(), dataverseName, datasetName);
+                // Searches the index for the tuple to be deleted. Acquires an S
+                // lock on the GROUPNAME_ON_DATASET_INDEX index.
+                try {
+                    ITupleReference groupNameTuple = getTupleToBeDeleted(jobId,
+                            MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, groupNameSearchKey);
+                    deleteTupleFromIndex(jobId, MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, groupNameTuple);
+                } catch (TreeIndexException tie) {
+                    //ignore this exception and continue deleting all relevant artifacts.
+                }
+            }
+            // Delete entry from secondary index 'type'.
+            ITupleReference dataTypeSearchKey = createTuple(dataverseName, dataset.getItemTypeName(), datasetName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the DATATYPENAME_ON_DATASET_INDEX index.
+            try {
+                ITupleReference dataTypeTuple = getTupleToBeDeleted(jobId,
+                        MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, dataTypeSearchKey);
+                deleteTupleFromIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, dataTypeTuple);
+            } catch (TreeIndexException tie) {
+                //ignore this exception and continue deleting all relevant artifacts.
+            }
+
+            // Delete entry(s) from the 'indexes' dataset.
+            if (dataset.getDatasetType() == DatasetType.INTERNAL || dataset.getDatasetType() == DatasetType.FEED) {
+                List<Index> datasetIndexes = getDatasetIndexes(jobId, dataverseName, datasetName);
+                if (datasetIndexes != null) {
+                    for (Index index : datasetIndexes) {
+                        dropIndex(jobId, dataverseName, datasetName, index.getIndexName());
+                    }
+                }
+            }
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void dropIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datasetName, indexName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'index' dataset.
+            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, tuple);
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new MetadataException("Cannot drop index '" + datasetName + "." + indexName
+                    + "' because it doesn't exist.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void dropNodegroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException {
+        List<String> datasetNames;
+        try {
+            datasetNames = getDatasetNamesPartitionedOnThisNodeGroup(jobId, nodeGroupName);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+        if (!datasetNames.isEmpty()) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Nodegroup '" + nodeGroupName
+                    + "' cannot be dropped; it was used for partitioning these datasets:");
+            for (int i = 0; i < datasetNames.size(); i++)
+                sb.append("\n" + (i + 1) + "- " + datasetNames.get(i) + ".");
+            throw new MetadataException(sb.toString());
+        }
+        try {
+            ITupleReference searchKey = createTuple(nodeGroupName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'nodegroup' dataset.
+            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, searchKey);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new MetadataException("Cannot drop nodegroup '" + nodeGroupName + "' because it doesn't exist", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void dropDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
+            RemoteException {
+        List<String> datasetNames;
+        List<String> usedDatatypes;
+        try {
+            datasetNames = getDatasetNamesDeclaredByThisDatatype(jobId, dataverseName, datatypeName);
+            usedDatatypes = getDatatypeNamesUsingThisDatatype(jobId, dataverseName, datatypeName);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+        // Check whether type is being used by datasets.
+        if (!datasetNames.isEmpty()) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Cannot drop type '" + datatypeName + "'; it was used when creating these datasets:");
+            for (int i = 0; i < datasetNames.size(); i++)
+                sb.append("\n" + (i + 1) + "- " + datasetNames.get(i) + ".");
+            throw new MetadataException(sb.toString());
+        }
+        // Check whether type is being used by other types.
+        if (!usedDatatypes.isEmpty()) {
+            StringBuilder sb = new StringBuilder();
+            sb.append("Cannot drop type '" + datatypeName + "'; it is used in these datatypes:");
+            for (int i = 0; i < usedDatatypes.size(); i++)
+                sb.append("\n" + (i + 1) + "- " + usedDatatypes.get(i) + ".");
+            throw new MetadataException(sb.toString());
+        }
+        // Delete the datatype entry, including all it's nested types.
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'datatype' dataset.
+            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey);
+            // This call uses the secondary index on datatype. Get nested types before deleting entry from secondary index.
+            List<String> nestedTypes = getNestedDatatypeNames(jobId, dataverseName, datatypeName);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
+            deleteFromDatatypeSecondaryIndex(jobId, dataverseName, datatypeName);
+            for (String nestedType : nestedTypes) {
+                Datatype dt = getDatatype(jobId, dataverseName, nestedType);
+                if (dt != null && dt.getIsAnonymous()) {
+                    dropDatatype(jobId, dataverseName, dt.getDatatypeName());
+                }
+            }
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new MetadataException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    private void forceDropDatatype(JobId jobId, String dataverseName, String datatypeName) throws AsterixException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'datatype' dataset.
+            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
+            deleteFromDatatypeSecondaryIndex(jobId, dataverseName, datatypeName);
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new AsterixException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
+        } catch (AsterixException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new AsterixException(e);
+        }
+    }
+
+    private void deleteFromDatatypeSecondaryIndex(JobId jobId, String dataverseName, String datatypeName)
+            throws AsterixException {
+        try {
+            List<String> nestedTypes = getNestedDatatypeNames(jobId, dataverseName, datatypeName);
+            for (String nestedType : nestedTypes) {
+                ITupleReference searchKey = createTuple(dataverseName, nestedType, datatypeName);
+                // Searches the index for the tuple to be deleted. Acquires an S
+                // lock on the DATATYPENAME_ON_DATATYPE_INDEX index.
+                ITupleReference tuple = getTupleToBeDeleted(jobId,
+                        MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, searchKey);
+                deleteTupleFromIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, tuple);
+            }
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new AsterixException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
+        } catch (AsterixException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new AsterixException(e);
+        }
+    }
+
+    private void deleteTupleFromIndex(JobId jobId, IMetadataIndex metadataIndex, ITupleReference tuple)
+            throws Exception {
+        long resourceID = metadataIndex.getResourceID();
+        ILSMIndex lsmIndex = (ILSMIndex) indexLifecycleManager.getIndex(resourceID);
+        indexLifecycleManager.open(resourceID);
+        //prepare a Callback for logging
+        IModificationOperationCallback modCallback = createIndexModificationCallback(jobId, resourceID, metadataIndex,
+                lsmIndex, IndexOperation.DELETE);
+        IIndexAccessor indexAccessor = lsmIndex.createAccessor(modCallback, NoOpOperationCallback.INSTANCE);
+
+        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
+        txnCtx.setTransactionType(TransactionType.READ_WRITE);
+
+        indexAccessor.delete(tuple);
+        indexLifecycleManager.close(resourceID);
+    }
+
+    @Override
+    public List<Dataverse> getDataverses(JobId jobId) throws MetadataException, RemoteException {
+        try {
+            DataverseTupleTranslator tupleReaderWriter = new DataverseTupleTranslator(false);
+            IValueExtractor<Dataverse> valueExtractor = new MetadataEntityValueExtractor<Dataverse>(tupleReaderWriter);
+            List<Dataverse> results = new ArrayList<Dataverse>();
+            searchIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, null, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+
+    }
+
+    @Override
+    public Dataverse getDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException {
+
+        try {
+            ITupleReference searchKey = createTuple(dataverseName);
+            DataverseTupleTranslator tupleReaderWriter = new DataverseTupleTranslator(false);
+            IValueExtractor<Dataverse> valueExtractor = new MetadataEntityValueExtractor<Dataverse>(tupleReaderWriter);
+            List<Dataverse> results = new ArrayList<Dataverse>();
+            searchIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+
+    }
+
+    @Override
+    public List<Dataset> getDataverseDatasets(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName);
+            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(false);
+            IValueExtractor<Dataset> valueExtractor = new MetadataEntityValueExtractor<Dataset>(tupleReaderWriter);
+            List<Dataset> results = new ArrayList<Dataset>();
+            searchIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, searchKey, valueExtractor, results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    private List<Datatype> getDataverseDatatypes(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName);
+            DatatypeTupleTranslator tupleReaderWriter = new DatatypeTupleTranslator(jobId, this, false);
+            IValueExtractor<Datatype> valueExtractor = new MetadataEntityValueExtractor<Datatype>(tupleReaderWriter);
+            List<Datatype> results = new ArrayList<Datatype>();
+            searchIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey, valueExtractor, results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public Dataset getDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datasetName);
+            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(false);
+            List<Dataset> results = new ArrayList<Dataset>();
+            IValueExtractor<Dataset> valueExtractor = new MetadataEntityValueExtractor<Dataset>(tupleReaderWriter);
+            searchIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    private List<String> getDatasetNamesDeclaredByThisDatatype(JobId jobId, String dataverseName, String datatypeName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
+            List<String> results = new ArrayList<String>();
+            IValueExtractor<String> valueExtractor = new DatasetNameValueExtractor();
+            searchIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, searchKey, valueExtractor,
+                    results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    public List<String> getDatatypeNamesUsingThisDatatype(JobId jobId, String dataverseName, String datatypeName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
+            List<String> results = new ArrayList<String>();
+            IValueExtractor<String> valueExtractor = new DatatypeNameValueExtractor(dataverseName, this);
+            searchIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, searchKey, valueExtractor,
+                    results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    private List<String> getNestedDatatypeNames(JobId jobId, String dataverseName, String datatypeName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName);
+            List<String> results = new ArrayList<String>();
+            IValueExtractor<String> valueExtractor = new NestedDatatypeNameValueExtractor(datatypeName);
+            searchIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, searchKey, valueExtractor,
+                    results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    public List<String> getDatasetNamesPartitionedOnThisNodeGroup(JobId jobId, String nodegroup)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(nodegroup);
+            List<String> results = new ArrayList<String>();
+            IValueExtractor<String> valueExtractor = new DatasetNameValueExtractor();
+            searchIndex(jobId, MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, searchKey, valueExtractor, results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public Index getIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datasetName, indexName);
+            IndexTupleTranslator tupleReaderWriter = new IndexTupleTranslator(false);
+            IValueExtractor<Index> valueExtractor = new MetadataEntityValueExtractor<Index>(tupleReaderWriter);
+            List<Index> results = new ArrayList<Index>();
+            searchIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public List<Index> getDatasetIndexes(JobId jobId, String dataverseName, String datasetName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datasetName);
+            IndexTupleTranslator tupleReaderWriter = new IndexTupleTranslator(false);
+            IValueExtractor<Index> valueExtractor = new MetadataEntityValueExtractor<Index>(tupleReaderWriter);
+            List<Index> results = new ArrayList<Index>();
+            searchIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey, valueExtractor, results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public Datatype getDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
+            DatatypeTupleTranslator tupleReaderWriter = new DatatypeTupleTranslator(jobId, this, false);
+            IValueExtractor<Datatype> valueExtractor = new MetadataEntityValueExtractor<Datatype>(tupleReaderWriter);
+            List<Datatype> results = new ArrayList<Datatype>();
+            searchIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public NodeGroup getNodeGroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(nodeGroupName);
+            NodeGroupTupleTranslator tupleReaderWriter = new NodeGroupTupleTranslator(false);
+            IValueExtractor<NodeGroup> valueExtractor = new MetadataEntityValueExtractor<NodeGroup>(tupleReaderWriter);
+            List<NodeGroup> results = new ArrayList<NodeGroup>();
+            searchIndex(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public Function getFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(functionSignature.getNamespace(), functionSignature.getName(), ""
+                    + functionSignature.getArity());
+            FunctionTupleTranslator tupleReaderWriter = new FunctionTupleTranslator(false);
+            List<Function> results = new ArrayList<Function>();
+            IValueExtractor<Function> valueExtractor = new MetadataEntityValueExtractor<Function>(tupleReaderWriter);
+            searchIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void dropFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException,
+            RemoteException {
+
+        Function function;
+        try {
+            function = getFunction(jobId, functionSignature);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+        if (function == null) {
+            throw new MetadataException("Cannot drop function '" + functionSignature.toString()
+                    + "' because it doesn't exist.");
+        }
+        try {
+            // Delete entry from the 'function' dataset.
+            ITupleReference searchKey = createTuple(functionSignature.getNamespace(), functionSignature.getName());
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'function' dataset.
+            ITupleReference datasetTuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET,
+                    searchKey);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, datasetTuple);
+
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new MetadataException("There is no function with the name " + functionSignature.getName()
+                    + " and arity " + functionSignature.getArity(), e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    private ITupleReference getTupleToBeDeleted(JobId jobId, IMetadataIndex metadataIndex, ITupleReference searchKey)
+            throws Exception {
+        IValueExtractor<ITupleReference> valueExtractor = new TupleCopyValueExtractor(metadataIndex.getTypeTraits());
+        List<ITupleReference> results = new ArrayList<ITupleReference>();
+        searchIndex(jobId, metadataIndex, searchKey, valueExtractor, results);
+        if (results.isEmpty()) {
+            // TODO: Temporarily a TreeIndexException to make it get caught by
+            // caller in the appropriate catch block.
+            throw new TreeIndexException("Could not find entry to be deleted.");
+        }
+        // There should be exactly one result returned from the search.
+        return results.get(0);
+    }
+
+    //Debugging Method
+    public String printMetadata() {
+
+        StringBuilder sb = new StringBuilder();
+        try {
+            IMetadataIndex index = MetadataPrimaryIndexes.DATAVERSE_DATASET;
+            long resourceID = index.getResourceID();
+            IIndex indexInstance = indexLifecycleManager.getIndex(resourceID);
+            indexLifecycleManager.open(resourceID);
+            IIndexAccessor indexAccessor = indexInstance.createAccessor(NoOpOperationCallback.INSTANCE,
+                    NoOpOperationCallback.INSTANCE);
+            ITreeIndexCursor rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
+
+            RangePredicate rangePred = null;
+            rangePred = new RangePredicate(null, null, true, true, null, null);
+            indexAccessor.search(rangeCursor, rangePred);
+            try {
+                while (rangeCursor.hasNext()) {
+                    rangeCursor.next();
+                    sb.append(TupleUtils.printTuple(rangeCursor.getTuple(),
+                            new ISerializerDeserializer[] { AqlSerializerDeserializerProvider.INSTANCE
+                                    .getSerializerDeserializer(BuiltinType.ASTRING) }));
+                }
+            } finally {
+                rangeCursor.close();
+            }
+            indexLifecycleManager.close(resourceID);
+
+            index = MetadataPrimaryIndexes.DATASET_DATASET;
+            resourceID = index.getResourceID();
+            indexInstance = indexLifecycleManager.getIndex(resourceID);
+            indexLifecycleManager.open(resourceID);
+            indexAccessor = indexInstance
+                    .createAccessor(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE);
+            rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
+
+            rangePred = null;
+            rangePred = new RangePredicate(null, null, true, true, null, null);
+            indexAccessor.search(rangeCursor, rangePred);
+            try {
+                while (rangeCursor.hasNext()) {
+                    rangeCursor.next();
+                    sb.append(TupleUtils.printTuple(rangeCursor.getTuple(), new ISerializerDeserializer[] {
+                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING),
+                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING) }));
+                }
+            } finally {
+                rangeCursor.close();
+            }
+            indexLifecycleManager.close(resourceID);
+
+            index = MetadataPrimaryIndexes.INDEX_DATASET;
+            resourceID = index.getResourceID();
+            indexInstance = indexLifecycleManager.getIndex(resourceID);
+            indexLifecycleManager.open(resourceID);
+            indexAccessor = indexInstance
+                    .createAccessor(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE);
+            rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
+
+            rangePred = null;
+            rangePred = new RangePredicate(null, null, true, true, null, null);
+            indexAccessor.search(rangeCursor, rangePred);
+            try {
+                while (rangeCursor.hasNext()) {
+                    rangeCursor.next();
+                    sb.append(TupleUtils.printTuple(rangeCursor.getTuple(), new ISerializerDeserializer[] {
+                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING),
+                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING),
+                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING) }));
+                }
+            } finally {
+                rangeCursor.close();
+            }
+            indexLifecycleManager.close(resourceID);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return sb.toString();
+    }
+
+    private <ResultType> void searchIndex(JobId jobId, IMetadataIndex index, ITupleReference searchKey,
+            IValueExtractor<ResultType> valueExtractor, List<ResultType> results) throws Exception {
+        IBinaryComparatorFactory[] comparatorFactories = index.getKeyBinaryComparatorFactory();
+        long resourceID = index.getResourceID();
+        IIndex indexInstance = indexLifecycleManager.getIndex(resourceID);
+        indexLifecycleManager.open(resourceID);
+        IIndexAccessor indexAccessor = indexInstance.createAccessor(NoOpOperationCallback.INSTANCE,
+                NoOpOperationCallback.INSTANCE);
+        ITreeIndexCursor rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
+
+        IBinaryComparator[] searchCmps = null;
+        MultiComparator searchCmp = null;
+        RangePredicate rangePred = null;
+        if (searchKey != null) {
+            searchCmps = new IBinaryComparator[searchKey.getFieldCount()];
+            for (int i = 0; i < searchKey.getFieldCount(); i++) {
+                searchCmps[i] = comparatorFactories[i].createBinaryComparator();
+            }
+            searchCmp = new MultiComparator(searchCmps);
+        }
+        rangePred = new RangePredicate(searchKey, searchKey, true, true, searchCmp, searchCmp);
+        indexAccessor.search(rangeCursor, rangePred);
+
+        try {
+            while (rangeCursor.hasNext()) {
+                rangeCursor.next();
+                ResultType result = valueExtractor.getValue(jobId, rangeCursor.getTuple());
+                if (result != null) {
+                    results.add(result);
+                }
+            }
+        } finally {
+            rangeCursor.close();
+        }
+        indexLifecycleManager.close(resourceID);
+    }
+
+    @Override
+    public void initializeDatasetIdFactory(JobId jobId) throws MetadataException, RemoteException {
+        int mostRecentDatasetId = MetadataPrimaryIndexes.FIRST_AVAILABLE_USER_DATASET_ID;
+        long resourceID = MetadataPrimaryIndexes.DATASET_DATASET.getResourceID();
+        IIndex indexInstance = indexLifecycleManager.getIndex(resourceID);
+        try {
+            indexLifecycleManager.open(resourceID);
+            IIndexAccessor indexAccessor = indexInstance.createAccessor(NoOpOperationCallback.INSTANCE,
+                    NoOpOperationCallback.INSTANCE);
+            IIndexCursor rangeCursor = indexAccessor.createSearchCursor();
+
+            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(false);
+            IValueExtractor<Dataset> valueExtractor = new MetadataEntityValueExtractor<Dataset>(tupleReaderWriter);
+            RangePredicate rangePred = new RangePredicate(null, null, true, true, null, null);
+
+            indexAccessor.search(rangeCursor, rangePred);
+            int datasetId;
+
+            try {
+                while (rangeCursor.hasNext()) {
+                    rangeCursor.next();
+                    datasetId = ((Dataset) valueExtractor.getValue(jobId, rangeCursor.getTuple())).getDatasetId();
+                    if (mostRecentDatasetId < datasetId) {
+                        mostRecentDatasetId = datasetId;
+                    }
+                }
+            } finally {
+                rangeCursor.close();
+            }
+
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+
+        DatasetIdFactory.initialize(mostRecentDatasetId);
+    }
+
+    // TODO: Can use Hyrack's TupleUtils for this, once we switch to a newer
+    // Hyracks version.
+    public ITupleReference createTuple(String... fields) throws HyracksDataException {
+        ISerializerDeserializer<AString> stringSerde = AqlSerializerDeserializerProvider.INSTANCE
+                .getSerializerDeserializer(BuiltinType.ASTRING);
+        AMutableString aString = new AMutableString("");
+        ArrayTupleBuilder tupleBuilder = new ArrayTupleBuilder(fields.length);
+        for (String s : fields) {
+            aString.setValue(s);
+            stringSerde.serialize(aString, tupleBuilder.getDataOutput());
+            tupleBuilder.addFieldEndOffset();
+        }
+        ArrayTupleReference tuple = new ArrayTupleReference();
+        tuple.reset(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray());
+        return tuple;
+    }
+
+    @Override
+    public List<Function> getDataverseFunctions(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName);
+            FunctionTupleTranslator tupleReaderWriter = new FunctionTupleTranslator(false);
+            IValueExtractor<Function> valueExtractor = new MetadataEntityValueExtractor<Function>(tupleReaderWriter);
+            List<Function> results = new ArrayList<Function>();
+            searchIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, searchKey, valueExtractor, results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public void addAdapter(JobId jobId, DatasourceAdapter adapter) throws MetadataException, RemoteException {
+        try {
+            // Insert into the 'Adapter' dataset.
+            DatasourceAdapterTupleTranslator tupleReaderWriter = new DatasourceAdapterTupleTranslator(true);
+            ITupleReference adapterTuple = tupleReaderWriter.getTupleFromMetadataEntity(adapter);
+            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, adapterTuple);
+
+        } catch (BTreeDuplicateKeyException e) {
+            throw new MetadataException("A adapter with this name " + adapter.getAdapterIdentifier().getAdapterName()
+                    + " already exists in dataverse '" + adapter.getAdapterIdentifier().getNamespace() + "'.", e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+
+    }
+
+    @Override
+    public void dropAdapter(JobId jobId, String dataverseName, String adapterName) throws MetadataException,
+            RemoteException {
+        DatasourceAdapter adapter;
+        try {
+            adapter = getAdapter(jobId, dataverseName, adapterName);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+        if (adapter == null) {
+            throw new MetadataException("Cannot drop adapter '" + adapter + "' because it doesn't exist.");
+        }
+        try {
+            // Delete entry from the 'Adapter' dataset.
+            ITupleReference searchKey = createTuple(dataverseName, adapterName);
+            // Searches the index for the tuple to be deleted. Acquires an S
+            // lock on the 'Adapter' dataset.
+            ITupleReference datasetTuple = getTupleToBeDeleted(jobId,
+                    MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey);
+            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, datasetTuple);
+
+            // TODO: Change this to be a BTree specific exception, e.g.,
+            // BTreeKeyDoesNotExistException.
+        } catch (TreeIndexException e) {
+            throw new MetadataException("Cannot drop adapter '" + adapterName, e);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+
+    }
+
+    @Override
+    public DatasourceAdapter getAdapter(JobId jobId, String dataverseName, String adapterName)
+            throws MetadataException, RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName, adapterName);
+            DatasourceAdapterTupleTranslator tupleReaderWriter = new DatasourceAdapterTupleTranslator(false);
+            List<DatasourceAdapter> results = new ArrayList<DatasourceAdapter>();
+            IValueExtractor<DatasourceAdapter> valueExtractor = new MetadataEntityValueExtractor<DatasourceAdapter>(
+                    tupleReaderWriter);
+            searchIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey, valueExtractor, results);
+            if (results.isEmpty()) {
+                return null;
+            }
+            return results.get(0);
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public List<DatasourceAdapter> getDataverseAdapters(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException {
+        try {
+            ITupleReference searchKey = createTuple(dataverseName);
+            DatasourceAdapterTupleTranslator tupleReaderWriter = new DatasourceAdapterTupleTranslator(false);
+            IValueExtractor<DatasourceAdapter> valueExtractor = new MetadataEntityValueExtractor<DatasourceAdapter>(
+                    tupleReaderWriter);
+            List<DatasourceAdapter> results = new ArrayList<DatasourceAdapter>();
+            searchIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey, valueExtractor, results);
+            return results;
+        } catch (Exception e) {
+            throw new MetadataException(e);
+        }
+    }
+
+    @Override
+    public int getMostRecentDatasetId() throws MetadataException, RemoteException {
+        return DatasetIdFactory.getMostRecentDatasetId();
+    }
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataTransactionContext.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataTransactionContext.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataTransactionContext.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataTransactionContext.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IAsterixStateProxy.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IAsterixStateProxy.java
new file mode 100644
index 0000000..d67cd27
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IAsterixStateProxy.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.api;
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+
+/**
+ * Interface for setting/getting distributed state of Asterix.
+ */
+public interface IAsterixStateProxy extends Remote, Serializable {
+    public void setMetadataNode(IMetadataNode metadataNode) throws RemoteException;
+
+    public void setAsterixProperties(AsterixProperties asterixProperties) throws RemoteException;
+
+    public IMetadataNode getMetadataNode() throws RemoteException;
+
+    public AsterixProperties getAsterixProperties() throws RemoteException;
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntity.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntity.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntity.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntity.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntityTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntityTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntityTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataEntityTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataIndex.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataIndex.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataIndex.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataIndex.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataManager.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataManager.java
new file mode 100644
index 0000000..f11144e
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataManager.java
@@ -0,0 +1,457 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.api;
+
+import java.rmi.RemoteException;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.Node;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+
+/**
+ * A metadata manager provides user access to Asterix metadata (e.g., types,
+ * datasets, indexes, etc.). A metadata manager satisfies requests by contacting
+ * the metadata node which is responsible for the storage-level details. This
+ * interface describes the operations that a metadata manager must support.
+ * Every operation is meant to be performed in the context of a transaction on
+ * the metadata node against the metadata. It is the responsibility of the user
+ * to begin a transaction, lock the metadata, and commit or abort a metadata
+ * transaction using the appropriate methods declared below. Lock acquisition at
+ * finer levels is the responsibility of the metadata node, not the metadata
+ * manager or its user.
+ */
+public interface IMetadataManager {
+
+    /**
+     * Initializes the metadata manager, e.g., finds the remote metadata node.
+     * 
+     * @throws RemoteException
+     *             If an error occurred while contacting the proxy for finding
+     *             the metadata node.
+     */
+    public void init() throws RemoteException, MetadataException;
+
+    /**
+     * Begins a transaction on the metadata node.
+     * 
+     * @return A globally unique transaction id.
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public MetadataTransactionContext beginTransaction() throws ACIDException, RemoteException;
+
+    /**
+     * Commits a remote transaction on the metadata node.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void commitTransaction(MetadataTransactionContext ctx) throws ACIDException, RemoteException;
+
+    /**
+     * Aborts a remote transaction running on the metadata node.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void abortTransaction(MetadataTransactionContext ctx) throws ACIDException, RemoteException;
+
+    /**
+     * Locks the metadata in given mode. The lock acquisition is delegated to
+     * the metadata node. This method blocks until the lock can be acquired.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param lockMode
+     *            Desired lockode.
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void lock(MetadataTransactionContext ctx, byte lockMode) throws ACIDException, RemoteException;
+
+    /**
+     * Releases all locks on the metadata held by the given transaction id.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void unlock(MetadataTransactionContext ctx) throws ACIDException, RemoteException;
+
+    /**
+     * Inserts a new dataverse into the metadata.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverse
+     *            Dataverse instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the dataverse already exists.
+     */
+    public void addDataverse(MetadataTransactionContext ctx, Dataverse dataverse) throws MetadataException;
+
+    /**
+     * Retrieves all dataverses
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @return A list of dataverse instances.
+     * @throws MetadataException
+     */
+    List<Dataverse> getDataverses(MetadataTransactionContext ctx) throws MetadataException;
+    
+    /**
+     * Retrieves a dataverse with given name.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of the dataverse to retrieve.
+     * @return A dataverse instance.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist.
+     */
+    public Dataverse getDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException;
+
+    /**
+     * Retrieves all datasets belonging to the given dataverse.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of the dataverse of which to find all datasets.
+     * @return A list of dataset instances.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist.
+     */
+    public List<Dataset> getDataverseDatasets(MetadataTransactionContext ctx, String dataverseName)
+            throws MetadataException;
+
+    /**
+     * Deletes the dataverse with given name, and all it's associated datasets,
+     * indexes, and types.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @return A list of dataset instances.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist.
+     */
+    public void dropDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException;
+
+    /**
+     * Inserts a new dataset into the metadata.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataset
+     *            Dataset instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the dataset already exists.
+     */
+    public void addDataset(MetadataTransactionContext ctx, Dataset dataset) throws MetadataException;
+    
+    /**
+     * Retrieves a dataset within a given dataverse.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Dataverse name to look for the dataset.
+     * @param datasetName
+     *            Name of dataset to be retrieved.
+     * @return A dataset instance.
+     * @throws MetadataException
+     *             For example, if the dataset does not exist.
+     */
+    public Dataset getDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
+            throws MetadataException;
+
+    /**
+     * Retrieves all indexes of a dataset.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse which holds the given dataset.
+     * @param datasetName
+     *            Name of dataset for which to retrieve all indexes.
+     * @return A list of Index instances.
+     * @throws MetadataException
+     *             For example, if the dataset and/or dataverse does not exist.
+     */
+    public List<Index> getDatasetIndexes(MetadataTransactionContext ctx, String dataverseName, String datasetName)
+            throws MetadataException;
+
+    /**
+     * Deletes the dataset with given name, and all it's associated indexes.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse which holds the given dataset.
+     * @param datasetName
+     *            Name of dataset to delete.
+     * @throws MetadataException
+     *             For example, if the dataset and/or dataverse does not exist.
+     */
+    public void dropDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
+            throws MetadataException;
+
+    /**
+     * Inserts an index into the metadata. The index itself knows its name, and
+     * which dataset it belongs to.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param index
+     *            Index instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the index already exists.
+     */
+    public void addIndex(MetadataTransactionContext ctx, Index index) throws MetadataException;
+
+    /**
+     * Retrieves the index with given name, in given dataverse and dataset.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of the datavers holding the given dataset.
+     * @param datasetName
+     *            Name of the dataset holding the index.
+     * @indexName Name of the index to retrieve.
+     * @return An Index instance.
+     * @throws MetadataException
+     *             For example, if the index does not exist.
+     */
+    public Index getIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
+            throws MetadataException;
+
+    /**
+     * Deletes the index with given name, in given dataverse and dataset.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of the datavers holding the given dataset.
+     * @param datasetName
+     *            Name of the dataset holding the index.
+     * @indexName Name of the index to retrieve.
+     * @throws MetadataException
+     *             For example, if the index does not exist.
+     */
+    public void dropIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
+            throws MetadataException;
+
+    /**
+     * Inserts a datatype.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param datatype
+     *            Datatype instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the datatype already exists.
+     */
+    public void addDatatype(MetadataTransactionContext ctx, Datatype datatype) throws MetadataException;
+
+    /**
+     * Retrieves the datatype with given name in given dataverse.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse holding the datatype.
+     * @param datatypeName
+     *            Name of datatype to be retrieved.
+     * @return A datatype instance.
+     * @throws MetadataException
+     *             For example, if the datatype does not exist.
+     */
+    public Datatype getDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
+            throws MetadataException;
+
+    /**
+     * Deletes the given datatype in given dataverse.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse holding the datatype.
+     * @param datatypeName
+     *            Name of datatype to be deleted.
+     * @throws MetadataException
+     *             For example, if there are still datasets using the type to be
+     *             deleted.
+     */
+    public void dropDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
+            throws MetadataException;
+
+    /**
+     * Inserts a node group.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param nodeGroup
+     *            Node group instance to insert.
+     * @throws MetadataException
+     *             For example, if the node group already exists.
+     */
+    public void addNodegroup(MetadataTransactionContext ctx, NodeGroup nodeGroup) throws MetadataException;
+
+    /**
+     * Retrieves a node group.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param nodeGroupName
+     *            Name of node group to be retrieved.
+     * @throws MetadataException
+     *             For example, if the node group does not exist.
+     */
+    public NodeGroup getNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException;
+
+    /**
+     * Deletes a node group.
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param nodeGroupName
+     *            Name of node group to be deleted.
+     * @throws MetadataException
+     *             For example, there are still datasets partitioned on the node
+     *             group to be deleted.
+     */
+    public void dropNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException;
+
+    /**
+     * Inserts a node (machine).
+     * 
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param node
+     *            Node instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the node already exists.
+     */
+    public void addNode(MetadataTransactionContext ctx, Node node) throws MetadataException;
+
+    /**
+     * @param mdTxnCtx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param function
+     *            An instance of type Function that represents the function
+     *            being added
+     * @throws MetadataException
+     */
+    public void addFunction(MetadataTransactionContext mdTxnCtx, Function function) throws MetadataException;
+
+    /**
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param functionSignature
+     *            the functions signature (unique to the function)
+     * @return
+     * @throws MetadataException
+     */
+
+    public Function getFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
+            throws MetadataException;
+
+    /**
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param functionSignature
+     *            the functions signature (unique to the function)
+     * @throws MetadataException
+     */
+    public void dropFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
+            throws MetadataException;
+
+    /**
+     * @param mdTxnCtx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param function
+     *            An instance of type Adapter that represents the adapter being
+     *            added
+     * @throws MetadataException
+     */
+    public void addAdapter(MetadataTransactionContext mdTxnCtx, DatasourceAdapter adapter) throws MetadataException;
+
+    /**
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            the dataverse associated with the adapter being searched
+     * @param Name
+     *            name of the adapter
+     * @return
+     * @throws MetadataException
+     */
+    public DatasourceAdapter getAdapter(MetadataTransactionContext ctx, String dataverseName, String name)
+            throws MetadataException;
+
+    /**
+     * @param ctx
+     *            MetadataTransactionContext of an active metadata transaction.
+     * @param dataverseName
+     *            the dataverse associated with the adapter being dropped
+     * @param name
+     *            name of the adapter
+     * @throws MetadataException
+     */
+    public void dropAdapter(MetadataTransactionContext ctx, String dataverseName, String name) throws MetadataException;
+
+    /**
+     * @param ctx
+     * @param dataverseName
+     * @return
+     * @throws MetadataException
+     */
+    public List<Function> getDataverseFunctions(MetadataTransactionContext ctx, String dataverseName)
+            throws MetadataException;
+
+    public void initializeDatasetIdFactory(MetadataTransactionContext ctx) throws MetadataException;
+    
+    public int getMostRecentDatasetId() throws MetadataException;
+    
+    public void acquireWriteLatch();
+
+    public void releaseWriteLatch();
+
+    public void acquireReadLatch();
+
+    public void releaseReadLatch();
+
+
+}
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataNode.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataNode.java
new file mode 100644
index 0000000..e0b5e96
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataNode.java
@@ -0,0 +1,479 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.api;
+
+import java.io.Serializable;
+import java.rmi.Remote;
+import java.rmi.RemoteException;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.functions.FunctionSignature;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.Function;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.Node;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+
+/**
+ * A metadata node stores metadata in its local storage structures (currently
+ * BTrees). A metadata node services requests on behalf of the (possibly remote)
+ * metadata manager by executing local transactions against its local storage.
+ * This interface mirrors the methods in IMetadataManager.
+ * Users wanting to lock/access metadata shall always go through the
+ * MetadataManager, and should never call methods on the MetadataNode directly
+ * for any reason.
+ */
+public interface IMetadataNode extends Remote, Serializable {
+
+    /**
+     * Begins a local transaction against the metadata.
+     * 
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void beginTransaction(JobId jobId) throws ACIDException, RemoteException;
+
+    /**
+     * Commits a local transaction against the metadata.
+     * 
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void commitTransaction(JobId jobId) throws ACIDException, RemoteException;
+
+    /**
+     * Aborts a local transaction against the metadata.
+     * 
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void abortTransaction(JobId jobId) throws ACIDException, RemoteException;
+
+    /**
+     * Locally locks the entire metadata in given mode on behalf of given
+     * transaction id.
+     * 
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void lock(JobId jobId, byte lockMode) throws ACIDException, RemoteException;
+
+    /**
+     * Releases all local locks of given transaction id.
+     * 
+     * @throws ACIDException
+     * @throws RemoteException
+     */
+    public void unlock(JobId jobId) throws ACIDException, RemoteException;
+
+    /**
+     * Inserts a new dataverse into the metadata, acquiring local locks on
+     * behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverse
+     *            Dataverse instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the dataverse already exists.
+     * @throws RemoteException
+     */
+    public void addDataverse(JobId jobId, Dataverse dataverse) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves all dataverses, acquiring local locks on behalf of
+     * the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @return A list of dataverse instances.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist.
+     * @throws RemoteException
+     */
+    public List<Dataverse> getDataverses(JobId jobId) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves a dataverse with given name, acquiring local locks on behalf of
+     * the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of the dataverse to retrieve.
+     * @return A dataverse instance.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist.
+     * @throws RemoteException
+     */
+    public Dataverse getDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves all datasets belonging to the given dataverse, acquiring local
+     * locks on behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of the dataverse of which to find all datasets.
+     * @return A list of dataset instances.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist. RemoteException
+     */
+    public List<Dataset> getDataverseDatasets(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Deletes the dataverse with given name, and all it's associated datasets,
+     * indexes, and types, acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @return A list of dataset instances.
+     * @throws MetadataException
+     *             For example, if the dataverse does not exist.
+     * @throws RemoteException
+     */
+    public void dropDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException;
+
+    /**
+     * Inserts a new dataset into the metadata, acquiring local locks on behalf
+     * of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataset
+     *            Dataset instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the dataset already exists.
+     * @throws RemoteException
+     */
+    public void addDataset(JobId jobId, Dataset dataset) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves a dataset within a given dataverse, acquiring local locks on
+     * behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Dataverse name to look for the dataset.
+     * @param datasetName
+     *            Name of dataset to be retrieved.
+     * @return A dataset instance.
+     * @throws MetadataException
+     *             For example, if the dataset does not exist.
+     * @throws RemoteException
+     */
+    public Dataset getDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Retrieves all indexes of a dataset, acquiring local locks on behalf of
+     * the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse which holds the given dataset.
+     * @param datasetName
+     *            Name of dataset for which to retrieve all indexes.
+     * @return A list of Index instances.
+     * @throws MetadataException
+     *             For example, if the dataset and/or dataverse does not exist.
+     * @throws RemoteException
+     */
+    public List<Index> getDatasetIndexes(JobId jobId, String dataverseName, String datasetName)
+            throws MetadataException, RemoteException;
+
+    /**
+     * Deletes the dataset with given name, and all it's associated indexes,
+     * acquiring local locks on behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse which holds the given dataset.
+     * @param datasetName
+     *            Name of dataset to delete.
+     * @throws MetadataException
+     *             For example, if the dataset and/or dataverse does not exist.
+     * @throws RemoteException
+     */
+    public void dropDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Inserts an index into the metadata, acquiring local locks on behalf of
+     * the given transaction id. The index itself knows its name, and which
+     * dataset it belongs to.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param index
+     *            Index instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the index already exists.
+     * @throws RemoteException
+     */
+    public void addIndex(JobId jobId, Index index) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves the index with given name, in given dataverse and dataset,
+     * acquiring local locks on behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of the datavers holding the given dataset.
+     * @param datasetName
+     *            Name of the dataset holding the index.
+     * @indexName Name of the index to retrieve.
+     * @return An Index instance.
+     * @throws MetadataException
+     *             For example, if the index does not exist.
+     * @throws RemoteException
+     */
+    public Index getIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
+            throws MetadataException, RemoteException;
+
+    /**
+     * Deletes the index with given name, in given dataverse and dataset,
+     * acquiring local locks on behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of the datavers holding the given dataset.
+     * @param datasetName
+     *            Name of the dataset holding the index.
+     * @indexName Name of the index to retrieve.
+     * @throws MetadataException
+     *             For example, if the index does not exist.
+     * @throws RemoteException
+     */
+    public void dropIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
+            throws MetadataException, RemoteException;
+
+    /**
+     * Inserts a datatype, acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param datatype
+     *            Datatype instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the datatype already exists.
+     * @throws RemoteException
+     */
+    public void addDatatype(JobId jobId, Datatype datatype) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves the datatype with given name in given dataverse, acquiring
+     * local locks on behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse holding the datatype.
+     * @param datatypeName
+     *            Name of datatype to be retrieved.
+     * @return A datatype instance.
+     * @throws MetadataException
+     *             For example, if the datatype does not exist.
+     * @throws RemoteException
+     */
+    public Datatype getDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Deletes the given datatype in given dataverse, acquiring local locks on
+     * behalf of the given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            Name of dataverse holding the datatype.
+     * @param datatypeName
+     *            Name of datatype to be deleted.
+     * @throws MetadataException
+     *             For example, if there are still datasets using the type to be
+     *             deleted.
+     * @throws RemoteException
+     */
+    public void dropDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Inserts a node group, acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param nodeGroup
+     *            Node group instance to insert.
+     * @throws MetadataException
+     *             For example, if the node group already exists.
+     * @throws RemoteException
+     */
+    public void addNodeGroup(JobId jobId, NodeGroup nodeGroup) throws MetadataException, RemoteException;
+
+    /**
+     * Retrieves a node group, acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param nodeGroupName
+     *            Name of node group to be retrieved.
+     * @throws MetadataException
+     *             For example, if the node group does not exist.
+     * @throws RemoteException
+     */
+    public NodeGroup getNodeGroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException;
+
+    /**
+     * Deletes a node group, acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param nodeGroupName
+     *            Name of node group to be deleted.
+     * @throws MetadataException
+     *             For example, there are still datasets partitioned on the node
+     *             group to be deleted.
+     * @throws RemoteException
+     */
+    public void dropNodegroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException;
+
+    /**
+     * Inserts a node (compute node), acquiring local locks on behalf of the
+     * given transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param node
+     *            Node instance to be inserted.
+     * @throws MetadataException
+     *             For example, if the node already exists.
+     * @throws RemoteException
+     */
+    public void addNode(JobId jobId, Node node) throws MetadataException, RemoteException;
+
+    /**
+
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param functionSignature
+     *            An instance of functionSignature representing the function
+     * @return
+     * @throws MetadataException
+     * @throws RemoteException
+     */
+    public Function getFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Deletes a function, acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param functionSignature
+     *            An instance of functionSignature representing the function
+     * @throws MetadataException
+     *             For example, there are still datasets partitioned on the node
+     *             group to be deleted.
+     * @throws RemoteException
+     */
+    public void dropFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException, RemoteException;
+
+    /**
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param function
+     *            Function to be inserted
+     * @throws MetadataException
+     *             for example, if the function already exists or refers to an
+     *             unknown function
+     * @throws RemoteException
+     */
+    public void addFunction(JobId jobId, Function function) throws MetadataException, RemoteException;
+
+    /**
+     * @param ctx
+     * @param dataverseName
+     * @return List<Function> A list containing the functions in the specified dataverse
+     * @throws MetadataException
+     * @throws RemoteException
+     */
+    public List<Function> getDataverseFunctions(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * @param ctx
+     * @param dataverseName
+     * @return List<Adapter> A list containing the adapters in the specified dataverse
+     * @throws MetadataException
+     * @throws RemoteException
+     */
+    public List<DatasourceAdapter> getDataverseAdapters(JobId jobId, String dataverseName) throws MetadataException,
+            RemoteException;
+
+    public DatasourceAdapter getAdapter(JobId jobId, String dataverseName, String adapterName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * Deletes a adapter , acquiring local locks on behalf of the given
+     * transaction id.
+     * 
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param dataverseName
+     *            dataverse asociated with the adapter that is to be deleted.
+     * @param adapterName
+     *            Name of adapter to be deleted. MetadataException for example,
+     *            if the adapter does not exists.
+     * @throws RemoteException
+     */
+    public void dropAdapter(JobId jobId, String dataverseName, String adapterName) throws MetadataException,
+            RemoteException;
+
+    /**
+     * @param jobId
+     *            A globally unique id for an active metadata transaction.
+     * @param adapter
+     *            Adapter to be inserted
+     * @throws MetadataException
+     *             for example, if the adapter already exists.
+     * @throws RemoteException
+     */
+    public void addAdapter(JobId jobId, DatasourceAdapter adapter) throws MetadataException, RemoteException;
+
+    public void initializeDatasetIdFactory(JobId jobId) throws MetadataException, RemoteException;
+    
+    public int getMostRecentDatasetId() throws MetadataException, RemoteException;
+
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IValueExtractor.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IValueExtractor.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IValueExtractor.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IValueExtractor.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixStateProxy.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixStateProxy.java
new file mode 100644
index 0000000..55aaf33
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixStateProxy.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.bootstrap;
+
+import java.rmi.RemoteException;
+import java.rmi.server.UnicastRemoteObject;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
+import edu.uci.ics.asterix.metadata.api.IMetadataNode;
+
+/**
+ * Contains Asterix distributed state such as the AsterixProperties.
+ */
+public class AsterixStateProxy implements IAsterixStateProxy {
+    private static final long serialVersionUID = 1L;
+    private static final Logger LOGGER = Logger.getLogger(AsterixStateProxy.class.getName());
+
+    private IMetadataNode metadataNode;
+    private AsterixProperties asterixProperties;
+    private static final IAsterixStateProxy cc = new AsterixStateProxy();
+
+    public static IAsterixStateProxy registerRemoteObject() throws RemoteException {
+        IAsterixStateProxy stub = (IAsterixStateProxy) UnicastRemoteObject.exportObject(cc, 0);
+        LOGGER.info("Asterix Distributed State Proxy Bound");
+        return stub;
+    }
+
+    public static void unregisterRemoteObject() throws RemoteException {
+        UnicastRemoteObject.unexportObject(cc, true);
+        LOGGER.info("Asterix Distributed State Proxy Unbound");
+    }
+
+    @Override
+    public void setMetadataNode(IMetadataNode metadataNode) throws RemoteException {
+        this.metadataNode = metadataNode;
+    }
+
+    @Override
+    public IMetadataNode getMetadataNode() throws RemoteException {
+        return this.metadataNode;
+    }
+
+    @Override
+    public void setAsterixProperties(AsterixProperties asterixProperity) throws RemoteException {
+        this.asterixProperties = asterixProperity;
+    }
+
+    @Override
+    public AsterixProperties getAsterixProperties() throws RemoteException {
+        return this.asterixProperties;
+    }
+}
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataBootstrap.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataBootstrap.java
new file mode 100644
index 0000000..d978f8a
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataBootstrap.java
@@ -0,0 +1,453 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.bootstrap;
+
+import java.io.File;
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.common.context.AsterixAppRuntimeContext;
+import edu.uci.ics.asterix.common.context.AsterixRuntimeComponentsProvider;
+import edu.uci.ics.asterix.external.adapter.factory.IAdapterFactory;
+import edu.uci.ics.asterix.external.dataset.adapter.AdapterIdentifier;
+import edu.uci.ics.asterix.metadata.IDatasetDetails;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
+import edu.uci.ics.asterix.metadata.api.IMetadataIndex;
+import edu.uci.ics.asterix.metadata.entities.AsterixBuiltinTypeMap;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails.FileStructure;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails.PartitioningStrategy;
+import edu.uci.ics.asterix.metadata.entities.Node;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat;
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.resource.ILocalResourceMetadata;
+import edu.uci.ics.asterix.transaction.management.resource.LSMBTreeLocalResourceMetadata;
+import edu.uci.ics.asterix.transaction.management.resource.PersistentLocalResourceFactoryProvider;
+import edu.uci.ics.asterix.transaction.management.resource.TransactionalResourceManagerRepository;
+import edu.uci.ics.asterix.transaction.management.service.logging.IndexResourceManager;
+import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
+import edu.uci.ics.hyracks.api.application.INCApplicationContext;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.api.io.FileReference;
+import edu.uci.ics.hyracks.api.io.IIOManager;
+import edu.uci.ics.hyracks.storage.am.common.api.IInMemoryFreePageManager;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexLifecycleManager;
+import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
+import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.impls.LSMBTree;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.util.LSMBTreeUtils;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.IInMemoryBufferCache;
+import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryBufferCache;
+import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryFreePageManager;
+import edu.uci.ics.hyracks.storage.common.buffercache.HeapBufferAllocator;
+import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
+import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
+import edu.uci.ics.hyracks.storage.common.file.ILocalResourceFactory;
+import edu.uci.ics.hyracks.storage.common.file.ILocalResourceFactoryProvider;
+import edu.uci.ics.hyracks.storage.common.file.ILocalResourceRepository;
+import edu.uci.ics.hyracks.storage.common.file.LocalResource;
+import edu.uci.ics.hyracks.storage.common.file.TransientFileMapManager;
+
+/**
+ * Initializes the remote metadata storage facilities ("universe") using a
+ * MetadataManager that is assumed to be co-located in the same JVM. The
+ * metadata universe can be bootstrapped from an existing set of metadata files,
+ * or it can be started from scratch, creating all the necessary persistent
+ * state. The startUniverse() method is intended to be called as part of
+ * application deployment (i.e., inside an NC bootstrap), and similarly
+ * stopUniverse() should be called upon application undeployment.
+ */
+public class MetadataBootstrap {
+    private static final Logger LOGGER = Logger.getLogger(MetadataBootstrap.class.getName());
+    private static final int DEFAULT_MEM_PAGE_SIZE = 32768;
+    private static final int DEFAULT_MEM_NUM_PAGES = 100;
+
+    private static AsterixAppRuntimeContext runtimeContext;
+
+    private static IBufferCache bufferCache;
+    private static IFileMapProvider fileMapProvider;
+    private static IIndexLifecycleManager indexLifecycleManager;
+    private static ILocalResourceRepository localResourceRepository;
+    private static IIOManager ioManager;
+
+    private static String metadataNodeName;
+    private static String metadataStore;
+    private static HashSet<String> nodeNames;
+    private static String outputDir;
+
+    private static IMetadataIndex[] primaryIndexes;
+    private static IMetadataIndex[] secondaryIndexes;
+
+    private static void initLocalIndexArrays() {
+        primaryIndexes = new IMetadataIndex[] { MetadataPrimaryIndexes.DATAVERSE_DATASET,
+                MetadataPrimaryIndexes.DATASET_DATASET, MetadataPrimaryIndexes.DATATYPE_DATASET,
+                MetadataPrimaryIndexes.INDEX_DATASET, MetadataPrimaryIndexes.NODE_DATASET,
+                MetadataPrimaryIndexes.NODEGROUP_DATASET, MetadataPrimaryIndexes.FUNCTION_DATASET,
+                MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET };
+        secondaryIndexes = new IMetadataIndex[] { MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX,
+                MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX,
+                MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX };
+    }
+
+    public static void startUniverse(AsterixProperties asterixProperties, INCApplicationContext ncApplicationContext,
+            boolean isNewUniverse) throws Exception {
+        runtimeContext = (AsterixAppRuntimeContext) ncApplicationContext.getApplicationObject();
+
+        // Initialize static metadata objects, such as record types and metadata
+        // index descriptors.
+        // The order of these calls is important because the index descriptors
+        // rely on the type type descriptors.
+        MetadataRecordTypes.init();
+        MetadataPrimaryIndexes.init();
+        MetadataSecondaryIndexes.init();
+        initLocalIndexArrays();
+
+        TransactionalResourceManagerRepository resourceRepository = runtimeContext.getTransactionSubsystem()
+                .getTransactionalResourceRepository();
+        resourceRepository.registerTransactionalResourceManager(ResourceType.LSM_BTREE, new IndexResourceManager(
+                ResourceType.LSM_BTREE, runtimeContext.getTransactionSubsystem()));
+        resourceRepository.registerTransactionalResourceManager(ResourceType.LSM_RTREE, new IndexResourceManager(
+                ResourceType.LSM_RTREE, runtimeContext.getTransactionSubsystem()));
+        resourceRepository.registerTransactionalResourceManager(ResourceType.LSM_INVERTED_INDEX,
+                new IndexResourceManager(ResourceType.LSM_INVERTED_INDEX, runtimeContext.getTransactionSubsystem()));
+
+        metadataNodeName = asterixProperties.getMetadataNodeName();
+        metadataStore = asterixProperties.getMetadataStore();
+        nodeNames = asterixProperties.getNodeNames();
+        // nodeStores = asterixProperity.getStores();
+
+        indexLifecycleManager = runtimeContext.getIndexLifecycleManager();
+        localResourceRepository = runtimeContext.getLocalResourceRepository();
+        bufferCache = runtimeContext.getBufferCache();
+        fileMapProvider = runtimeContext.getFileMapManager();
+        ioManager = ncApplicationContext.getRootContext().getIOManager();
+
+        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+        try {
+            // Begin a transaction against the metadata.
+            // Lock the metadata in X mode.
+            MetadataManager.INSTANCE.lock(mdTxnCtx, LockMode.X);
+            
+            if (isNewUniverse) {
+                for (int i = 0; i < primaryIndexes.length; i++) {
+                    enlistMetadataDataset(primaryIndexes[i], true);
+                }
+                for (int i = 0; i < secondaryIndexes.length; i++) {
+                    enlistMetadataDataset(secondaryIndexes[i], true);
+                }
+                insertInitialDataverses(mdTxnCtx);
+                insertInitialDatasets(mdTxnCtx);
+                insertInitialDatatypes(mdTxnCtx);
+                insertInitialIndexes(mdTxnCtx);
+                insertNodes(mdTxnCtx);
+                insertInitialGroups(mdTxnCtx);
+                insertInitialAdapters(mdTxnCtx);
+
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.info("Finished creating metadata B-trees.");
+                }
+            } else {
+                for (int i = 0; i < primaryIndexes.length; i++) {
+                    enlistMetadataDataset(primaryIndexes[i], false);
+                }
+                for (int i = 0; i < secondaryIndexes.length; i++) {
+                    enlistMetadataDataset(secondaryIndexes[i], false);
+                }
+
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.info("Finished enlistment of metadata B-trees.");
+                }
+            }
+            
+            //#. initialize datasetIdFactory
+            MetadataManager.INSTANCE.initializeDatasetIdFactory(mdTxnCtx);
+            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
+        } catch (Exception e) {
+            try {
+                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
+            } catch (Exception e2) {
+                e.addSuppressed(e2);
+                //TODO
+                //change the exception type to AbortFailureException
+                throw new MetadataException(e);
+            }
+        }
+    }
+
+    public static void stopUniverse() throws HyracksDataException {
+        // Close all BTree files in BufferCache.
+        for (int i = 0; i < primaryIndexes.length; i++) {
+            long resourceID = localResourceRepository
+                    .getResourceByName(primaryIndexes[i].getFile().getFile().getPath()).getResourceId();
+            indexLifecycleManager.close(resourceID);
+            indexLifecycleManager.unregister(resourceID);
+        }
+        for (int i = 0; i < secondaryIndexes.length; i++) {
+            long resourceID = localResourceRepository.getResourceByName(
+                    secondaryIndexes[i].getFile().getFile().getPath()).getResourceId();
+            indexLifecycleManager.close(resourceID);
+            indexLifecycleManager.unregister(resourceID);
+        }
+    }
+
+    public static void insertInitialDataverses(MetadataTransactionContext mdTxnCtx) throws Exception {
+        String dataverseName = MetadataPrimaryIndexes.DATAVERSE_DATASET.getDataverseName();
+        String dataFormat = NonTaggedDataFormat.NON_TAGGED_DATA_FORMAT;
+        MetadataManager.INSTANCE.addDataverse(mdTxnCtx, new Dataverse(dataverseName, dataFormat,
+                IMetadataEntity.PENDING_NO_OP));
+    }
+
+    public static void insertInitialDatasets(MetadataTransactionContext mdTxnCtx) throws Exception {
+        for (int i = 0; i < primaryIndexes.length; i++) {
+            IDatasetDetails id = new InternalDatasetDetails(FileStructure.BTREE, PartitioningStrategy.HASH,
+                    primaryIndexes[i].getPartitioningExpr(), primaryIndexes[i].getPartitioningExpr(),
+                    primaryIndexes[i].getNodeGroupName());
+            MetadataManager.INSTANCE.addDataset(mdTxnCtx, new Dataset(primaryIndexes[i].getDataverseName(),
+                    primaryIndexes[i].getIndexedDatasetName(), primaryIndexes[i].getPayloadRecordType().getTypeName(),
+                    id, new HashMap<String, String>(), DatasetType.INTERNAL, primaryIndexes[i].getDatasetId().getId(),
+                    IMetadataEntity.PENDING_NO_OP));
+        }
+    }
+
+    public static void getBuiltinTypes(ArrayList<IAType> types) throws Exception {
+        Collection<BuiltinType> builtinTypes = AsterixBuiltinTypeMap.getBuiltinTypes().values();
+        Iterator<BuiltinType> iter = builtinTypes.iterator();
+        while (iter.hasNext())
+            types.add(iter.next());
+    }
+
+    public static void getMetadataTypes(ArrayList<IAType> types) throws Exception {
+        for (int i = 0; i < primaryIndexes.length; i++)
+            types.add(primaryIndexes[i].getPayloadRecordType());
+    }
+
+    public static void insertInitialDatatypes(MetadataTransactionContext mdTxnCtx) throws Exception {
+        String dataverseName = MetadataPrimaryIndexes.DATAVERSE_DATASET.getDataverseName();
+        ArrayList<IAType> types = new ArrayList<IAType>();
+        getBuiltinTypes(types);
+        getMetadataTypes(types);
+        for (int i = 0; i < types.size(); i++) {
+            MetadataManager.INSTANCE.addDatatype(mdTxnCtx, new Datatype(dataverseName, types.get(i).getTypeName(),
+                    types.get(i), false));
+        }
+    }
+
+    public static void insertInitialIndexes(MetadataTransactionContext mdTxnCtx) throws Exception {
+        for (int i = 0; i < secondaryIndexes.length; i++) {
+            MetadataManager.INSTANCE.addIndex(mdTxnCtx, new Index(secondaryIndexes[i].getDataverseName(),
+                    secondaryIndexes[i].getIndexedDatasetName(), secondaryIndexes[i].getIndexName(), IndexType.BTREE,
+                    secondaryIndexes[i].getPartitioningExpr(), false, IMetadataEntity.PENDING_NO_OP));
+        }
+    }
+
+    public static void insertNodes(MetadataTransactionContext mdTxnCtx) throws Exception {
+        Iterator<String> iter = nodeNames.iterator();
+        // Set<Entry<String, String[]>> set = nodeStores.entrySet();
+        // Iterator<Entry<String, String[]>> im = set.iterator();
+
+        while (iter.hasNext()) {
+            // Map.Entry<String, String[]> me = (Map.Entry<String,
+            // String[]>)im.next();
+            MetadataManager.INSTANCE.addNode(mdTxnCtx, new Node(iter.next(), 0, 0/*
+                                                                                 * , me . getValue ( )
+                                                                                 */));
+        }
+    }
+
+    public static void insertInitialGroups(MetadataTransactionContext mdTxnCtx) throws Exception {
+        String groupName = MetadataPrimaryIndexes.DATAVERSE_DATASET.getNodeGroupName();
+        List<String> metadataGroupNodeNames = new ArrayList<String>();
+        metadataGroupNodeNames.add(metadataNodeName);
+        NodeGroup groupRecord = new NodeGroup(groupName, metadataGroupNodeNames);
+        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, groupRecord);
+
+        List<String> nodes = new ArrayList<String>();
+        nodes.addAll(nodeNames);
+        NodeGroup defaultGroup = new NodeGroup(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME, nodes);
+        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, defaultGroup);
+
+    }
+
+    private static void insertInitialAdapters(MetadataTransactionContext mdTxnCtx) throws Exception {
+        String[] builtInAdapterClassNames = new String[] {
+                "edu.uci.ics.asterix.external.adapter.factory.NCFileSystemAdapterFactory",
+                "edu.uci.ics.asterix.external.adapter.factory.HDFSAdapterFactory",
+                "edu.uci.ics.asterix.external.adapter.factory.HiveAdapterFactory",
+                "edu.uci.ics.asterix.external.adapter.factory.PullBasedTwitterAdapterFactory",
+                "edu.uci.ics.asterix.external.adapter.factory.RSSFeedAdapterFactory",
+                "edu.uci.ics.asterix.external.adapter.factory.CNNFeedAdapterFactory", };
+        DatasourceAdapter adapter;
+        for (String adapterClassName : builtInAdapterClassNames) {
+            adapter = getAdapter(adapterClassName);
+            MetadataManager.INSTANCE.addAdapter(mdTxnCtx, adapter);
+        }
+    }
+
+    private static DatasourceAdapter getAdapter(String adapterFactoryClassName) throws Exception {
+        String adapterName = ((IAdapterFactory) (Class.forName(adapterFactoryClassName).newInstance())).getName();
+        return new DatasourceAdapter(new AdapterIdentifier(MetadataConstants.METADATA_DATAVERSE_NAME, adapterName),
+                adapterFactoryClassName, DatasourceAdapter.AdapterType.INTERNAL);
+    }
+
+    public static void enlistMetadataDataset(IMetadataIndex index, boolean create) throws Exception {
+        String filePath = metadataStore + File.separator + index.getFileNameRelativePath();
+        FileReference file = new FileReference(new File(filePath));
+        IInMemoryBufferCache memBufferCache = new InMemoryBufferCache(new HeapBufferAllocator(), DEFAULT_MEM_PAGE_SIZE,
+                DEFAULT_MEM_NUM_PAGES, new TransientFileMapManager());
+        ITypeTraits[] typeTraits = index.getTypeTraits();
+        IBinaryComparatorFactory[] comparatorFactories = index.getKeyBinaryComparatorFactory();
+        int[] bloomFilterKeyFields = index.getBloomFilterKeyFields();
+        ITreeIndexMetaDataFrameFactory metaDataFrameFactory = new LIFOMetaDataFrameFactory();
+        IInMemoryFreePageManager memFreePageManager = new InMemoryFreePageManager(DEFAULT_MEM_NUM_PAGES,
+                metaDataFrameFactory);
+        LSMBTree lsmBtree = null;
+        long resourceID = -1;
+        if (create) {
+            lsmBtree = LSMBTreeUtils.createLSMTree(memBufferCache, memFreePageManager, ioManager, file, bufferCache,
+                    fileMapProvider, typeTraits, comparatorFactories, bloomFilterKeyFields,
+                    runtimeContext.getLSMMergePolicy(), runtimeContext.getLSMBTreeOperationTrackerFactory(),
+                    runtimeContext.getLSMIOScheduler(), AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER);
+            lsmBtree.create();
+            resourceID = runtimeContext.getResourceIdFactory().createId();
+            indexLifecycleManager.register(resourceID, lsmBtree);
+
+            ILocalResourceMetadata localResourceMetadata = new LSMBTreeLocalResourceMetadata(typeTraits,
+                    comparatorFactories, bloomFilterKeyFields, index.isPrimaryIndex(),
+                    GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES);
+            ILocalResourceFactoryProvider localResourceFactoryProvider = new PersistentLocalResourceFactoryProvider(
+                    localResourceMetadata, LocalResource.LSMBTreeResource);
+            ILocalResourceFactory localResourceFactory = localResourceFactoryProvider.getLocalResourceFactory();
+            localResourceRepository.insert(localResourceFactory.createLocalResource(resourceID, file.getFile()
+                    .getPath(), 0));
+        } else {
+            resourceID = localResourceRepository.getResourceByName(file.getFile().getPath()).getResourceId();
+            lsmBtree = (LSMBTree) indexLifecycleManager.getIndex(resourceID);
+            if (lsmBtree == null) {
+                lsmBtree = LSMBTreeUtils.createLSMTree(memBufferCache, memFreePageManager, ioManager, file,
+                        bufferCache, fileMapProvider, typeTraits, comparatorFactories, bloomFilterKeyFields,
+                        runtimeContext.getLSMMergePolicy(), runtimeContext.getLSMBTreeOperationTrackerFactory(),
+                        runtimeContext.getLSMIOScheduler(), AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER);
+                indexLifecycleManager.register(resourceID, lsmBtree);
+            }
+        }
+
+        index.setResourceID(resourceID);
+        index.setFile(file);
+        indexLifecycleManager.open(resourceID);
+    }
+
+    public static String getOutputDir() {
+        return outputDir;
+    }
+
+    public static String getMetadataNodeName() {
+        return metadataNodeName;
+    }
+
+    public static void startDDLRecovery() throws RemoteException, ACIDException, MetadataException {
+        //#. clean up any record which has pendingAdd/DelOp flag 
+        //   as traversing all records from DATAVERSE_DATASET to DATASET_DATASET, and then to INDEX_DATASET.
+        String dataverseName = null;
+        String datasetName = null;
+        String indexName = null;
+        MetadataTransactionContext mdTxnCtx = null;
+
+        MetadataManager.INSTANCE.acquireWriteLatch();
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Starting DDL recovery ...");
+        }
+
+        try {
+            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
+
+            List<Dataverse> dataverses = MetadataManager.INSTANCE.getDataverses(mdTxnCtx);
+            for (Dataverse dataverse : dataverses) {
+                dataverseName = dataverse.getDataverseName();
+                if (dataverse.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
+                    //drop pending dataverse
+                    MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dataverseName);
+                    if (LOGGER.isLoggable(Level.INFO)) {
+                        LOGGER.info("Dropped a pending dataverse: " + dataverseName);
+                    }
+                } else {
+                    List<Dataset> datasets = MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverseName);
+                    for (Dataset dataset : datasets) {
+                        datasetName = dataset.getDatasetName();
+                        if (dataset.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
+                            //drop pending dataset
+                            MetadataManager.INSTANCE.dropDataset(mdTxnCtx, dataverseName, datasetName);
+                            if (LOGGER.isLoggable(Level.INFO)) {
+                                LOGGER.info("Dropped a pending dataset: " + dataverseName + "." + datasetName);
+                            }
+                        } else {
+                            List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName,
+                                    datasetName);
+                            for (Index index : indexes) {
+                                indexName = index.getIndexName();
+                                if (index.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
+                                    //drop pending index
+                                    MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
+                                    if (LOGGER.isLoggable(Level.INFO)) {
+                                        LOGGER.info("Dropped a pending index: " + dataverseName + "." + datasetName
+                                                + "." + indexName);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("Completed DDL recovery.");
+            }
+        } catch (Exception e) {
+            try {
+                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
+            } catch (Exception e2) {
+                e.addSuppressed(e2);
+            }
+            throw new MetadataException(e);
+        } finally {
+            MetadataManager.INSTANCE.releaseWriteLatch();
+        }
+    }
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataConstants.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataConstants.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataConstants.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataConstants.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataIndex.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataIndex.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataIndex.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataIndex.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataPrimaryIndexes.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataRecordTypes.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataRecordTypes.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataRecordTypes.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataRecordTypes.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataSecondaryIndexes.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataSecondaryIndexes.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataSecondaryIndexes.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataSecondaryIndexes.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/DatasetHints.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/DatasetHints.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/DatasetHints.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/DatasetHints.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/IHint.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/IHint.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/IHint.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/dataset/hints/IHint.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlCompiledMetadataDeclarations.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlCompiledMetadataDeclarations.java
new file mode 100644
index 0000000..70383f9
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlCompiledMetadataDeclarations.java
@@ -0,0 +1,272 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.declared;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.common.annotations.TypeDataGen;
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.api.IMetadataManager;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.NodeGroup;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.data.IAWriterFactory;
+import edu.uci.ics.hyracks.api.io.FileReference;
+import edu.uci.ics.hyracks.dataflow.std.file.ConstantFileSplitProvider;
+import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
+import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
+
+public class AqlCompiledMetadataDeclarations {
+    private static Logger LOGGER = Logger.getLogger(AqlCompiledMetadataDeclarations.class.getName());
+
+    // We are assuming that there is a one AqlCompiledMetadataDeclarations per
+    // transaction.
+    private final MetadataTransactionContext mdTxnCtx;
+    private String dataverseName = null;
+    private FileSplit outputFile;
+    private Map<String, String[]> stores;
+    private IDataFormat format;
+    private Map<String, String> config;
+
+    private final Map<String, IAType> types;
+    private final Map<String, TypeDataGen> typeDataGenMap;
+    private final IAWriterFactory writerFactory;
+
+    private IMetadataManager metadataManager = MetadataManager.INSTANCE;
+    private boolean isConnected = false;
+
+    public AqlCompiledMetadataDeclarations(MetadataTransactionContext mdTxnCtx, String dataverseName,
+            FileSplit outputFile, Map<String, String> config, Map<String, String[]> stores, Map<String, IAType> types,
+            Map<String, TypeDataGen> typeDataGenMap, IAWriterFactory writerFactory, boolean online) {
+        this.mdTxnCtx = mdTxnCtx;
+        this.dataverseName = dataverseName;
+        this.outputFile = outputFile;
+        this.config = config;
+        if (stores == null && online) {
+            this.stores = AsterixProperties.INSTANCE.getStores();
+        } else {
+            this.stores = stores;
+        }
+        this.types = types;
+        this.typeDataGenMap = typeDataGenMap;
+        this.writerFactory = writerFactory;
+    }
+
+    public void connectToDataverse(String dvName) throws AlgebricksException, AsterixException {
+        if (isConnected) {
+            throw new AlgebricksException("You are already connected to " + dataverseName + " dataverse");
+        }
+        Dataverse dv;
+        try {
+            dv = metadataManager.getDataverse(mdTxnCtx, dvName);
+        } catch (Exception e) {
+            throw new AsterixException(e);
+        }
+        if (dv == null) {
+            throw new AlgebricksException("There is no dataverse with this name " + dvName + " to connect to.");
+        }
+        dataverseName = dvName;
+        isConnected = true;
+        try {
+            format = (IDataFormat) Class.forName(dv.getDataFormat()).newInstance();
+        } catch (Exception e) {
+            throw new AsterixException(e);
+        }
+    }
+
+    public void disconnectFromDataverse() throws AlgebricksException {
+        if (!isConnected) {
+            throw new AlgebricksException("You are not connected to any dataverse");
+        }
+        dataverseName = null;
+        format = null;
+        isConnected = false;
+    }
+
+    public boolean isConnectedToDataverse() {
+        return isConnected;
+    }
+
+    public String getDataverseName() {
+        return dataverseName;
+    }
+
+    public FileSplit getOutputFile() {
+        return outputFile;
+    }
+
+    public IDataFormat getFormat() throws AlgebricksException {
+        if (!isConnected) {
+            throw new AlgebricksException("You need first to connect to a dataverse.");
+        }
+        return format;
+    }
+
+    public String getPropertyValue(String propertyName) {
+        return config.get(propertyName);
+    }
+
+    public IAType findType(String typeName) {
+        Datatype type;
+        try {
+            type = metadataManager.getDatatype(mdTxnCtx, dataverseName, typeName);
+        } catch (Exception e) {
+            throw new IllegalStateException();
+        }
+        if (type == null) {
+            throw new IllegalStateException();
+        }
+        return type.getDatatype();
+    }
+
+    public List<String> findNodeGroupNodeNames(String nodeGroupName) throws AlgebricksException {
+        NodeGroup ng;
+        try {
+            ng = metadataManager.getNodegroup(mdTxnCtx, nodeGroupName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+        if (ng == null) {
+            throw new AlgebricksException("No node group with this name " + nodeGroupName);
+        }
+        return ng.getNodeNames();
+    }
+
+    public Map<String, String[]> getAllStores() {
+        return stores;
+    }
+
+    public Dataset findDataset(String datasetName) throws AlgebricksException {
+        try {
+            return metadataManager.getDataset(mdTxnCtx, dataverseName, datasetName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public List<Index> getDatasetIndexes(String dataverseName, String datasetName) throws AlgebricksException {
+        try {
+            return metadataManager.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public Index getDatasetPrimaryIndex(String dataverseName, String datasetName) throws AlgebricksException {
+        try {
+            return metadataManager.getIndex(mdTxnCtx, dataverseName, datasetName, datasetName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public Index getIndex(String dataverseName, String datasetName, String indexName) throws AlgebricksException {
+        try {
+            return metadataManager.getIndex(mdTxnCtx, dataverseName, datasetName, indexName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public void setOutputFile(FileSplit outputFile) {
+        this.outputFile = outputFile;
+    }
+
+    public Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+            String datasetName, String targetIdxName) throws AlgebricksException {
+        FileSplit[] splits = splitsForInternalOrFeedDataset(datasetName, targetIdxName);
+        IFileSplitProvider splitProvider = new ConstantFileSplitProvider(splits);
+        String[] loc = new String[splits.length];
+        for (int p = 0; p < splits.length; p++) {
+            loc[p] = splits[p].getNodeName();
+        }
+        AlgebricksPartitionConstraint pc = new AlgebricksAbsolutePartitionConstraint(loc);
+        return new Pair<IFileSplitProvider, AlgebricksPartitionConstraint>(splitProvider, pc);
+    }
+
+    private FileSplit[] splitsForInternalOrFeedDataset(String datasetName, String targetIdxName)
+            throws AlgebricksException {
+
+        File relPathFile = new File(getRelativePath(datasetName + "_idx_" + targetIdxName));
+        Dataset dataset = findDataset(datasetName);
+        if (dataset.getDatasetType() != DatasetType.INTERNAL & dataset.getDatasetType() != DatasetType.FEED) {
+            throw new AlgebricksException("Not an internal or feed dataset");
+        }
+        InternalDatasetDetails datasetDetails = (InternalDatasetDetails) dataset.getDatasetDetails();
+        List<String> nodeGroup = findNodeGroupNodeNames(datasetDetails.getNodeGroupName());
+        if (nodeGroup == null) {
+            throw new AlgebricksException("Couldn't find node group " + datasetDetails.getNodeGroupName());
+        }
+
+        List<FileSplit> splitArray = new ArrayList<FileSplit>();
+        for (String nd : nodeGroup) {
+            String[] nodeStores = stores.get(nd);
+            if (nodeStores == null) {
+                LOGGER.warning("Node " + nd + " has no stores.");
+                throw new AlgebricksException("Node " + nd + " has no stores.");
+            } else {
+                for (int j = 0; j < nodeStores.length; j++) {
+                    File f = new File(nodeStores[j] + File.separator + relPathFile);
+                    splitArray.add(new FileSplit(nd, new FileReference(f)));
+                }
+            }
+        }
+        FileSplit[] splits = new FileSplit[splitArray.size()];
+        int i = 0;
+        for (FileSplit fs : splitArray) {
+            splits[i++] = fs;
+        }
+        return splits;
+    }
+
+    public String getRelativePath(String fileName) {
+        return dataverseName + File.separator + fileName;
+    }
+
+    public Map<String, TypeDataGen> getTypeDataGenMap() {
+        return typeDataGenMap;
+    }
+
+    public Map<String, IAType> getTypeDeclarations() {
+        return types;
+    }
+
+    public IAWriterFactory getWriterFactory() {
+        return writerFactory;
+    }
+
+    public MetadataTransactionContext getMetadataTransactionContext() {
+        return mdTxnCtx;
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlDataSource.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlDataSource.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlDataSource.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlDataSource.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlIndex.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlIndex.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlIndex.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlIndex.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlLogicalPlanAndMetadataImpl.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlLogicalPlanAndMetadataImpl.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlLogicalPlanAndMetadataImpl.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlLogicalPlanAndMetadataImpl.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataImplConfig.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataImplConfig.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataImplConfig.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataImplConfig.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
new file mode 100644
index 0000000..8bbddec
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
@@ -0,0 +1,1440 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.declared;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.common.config.AsterixProperties;
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.common.context.AsterixRuntimeComponentsProvider;
+import edu.uci.ics.asterix.common.context.TransactionSubsystemProvider;
+import edu.uci.ics.asterix.common.dataflow.IAsterixApplicationContextInfo;
+import edu.uci.ics.asterix.common.parse.IParseFileSplitsDecl;
+import edu.uci.ics.asterix.dataflow.data.nontagged.valueproviders.AqlPrimitiveValueProviderFactory;
+import edu.uci.ics.asterix.external.adapter.factory.IAdapterFactory;
+import edu.uci.ics.asterix.external.adapter.factory.IGenericDatasetAdapterFactory;
+import edu.uci.ics.asterix.external.adapter.factory.ITypedDatasetAdapterFactory;
+import edu.uci.ics.asterix.external.data.operator.ExternalDataScanOperatorDescriptor;
+import edu.uci.ics.asterix.external.data.operator.FeedIntakeOperatorDescriptor;
+import edu.uci.ics.asterix.external.data.operator.FeedMessageOperatorDescriptor;
+import edu.uci.ics.asterix.external.dataset.adapter.IDatasourceAdapter;
+import edu.uci.ics.asterix.external.dataset.adapter.ITypedDatasourceAdapter;
+import edu.uci.ics.asterix.external.feed.lifecycle.FeedId;
+import edu.uci.ics.asterix.external.feed.lifecycle.IFeedMessage;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.formats.nontagged.AqlBinaryComparatorFactoryProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlTypeTraitProvider;
+import edu.uci.ics.asterix.metadata.MetadataException;
+import edu.uci.ics.asterix.metadata.MetadataManager;
+import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
+import edu.uci.ics.asterix.metadata.bootstrap.MetadataConstants;
+import edu.uci.ics.asterix.metadata.dataset.hints.DatasetHints.DatasetCardinalityHint;
+import edu.uci.ics.asterix.metadata.entities.Dataset;
+import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
+import edu.uci.ics.asterix.metadata.entities.Datatype;
+import edu.uci.ics.asterix.metadata.entities.Dataverse;
+import edu.uci.ics.asterix.metadata.entities.ExternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.FeedDatasetDetails;
+import edu.uci.ics.asterix.metadata.entities.Index;
+import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
+import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.asterix.runtime.base.AsterixTupleFilterFactory;
+import edu.uci.ics.asterix.runtime.formats.FormatUtils;
+import edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat;
+import edu.uci.ics.asterix.runtime.job.listener.JobEventListenerFactory;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexInstantSearchOperationCallbackFactory;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexModificationOperationCallbackFactory;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexSearchOperationCallbackFactory;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.SecondaryIndexModificationOperationCallbackFactory;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.SecondaryIndexSearchOperationCallbackFactory;
+import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
+import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSink;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSource;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSourceIndex;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
+import edu.uci.ics.hyracks.algebricks.core.jobgen.impl.JobGenContext;
+import edu.uci.ics.hyracks.algebricks.core.jobgen.impl.JobGenHelper;
+import edu.uci.ics.hyracks.algebricks.data.IAWriterFactory;
+import edu.uci.ics.hyracks.algebricks.data.IPrinterFactory;
+import edu.uci.ics.hyracks.algebricks.data.IResultSerializerFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.operators.std.SinkWriterRuntimeFactory;
+import edu.uci.ics.hyracks.api.dataflow.IOperatorDescriptor;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ILinearizeComparatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.IResultSerializerFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
+import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
+import edu.uci.ics.hyracks.api.dataset.ResultSetId;
+import edu.uci.ics.hyracks.api.io.FileReference;
+import edu.uci.ics.hyracks.api.job.JobSpecification;
+import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import edu.uci.ics.hyracks.data.std.primitive.ShortPointable;
+import edu.uci.ics.hyracks.dataflow.std.file.ConstantFileSplitProvider;
+import edu.uci.ics.hyracks.dataflow.std.file.FileScanOperatorDescriptor;
+import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
+import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
+import edu.uci.ics.hyracks.dataflow.std.file.ITupleParserFactory;
+import edu.uci.ics.hyracks.dataflow.std.result.ResultWriterOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory;
+import edu.uci.ics.hyracks.storage.am.common.api.IPrimitiveValueProviderFactory;
+import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallbackFactory;
+import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
+import edu.uci.ics.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallbackFactory;
+import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOperation;
+import edu.uci.ics.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.dataflow.LSMBTreeDataflowHelperFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.common.dataflow.LSMTreeIndexInsertUpdateDeleteOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.dataflow.LSMInvertedIndexDataflowHelperFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.dataflow.LSMInvertedIndexInsertUpdateDeleteOperator;
+import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.tokenizers.IBinaryTokenizerFactory;
+import edu.uci.ics.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeDataflowHelperFactory;
+import edu.uci.ics.hyracks.storage.am.rtree.dataflow.RTreeSearchOperatorDescriptor;
+import edu.uci.ics.hyracks.storage.am.rtree.frames.RTreePolicyType;
+import edu.uci.ics.hyracks.storage.am.rtree.linearize.HilbertDoubleComparatorFactory;
+import edu.uci.ics.hyracks.storage.am.rtree.linearize.ZCurveDoubleComparatorFactory;
+import edu.uci.ics.hyracks.storage.am.rtree.linearize.ZCurveIntComparatorFactory;
+
+public class AqlMetadataProvider implements IMetadataProvider<AqlSourceId, String> {
+    private static Logger LOGGER = Logger.getLogger(AqlMetadataProvider.class.getName());
+    private MetadataTransactionContext mdTxnCtx;
+    private boolean isWriteTransaction;
+    private Map<String, String[]> stores;
+    private Map<String, String> config;
+    private IAWriterFactory writerFactory;
+    private FileSplit outputFile;
+    private ResultSetId resultSetId;
+    private IResultSerializerFactoryProvider resultSerializerFactoryProvider;
+
+    private final Dataverse defaultDataverse;
+    private JobId jobId;
+
+    private static final Map<String, String> adapterFactoryMapping = initializeAdapterFactoryMapping();
+
+    public String getPropertyValue(String propertyName) {
+        return config.get(propertyName);
+    }
+
+    public void setConfig(Map<String, String> config) {
+        this.config = config;
+    }
+
+    public Map<String, String[]> getAllStores() {
+        return stores;
+    }
+
+    public Map<String, String> getConfig() {
+        return config;
+    }
+
+    public AqlMetadataProvider(Dataverse defaultDataverse) {
+        this.defaultDataverse = defaultDataverse;
+        this.stores = AsterixProperties.INSTANCE.getStores();
+    }
+
+    public void setJobId(JobId jobId) {
+        this.jobId = jobId;
+    }
+
+    public Dataverse getDefaultDataverse() {
+        return defaultDataverse;
+    }
+
+    public String getDefaultDataverseName() {
+        return defaultDataverse == null ? null : defaultDataverse.getDataverseName();
+    }
+
+    public void setWriteTransaction(boolean writeTransaction) {
+        this.isWriteTransaction = writeTransaction;
+    }
+
+    public void setWriterFactory(IAWriterFactory writerFactory) {
+        this.writerFactory = writerFactory;
+    }
+
+    public void setMetadataTxnContext(MetadataTransactionContext mdTxnCtx) {
+        this.mdTxnCtx = mdTxnCtx;
+    }
+
+    public MetadataTransactionContext getMetadataTxnContext() {
+        return mdTxnCtx;
+    }
+
+    public IAWriterFactory getWriterFactory() {
+        return this.writerFactory;
+    }
+
+    public FileSplit getOutputFile() {
+        return outputFile;
+    }
+
+    public void setOutputFile(FileSplit outputFile) {
+        this.outputFile = outputFile;
+    }
+
+    public ResultSetId getResultSetId() {
+        return resultSetId;
+    }
+
+    public void setResultSetId(ResultSetId resultSetId) {
+        this.resultSetId = resultSetId;
+    }
+
+    public void setResultSerializerFactoryProvider(IResultSerializerFactoryProvider rafp) {
+        this.resultSerializerFactoryProvider = rafp;
+    }
+
+    public IResultSerializerFactoryProvider getResultSerializerFactoryProvider() {
+        return resultSerializerFactoryProvider;
+    }
+
+    @Override
+    public AqlDataSource findDataSource(AqlSourceId id) throws AlgebricksException {
+        AqlSourceId aqlId = (AqlSourceId) id;
+        try {
+            return lookupSourceInMetadata(aqlId);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public boolean isWriteTransaction() {
+        return isWriteTransaction;
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getScannerRuntime(
+            IDataSource<AqlSourceId> dataSource, List<LogicalVariable> scanVariables,
+            List<LogicalVariable> projectVariables, boolean projectPushed, IOperatorSchema opSchema,
+            IVariableTypeEnvironment typeEnv, JobGenContext context, JobSpecification jobSpec, Object implConfig)
+            throws AlgebricksException {
+        Dataset dataset;
+        try {
+            dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataSource.getId().getDataverseName(), dataSource
+                    .getId().getDatasetName());
+
+            if (dataset == null) {
+                throw new AlgebricksException("Unknown dataset " + dataSource.getId().getDatasetName()
+                        + " in dataverse " + dataSource.getId().getDataverseName());
+            }
+            switch (dataset.getDatasetType()) {
+                case FEED:
+                    if (dataSource instanceof ExternalFeedDataSource) {
+                        return buildExternalDatasetScan(jobSpec, dataset, dataSource);
+                    } else {
+                        return buildInternalDatasetScan(jobSpec, scanVariables, opSchema, typeEnv, dataset, dataSource,
+                                context, implConfig);
+
+                    }
+                case INTERNAL: {
+                    return buildInternalDatasetScan(jobSpec, scanVariables, opSchema, typeEnv, dataset, dataSource,
+                            context, implConfig);
+                }
+                case EXTERNAL: {
+                    return buildExternalDatasetScan(jobSpec, dataset, dataSource);
+                }
+                default: {
+                    throw new IllegalArgumentException();
+                }
+            }
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildInternalDatasetScan(JobSpecification jobSpec,
+            List<LogicalVariable> outputVars, IOperatorSchema opSchema, IVariableTypeEnvironment typeEnv,
+            Dataset dataset, IDataSource<AqlSourceId> dataSource, JobGenContext context, Object implConfig)
+            throws AlgebricksException, MetadataException {
+        AqlSourceId asid = dataSource.getId();
+        String dataverseName = asid.getDataverseName();
+        String datasetName = asid.getDatasetName();
+        Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataverseName, datasetName, datasetName);
+        return buildBtreeRuntime(jobSpec, outputVars, opSchema, typeEnv, context, false, dataset,
+                primaryIndex.getIndexName(), null, null, true, true, implConfig);
+    }
+
+    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildExternalDatasetScan(JobSpecification jobSpec,
+            Dataset dataset, IDataSource<AqlSourceId> dataSource) throws AlgebricksException, MetadataException {
+        String itemTypeName = dataset.getItemTypeName();
+        IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(), itemTypeName)
+                .getDatatype();
+        if (dataSource instanceof ExternalFeedDataSource) {
+            return buildFeedIntakeRuntime(jobSpec, dataset);
+        } else {
+            return buildExternalDataScannerRuntime(jobSpec, itemType,
+                    (ExternalDatasetDetails) dataset.getDatasetDetails(), NonTaggedDataFormat.INSTANCE);
+        }
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildExternalDataScannerRuntime(
+            JobSpecification jobSpec, IAType itemType, ExternalDatasetDetails datasetDetails, IDataFormat format)
+            throws AlgebricksException {
+        if (itemType.getTypeTag() != ATypeTag.RECORD) {
+            throw new AlgebricksException("Can only scan datasets of records.");
+        }
+
+        IGenericDatasetAdapterFactory adapterFactory;
+        IDatasourceAdapter adapter;
+        String adapterName;
+        DatasourceAdapter adapterEntity;
+        String adapterFactoryClassname;
+        try {
+            adapterName = datasetDetails.getAdapter();
+            adapterEntity = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, MetadataConstants.METADATA_DATAVERSE_NAME,
+                    adapterName);
+            if (adapterEntity != null) {
+                adapterFactoryClassname = adapterEntity.getClassname();
+                adapterFactory = (IGenericDatasetAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
+            } else {
+                adapterFactoryClassname = adapterFactoryMapping.get(adapterName);
+                if (adapterFactoryClassname == null) {
+                    throw new AlgebricksException(" Unknown adapter :" + adapterName);
+                }
+                adapterFactory = (IGenericDatasetAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
+            }
+
+            adapter = ((IGenericDatasetAdapterFactory) adapterFactory).createAdapter(datasetDetails.getProperties(),
+                    itemType);
+        } catch (AlgebricksException ae) {
+            throw ae;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AlgebricksException("Unable to create adapter " + e);
+        }
+
+        if (!(adapter.getAdapterType().equals(IDatasourceAdapter.AdapterType.READ) || adapter.getAdapterType().equals(
+                IDatasourceAdapter.AdapterType.READ_WRITE))) {
+            throw new AlgebricksException("external dataset adapter does not support read operation");
+        }
+        ARecordType rt = (ARecordType) itemType;
+
+        ISerializerDeserializer payloadSerde = format.getSerdeProvider().getSerializerDeserializer(itemType);
+        RecordDescriptor scannerDesc = new RecordDescriptor(new ISerializerDeserializer[] { payloadSerde });
+
+        ExternalDataScanOperatorDescriptor dataScanner = new ExternalDataScanOperatorDescriptor(jobSpec,
+                adapterFactoryClassname, datasetDetails.getProperties(), rt, scannerDesc);
+
+        AlgebricksPartitionConstraint constraint;
+        try {
+            constraint = adapter.getPartitionConstraint();
+        } catch (Exception e) {
+            throw new AlgebricksException(e);
+        }
+
+        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(dataScanner, constraint);
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildScannerRuntime(JobSpecification jobSpec,
+            IAType itemType, IParseFileSplitsDecl decl, IDataFormat format) throws AlgebricksException {
+        if (itemType.getTypeTag() != ATypeTag.RECORD) {
+            throw new AlgebricksException("Can only scan datasets of records.");
+        }
+        ARecordType rt = (ARecordType) itemType;
+        ITupleParserFactory tupleParser = format.createTupleParser(rt, decl);
+        FileSplit[] splits = decl.getSplits();
+        IFileSplitProvider scannerSplitProvider = new ConstantFileSplitProvider(splits);
+        ISerializerDeserializer payloadSerde = format.getSerdeProvider().getSerializerDeserializer(itemType);
+        RecordDescriptor scannerDesc = new RecordDescriptor(new ISerializerDeserializer[] { payloadSerde });
+        IOperatorDescriptor scanner = new FileScanOperatorDescriptor(jobSpec, scannerSplitProvider, tupleParser,
+                scannerDesc);
+        String[] locs = new String[splits.length];
+        for (int i = 0; i < splits.length; i++) {
+            locs[i] = splits[i].getNodeName();
+        }
+        AlgebricksPartitionConstraint apc = new AlgebricksAbsolutePartitionConstraint(locs);
+        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(scanner, apc);
+    }
+
+    @SuppressWarnings("rawtypes")
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildFeedIntakeRuntime(JobSpecification jobSpec,
+            Dataset dataset) throws AlgebricksException {
+
+        FeedDatasetDetails datasetDetails = (FeedDatasetDetails) dataset.getDatasetDetails();
+        DatasourceAdapter adapterEntity;
+        IDatasourceAdapter adapter;
+        IAdapterFactory adapterFactory;
+        IAType adapterOutputType;
+        String adapterName;
+        String adapterFactoryClassname;
+
+        try {
+            adapterName = datasetDetails.getAdapterFactory();
+            adapterEntity = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, MetadataConstants.METADATA_DATAVERSE_NAME,
+                    adapterName);
+            if (adapterEntity != null) {
+                adapterFactoryClassname = adapterEntity.getClassname();
+                adapterFactory = (IAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
+            } else {
+                adapterFactoryClassname = adapterFactoryMapping.get(adapterName);
+                if (adapterFactoryClassname != null) {
+                } else {
+                    // adapterName has been provided as a fully qualified classname 
+                    adapterFactoryClassname = adapterName;
+                }
+                adapterFactory = (IAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
+            }
+
+            if (adapterFactory instanceof ITypedDatasetAdapterFactory) {
+                adapter = ((ITypedDatasetAdapterFactory) adapterFactory).createAdapter(datasetDetails.getProperties());
+                adapterOutputType = ((ITypedDatasourceAdapter) adapter).getAdapterOutputType();
+            } else if (adapterFactory instanceof IGenericDatasetAdapterFactory) {
+                String outputTypeName = datasetDetails.getProperties().get(IGenericDatasetAdapterFactory.KEY_TYPE_NAME);
+                adapterOutputType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(),
+                        outputTypeName).getDatatype();
+                adapter = ((IGenericDatasetAdapterFactory) adapterFactory).createAdapter(
+                        datasetDetails.getProperties(), adapterOutputType);
+            } else {
+                throw new IllegalStateException(" Unknown factory type for " + adapterFactoryClassname);
+            }
+        } catch (AlgebricksException ae) {
+            throw ae;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new AlgebricksException("unable to create adapter  " + e);
+        }
+
+        ISerializerDeserializer payloadSerde = NonTaggedDataFormat.INSTANCE.getSerdeProvider()
+                .getSerializerDeserializer(adapterOutputType);
+        RecordDescriptor feedDesc = new RecordDescriptor(new ISerializerDeserializer[] { payloadSerde });
+
+        FeedIntakeOperatorDescriptor feedIngestor = new FeedIntakeOperatorDescriptor(jobSpec, new FeedId(
+                dataset.getDataverseName(), dataset.getDatasetName()), adapterFactoryClassname,
+                datasetDetails.getProperties(), (ARecordType) adapterOutputType, feedDesc);
+
+        AlgebricksPartitionConstraint constraint = null;
+        try {
+            constraint = adapter.getPartitionConstraint();
+        } catch (Exception e) {
+            throw new AlgebricksException(e);
+        }
+        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(feedIngestor, constraint);
+    }
+
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildFeedMessengerRuntime(
+            AqlMetadataProvider metadataProvider, JobSpecification jobSpec, FeedDatasetDetails datasetDetails,
+            String dataverse, String dataset, List<IFeedMessage> feedMessages) throws AlgebricksException {
+        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> spPc = metadataProvider
+                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataverse, dataset, dataset);
+        FeedMessageOperatorDescriptor feedMessenger = new FeedMessageOperatorDescriptor(jobSpec, dataverse, dataset,
+                feedMessages);
+        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(feedMessenger, spPc.second);
+    }
+
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildBtreeRuntime(JobSpecification jobSpec,
+            List<LogicalVariable> outputVars, IOperatorSchema opSchema, IVariableTypeEnvironment typeEnv,
+            JobGenContext context, boolean retainInput, Dataset dataset, String indexName, int[] lowKeyFields,
+            int[] highKeyFields, boolean lowKeyInclusive, boolean highKeyInclusive, Object implConfig)
+            throws AlgebricksException {
+        boolean isSecondary = true;
+        try {
+            Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), dataset.getDatasetName());
+            if (primaryIndex != null) {
+                isSecondary = !indexName.equals(primaryIndex.getIndexName());
+            }
+            int numPrimaryKeys = DatasetUtils.getPartitioningKeys(dataset).size();
+            RecordDescriptor outputRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv, opSchema, context);
+            int numKeys = numPrimaryKeys;
+            int keysStartIndex = outputRecDesc.getFieldCount() - numKeys - 1;
+            ITypeTraits[] typeTraits = null;
+            int[] bloomFilterKeyFields;
+            if (isSecondary) {
+                Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                        dataset.getDatasetName(), indexName);
+                int numSecondaryKeys = secondaryIndex.getKeyFieldNames().size();
+                numKeys += numSecondaryKeys;
+                keysStartIndex = outputVars.size() - numKeys;
+                typeTraits = JobGenHelper.variablesToTypeTraits(outputVars, keysStartIndex, numKeys, typeEnv, context);
+                bloomFilterKeyFields = new int[numSecondaryKeys];
+                for (int i = 0; i < numSecondaryKeys; i++) {
+                    bloomFilterKeyFields[i] = i;
+                }
+            } else {
+                typeTraits = JobGenHelper.variablesToTypeTraits(outputVars, keysStartIndex, numKeys + 1, typeEnv,
+                        context);
+                bloomFilterKeyFields = new int[numPrimaryKeys];
+                for (int i = 0; i < numPrimaryKeys; i++) {
+                    bloomFilterKeyFields[i] = i;
+                }
+            }
+            IBinaryComparatorFactory[] comparatorFactories = JobGenHelper.variablesToAscBinaryComparatorFactories(
+                    outputVars, keysStartIndex, numKeys, typeEnv, context);
+
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> spPc;
+            try {
+                spPc = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataset.getDataverseName(),
+                        dataset.getDatasetName(), indexName);
+            } catch (Exception e) {
+                throw new AlgebricksException(e);
+            }
+
+            ISearchOperationCallbackFactory searchCallbackFactory = null;
+            if (isSecondary) {
+                searchCallbackFactory = new SecondaryIndexSearchOperationCallbackFactory();
+            } else {
+                JobId jobId = ((JobEventListenerFactory) jobSpec.getJobletEventListenerFactory()).getJobId();
+                int datasetId = dataset.getDatasetId();
+                int[] primaryKeyFields = new int[numPrimaryKeys];
+                for (int i = 0; i < numPrimaryKeys; i++) {
+                    primaryKeyFields[i] = i;
+                }
+
+                AqlMetadataImplConfig aqlMetadataImplConfig = (AqlMetadataImplConfig) implConfig;
+                TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
+                if (aqlMetadataImplConfig != null && aqlMetadataImplConfig.isInstantLock()) {
+                    searchCallbackFactory = new PrimaryIndexInstantSearchOperationCallbackFactory(jobId, datasetId,
+                            primaryKeyFields, txnSubsystemProvider, ResourceType.LSM_BTREE);
+                } else {
+                    searchCallbackFactory = new PrimaryIndexSearchOperationCallbackFactory(jobId, datasetId,
+                            primaryKeyFields, txnSubsystemProvider, ResourceType.LSM_BTREE);
+                }
+            }
+            BTreeSearchOperatorDescriptor btreeSearchOp = new BTreeSearchOperatorDescriptor(jobSpec, outputRecDesc,
+                    appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), spPc.first,
+                    typeTraits, comparatorFactories, bloomFilterKeyFields, lowKeyFields, highKeyFields,
+                    lowKeyInclusive, highKeyInclusive, new LSMBTreeDataflowHelperFactory(
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
+                    retainInput, searchCallbackFactory);
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeSearchOp, spPc.second);
+
+        } catch (MetadataException me) {
+            throw new AlgebricksException(me);
+        }
+    }
+
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildRtreeRuntime(JobSpecification jobSpec,
+            List<LogicalVariable> outputVars, IOperatorSchema opSchema, IVariableTypeEnvironment typeEnv,
+            JobGenContext context, boolean retainInput, Dataset dataset, String indexName, int[] keyFields)
+            throws AlgebricksException {
+        try {
+            ARecordType recType = (ARecordType) findType(dataset.getDataverseName(), dataset.getItemTypeName());
+            int numPrimaryKeys = DatasetUtils.getPartitioningKeys(dataset).size();
+
+            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), indexName);
+            if (secondaryIndex == null) {
+                throw new AlgebricksException("Code generation error: no index " + indexName + " for dataset "
+                        + dataset.getDatasetName());
+            }
+            List<String> secondaryKeyFields = secondaryIndex.getKeyFieldNames();
+            int numSecondaryKeys = secondaryKeyFields.size();
+            if (numSecondaryKeys != 1) {
+                throw new AlgebricksException(
+                        "Cannot use "
+                                + numSecondaryKeys
+                                + " fields as a key for the R-tree index. There can be only one field as a key for the R-tree index.");
+            }
+            Pair<IAType, Boolean> keyTypePair = Index.getNonNullableKeyFieldType(secondaryKeyFields.get(0), recType);
+            IAType keyType = keyTypePair.first;
+            if (keyType == null) {
+                throw new AlgebricksException("Could not find field " + secondaryKeyFields.get(0) + " in the schema.");
+            }
+            int numDimensions = NonTaggedFormatUtil.getNumDimensions(keyType.getTypeTag());
+            int numNestedSecondaryKeyFields = numDimensions * 2;
+            IPrimitiveValueProviderFactory[] valueProviderFactories = new IPrimitiveValueProviderFactory[numNestedSecondaryKeyFields];
+            for (int i = 0; i < numNestedSecondaryKeyFields; i++) {
+                valueProviderFactories[i] = AqlPrimitiveValueProviderFactory.INSTANCE;
+            }
+
+            RecordDescriptor outputRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv, opSchema, context);
+            int keysStartIndex = outputRecDesc.getFieldCount() - numNestedSecondaryKeyFields - numPrimaryKeys;
+            if (retainInput) {
+                keysStartIndex -= numNestedSecondaryKeyFields;
+            }
+            IBinaryComparatorFactory[] comparatorFactories = JobGenHelper.variablesToAscBinaryComparatorFactories(
+                    outputVars, keysStartIndex, numNestedSecondaryKeyFields, typeEnv, context);
+            ITypeTraits[] typeTraits = JobGenHelper.variablesToTypeTraits(outputVars, keysStartIndex,
+                    numNestedSecondaryKeyFields, typeEnv, context);
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> spPc = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+                    dataset.getDataverseName(), dataset.getDatasetName(), indexName);
+
+            IBinaryComparatorFactory[] primaryComparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(
+                    dataset, recType, context.getBinaryComparatorFactoryProvider());
+            IAType nestedKeyType = NonTaggedFormatUtil.getNestedSpatialType(keyType.getTypeTag());
+            ISearchOperationCallbackFactory searchCallbackFactory = new SecondaryIndexSearchOperationCallbackFactory();
+            RTreeSearchOperatorDescriptor rtreeSearchOp = new RTreeSearchOperatorDescriptor(jobSpec, outputRecDesc,
+                    appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), spPc.first,
+                    typeTraits, comparatorFactories, keyFields, new LSMRTreeDataflowHelperFactory(
+                            valueProviderFactories, RTreePolicyType.RTREE, primaryComparatorFactories,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER, proposeLinearizer(
+                                    nestedKeyType.getTypeTag(), comparatorFactories.length),
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
+                    retainInput, searchCallbackFactory);
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(rtreeSearchOp, spPc.second);
+
+        } catch (MetadataException me) {
+            throw new AlgebricksException(me);
+        }
+    }
+
+    @Override
+    public Pair<IPushRuntimeFactory, AlgebricksPartitionConstraint> getWriteFileRuntime(IDataSink sink,
+            int[] printColumns, IPrinterFactory[] printerFactories, RecordDescriptor inputDesc) {
+        FileSplitDataSink fsds = (FileSplitDataSink) sink;
+        FileSplitSinkId fssi = (FileSplitSinkId) fsds.getId();
+        FileSplit fs = fssi.getFileSplit();
+        File outFile = fs.getLocalFile().getFile();
+        String nodeId = fs.getNodeName();
+
+        SinkWriterRuntimeFactory runtime = new SinkWriterRuntimeFactory(printColumns, printerFactories, outFile,
+                getWriterFactory(), inputDesc);
+        AlgebricksPartitionConstraint apc = new AlgebricksAbsolutePartitionConstraint(new String[] { nodeId });
+        return new Pair<IPushRuntimeFactory, AlgebricksPartitionConstraint>(runtime, apc);
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getResultHandleRuntime(IDataSink sink,
+            int[] printColumns, IPrinterFactory[] printerFactories, RecordDescriptor inputDesc, boolean ordered,
+            JobSpecification spec) throws AlgebricksException {
+        ResultSetDataSink rsds = (ResultSetDataSink) sink;
+        ResultSetSinkId rssId = (ResultSetSinkId) rsds.getId();
+        ResultSetId rsId = rssId.getResultSetId();
+
+        ResultWriterOperatorDescriptor resultWriter = null;
+        try {
+            IResultSerializerFactory resultSerializedAppenderFactory = resultSerializerFactoryProvider
+                    .getAqlResultSerializerFactoryProvider(printColumns, printerFactories, getWriterFactory());
+            resultWriter = new ResultWriterOperatorDescriptor(spec, rsId, ordered, resultSerializedAppenderFactory);
+        } catch (IOException e) {
+            throw new AlgebricksException(e);
+        }
+
+        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(resultWriter, null);
+    }
+
+    @Override
+    public IDataSourceIndex<String, AqlSourceId> findDataSourceIndex(String indexId, AqlSourceId dataSourceId)
+            throws AlgebricksException {
+        AqlDataSource ads = findDataSource(dataSourceId);
+        Dataset dataset = ads.getDataset();
+        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
+            throw new AlgebricksException("No index for external dataset " + dataSourceId);
+        }
+        try {
+            String indexName = (String) indexId;
+            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), indexName);
+            if (secondaryIndex != null) {
+                return new AqlIndex(secondaryIndex, dataset.getDataverseName(), dataset.getDatasetName(), this);
+            } else {
+                Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                        dataset.getDatasetName(), dataset.getDatasetName());
+                if (primaryIndex.getIndexName().equals(indexId)) {
+                    return new AqlIndex(primaryIndex, dataset.getDataverseName(), dataset.getDatasetName(), this);
+                } else {
+                    return null;
+                }
+            }
+        } catch (MetadataException me) {
+            throw new AlgebricksException(me);
+        }
+    }
+
+    public AqlDataSource lookupSourceInMetadata(AqlSourceId aqlId) throws AlgebricksException, MetadataException {
+        Dataset dataset = findDataset(aqlId.getDataverseName(), aqlId.getDatasetName());
+        if (dataset == null) {
+            throw new AlgebricksException("Datasource with id " + aqlId + " was not found.");
+        }
+        String tName = dataset.getItemTypeName();
+        IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, aqlId.getDataverseName(), tName).getDatatype();
+        return new AqlDataSource(aqlId, dataset, itemType);
+    }
+
+    @Override
+    public boolean scannerOperatorIsLeaf(IDataSource<AqlSourceId> dataSource) {
+        AqlSourceId asid = dataSource.getId();
+        String dataverseName = asid.getDataverseName();
+        String datasetName = asid.getDatasetName();
+        Dataset dataset = null;
+        try {
+            dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
+        } catch (MetadataException e) {
+            throw new IllegalStateException(e);
+        }
+
+        if (dataset == null) {
+            throw new IllegalArgumentException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+        return dataset.getDatasetType() == DatasetType.EXTERNAL;
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getWriteResultRuntime(
+            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, List<LogicalVariable> keys,
+            LogicalVariable payload, JobGenContext context, JobSpecification spec) throws AlgebricksException {
+        String dataverseName = dataSource.getId().getDataverseName();
+        String datasetName = dataSource.getId().getDatasetName();
+        int numKeys = keys.size();
+        // move key fields to front
+        int[] fieldPermutation = new int[numKeys + 1];
+        int[] bloomFilterKeyFields = new int[numKeys];
+        // System.arraycopy(keys, 0, fieldPermutation, 0, numKeys);
+        int i = 0;
+        for (LogicalVariable varKey : keys) {
+            int idx = propagatedSchema.findVariable(varKey);
+            fieldPermutation[i] = idx;
+            bloomFilterKeyFields[i] = i;
+            i++;
+        }
+        fieldPermutation[numKeys] = propagatedSchema.findVariable(payload);
+
+        Dataset dataset = findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+
+        try {
+            Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), dataset.getDatasetName());
+            String indexName = primaryIndex.getIndexName();
+
+            String itemTypeName = dataset.getItemTypeName();
+            ARecordType itemType = (ARecordType) MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
+                    dataset.getDataverseName(), itemTypeName).getDatatype();
+            ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
+            IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
+                    itemType, context.getBinaryComparatorFactoryProvider());
+
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+                    dataSource.getId().getDataverseName(), datasetName, indexName);
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+
+            String numElementsHintString = dataset.getHints().get("CARDINALITY");
+            long numElementsHint;
+            if (numElementsHintString == null) {
+                numElementsHint = DatasetCardinalityHint.DEFAULT;
+            } else {
+                numElementsHint = Long.parseLong(dataset.getHints().get("CARDINALITY"));
+            }
+
+            //TODO
+            //figure out the right behavior of the bulkload and then give the right callback
+            //(ex. what's the expected behavior when there is an error during bulkload?)
+            TreeIndexBulkLoadOperatorDescriptor btreeBulkLoad = new TreeIndexBulkLoadOperatorDescriptor(spec,
+                    appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(),
+                    splitsAndConstraint.first, typeTraits, comparatorFactories, bloomFilterKeyFields, fieldPermutation,
+                    GlobalConfig.DEFAULT_BTREE_FILL_FACTOR, false, numElementsHint, new LSMBTreeDataflowHelperFactory(
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
+                    NoOpOperationCallbackFactory.INSTANCE);
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeBulkLoad,
+                    splitsAndConstraint.second);
+        } catch (MetadataException me) {
+            throw new AlgebricksException(me);
+        }
+    }
+
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInsertOrDeleteRuntime(IndexOperation indexOp,
+            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> keys, LogicalVariable payload, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification spec) throws AlgebricksException {
+        String datasetName = dataSource.getId().getDatasetName();
+        int numKeys = keys.size();
+        // Move key fields to front.
+        int[] fieldPermutation = new int[numKeys + 1];
+        int[] bloomFilterKeyFields = new int[numKeys];
+        int i = 0;
+        for (LogicalVariable varKey : keys) {
+            int idx = propagatedSchema.findVariable(varKey);
+            fieldPermutation[i] = idx;
+            bloomFilterKeyFields[i] = i;
+            i++;
+        }
+        fieldPermutation[numKeys] = propagatedSchema.findVariable(payload);
+
+        Dataset dataset = findDataset(dataSource.getId().getDataverseName(), datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse "
+                    + dataSource.getId().getDataverseName());
+        }
+        try {
+            Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), dataset.getDatasetName());
+            String indexName = primaryIndex.getIndexName();
+
+            String itemTypeName = dataset.getItemTypeName();
+            ARecordType itemType = (ARecordType) MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
+                    dataSource.getId().getDataverseName(), itemTypeName).getDatatype();
+
+            ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
+
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+            IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
+                    itemType, context.getBinaryComparatorFactoryProvider());
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+                    dataSource.getId().getDataverseName(), datasetName, indexName);
+
+            //prepare callback
+            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
+            int datasetId = dataset.getDatasetId();
+            int[] primaryKeyFields = new int[numKeys];
+            for (i = 0; i < numKeys; i++) {
+                primaryKeyFields[i] = i;
+            }
+            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
+            PrimaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new PrimaryIndexModificationOperationCallbackFactory(
+                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE);
+
+            LSMTreeIndexInsertUpdateDeleteOperatorDescriptor btreeBulkLoad = new LSMTreeIndexInsertUpdateDeleteOperatorDescriptor(
+                    spec, recordDesc, appContext.getStorageManagerInterface(),
+                    appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits,
+                    comparatorFactories, bloomFilterKeyFields, fieldPermutation, indexOp,
+                    new LSMBTreeDataflowHelperFactory(AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES), null,
+                    modificationCallbackFactory);
+
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeBulkLoad,
+                    splitsAndConstraint.second);
+
+        } catch (MetadataException me) {
+            throw new AlgebricksException(me);
+        }
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInsertRuntime(
+            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> keys, LogicalVariable payload, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification spec) throws AlgebricksException {
+        return getInsertOrDeleteRuntime(IndexOperation.INSERT, dataSource, propagatedSchema, typeEnv, keys, payload,
+                recordDesc, context, spec);
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getDeleteRuntime(
+            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> keys, LogicalVariable payload, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification spec) throws AlgebricksException {
+        return getInsertOrDeleteRuntime(IndexOperation.DELETE, dataSource, propagatedSchema, typeEnv, keys, payload,
+                recordDesc, context, spec);
+    }
+
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexInsertOrDeleteRuntime(
+            IndexOperation indexOp, IDataSourceIndex<String, AqlSourceId> dataSourceIndex,
+            IOperatorSchema propagatedSchema, IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys, ILogicalExpression filterExpr,
+            RecordDescriptor recordDesc, JobGenContext context, JobSpecification spec) throws AlgebricksException {
+        String indexName = dataSourceIndex.getId();
+        String dataverseName = dataSourceIndex.getDataSource().getId().getDataverseName();
+        String datasetName = dataSourceIndex.getDataSource().getId().getDatasetName();
+
+        Dataset dataset = findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Unknown dataset " + datasetName);
+        }
+        Index secondaryIndex;
+        try {
+            secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), indexName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+        AsterixTupleFilterFactory filterFactory = createTupleFilterFactory(inputSchemas, typeEnv, filterExpr, context);
+        switch (secondaryIndex.getIndexType()) {
+            case BTREE: {
+                return getBTreeDmlRuntime(dataverseName, datasetName, indexName, propagatedSchema, typeEnv,
+                        primaryKeys, secondaryKeys, filterFactory, recordDesc, context, spec, indexOp);
+            }
+            case RTREE: {
+                return getRTreeDmlRuntime(dataverseName, datasetName, indexName, propagatedSchema, typeEnv,
+                        primaryKeys, secondaryKeys, filterFactory, recordDesc, context, spec, indexOp);
+            }
+            case WORD_INVIX:
+            case NGRAM_INVIX:
+            case FUZZY_WORD_INVIX:
+            case FUZZY_NGRAM_INVIX: {
+                return getInvertedIndexDmlRuntime(dataverseName, datasetName, indexName, propagatedSchema, typeEnv,
+                        primaryKeys, secondaryKeys, filterFactory, recordDesc, context, spec, indexOp,
+                        secondaryIndex.getIndexType());
+            }
+            default: {
+                throw new AlgebricksException("Insert and delete not implemented for index type: "
+                        + secondaryIndex.getIndexType());
+            }
+        }
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexInsertRuntime(
+            IDataSourceIndex<String, AqlSourceId> dataSourceIndex, IOperatorSchema propagatedSchema,
+            IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv, List<LogicalVariable> primaryKeys,
+            List<LogicalVariable> secondaryKeys, ILogicalExpression filterExpr, RecordDescriptor recordDesc,
+            JobGenContext context, JobSpecification spec) throws AlgebricksException {
+        return getIndexInsertOrDeleteRuntime(IndexOperation.INSERT, dataSourceIndex, propagatedSchema, inputSchemas,
+                typeEnv, primaryKeys, secondaryKeys, filterExpr, recordDesc, context, spec);
+    }
+
+    @Override
+    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexDeleteRuntime(
+            IDataSourceIndex<String, AqlSourceId> dataSourceIndex, IOperatorSchema propagatedSchema,
+            IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv, List<LogicalVariable> primaryKeys,
+            List<LogicalVariable> secondaryKeys, ILogicalExpression filterExpr, RecordDescriptor recordDesc,
+            JobGenContext context, JobSpecification spec) throws AlgebricksException {
+        return getIndexInsertOrDeleteRuntime(IndexOperation.DELETE, dataSourceIndex, propagatedSchema, inputSchemas,
+                typeEnv, primaryKeys, secondaryKeys, filterExpr, recordDesc, context, spec);
+    }
+
+    private AsterixTupleFilterFactory createTupleFilterFactory(IOperatorSchema[] inputSchemas,
+            IVariableTypeEnvironment typeEnv, ILogicalExpression filterExpr, JobGenContext context)
+            throws AlgebricksException {
+        // No filtering condition.
+        if (filterExpr == null) {
+            return null;
+        }
+        IExpressionRuntimeProvider expressionRuntimeProvider = context.getExpressionRuntimeProvider();
+        IScalarEvaluatorFactory filterEvalFactory = expressionRuntimeProvider.createEvaluatorFactory(filterExpr,
+                typeEnv, inputSchemas, context);
+        return new AsterixTupleFilterFactory(filterEvalFactory, context.getBinaryBooleanInspectorFactory());
+    }
+
+    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getBTreeDmlRuntime(String dataverseName,
+            String datasetName, String indexName, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys,
+            AsterixTupleFilterFactory filterFactory, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification spec, IndexOperation indexOp) throws AlgebricksException {
+
+        int numKeys = primaryKeys.size() + secondaryKeys.size();
+        // generate field permutations
+        int[] fieldPermutation = new int[numKeys];
+        int[] bloomFilterKeyFields = new int[secondaryKeys.size()];
+        int i = 0;
+        for (LogicalVariable varKey : secondaryKeys) {
+            int idx = propagatedSchema.findVariable(varKey);
+            fieldPermutation[i] = idx;
+            bloomFilterKeyFields[i] = i;
+            i++;
+        }
+        for (LogicalVariable varKey : primaryKeys) {
+            int idx = propagatedSchema.findVariable(varKey);
+            fieldPermutation[i] = idx;
+            i++;
+        }
+
+        Dataset dataset = findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+        String itemTypeName = dataset.getItemTypeName();
+        IAType itemType;
+        try {
+            itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(), itemTypeName)
+                    .getDatatype();
+
+            if (itemType.getTypeTag() != ATypeTag.RECORD) {
+                throw new AlgebricksException("Only record types can be indexed.");
+            }
+
+            ARecordType recType = (ARecordType) itemType;
+
+            // Index parameters.
+            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), indexName);
+
+            List<String> secondaryKeyExprs = secondaryIndex.getKeyFieldNames();
+            ITypeTraits[] typeTraits = new ITypeTraits[numKeys];
+            IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[numKeys];
+            for (i = 0; i < secondaryKeys.size(); ++i) {
+                Pair<IAType, Boolean> keyPairType = Index.getNonNullableKeyFieldType(secondaryKeyExprs.get(i)
+                        .toString(), recType);
+                IAType keyType = keyPairType.first;
+                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
+                        keyType, true);
+                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
+            }
+            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
+            for (String partitioningKey : partitioningKeys) {
+                IAType keyType = recType.getFieldType(partitioningKey);
+                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
+                        keyType, true);
+                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
+                ++i;
+            }
+
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+                    dataverseName, datasetName, indexName);
+
+            //prepare callback
+            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
+            int datasetId = dataset.getDatasetId();
+            int[] primaryKeyFields = new int[primaryKeys.size()];
+            i = 0;
+            for (LogicalVariable varKey : primaryKeys) {
+                int idx = propagatedSchema.findVariable(varKey);
+                primaryKeyFields[i] = idx;
+                i++;
+            }
+            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
+            SecondaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new SecondaryIndexModificationOperationCallbackFactory(
+                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE);
+
+            LSMTreeIndexInsertUpdateDeleteOperatorDescriptor btreeBulkLoad = new LSMTreeIndexInsertUpdateDeleteOperatorDescriptor(
+                    spec, recordDesc, appContext.getStorageManagerInterface(),
+                    appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits,
+                    comparatorFactories, bloomFilterKeyFields, fieldPermutation, indexOp,
+                    new LSMBTreeDataflowHelperFactory(AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
+                    filterFactory, modificationCallbackFactory);
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeBulkLoad,
+                    splitsAndConstraint.second);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        } catch (IOException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInvertedIndexDmlRuntime(String dataverseName,
+            String datasetName, String indexName, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys,
+            AsterixTupleFilterFactory filterFactory, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification spec, IndexOperation indexOp, IndexType indexType) throws AlgebricksException {
+
+        // Sanity checks.
+        if (primaryKeys.size() > 1) {
+            throw new AlgebricksException("Cannot create inverted index on dataset with composite primary key.");
+        }
+        if (secondaryKeys.size() > 1) {
+            throw new AlgebricksException("Cannot create composite inverted index on multiple fields.");
+        }
+
+        int numKeys = primaryKeys.size() + secondaryKeys.size();
+        // generate field permutations
+        int[] fieldPermutation = new int[numKeys];
+        int i = 0;
+        for (LogicalVariable varKey : secondaryKeys) {
+            int idx = propagatedSchema.findVariable(varKey);
+            fieldPermutation[i] = idx;
+            i++;
+        }
+        for (LogicalVariable varKey : primaryKeys) {
+            int idx = propagatedSchema.findVariable(varKey);
+            fieldPermutation[i] = idx;
+            i++;
+        }
+
+        boolean isPartitioned;
+        if (indexType == IndexType.FUZZY_WORD_INVIX || indexType == IndexType.FUZZY_NGRAM_INVIX) {
+            isPartitioned = true;
+        } else {
+            isPartitioned = false;
+        }
+
+        Dataset dataset = findDataset(dataverseName, datasetName);
+        if (dataset == null) {
+            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
+        }
+        String itemTypeName = dataset.getItemTypeName();
+        IAType itemType;
+        try {
+            itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(), itemTypeName)
+                    .getDatatype();
+
+            if (itemType.getTypeTag() != ATypeTag.RECORD) {
+                throw new AlgebricksException("Only record types can be indexed.");
+            }
+
+            ARecordType recType = (ARecordType) itemType;
+
+            // Index parameters.
+            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), indexName);
+
+            List<String> secondaryKeyExprs = secondaryIndex.getKeyFieldNames();
+
+            int numTokenFields = (!isPartitioned) ? secondaryKeys.size() : secondaryKeys.size() + 1;
+            ITypeTraits[] tokenTypeTraits = new ITypeTraits[numTokenFields];
+            ITypeTraits[] invListsTypeTraits = new ITypeTraits[primaryKeys.size()];
+            IBinaryComparatorFactory[] tokenComparatorFactories = new IBinaryComparatorFactory[numTokenFields];
+            IBinaryComparatorFactory[] invListComparatorFactories = new IBinaryComparatorFactory[primaryKeys.size()];
+
+            IAType secondaryKeyType = null;
+            for (i = 0; i < secondaryKeys.size(); ++i) {
+                Pair<IAType, Boolean> keyPairType = Index.getNonNullableKeyFieldType(secondaryKeyExprs.get(i)
+                        .toString(), recType);
+                secondaryKeyType = keyPairType.first;
+            }
+            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
+            i = 0;
+            for (String partitioningKey : partitioningKeys) {
+                IAType keyType = recType.getFieldType(partitioningKey);
+                invListsTypeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
+                ++i;
+            }
+
+            tokenComparatorFactories[0] = NonTaggedFormatUtil.getTokenBinaryComparatorFactory(secondaryKeyType);
+            tokenTypeTraits[0] = NonTaggedFormatUtil.getTokenTypeTrait(secondaryKeyType);
+            if (isPartitioned) {
+                // The partitioning field is hardcoded to be a short *without* an Asterix type tag.
+                tokenComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
+                tokenTypeTraits[1] = ShortPointable.TYPE_TRAITS;
+            }
+            IBinaryTokenizerFactory tokenizerFactory = NonTaggedFormatUtil.getBinaryTokenizerFactory(
+                    secondaryKeyType.getTypeTag(), indexType, secondaryIndex.getGramLength());
+
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+                    dataverseName, datasetName, indexName);
+
+            //prepare callback
+            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
+            int datasetId = dataset.getDatasetId();
+            int[] primaryKeyFields = new int[primaryKeys.size()];
+            i = 0;
+            for (LogicalVariable varKey : primaryKeys) {
+                int idx = propagatedSchema.findVariable(varKey);
+                primaryKeyFields[i] = idx;
+                i++;
+            }
+            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
+            SecondaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new SecondaryIndexModificationOperationCallbackFactory(
+                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_INVERTED_INDEX);
+
+            LSMInvertedIndexInsertUpdateDeleteOperator insertDeleteOp = new LSMInvertedIndexInsertUpdateDeleteOperator(
+                    spec, recordDesc, appContext.getStorageManagerInterface(), splitsAndConstraint.first,
+                    appContext.getIndexLifecycleManagerProvider(), tokenTypeTraits, tokenComparatorFactories,
+                    invListsTypeTraits, invListComparatorFactories, tokenizerFactory, fieldPermutation, indexOp,
+                    new LSMInvertedIndexDataflowHelperFactory(
+                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
+                    filterFactory, modificationCallbackFactory);
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(insertDeleteOp,
+                    splitsAndConstraint.second);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        } catch (IOException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getRTreeDmlRuntime(String dataverseName,
+            String datasetName, String indexName, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
+            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys,
+            AsterixTupleFilterFactory filterFactory, RecordDescriptor recordDesc, JobGenContext context,
+            JobSpecification spec, IndexOperation indexOp) throws AlgebricksException {
+        try {
+            Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
+            String itemTypeName = dataset.getItemTypeName();
+            IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, itemTypeName).getDatatype();
+            if (itemType.getTypeTag() != ATypeTag.RECORD) {
+                throw new AlgebricksException("Only record types can be indexed.");
+            }
+            ARecordType recType = (ARecordType) itemType;
+            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
+                    dataset.getDatasetName(), indexName);
+            List<String> secondaryKeyExprs = secondaryIndex.getKeyFieldNames();
+            Pair<IAType, Boolean> keyPairType = Index.getNonNullableKeyFieldType(secondaryKeyExprs.get(0), recType);
+            IAType spatialType = keyPairType.first;
+            int dimension = NonTaggedFormatUtil.getNumDimensions(spatialType.getTypeTag());
+            int numSecondaryKeys = dimension * 2;
+            int numPrimaryKeys = primaryKeys.size();
+            int numKeys = numSecondaryKeys + numPrimaryKeys;
+            ITypeTraits[] typeTraits = new ITypeTraits[numKeys];
+            IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[numKeys];
+            int[] fieldPermutation = new int[numKeys];
+            int i = 0;
+
+            for (LogicalVariable varKey : secondaryKeys) {
+                int idx = propagatedSchema.findVariable(varKey);
+                fieldPermutation[i] = idx;
+                i++;
+            }
+            for (LogicalVariable varKey : primaryKeys) {
+                int idx = propagatedSchema.findVariable(varKey);
+                fieldPermutation[i] = idx;
+                i++;
+            }
+            IAType nestedKeyType = NonTaggedFormatUtil.getNestedSpatialType(spatialType.getTypeTag());
+            IPrimitiveValueProviderFactory[] valueProviderFactories = new IPrimitiveValueProviderFactory[numSecondaryKeys];
+            for (i = 0; i < numSecondaryKeys; i++) {
+                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
+                        nestedKeyType, true);
+                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(nestedKeyType);
+                valueProviderFactories[i] = AqlPrimitiveValueProviderFactory.INSTANCE;
+            }
+            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
+            for (String partitioningKey : partitioningKeys) {
+                IAType keyType = recType.getFieldType(partitioningKey);
+                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
+                        keyType, true);
+                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
+                ++i;
+            }
+
+            IBinaryComparatorFactory[] primaryComparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(
+                    dataset, recType, context.getBinaryComparatorFactoryProvider());
+            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
+            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+                    dataverseName, datasetName, indexName);
+
+            //prepare callback
+            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
+            int datasetId = dataset.getDatasetId();
+            int[] primaryKeyFields = new int[numPrimaryKeys];
+            i = 0;
+            for (LogicalVariable varKey : primaryKeys) {
+                int idx = propagatedSchema.findVariable(varKey);
+                primaryKeyFields[i] = idx;
+                i++;
+            }
+            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
+            SecondaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new SecondaryIndexModificationOperationCallbackFactory(
+                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_RTREE);
+
+            LSMTreeIndexInsertUpdateDeleteOperatorDescriptor rtreeUpdate = new LSMTreeIndexInsertUpdateDeleteOperatorDescriptor(
+                    spec, recordDesc, appContext.getStorageManagerInterface(),
+                    appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits,
+                    comparatorFactories, null, fieldPermutation, indexOp, new LSMRTreeDataflowHelperFactory(
+                            valueProviderFactories, RTreePolicyType.RTREE, primaryComparatorFactories,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
+                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER, proposeLinearizer(
+                                    nestedKeyType.getTypeTag(), comparatorFactories.length),
+                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
+                    filterFactory, modificationCallbackFactory);
+            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(rtreeUpdate, splitsAndConstraint.second);
+        } catch (MetadataException | IOException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public JobId getJobId() {
+        return jobId;
+    }
+
+    public static ITreeIndexFrameFactory createBTreeNSMInteriorFrameFactory(ITypeTraits[] typeTraits) {
+        return new BTreeNSMInteriorFrameFactory(new TypeAwareTupleWriterFactory(typeTraits));
+    }
+
+    public static ILinearizeComparatorFactory proposeLinearizer(ATypeTag keyType, int numKeyFields)
+            throws AlgebricksException {
+        if (numKeyFields / 2 == 2 && (keyType == ATypeTag.DOUBLE)) {
+            return new HilbertDoubleComparatorFactory(2);
+        } else if (keyType == ATypeTag.DOUBLE) {
+            return new ZCurveDoubleComparatorFactory(numKeyFields / 2);
+        } else if (keyType == ATypeTag.INT8 || keyType == ATypeTag.INT16 || keyType == ATypeTag.INT32
+                || keyType == ATypeTag.INT64) {
+            return new ZCurveIntComparatorFactory(numKeyFields / 2);
+        } else {
+            throw new AlgebricksException("Cannot propose linearizer for key with type " + keyType + ".");
+        }
+    }
+
+    @Override
+    public IFunctionInfo lookupFunction(FunctionIdentifier fid) {
+        return AsterixBuiltinFunctions.lookupFunction(fid);
+    }
+
+    public Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
+            String dataverseName, String datasetName, String targetIdxName) throws AlgebricksException {
+        FileSplit[] splits = splitsForInternalOrFeedDataset(mdTxnCtx, dataverseName, datasetName, targetIdxName);
+        IFileSplitProvider splitProvider = new ConstantFileSplitProvider(splits);
+        String[] loc = new String[splits.length];
+        for (int p = 0; p < splits.length; p++) {
+            loc[p] = splits[p].getNodeName();
+        }
+        AlgebricksPartitionConstraint pc = new AlgebricksAbsolutePartitionConstraint(loc);
+        return new Pair<IFileSplitProvider, AlgebricksPartitionConstraint>(splitProvider, pc);
+    }
+
+    private FileSplit[] splitsForInternalOrFeedDataset(MetadataTransactionContext mdTxnCtx, String dataverseName,
+            String datasetName, String targetIdxName) throws AlgebricksException {
+
+        try {
+            File relPathFile = new File(getRelativePath(dataverseName, datasetName + "_idx_" + targetIdxName));
+            Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
+            if (dataset.getDatasetType() != DatasetType.INTERNAL & dataset.getDatasetType() != DatasetType.FEED) {
+                throw new AlgebricksException("Not an internal or feed dataset");
+            }
+            InternalDatasetDetails datasetDetails = (InternalDatasetDetails) dataset.getDatasetDetails();
+            List<String> nodeGroup = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, datasetDetails.getNodeGroupName())
+                    .getNodeNames();
+            if (nodeGroup == null) {
+                throw new AlgebricksException("Couldn't find node group " + datasetDetails.getNodeGroupName());
+            }
+
+            List<FileSplit> splitArray = new ArrayList<FileSplit>();
+            for (String nd : nodeGroup) {
+                String[] nodeStores = stores.get(nd);
+                if (nodeStores == null) {
+                    LOGGER.warning("Node " + nd + " has no stores.");
+                    throw new AlgebricksException("Node " + nd + " has no stores.");
+                } else {
+                    for (int j = 0; j < nodeStores.length; j++) {
+                        File f = new File(nodeStores[j] + File.separator + relPathFile);
+                        splitArray.add(new FileSplit(nd, new FileReference(f)));
+                    }
+                }
+            }
+            FileSplit[] splits = new FileSplit[splitArray.size()];
+            int i = 0;
+            for (FileSplit fs : splitArray) {
+                splits[i++] = fs;
+            }
+            return splits;
+        } catch (MetadataException me) {
+            throw new AlgebricksException(me);
+        }
+    }
+
+    private static Map<String, String> initializeAdapterFactoryMapping() {
+        Map<String, String> adapterFactoryMapping = new HashMap<String, String>();
+        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter",
+                "edu.uci.ics.asterix.external.adapter.factory.NCFileSystemAdapterFactory");
+        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.HDFSAdapter",
+                "edu.uci.ics.asterix.external.adapter.factory.HDFSAdapterFactory");
+        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.PullBasedTwitterAdapter",
+                "edu.uci.ics.asterix.external.dataset.adapter.PullBasedTwitterAdapterFactory");
+        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.RSSFeedAdapter",
+                "edu.uci.ics.asterix.external.dataset.adapter..RSSFeedAdapterFactory");
+        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.CNNFeedAdapter",
+                "edu.uci.ics.asterix.external.dataset.adapter.CNNFeedAdapterFactory");
+        return adapterFactoryMapping;
+    }
+
+    public DatasourceAdapter getAdapter(MetadataTransactionContext mdTxnCtx, String dataverseName, String adapterName)
+            throws MetadataException {
+        DatasourceAdapter adapter = null;
+        // search in default namespace (built-in adapter)
+        adapter = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, MetadataConstants.METADATA_DATAVERSE_NAME, adapterName);
+
+        // search in dataverse (user-defined adapter)
+        if (adapter == null) {
+            adapter = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, dataverseName, adapterName);
+        }
+        return adapter;
+    }
+
+    private static String getRelativePath(String dataverseName, String fileName) {
+        return dataverseName + File.separator + fileName;
+    }
+
+    public Pair<IFileSplitProvider, IFileSplitProvider> getInvertedIndexFileSplitProviders(
+            IFileSplitProvider splitProvider) {
+        int numSplits = splitProvider.getFileSplits().length;
+        FileSplit[] btreeSplits = new FileSplit[numSplits];
+        FileSplit[] invListsSplits = new FileSplit[numSplits];
+        for (int i = 0; i < numSplits; i++) {
+            String nodeName = splitProvider.getFileSplits()[i].getNodeName();
+            String path = splitProvider.getFileSplits()[i].getLocalFile().getFile().getPath();
+            btreeSplits[i] = new FileSplit(nodeName, path + "_$btree");
+            invListsSplits[i] = new FileSplit(nodeName, path + "_$invlists");
+        }
+        return new Pair<IFileSplitProvider, IFileSplitProvider>(new ConstantFileSplitProvider(btreeSplits),
+                new ConstantFileSplitProvider(invListsSplits));
+    }
+
+    public Dataset findDataset(String dataverse, String dataset) throws AlgebricksException {
+        try {
+            return MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverse, dataset);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public IAType findType(String dataverse, String typeName) {
+        Datatype type;
+        try {
+            type = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverse, typeName);
+        } catch (Exception e) {
+            throw new IllegalStateException();
+        }
+        if (type == null) {
+            throw new IllegalStateException();
+        }
+        return type.getDatatype();
+    }
+
+    public List<Index> getDatasetIndexes(String dataverseName, String datasetName) throws AlgebricksException {
+        try {
+            return MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
+        } catch (MetadataException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    public AlgebricksPartitionConstraint getClusterLocations() {
+        ArrayList<String> locs = new ArrayList<String>();
+        for (String k : stores.keySet()) {
+            String[] nodeStores = stores.get(k);
+            for (int j = 0; j < nodeStores.length; j++) {
+                locs.add(k);
+            }
+        }
+        String[] cluster = new String[locs.size()];
+        cluster = locs.toArray(cluster);
+        return new AlgebricksAbsolutePartitionConstraint(cluster);
+    }
+
+    public IDataFormat getFormat() {
+        return FormatUtils.getDefaultFormat();
+    }
+
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlSourceId.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlSourceId.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlSourceId.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlSourceId.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ExternalFeedDataSource.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ExternalFeedDataSource.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ExternalFeedDataSource.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ExternalFeedDataSource.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitDataSink.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitDataSink.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitDataSink.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitDataSink.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitSinkId.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitSinkId.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitSinkId.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/FileSplitSinkId.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetDataSink.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetDataSink.java
new file mode 100644
index 0000000..ad91111
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetDataSink.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.declared;
+
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSink;
+import edu.uci.ics.hyracks.algebricks.core.algebra.properties.IPartitioningProperty;
+import edu.uci.ics.hyracks.algebricks.core.algebra.properties.RandomPartitioningProperty;
+import edu.uci.ics.hyracks.algebricks.core.algebra.properties.ResultSetDomain;
+
+public class ResultSetDataSink implements IDataSink {
+
+    private ResultSetSinkId id;
+    private Object[] schemaTypes;
+
+    public ResultSetDataSink(ResultSetSinkId id, Object[] schemaTypes) {
+        this.id = id;
+        this.schemaTypes = schemaTypes;
+    }
+
+    @Override
+    public ResultSetSinkId getId() {
+        return id;
+    }
+
+    @Override
+    public Object[] getSchemaTypes() {
+        return schemaTypes;
+    }
+
+    @Override
+    public IPartitioningProperty getPartitioningProperty() {
+        return new RandomPartitioningProperty(new ResultSetDomain());
+    }
+}
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetSinkId.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetSinkId.java
new file mode 100644
index 0000000..1eb4336
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetSinkId.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.metadata.declared;
+
+import edu.uci.ics.hyracks.api.dataset.ResultSetId;
+
+public class ResultSetSinkId {
+
+    private final ResultSetId resultSetId;
+
+    public ResultSetSinkId(ResultSetId resultSetId) {
+        this.resultSetId = resultSetId;
+    }
+
+    @Override
+    public String toString() {
+        return "ResultSetId: " + resultSetId;
+    }
+
+    public ResultSetId getResultSetId() {
+        return resultSetId;
+    }
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/AsterixBuiltinTypeMap.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataset.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataset.java
new file mode 100644
index 0000000..070e6ea
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataset.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.entities;
+
+import java.util.Map;
+
+import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
+import edu.uci.ics.asterix.metadata.IDatasetDetails;
+import edu.uci.ics.asterix.metadata.MetadataCache;
+import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
+
+/**
+ * Metadata describing a dataset.
+ */
+public class Dataset implements IMetadataEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    private final String dataverseName;
+    // Enforced to be unique within a dataverse.
+    private final String datasetName;
+    // Type of items stored in this dataset.
+    private final String itemTypeName;
+    private final DatasetType datasetType;
+    private final IDatasetDetails datasetDetails;
+    // Hints related to cardinatlity of dataset, avg size of tuples etc.
+    private final Map<String, String> hints;
+    private final int datasetId;
+    // Type of pending operations with respect to atomic DDL operation
+    private int pendingOp;
+
+    public Dataset(String dataverseName, String datasetName, String itemTypeName, IDatasetDetails datasetDetails,
+            Map<String, String> hints, DatasetType datasetType, int datasetId, int pendingOp) {
+        this.dataverseName = dataverseName;
+        this.datasetName = datasetName;
+        this.itemTypeName = itemTypeName;
+        this.datasetType = datasetType;
+        this.datasetDetails = datasetDetails;
+        this.datasetId = datasetId;
+        this.pendingOp = pendingOp;
+        this.hints = hints;
+    }
+
+    public String getDataverseName() {
+        return dataverseName;
+    }
+
+    public String getDatasetName() {
+        return datasetName;
+    }
+
+    public String getItemTypeName() {
+        return itemTypeName;
+    }
+
+    public DatasetType getDatasetType() {
+        return datasetType;
+    }
+
+    public IDatasetDetails getDatasetDetails() {
+        return datasetDetails;
+    }
+
+    public Map<String, String> getHints() {
+        return hints;
+    }
+
+    public int getDatasetId() {
+        return datasetId;
+    }
+
+    public int getPendingOp() {
+        return pendingOp;
+    }
+
+    public void setPendingOp(int pendingOp) {
+        this.pendingOp = pendingOp;
+    }
+
+    @Override
+    public Object addToCache(MetadataCache cache) {
+        return cache.addDatasetIfNotExists(this);
+    }
+
+    @Override
+    public Object dropFromCache(MetadataCache cache) {
+        return cache.dropDataset(this);
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (this == other) {
+            return true;
+        }
+        if (!(other instanceof Dataset)) {
+            return false;
+        }
+        Dataset otherDataset = (Dataset) other;
+        if (!otherDataset.dataverseName.equals(dataverseName)) {
+            return false;
+        }
+        if (!otherDataset.datasetName.equals(datasetName)) {
+            return false;
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/DatasourceAdapter.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/DatasourceAdapter.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/DatasourceAdapter.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/DatasourceAdapter.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Datatype.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Datatype.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Datatype.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Datatype.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataverse.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataverse.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataverse.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataverse.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/ExternalDatasetDetails.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/ExternalDatasetDetails.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/ExternalDatasetDetails.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/ExternalDatasetDetails.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/FeedDatasetDetails.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/FeedDatasetDetails.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/FeedDatasetDetails.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/FeedDatasetDetails.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Function.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Function.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Function.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Function.java
diff --git a/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Index.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Index.java
new file mode 100644
index 0000000..aa29e5b
--- /dev/null
+++ b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Index.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.metadata.entities;
+
+import java.util.List;
+
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.metadata.MetadataCache;
+import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
+
+/**
+ * Metadata describing an index.
+ */
+public class Index implements IMetadataEntity {
+
+    private static final long serialVersionUID = 1L;
+
+    private final String dataverseName;
+    // Enforced to be unique within a dataverse.
+    private final String datasetName;
+    // Enforced to be unique within a dataverse, dataset combination.
+    private final String indexName;
+    private final IndexType indexType;
+    private final List<String> keyFieldNames;
+    private final boolean isPrimaryIndex;
+    // Specific to NGRAM indexes.
+    private final int gramLength;
+    // Type of pending operations with respect to atomic DDL operation
+    private int pendingOp;
+
+    public Index(String dataverseName, String datasetName, String indexName, IndexType indexType,
+            List<String> keyFieldNames, int gramLength, boolean isPrimaryIndex, int pendingOp) {
+        this.dataverseName = dataverseName;
+        this.datasetName = datasetName;
+        this.indexName = indexName;
+        this.indexType = indexType;
+        this.keyFieldNames = keyFieldNames;
+        this.gramLength = gramLength;
+        this.isPrimaryIndex = isPrimaryIndex;
+        this.pendingOp = pendingOp;
+    }
+
+    public Index(String dataverseName, String datasetName, String indexName, IndexType indexType,
+            List<String> keyFieldNames, boolean isPrimaryIndex, int pendingOp) {
+        this.dataverseName = dataverseName;
+        this.datasetName = datasetName;
+        this.indexName = indexName;
+        this.indexType = indexType;
+        this.keyFieldNames = keyFieldNames;
+        this.gramLength = -1;
+        this.isPrimaryIndex = isPrimaryIndex;
+        this.pendingOp = pendingOp;
+    }
+
+    public String getDataverseName() {
+        return dataverseName;
+    }
+
+    public String getDatasetName() {
+        return datasetName;
+    }
+
+    public String getIndexName() {
+        return indexName;
+    }
+
+    public List<String> getKeyFieldNames() {
+        return keyFieldNames;
+    }
+
+    public int getGramLength() {
+        return gramLength;
+    }
+
+    public IndexType getIndexType() {
+        return indexType;
+    }
+
+    public boolean isPrimaryIndex() {
+        return isPrimaryIndex;
+    }
+    
+    public int getPendingOp() {
+        return pendingOp;
+    }
+    
+    public void setPendingOp(int pendingOp) {
+        this.pendingOp = pendingOp;
+    }
+
+    public boolean isSecondaryIndex() {
+        return !isPrimaryIndex();
+    }
+
+    public static Pair<IAType, Boolean> getNonNullableKeyFieldType(String expr, ARecordType recType)
+            throws AlgebricksException {
+        IAType keyType = Index.keyFieldType(expr, recType);
+        boolean nullable = false;
+        if (keyType.getTypeTag() == ATypeTag.UNION) {
+            AUnionType unionType = (AUnionType) keyType;
+            if (unionType.isNullableType()) {
+                // The non-null type is always at index 1.
+                keyType = unionType.getUnionList().get(1);
+                nullable = true;
+            }
+        }
+        return new Pair<IAType, Boolean>(keyType, nullable);
+    }
+
+    private static IAType keyFieldType(String expr, ARecordType recType) throws AlgebricksException {
+        String[] names = recType.getFieldNames();
+        int n = names.length;
+        for (int i = 0; i < n; i++) {
+            if (names[i].equals(expr)) {
+                return recType.getFieldTypes()[i];
+            }
+        }
+        throw new AlgebricksException("Could not find field " + expr + " in the schema.");
+    }
+
+    @Override
+    public int hashCode() {
+        return indexName.hashCode() ^ datasetName.hashCode() ^ dataverseName.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof Index)) {
+            return false;
+        }
+        Index otherIndex = (Index) other;
+        if (!indexName.equals(otherIndex.getIndexName())) {
+            return false;
+        }
+        if (!datasetName.equals(otherIndex.getDatasetName())) {
+            return false;
+        }
+        if (!dataverseName.equals(otherIndex.getDataverseName())) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public Object addToCache(MetadataCache cache) {
+        return cache.addIndexIfNotExists(this);
+    }
+
+    @Override
+    public Object dropFromCache(MetadataCache cache) {
+        return cache.dropIndex(this);
+    }
+}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/InternalDatasetDetails.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/InternalDatasetDetails.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/InternalDatasetDetails.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/InternalDatasetDetails.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Node.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Node.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Node.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Node.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/NodeGroup.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/NodeGroup.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/NodeGroup.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/NodeGroup.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/AbstractTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasetTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatasourceAdapterTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DatatypeTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/DataverseTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/FunctionTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/IndexTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeGroupTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeGroupTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeGroupTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeGroupTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeTupleTranslator.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeTupleTranslator.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeTupleTranslator.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entitytupletranslators/NodeTupleTranslator.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/functions/MetadataBuiltinFunctions.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/functions/MetadataBuiltinFunctions.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/functions/MetadataBuiltinFunctions.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/functions/MetadataBuiltinFunctions.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/utils/DatasetUtils.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/utils/DatasetUtils.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/utils/DatasetUtils.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/utils/DatasetUtils.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatasetNameValueExtractor.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatasetNameValueExtractor.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatasetNameValueExtractor.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatasetNameValueExtractor.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatatypeNameValueExtractor.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatatypeNameValueExtractor.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatatypeNameValueExtractor.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/DatatypeNameValueExtractor.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/MetadataEntityValueExtractor.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/MetadataEntityValueExtractor.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/MetadataEntityValueExtractor.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/MetadataEntityValueExtractor.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/NestedDatatypeNameValueExtractor.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/NestedDatatypeNameValueExtractor.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/NestedDatatypeNameValueExtractor.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/NestedDatatypeNameValueExtractor.java
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/TupleCopyValueExtractor.java b/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/TupleCopyValueExtractor.java
similarity index 100%
rename from asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/TupleCopyValueExtractor.java
rename to asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/valueextractors/TupleCopyValueExtractor.java
diff --git a/asterix-om/pom.xml b/asterix-om/pom.xml
new file mode 100644
index 0000000..f7ef8d3
--- /dev/null
+++ b/asterix-om/pom.xml
@@ -0,0 +1,45 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-om</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-common</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
+		</dependency>
+        <dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>algebricks-compiler</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/AbstractListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/AbstractListBuilder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/AbstractListBuilder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/builders/AbstractListBuilder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAsterixListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAsterixListBuilder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAsterixListBuilder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAsterixListBuilder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementToken.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementToken.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementToken.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementToken.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementTokenFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementTokenFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementTokenFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AListElementTokenFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizerFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizerFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizerFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AOrderedListBinaryTokenizerFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizerFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizerFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizerFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AUnorderedListBinaryTokenizerFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlExpressionTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlExpressionTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlExpressionTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlExpressionTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlMergeAggregationExpressionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlMergeAggregationExpressionFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlMergeAggregationExpressionFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlMergeAggregationExpressionFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlNullableTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlPartialAggregationTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlPartialAggregationTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlPartialAggregationTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/AqlPartialAggregationTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/IBinaryTokenizerFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/IBinaryTokenizerFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/IBinaryTokenizerFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/IBinaryTokenizerFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/SerializationUtil.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/SerializationUtil.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/SerializationUtil.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/common/SerializationUtil.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/AqlNullWriterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/AqlNullWriterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/AqlNullWriterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/AqlNullWriterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/Coordinate.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/Coordinate.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/Coordinate.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/Coordinate.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateOrTimeAscBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateOrTimeAscBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateOrTimeAscBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateOrTimeAscBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateTimeAscBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateTimeAscBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateTimeAscBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/ADateTimeAscBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/AObjectDescBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/BooleanBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/LongBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/RectangleBinaryComparatorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/RectangleBinaryComparatorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/RectangleBinaryComparatorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/comparators/RectangleBinaryComparatorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/AObjectBinaryHashFunctionFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/BooleanBinaryHashFunctionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/BooleanBinaryHashFunctionFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/BooleanBinaryHashFunctionFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/BooleanBinaryHashFunctionFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/DoubleBinaryHashFunctionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/DoubleBinaryHashFunctionFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/DoubleBinaryHashFunctionFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/DoubleBinaryHashFunctionFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/LongBinaryHashFunctionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/LongBinaryHashFunctionFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/LongBinaryHashFunctionFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/LongBinaryHashFunctionFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/MurmurHash3BinaryHashFunctionFamily.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/MurmurHash3BinaryHashFunctionFamily.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/MurmurHash3BinaryHashFunctionFamily.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/MurmurHash3BinaryHashFunctionFamily.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/RectangleBinaryHashFunctionFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/RectangleBinaryHashFunctionFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/RectangleBinaryHashFunctionFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/hash/RectangleBinaryHashFunctionFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedAscNormalizedKeyComputerFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedDescNormalizedKeyComputerFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedDescNormalizedKeyComputerFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedDescNormalizedKeyComputerFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/keynormalizers/AWrappedDescNormalizedKeyComputerFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ABooleanPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ACirclePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADatePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADateTimePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADoublePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ADurationPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AFloatPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt16PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt32PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt64PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AInt8PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AIntervalPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ALinePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullableFieldPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullableFieldPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullableFieldPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ANullableFieldPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AObjectPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AOrderedlistPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AOrderedlistPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AOrderedlistPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AOrderedlistPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APoint3DPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APointPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/APolygonPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARecordPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARecordPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARecordPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARecordPrinterFactory.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinter.java
new file mode 100644
index 0000000..f83118b
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinter.java
@@ -0,0 +1,30 @@
+package edu.uci.ics.asterix.dataflow.data.nontagged.printers;
+
+import java.io.PrintStream;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.data.IPrinter;
+
+public class ARectanglePrinter implements IPrinter {
+
+    public static final ARectanglePrinter INSTANCE = new ARectanglePrinter();
+
+    @Override
+    public void init() {
+
+    }
+
+    @Override
+    public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
+        ps.print("rectangle(\"");
+        ps.print(ADoubleSerializerDeserializer.getDouble(b, s + 1));
+        ps.print(",");
+        ps.print(ADoubleSerializerDeserializer.getDouble(b, s + 9));
+        ps.print(" ");
+        ps.print(ADoubleSerializerDeserializer.getDouble(b, s + 17));
+        ps.print(",");
+        ps.print(ADoubleSerializerDeserializer.getDouble(b, s + 25));
+        ps.print("\")");
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AStringPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ATimePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnionPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnionPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnionPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnionPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnorderedlistPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnorderedlistPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnorderedlistPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/AUnorderedlistPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ABooleanPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ACirclePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADatePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADateTimePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADoublePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ADurationPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AFloatPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt16PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt32PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt64PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8Printer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8Printer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8Printer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8Printer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8PrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8PrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8PrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AInt8PrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ALinePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullableFieldPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullableFieldPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullableFieldPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ANullableFieldPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AObjectPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AOrderedlistPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AOrderedlistPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AOrderedlistPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AOrderedlistPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APoint3DPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APointPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/APolygonPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARecordPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARecordPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARecordPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARecordPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ARectanglePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AStringPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/ATimePrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnionPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnionPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnionPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnionPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnorderedlistPrinterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnorderedlistPrinterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnorderedlistPrinterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/json/AUnorderedlistPrinterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ABooleanSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ABooleanSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ABooleanSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ABooleanSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ACircleSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ACircleSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ACircleSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ACircleSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADateTimeSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADoubleSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADoubleSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADoubleSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADoubleSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ADurationSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AFloatSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AFloatSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AFloatSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AFloatSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt16SerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt16SerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt16SerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt16SerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt32SerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt32SerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt32SerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt32SerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt64SerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt64SerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt64SerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt64SerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt8SerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt8SerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt8SerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AInt8SerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AIntervalSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ALineSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ALineSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ALineSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ALineSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ANullSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ANullSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ANullSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ANullSerializerDeserializer.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
new file mode 100644
index 0000000..2e4f72c
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
@@ -0,0 +1,237 @@
+package edu.uci.ics.asterix.dataflow.data.nontagged.serde;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.om.base.ABoolean;
+import edu.uci.ics.asterix.om.base.ACircle;
+import edu.uci.ics.asterix.om.base.ADate;
+import edu.uci.ics.asterix.om.base.ADateTime;
+import edu.uci.ics.asterix.om.base.ADouble;
+import edu.uci.ics.asterix.om.base.ADuration;
+import edu.uci.ics.asterix.om.base.AFloat;
+import edu.uci.ics.asterix.om.base.AInt16;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AInt64;
+import edu.uci.ics.asterix.om.base.AInt8;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.ALine;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.AOrderedList;
+import edu.uci.ics.asterix.om.base.APoint;
+import edu.uci.ics.asterix.om.base.APoint3D;
+import edu.uci.ics.asterix.om.base.APolygon;
+import edu.uci.ics.asterix.om.base.ARecord;
+import edu.uci.ics.asterix.om.base.ARectangle;
+import edu.uci.ics.asterix.om.base.AString;
+import edu.uci.ics.asterix.om.base.ATime;
+import edu.uci.ics.asterix.om.base.AUnorderedList;
+import edu.uci.ics.asterix.om.base.IAObject;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+public class AObjectSerializerDeserializer implements ISerializerDeserializer<IAObject> {
+
+    private static final long serialVersionUID = 1L;
+
+    public static final AObjectSerializerDeserializer INSTANCE = new AObjectSerializerDeserializer();
+
+    private AObjectSerializerDeserializer() {
+    }
+
+    @Override
+    public IAObject deserialize(DataInput in) throws HyracksDataException {
+        ATypeTag typeTag = SerializerDeserializerUtil.deserializeTag(in);
+        switch (typeTag) {
+            case NULL: {
+                return ANullSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case BOOLEAN: {
+                return ABooleanSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case INT8: {
+                return AInt8SerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case INT16: {
+                return AInt16SerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case INT32: {
+                return AInt32SerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case INT64: {
+                return AInt64SerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case FLOAT: {
+                return AFloatSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case DOUBLE: {
+                return ADoubleSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case STRING: {
+                return AStringSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case DATE: {
+                return ADateSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case TIME: {
+                return ATimeSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case DATETIME: {
+                return ADateTimeSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case DURATION: {
+                return ADurationSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case INTERVAL: {
+                return AIntervalSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case POINT: {
+                return APointSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case POINT3D: {
+                return APoint3DSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case LINE: {
+                return ALineSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case RECTANGLE: {
+                return ARectangleSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case POLYGON: {
+                return APolygonSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case CIRCLE: {
+                return ACircleSerializerDeserializer.INSTANCE.deserialize(in);
+            }
+            case RECORD: {
+                return ARecordSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
+            }
+            case ORDEREDLIST: {
+                return AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
+            }
+            case UNORDEREDLIST: {
+                return AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
+            }
+            // case TYPE: {
+            // return AUnorderedListBytesConverter.INSTANCE.deserialize(in);
+            // }
+            default: {
+                throw new NotImplementedException("No serializer/deserializer implemented for type " + typeTag + " .");
+            }
+        }
+    }
+
+    @Override
+    public void serialize(IAObject instance, DataOutput out) throws HyracksDataException {
+        IAType t = instance.getType();
+        ATypeTag tag = t.getTypeTag();
+        try {
+            out.writeByte(tag.serialize());
+        } catch (IOException e) {
+            throw new HyracksDataException(e);
+        }
+        switch (tag) {
+            case NULL: {
+                ANullSerializerDeserializer.INSTANCE.serialize((ANull) instance, out);
+                break;
+            }
+            case BOOLEAN: {
+                ABooleanSerializerDeserializer.INSTANCE.serialize((ABoolean) instance, out);
+                break;
+            }
+            case INT8: {
+                AInt8SerializerDeserializer.INSTANCE.serialize((AInt8) instance, out);
+                break;
+            }
+            case INT16: {
+                AInt16SerializerDeserializer.INSTANCE.serialize((AInt16) instance, out);
+                break;
+            }
+            case INT32: {
+                AInt32SerializerDeserializer.INSTANCE.serialize((AInt32) instance, out);
+                break;
+            }
+            case INT64: {
+                AInt64SerializerDeserializer.INSTANCE.serialize((AInt64) instance, out);
+                break;
+            }
+            case FLOAT: {
+                AFloatSerializerDeserializer.INSTANCE.serialize((AFloat) instance, out);
+                break;
+            }
+            case DOUBLE: {
+                ADoubleSerializerDeserializer.INSTANCE.serialize((ADouble) instance, out);
+                break;
+            }
+            case STRING: {
+                AStringSerializerDeserializer.INSTANCE.serialize((AString) instance, out);
+                break;
+            }
+            case DATE: {
+                ADateSerializerDeserializer.INSTANCE.serialize((ADate) instance, out);
+                break;
+            }
+            case TIME: {
+                ATimeSerializerDeserializer.INSTANCE.serialize((ATime) instance, out);
+                break;
+            }
+            case DATETIME: {
+                ADateTimeSerializerDeserializer.INSTANCE.serialize((ADateTime) instance, out);
+                break;
+            }
+            case DURATION: {
+                ADurationSerializerDeserializer.INSTANCE.serialize((ADuration) instance, out);
+                break;
+            }
+            case INTERVAL: {
+                AIntervalSerializerDeserializer.INSTANCE.serialize((AInterval) instance, out);
+                break;
+            }
+            case POINT: {
+                APointSerializerDeserializer.INSTANCE.serialize((APoint) instance, out);
+                break;
+            }
+            case POINT3D: {
+                APoint3DSerializerDeserializer.INSTANCE.serialize((APoint3D) instance, out);
+                break;
+            }
+            case LINE: {
+                ALineSerializerDeserializer.INSTANCE.serialize((ALine) instance, out);
+                break;
+            }
+            case RECTANGLE: {
+                ARectangleSerializerDeserializer.INSTANCE.serialize((ARectangle) instance, out);
+                break;
+            }
+            case POLYGON: {
+                APolygonSerializerDeserializer.INSTANCE.serialize((APolygon) instance, out);
+                break;
+            }
+            case CIRCLE: {
+                ACircleSerializerDeserializer.INSTANCE.serialize((ACircle) instance, out);
+                break;
+            }
+            case RECORD: {
+                ARecordSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((ARecord) instance, out);
+                break;
+            }
+            case ORDEREDLIST: {
+                AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((AOrderedList) instance, out);
+            }
+            case UNORDEREDLIST: {
+                AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((AUnorderedList) instance, out);
+            }
+            case TYPE: {
+                ATypeSerializerDeserializer.INSTANCE.serialize((IAType) instance, out);
+            }
+            default: {
+                throw new NotImplementedException("No serializer/deserializer implemented for type " + t.getTypeTag()
+                        + " .");
+            }
+        }
+    }
+}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APoint3DSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APoint3DSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APoint3DSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APoint3DSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APointSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APointSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APointSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APointSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/APolygonSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARectangleSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARectangleSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARectangleSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARectangleSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AStringSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AStringSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AStringSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AStringSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATimeSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATypeSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATypeSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATypeSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ATypeSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AUnorderedListSerializerDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/SerializerDeserializerUtil.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/valueproviders/AqlPrimitiveValueProviderFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/valueproviders/AqlPrimitiveValueProviderFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/valueproviders/AqlPrimitiveValueProviderFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/valueproviders/AqlPrimitiveValueProviderFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/base/IDataFormat.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryBooleanInspectorImpl.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryBooleanInspectorImpl.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryBooleanInspectorImpl.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryBooleanInspectorImpl.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryComparatorFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFamilyProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFamilyProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFamilyProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryHashFunctionFamilyProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryIntegerInspector.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryIntegerInspector.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryIntegerInspector.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryIntegerInspector.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryTokenizerFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryTokenizerFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryTokenizerFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlBinaryTokenizerFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlJSONPrinterFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlJSONPrinterFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlJSONPrinterFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlJSONPrinterFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlNormalizedKeyComputerFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlNormalizedKeyComputerFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlNormalizedKeyComputerFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlNormalizedKeyComputerFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlPrinterFactoryProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlPrinterFactoryProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlPrinterFactoryProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlPrinterFactoryProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlSerializerDeserializerProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlSerializerDeserializerProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlSerializerDeserializerProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlSerializerDeserializerProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlTypeTraitProvider.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlTypeTraitProvider.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlTypeTraitProvider.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/AqlTypeTraitProvider.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/NGramUTF8StringBinaryTokenizerFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/NGramUTF8StringBinaryTokenizerFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/NGramUTF8StringBinaryTokenizerFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/NGramUTF8StringBinaryTokenizerFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/UTF8StringLowercasePointable.java b/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/UTF8StringLowercasePointable.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/UTF8StringLowercasePointable.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/formats/nontagged/UTF8StringLowercasePointable.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABinary.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABinary.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABinary.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABinary.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABitArray.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABitArray.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABitArray.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABitArray.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABoolean.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABoolean.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABoolean.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ABoolean.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACircle.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACircle.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACircle.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACircle.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACollectionCursor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACollectionCursor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACollectionCursor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ACollectionCursor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADate.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADate.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADate.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADate.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADateTime.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADateTime.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADateTime.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADateTime.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADouble.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADouble.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADouble.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADouble.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADuration.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADuration.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADuration.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ADuration.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AFloat.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AFloat.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AFloat.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AFloat.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt16.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt16.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt16.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt16.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt32.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt32.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt32.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt32.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt64.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt64.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt64.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt64.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt8.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt8.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt8.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInt8.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInterval.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInterval.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInterval.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AInterval.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ALine.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ALine.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ALine.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ALine.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableCircle.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableCircle.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableCircle.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableCircle.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDate.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDate.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDate.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDate.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDateTime.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDateTime.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDateTime.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDateTime.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDouble.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDouble.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDouble.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDouble.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDuration.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDuration.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDuration.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableDuration.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableFloat.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableFloat.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableFloat.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableFloat.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt16.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt16.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt16.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt16.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt32.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt32.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt32.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt32.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt64.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt64.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt64.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt64.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt8.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt8.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt8.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInt8.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInterval.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInterval.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInterval.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableInterval.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableLine.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableLine.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableLine.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableLine.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableOrderedList.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableOrderedList.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableOrderedList.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableOrderedList.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint3D.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint3D.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint3D.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePoint3D.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePolygon.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePolygon.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePolygon.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutablePolygon.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRecord.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRecord.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRecord.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRecord.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRectangle.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRectangle.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRectangle.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableRectangle.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableString.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableString.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableString.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableString.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableTime.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableTime.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableTime.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableTime.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableUnorderedList.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableUnorderedList.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableUnorderedList.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AMutableUnorderedList.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ANull.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ANull.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ANull.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ANull.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AOrderedList.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AOrderedList.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AOrderedList.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AOrderedList.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint3D.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint3D.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint3D.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APoint3D.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APolygon.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APolygon.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APolygon.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/APolygon.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARecord.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARecord.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARecord.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARecord.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARectangle.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARectangle.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARectangle.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ARectangle.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AString.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AString.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AString.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AString.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ATime.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ATime.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ATime.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/ATime.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AUnorderedList.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AUnorderedList.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AUnorderedList.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/AUnorderedList.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACollection.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACollection.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACollection.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACollection.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACursor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACursor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACursor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IACursor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IAObject.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IAObject.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IAObject.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/IAObject.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/InMemUtils.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/InMemUtils.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/InMemUtils.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/InMemUtils.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateParserFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADateTimeParserFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ADurationParserFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ATimeParserFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/DurationArithmeticOperations.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/DurationArithmeticOperations.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/DurationArithmeticOperations.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/DurationArithmeticOperations.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/GregorianCalendarSystem.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICalendarSystem.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICalendarSystem.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICalendarSystem.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/base/temporal/ICalendarSystem.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/constants/AsterixConstantValue.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/constants/AsterixConstantValue.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/constants/AsterixConstantValue.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/constants/AsterixConstantValue.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AbstractFunctionDescriptor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AbstractFunctionDescriptor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AbstractFunctionDescriptor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AbstractFunctionDescriptor.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
new file mode 100644
index 0000000..2be7fbd1
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
@@ -0,0 +1,1078 @@
+package edu.uci.ics.asterix.om.functions;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.lang3.mutable.Mutable;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ABooleanTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ACircleTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ADateTimeTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ADateTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ADoubleTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.AFloatTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.AInt32TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ALineTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ANullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.APointTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.APolygonTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ARectangleTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.AStringTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ATimeTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.BinaryBooleanOrNullFunctionTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.BinaryStringBoolOrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.BinaryStringStringOrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.CastListResultTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.CastRecordResultTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ClosedRecordConstructorResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.FieldAccessByIndexResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.InjectFailureTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedCollectionMemberResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedFieldAccessByNameResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedGetItemResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedLocalAvgTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedNumericAddSubMulDivTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedNumericRoundHalfToEven2TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedNumericUnaryFunctionTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedSumTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedSwitchCaseComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedUnaryMinusTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.NotNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OpenRecordConstructorResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalABooleanTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalACircleTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADateTimeTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADateTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADoubleTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADurationTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAFloatTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt16TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt32TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt64TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt8TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAIntervalTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalALineTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAPoint3DTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAPointTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAPolygonTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalARectangleTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAStringTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalATemporalInstanceTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OptionalATimeTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListConstructorResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAInt32TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAPointTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAStringTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAnyTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.QuadStringStringOrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.ScalarVersionOfAggregateResultType;
+import edu.uci.ics.asterix.om.typecomputer.impl.Substring2TypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.SubstringTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.TripleStringBoolOrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.TripleStringStringOrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.UnaryBooleanOrNullFunctionTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.UnaryStringInt32OrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.UnaryStringOrNullTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.impl.UnorderedListConstructorResultType;
+import edu.uci.ics.asterix.om.types.AOrderedListType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.types.TypeHelper;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+
+public class AsterixBuiltinFunctions {
+
+    public enum SpatialFilterKind {
+        SI
+    }
+
+    private static final FunctionInfoRepository finfoRepo = new FunctionInfoRepository();
+
+    // it is supposed to be an identity mapping
+    private final static Map<IFunctionInfo, IFunctionInfo> builtinFunctionsSet = new HashMap<IFunctionInfo, IFunctionInfo>();
+    private final static Map<IFunctionInfo, IResultTypeComputer> funTypeComputer = new HashMap<IFunctionInfo, IResultTypeComputer>();
+
+    private final static Set<IFunctionInfo> builtinAggregateFunctions = new HashSet<IFunctionInfo>();
+    private static final Set<IFunctionInfo> datasetFunctions = new HashSet<IFunctionInfo>();
+    private static final Map<IFunctionInfo, IFunctionInfo> aggregateToLocalAggregate = new HashMap<IFunctionInfo, IFunctionInfo>();
+    private static final Map<IFunctionInfo, IFunctionInfo> aggregateToGlobalAggregate = new HashMap<IFunctionInfo, IFunctionInfo>();
+    private static final Map<IFunctionInfo, IFunctionInfo> aggregateToSerializableAggregate = new HashMap<IFunctionInfo, IFunctionInfo>();
+    private final static Map<IFunctionInfo, Boolean> builtinUnnestingFunctions = new HashMap<IFunctionInfo, Boolean>();
+    private final static Map<IFunctionInfo, IFunctionInfo> scalarToAggregateFunctionMap = new HashMap<IFunctionInfo, IFunctionInfo>();
+    private static final Map<IFunctionInfo, SpatialFilterKind> spatialFilterFunctions = new HashMap<IFunctionInfo, SpatialFilterKind>();
+
+    public final static FunctionIdentifier TYPE_OF = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "type-of", 1);
+    public final static FunctionIdentifier GET_HANDLE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "get-handle", 2);
+    public final static FunctionIdentifier GET_DATA = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-data",
+            2);
+    public final static FunctionIdentifier EMBED_TYPE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "embed-type", 1);
+
+    public final static FunctionIdentifier GET_ITEM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-item",
+            2);
+    public final static FunctionIdentifier ANY_COLLECTION_MEMBER = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "any-collection-member", 1);
+    public final static FunctionIdentifier LISTIFY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "listify", 1);
+    // public final static FunctionIdentifier BAGIFY = new
+    // FunctionIdentifier(ASTERIX_NS, "bagify", 1, true);
+    public final static FunctionIdentifier LEN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "len", 1);
+
+    public final static FunctionIdentifier CONCAT_NON_NULL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "concat-non-null", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier EMPTY_STREAM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "empty-stream", 0);
+    public final static FunctionIdentifier NON_EMPTY_STREAM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "non-empty-stream", 0);
+    public final static FunctionIdentifier ORDERED_LIST_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "ordered-list-constructor", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier UNORDERED_LIST_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "unordered-list-constructor", FunctionIdentifier.VARARGS);
+
+    // records
+    public final static FunctionIdentifier CLOSED_RECORD_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "closed-record-constructor", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier OPEN_RECORD_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "open-record-constructor", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier RECORD_TYPE_CONSTRUCTOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "record-type-constructor", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier FIELD_ACCESS_BY_INDEX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "field-access-by-index", 2);
+    public final static FunctionIdentifier FIELD_ACCESS_BY_NAME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "field-access-by-name", 2);
+
+    public final static FunctionIdentifier NUMERIC_UNARY_MINUS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-unary-minus", 1);
+
+    public final static FunctionIdentifier NUMERIC_SUBTRACT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-subtract", 2);
+    public final static FunctionIdentifier NUMERIC_MULTIPLY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-multiply", 2);
+    public final static FunctionIdentifier NUMERIC_DIVIDE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-divide", 2);
+    public final static FunctionIdentifier NUMERIC_MOD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-mod", 2);
+    public final static FunctionIdentifier NUMERIC_IDIV = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-idiv", 2);
+    public final static FunctionIdentifier CARET = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "caret", 2);
+
+    public final static FunctionIdentifier NUMERIC_ABS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-abs", 1);
+    public final static FunctionIdentifier NUMERIC_CEILING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-ceiling", 1);
+    public final static FunctionIdentifier NUMERIC_FLOOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-floor", 1);
+    public final static FunctionIdentifier NUMERIC_ROUND = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "numeric-round", 1);
+    public final static FunctionIdentifier NUMERIC_ROUND_HALF_TO_EVEN = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "numeric-round-half-to-even", 1);
+    public final static FunctionIdentifier NUMERIC_ROUND_HALF_TO_EVEN2 = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "numeric-round-half-to-even", 2);
+    // String funcitons
+    public final static FunctionIdentifier STRING_EQUAL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "string-equal", 2);
+    public final static FunctionIdentifier STRING_START_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "start-with", 2);
+    public final static FunctionIdentifier STRING_END_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "end-with", 2);
+    public final static FunctionIdentifier STRING_MATCHES = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "matches", 2);
+    public final static FunctionIdentifier STRING_MATCHES_WITH_FLAG = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "matches", 3);
+    public final static FunctionIdentifier STRING_LOWERCASE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "lowercase", 1);
+    public final static FunctionIdentifier STRING_REPLACE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "replace", 3);
+    public final static FunctionIdentifier STRING_REPLACE_WITH_FLAG = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "replace", 4);
+    public final static FunctionIdentifier STRING_LENGTH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "string-length", 1);
+    public final static FunctionIdentifier SUBSTRING2 = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "substring", 2);
+    public final static FunctionIdentifier SUBSTRING_BEFORE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "substring-before", 2);
+    public final static FunctionIdentifier SUBSTRING_AFTER = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "substring-after", 2);
+    public final static FunctionIdentifier STRING_TO_CODEPOINT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "string-to-codepoint", 1);
+    public final static FunctionIdentifier CODEPOINT_TO_STRING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "codepoint-to-string", 1);
+    public final static FunctionIdentifier STRING_CONCAT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "string-concat", 1);
+    public final static FunctionIdentifier STRING_JOIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "string-join", 2);
+
+    public final static FunctionIdentifier DATASET = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "dataset", 1);
+    public final static FunctionIdentifier FEED_INGEST = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "feed-ingest", 1);
+
+    public final static FunctionIdentifier INDEX_SEARCH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "index-search", FunctionIdentifier.VARARGS);
+
+    public final static FunctionIdentifier MAKE_FIELD_INDEX_HANDLE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "make-field-index-handle", 2);
+    public final static FunctionIdentifier MAKE_FIELD_NAME_HANDLE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "make-field-name-handle", 1);
+
+    public final static FunctionIdentifier SUBSTRING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "substring", 3);
+    public final static FunctionIdentifier LIKE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "like", 2);
+    public final static FunctionIdentifier CONTAINS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "contains",
+            2);
+    public final static FunctionIdentifier STARTS_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "starts-with", 2);
+    public final static FunctionIdentifier ENDS_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "ends-with", 2);
+
+    public final static FunctionIdentifier AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-avg", 1);
+    public final static FunctionIdentifier COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-count", 1);
+    public final static FunctionIdentifier SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-sum", 1);
+    public final static FunctionIdentifier LOCAL_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-local-sum", 1);
+    public final static FunctionIdentifier MAX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-max", 1);
+    public final static FunctionIdentifier LOCAL_MAX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-local-max", 1);
+    public final static FunctionIdentifier MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-min", 1);
+    public final static FunctionIdentifier LOCAL_MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-local-min", 1);
+    public final static FunctionIdentifier GLOBAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-global-avg", 1);
+    public final static FunctionIdentifier LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-local-avg", 1);
+
+    public final static FunctionIdentifier SCALAR_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "avg", 1);
+    public final static FunctionIdentifier SCALAR_COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "count",
+            1);
+    public final static FunctionIdentifier SCALAR_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "sum", 1);
+    public final static FunctionIdentifier SCALAR_MAX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "max", 1);
+    public final static FunctionIdentifier SCALAR_MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "min", 1);
+    public final static FunctionIdentifier SCALAR_GLOBAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "global-avg", 1);
+    public final static FunctionIdentifier SCALAR_LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "local-avg", 1);
+
+    // serializable aggregate functions
+    public final static FunctionIdentifier SERIAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "avg-serial", 1);
+    public final static FunctionIdentifier SERIAL_COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "count-serial", 1);
+    public final static FunctionIdentifier SERIAL_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "sum-serial", 1);
+    public final static FunctionIdentifier SERIAL_LOCAL_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "local-sum-serial", 1);
+    public final static FunctionIdentifier SERIAL_GLOBAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "global-avg-serial", 1);
+    public final static FunctionIdentifier SERIAL_LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "local-avg-serial", 1);
+
+    public final static FunctionIdentifier SCAN_COLLECTION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "scan-collection", 1);
+    public final static FunctionIdentifier SUBSET_COLLECTION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "subset-collection", 3);
+
+    public final static FunctionIdentifier RANGE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "range", 2);
+
+    // fuzzy functions:
+    public final static FunctionIdentifier FUZZY_EQ = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "fuzzy-eq",
+            2);
+
+    public final static FunctionIdentifier PREFIX_LEN_JACCARD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "prefix-len-jaccard", 2);
+
+    public final static FunctionIdentifier SIMILARITY_JACCARD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "similarity-jaccard", 2);
+    public final static FunctionIdentifier SIMILARITY_JACCARD_CHECK = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "similarity-jaccard-check", 3);
+    public final static FunctionIdentifier SIMILARITY_JACCARD_SORTED = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "similarity-jaccard-sorted", 2);
+    public final static FunctionIdentifier SIMILARITY_JACCARD_SORTED_CHECK = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "similarity-jaccard-sorted-check", 3);
+    public final static FunctionIdentifier SIMILARITY_JACCARD_PREFIX = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "similarity-jaccard-prefix", 6);
+    public final static FunctionIdentifier SIMILARITY_JACCARD_PREFIX_CHECK = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "similarity-jaccard-prefix-check", 6);
+
+    public final static FunctionIdentifier EDIT_DISTANCE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "edit-distance", 2);
+    public final static FunctionIdentifier EDIT_DISTANCE_CHECK = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "edit-distance-check", 3);
+    public final static FunctionIdentifier EDIT_DISTANCE_LIST_IS_FILTERABLE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "edit-distance-list-is-filterable", 2);
+    public final static FunctionIdentifier EDIT_DISTANCE_STRING_IS_FILTERABLE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "edit-distance-string-is-filterable", 4);
+
+    // tokenizers:
+    public final static FunctionIdentifier WORD_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "word-tokens", 1);
+    public final static FunctionIdentifier HASHED_WORD_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "hashed-word-tokens", 1);
+    public final static FunctionIdentifier COUNTHASHED_WORD_TOKENS = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "counthashed-word-tokens", 1);
+    public final static FunctionIdentifier GRAM_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "gram-tokens", 3);
+    public final static FunctionIdentifier HASHED_GRAM_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "hashed-gram-tokens", 3);
+    public final static FunctionIdentifier COUNTHASHED_GRAM_TOKENS = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "counthashed-gram-tokens", 3);
+
+    public final static FunctionIdentifier TID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "tid", 0);
+
+    // constructors:
+    public final static FunctionIdentifier BOOLEAN_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "boolean", 1);
+    public final static FunctionIdentifier NULL_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "null", 1);
+    public final static FunctionIdentifier STRING_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "string", 1);
+    public final static FunctionIdentifier INT8_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "int8", 1);
+    public final static FunctionIdentifier INT16_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "int16", 1);
+    public final static FunctionIdentifier INT32_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "int32", 1);
+    public final static FunctionIdentifier INT64_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "int64", 1);
+    public final static FunctionIdentifier FLOAT_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "float", 1);
+    public final static FunctionIdentifier DOUBLE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "double", 1);
+    public final static FunctionIdentifier POINT_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "point", 1);
+    public final static FunctionIdentifier POINT3D_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "point3d", 1);
+    public final static FunctionIdentifier LINE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "line", 1);
+    public final static FunctionIdentifier CIRCLE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "circle", 1);
+    public final static FunctionIdentifier RECTANGLE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "rectangle", 1);
+    public final static FunctionIdentifier POLYGON_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "polygon", 1);
+    public final static FunctionIdentifier TIME_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "time", 1);
+    public final static FunctionIdentifier DATE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "date", 1);
+    public final static FunctionIdentifier DATETIME_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "datetime", 1);
+    public final static FunctionIdentifier DURATION_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "duration", 1);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-from-date", 2);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_TIME = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-from-time", 2);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATETIME = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-from-datetime", 2);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_DATE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-start-from-date", 2);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_TIME = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-start-from-time", 2);
+    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_DATETIME = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-start-from-datetime", 2);
+    public final static FunctionIdentifier INTERVAL_BEFORE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-before", 2);
+    public final static FunctionIdentifier INTERVAL_AFTER = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-after", 2);
+    public final static FunctionIdentifier INTERVAL_MEETS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-meets", 2);
+    public final static FunctionIdentifier INTERVAL_MET_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-met-by", 2);
+    public final static FunctionIdentifier INTERVAL_OVERLAPS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-overlaps", 2);
+    public final static FunctionIdentifier INTERVAL_OVERLAPPED_BY = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "interval-overlapped-by", 2);
+    public final static FunctionIdentifier OVERLAP = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "overlap", 2);
+    public final static FunctionIdentifier INTERVAL_STARTS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-starts", 2);
+    public final static FunctionIdentifier INTERVAL_STARTED_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-started-by", 2);
+    public final static FunctionIdentifier INTERVAL_COVERS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-covers", 2);
+    public final static FunctionIdentifier INTERVAL_COVERED_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-covered-by", 2);
+    public final static FunctionIdentifier INTERVAL_ENDS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-ends", 2);
+    public final static FunctionIdentifier INTERVAL_ENDED_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-ended-by", 2);
+    public final static FunctionIdentifier CURRENT_TIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "current-time", 0);
+    public final static FunctionIdentifier CURRENT_DATE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "current-date", 0);
+    public final static FunctionIdentifier CURRENT_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "current-datetime", 0);
+    public final static FunctionIdentifier DURATION_EQUAL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "duration-equal", 2);
+    public final static FunctionIdentifier YEAR_MONTH_DURATION_GREATER_THAN = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "year-month-duration-greater-than", 2);
+    public final static FunctionIdentifier YEAR_MONTH_DURATION_LESS_THAN = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "year-month-duration-less-than", 2);
+    public final static FunctionIdentifier DAY_TIME_DURATION_GREATER_THAN = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "day-time-duration-greater-than", 2);
+    public final static FunctionIdentifier DAY_TIME_DURATION_LESS_THAN = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "day-time-duration-less-than", 2);
+    public final static FunctionIdentifier DURATION_FROM_MONTHS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "duration-from-months", 1);
+    public final static FunctionIdentifier MONTHS_OF_YEAR_MONTH_DURATION = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "months-of-year-month-duration", 1);
+    public final static FunctionIdentifier DURATION_FROM_MILLISECONDS = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "duration-from-ms", 1);
+    public final static FunctionIdentifier MILLISECONDS_OF_DAY_TIME_DURATION = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "ms-of-day-time-duration", 1);
+
+    // spatial
+    public final static FunctionIdentifier CREATE_POINT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "create-point", 2);
+    public final static FunctionIdentifier CREATE_LINE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "create-line", 2);
+    public final static FunctionIdentifier CREATE_POLYGON = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "create-polygon", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier CREATE_CIRCLE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "create-circle", 2);
+    public final static FunctionIdentifier CREATE_RECTANGLE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "create-rectangle", 2);
+    public final static FunctionIdentifier SPATIAL_INTERSECT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "spatial-intersect", 2);
+    public final static FunctionIdentifier SPATIAL_AREA = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "spatial-area", 1);
+    public final static FunctionIdentifier SPATIAL_DISTANCE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "spatial-distance", 2);
+    public final static FunctionIdentifier CREATE_MBR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "create-mbr", 3);
+    public final static FunctionIdentifier SPATIAL_CELL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "spatial-cell", 4);
+    public final static FunctionIdentifier SWITCH_CASE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "switch-case", FunctionIdentifier.VARARGS);
+    public final static FunctionIdentifier REG_EXP = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "reg-exp", 2);
+
+    public final static FunctionIdentifier INJECT_FAILURE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "inject-failure", 2);
+    public final static FunctionIdentifier CAST_RECORD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "cast-record", 1);
+    public final static FunctionIdentifier CAST_LIST = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "cast-list", 1);
+
+    // Spatial and temporal type accessors
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_YEAR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "year", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_MONTH = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "month", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_DAY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "day", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_HOUR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "hour", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "minute", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_SEC = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "second", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_MILLISEC = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "millisecond", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_INTERVAL_START = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-interval-start", 1);
+    public static final FunctionIdentifier ACCESSOR_TEMPORAL_INTERVAL_END = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-interval-end", 1);
+
+    // Temporal functions
+    public static final FunctionIdentifier DATE_FROM_UNIX_TIME_IN_DAYS = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "date-from-unix-time-in-days", 1);
+    public static final FunctionIdentifier DATE_FROM_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "date-from-datetime", 1);
+    public final static FunctionIdentifier ADD_DATE_DURATION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "add-date-duration", 2);
+    public final static FunctionIdentifier SUBTRACT_DATE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "subtract-date", 2);
+    public final static FunctionIdentifier TIME_FROM_UNIX_TIME_IN_MS = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "time-from-unix-time-in-ms", 1);
+    public final static FunctionIdentifier TIME_FROM_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "time-from-datetime", 1);
+    public final static FunctionIdentifier SUBTRACT_TIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "subtract-time", 2);
+    public final static FunctionIdentifier ADD_TIME_DURATION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "add-time-duration", 2);
+    public final static FunctionIdentifier DATETIME_FROM_UNIX_TIME_IN_MS = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "datetime-from-unix-time-in-ms", 1);
+    public final static FunctionIdentifier DATETIME_FROM_DATE_TIME = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "datetime-from-date-time", 2);
+    public final static FunctionIdentifier SUBTRACT_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "subtract-datetime", 2);
+    public final static FunctionIdentifier ADD_DATETIME_DURATION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "add-datetime-duration", 2);
+    public final static FunctionIdentifier CALENDAR_DURATION_FROM_DATETIME = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "calendar-duration-from-datetime", 2);
+    public final static FunctionIdentifier CALENDAR_DURATION_FROM_DATE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "calendar-duration-from-date", 2);
+    public final static FunctionIdentifier ADJUST_TIME_FOR_TIMEZONE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "adjust-time-for-timezone", 2);
+    public final static FunctionIdentifier ADJUST_DATETIME_FOR_TIMEZONE = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "adjust-datetime-for-timezone", 2);
+
+    public final static FunctionIdentifier GET_POINT_X_COORDINATE_ACCESSOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-x", 1);
+    public final static FunctionIdentifier GET_POINT_Y_COORDINATE_ACCESSOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-y", 1);
+    public final static FunctionIdentifier GET_CIRCLE_RADIUS_ACCESSOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-radius", 1);
+    public final static FunctionIdentifier GET_CIRCLE_CENTER_ACCESSOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-center", 1);
+    public final static FunctionIdentifier GET_POINTS_LINE_RECTANGLE_POLYGON_ACCESSOR = new FunctionIdentifier(
+            FunctionConstants.ASTERIX_NS, "get-points", 1);
+
+    public static final FunctionIdentifier EQ = AlgebricksBuiltinFunctions.EQ;
+    public static final FunctionIdentifier LE = AlgebricksBuiltinFunctions.LE;
+    public static final FunctionIdentifier GE = AlgebricksBuiltinFunctions.GE;
+    public static final FunctionIdentifier LT = AlgebricksBuiltinFunctions.LT;
+    public static final FunctionIdentifier GT = AlgebricksBuiltinFunctions.GT;
+    public static final FunctionIdentifier NEQ = AlgebricksBuiltinFunctions.NEQ;
+    public static final FunctionIdentifier AND = AlgebricksBuiltinFunctions.AND;
+    public static final FunctionIdentifier OR = AlgebricksBuiltinFunctions.OR;
+    public static final FunctionIdentifier NOT = AlgebricksBuiltinFunctions.NOT;
+    public static final FunctionIdentifier NUMERIC_ADD = AlgebricksBuiltinFunctions.NUMERIC_ADD;
+    public static final FunctionIdentifier IS_NULL = AlgebricksBuiltinFunctions.IS_NULL;
+
+    public static final FunctionIdentifier NOT_NULL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "not-null",
+            1);
+
+    public static IFunctionInfo getAsterixFunctionInfo(FunctionIdentifier fid) {
+        IFunctionInfo finfo = finfoRepo.get(fid);;
+        if (finfo == null) {
+            finfo = new AsterixFunctionInfo(fid);
+        }
+        return finfo;
+    }
+
+    public static AsterixFunctionInfo lookupFunction(FunctionIdentifier fid) {
+        return (AsterixFunctionInfo) finfoRepo.get(fid);
+    }
+
+    static {
+
+        // first, take care of Algebricks builtin functions
+        add(EQ, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(LE, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(GE, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(LT, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(GT, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(IS_NULL, ABooleanTypeComputer.INSTANCE);
+        add(AND, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(NEQ, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(NOT, UnaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(OR, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(NUMERIC_ADD, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
+
+        // and then, Asterix builtin functions
+        add(NOT_NULL, NotNullTypeComputer.INSTANCE);
+        add(ANY_COLLECTION_MEMBER, NonTaggedCollectionMemberResultType.INSTANCE);
+        addPrivateFunction(AVG, OptionalADoubleTypeComputer.INSTANCE);
+        add(BOOLEAN_CONSTRUCTOR, UnaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(CARET, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
+        add(CIRCLE_CONSTRUCTOR, OptionalACircleTypeComputer.INSTANCE);
+        add(CLOSED_RECORD_CONSTRUCTOR, ClosedRecordConstructorResultType.INSTANCE);
+        add(CONCAT_NON_NULL, new IResultTypeComputer() {
+            @Override
+            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+                    IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
+                AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expression;
+                if (f.getArguments().size() < 1) {
+                    return BuiltinType.ANULL;
+                }
+                ILogicalExpression a0 = f.getArguments().get(0).getValue();
+                IAType t0 = (IAType) env.getType(a0);
+                if (TypeHelper.canBeNull(t0)) {
+                    return t0;
+                }
+                return AUnionType.createNullableType(t0);
+            }
+        });
+        add(CONTAINS, ABooleanTypeComputer.INSTANCE);
+        addPrivateFunction(COUNT, AInt32TypeComputer.INSTANCE);
+        add(COUNTHASHED_GRAM_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
+        add(COUNTHASHED_WORD_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
+        add(CREATE_CIRCLE, ACircleTypeComputer.INSTANCE);
+        add(CREATE_LINE, ALineTypeComputer.INSTANCE);
+        add(CREATE_MBR, ADoubleTypeComputer.INSTANCE);
+        add(CREATE_POINT, APointTypeComputer.INSTANCE);
+        add(CREATE_POLYGON, APolygonTypeComputer.INSTANCE);
+        add(CREATE_RECTANGLE, ARectangleTypeComputer.INSTANCE);
+
+        add(DATE_CONSTRUCTOR, OptionalADateTypeComputer.INSTANCE);
+        add(DATETIME_CONSTRUCTOR, OptionalADateTimeTypeComputer.INSTANCE);
+        add(DOUBLE_CONSTRUCTOR, OptionalADoubleTypeComputer.INSTANCE);
+        add(DURATION_CONSTRUCTOR, OptionalADurationTypeComputer.INSTANCE);
+        add(EDIT_DISTANCE, AInt32TypeComputer.INSTANCE);
+        add(EDIT_DISTANCE_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
+        add(EDIT_DISTANCE_STRING_IS_FILTERABLE, ABooleanTypeComputer.INSTANCE);
+        add(EDIT_DISTANCE_LIST_IS_FILTERABLE, ABooleanTypeComputer.INSTANCE);
+        add(EMBED_TYPE, new IResultTypeComputer() {
+            @Override
+            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
+                return (IAType) BuiltinType.ANY;
+            }
+        });
+        add(EMPTY_STREAM, ABooleanTypeComputer.INSTANCE);
+        add(ENDS_WITH, ABooleanTypeComputer.INSTANCE);
+        // add(FIELD_ACCESS, NonTaggedFieldAccessByNameResultType.INSTANCE);
+        add(FIELD_ACCESS_BY_INDEX, FieldAccessByIndexResultType.INSTANCE);
+        add(FIELD_ACCESS_BY_NAME, NonTaggedFieldAccessByNameResultType.INSTANCE);
+        add(FLOAT_CONSTRUCTOR, OptionalAFloatTypeComputer.INSTANCE);
+        add(FUZZY_EQ, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(GET_HANDLE, null); // TODO
+        add(GET_ITEM, NonTaggedGetItemResultType.INSTANCE);
+        add(GET_DATA, null); // TODO
+        addPrivateFunction(GLOBAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
+        add(GRAM_TOKENS, OrderedListOfAStringTypeComputer.INSTANCE);
+        add(GLOBAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
+        add(HASHED_GRAM_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
+        add(HASHED_WORD_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
+        add(INDEX_SEARCH, new IResultTypeComputer() {
+
+            @Override
+            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
+                return BuiltinType.ANY; // TODO
+            }
+        });
+        add(INT8_CONSTRUCTOR, OptionalAInt8TypeComputer.INSTANCE);
+        add(INT16_CONSTRUCTOR, OptionalAInt16TypeComputer.INSTANCE);
+        add(INT32_CONSTRUCTOR, OptionalAInt32TypeComputer.INSTANCE);
+        add(INT64_CONSTRUCTOR, OptionalAInt64TypeComputer.INSTANCE);
+        add(LEN, OptionalAInt32TypeComputer.INSTANCE);
+        add(LIKE, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
+        add(LINE_CONSTRUCTOR, OptionalALineTypeComputer.INSTANCE);
+        add(LISTIFY, OrderedListConstructorResultType.INSTANCE);
+        addPrivateFunction(LOCAL_AVG, NonTaggedLocalAvgTypeComputer.INSTANCE);
+        add(MAKE_FIELD_INDEX_HANDLE, null); // TODO
+        add(MAKE_FIELD_NAME_HANDLE, null); // TODO
+        add(MAX, NonTaggedSumTypeComputer.INSTANCE);
+        add(LOCAL_MAX, NonTaggedSumTypeComputer.INSTANCE);
+        add(MIN, NonTaggedSumTypeComputer.INSTANCE);
+        add(LOCAL_MIN, NonTaggedSumTypeComputer.INSTANCE);
+        add(NON_EMPTY_STREAM, ABooleanTypeComputer.INSTANCE);
+        add(NULL_CONSTRUCTOR, ANullTypeComputer.INSTANCE);
+        add(NUMERIC_UNARY_MINUS, NonTaggedUnaryMinusTypeComputer.INSTANCE);
+        add(NUMERIC_SUBTRACT, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
+        add(NUMERIC_MULTIPLY, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
+        add(NUMERIC_DIVIDE, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
+        add(NUMERIC_MOD, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
+        add(NUMERIC_IDIV, AInt32TypeComputer.INSTANCE);
+
+        add(NUMERIC_ABS, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
+        add(NUMERIC_CEILING, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
+        add(NUMERIC_FLOOR, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
+        add(NUMERIC_ROUND, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
+        add(NUMERIC_ROUND_HALF_TO_EVEN, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
+        add(NUMERIC_ROUND_HALF_TO_EVEN2, NonTaggedNumericRoundHalfToEven2TypeComputer.INSTANCE);
+
+        add(STRING_TO_CODEPOINT, OrderedListOfAInt32TypeComputer.INSTANCE);
+        add(CODEPOINT_TO_STRING, AStringTypeComputer.INSTANCE);
+        add(STRING_CONCAT, OptionalAStringTypeComputer.INSTANCE);
+        add(SUBSTRING2, Substring2TypeComputer.INSTANCE);
+        add(STRING_LENGTH, UnaryStringInt32OrNullTypeComputer.INSTANCE);
+        add(STRING_LOWERCASE, UnaryStringOrNullTypeComputer.INSTANCE);
+        add(STRING_START_WITH, BinaryStringBoolOrNullTypeComputer.INSTANCE);
+        add(STRING_END_WITH, BinaryStringBoolOrNullTypeComputer.INSTANCE);
+        add(STRING_MATCHES, BinaryStringBoolOrNullTypeComputer.INSTANCE);
+        add(STRING_MATCHES_WITH_FLAG, TripleStringBoolOrNullTypeComputer.INSTANCE);
+        add(STRING_REPLACE, TripleStringStringOrNullTypeComputer.INSTANCE);
+        add(STRING_REPLACE_WITH_FLAG, QuadStringStringOrNullTypeComputer.INSTANCE);
+        add(SUBSTRING_BEFORE, BinaryStringStringOrNullTypeComputer.INSTANCE);
+        add(SUBSTRING_AFTER, BinaryStringStringOrNullTypeComputer.INSTANCE);
+        add(STRING_EQUAL, BinaryStringBoolOrNullTypeComputer.INSTANCE);
+        add(STRING_JOIN, AStringTypeComputer.INSTANCE);
+
+        add(OPEN_RECORD_CONSTRUCTOR, OpenRecordConstructorResultType.INSTANCE);
+        add(ORDERED_LIST_CONSTRUCTOR, OrderedListConstructorResultType.INSTANCE);
+        add(POINT_CONSTRUCTOR, OptionalAPointTypeComputer.INSTANCE);
+        add(POINT3D_CONSTRUCTOR, OptionalAPoint3DTypeComputer.INSTANCE);
+        add(POLYGON_CONSTRUCTOR, OptionalAPolygonTypeComputer.INSTANCE);
+        add(PREFIX_LEN_JACCARD, AInt32TypeComputer.INSTANCE);
+        add(RANGE, AInt32TypeComputer.INSTANCE);
+        add(RECTANGLE_CONSTRUCTOR, OptionalARectangleTypeComputer.INSTANCE);
+        // add(RECORD_TYPE_CONSTRUCTOR, null);
+        add(SCALAR_AVG, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCALAR_COUNT, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCALAR_GLOBAL_AVG, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCALAR_LOCAL_AVG, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCALAR_MAX, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCALAR_MIN, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCALAR_SUM, ScalarVersionOfAggregateResultType.INSTANCE);
+        add(SCAN_COLLECTION, NonTaggedCollectionMemberResultType.INSTANCE);
+        add(SERIAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
+        add(SERIAL_COUNT, AInt32TypeComputer.INSTANCE);
+        add(SERIAL_GLOBAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
+        add(SERIAL_LOCAL_AVG, NonTaggedLocalAvgTypeComputer.INSTANCE);
+        add(SERIAL_SUM, NonTaggedSumTypeComputer.INSTANCE);
+        add(SERIAL_LOCAL_SUM, NonTaggedSumTypeComputer.INSTANCE);
+        add(SIMILARITY_JACCARD, AFloatTypeComputer.INSTANCE);
+        add(SIMILARITY_JACCARD_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
+        add(SIMILARITY_JACCARD_SORTED, AFloatTypeComputer.INSTANCE);
+        add(SIMILARITY_JACCARD_SORTED_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
+        add(SIMILARITY_JACCARD_PREFIX, AFloatTypeComputer.INSTANCE);
+        add(SIMILARITY_JACCARD_PREFIX_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
+        add(SPATIAL_AREA, ADoubleTypeComputer.INSTANCE);
+        add(SPATIAL_CELL, ARectangleTypeComputer.INSTANCE);
+        add(SPATIAL_DISTANCE, ADoubleTypeComputer.INSTANCE);
+        add(SPATIAL_INTERSECT, ABooleanTypeComputer.INSTANCE);
+        add(GET_POINT_X_COORDINATE_ACCESSOR, ADoubleTypeComputer.INSTANCE);
+        add(GET_POINT_Y_COORDINATE_ACCESSOR, ADoubleTypeComputer.INSTANCE);
+        add(GET_CIRCLE_RADIUS_ACCESSOR, ADoubleTypeComputer.INSTANCE);
+        add(GET_CIRCLE_CENTER_ACCESSOR, APointTypeComputer.INSTANCE);
+        add(GET_POINTS_LINE_RECTANGLE_POLYGON_ACCESSOR, OrderedListOfAPointTypeComputer.INSTANCE);
+        add(STARTS_WITH, ABooleanTypeComputer.INSTANCE);
+        add(STRING_CONSTRUCTOR, OptionalAStringTypeComputer.INSTANCE);
+        add(SUBSET_COLLECTION, new IResultTypeComputer() {
+
+            @Override
+            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
+                AbstractFunctionCallExpression fun = (AbstractFunctionCallExpression) expression;
+                IAType t;
+                try {
+                    t = (IAType) env.getType(fun.getArguments().get(0).getValue());
+                } catch (AlgebricksException e) {
+                    throw new AlgebricksException(e);
+                }
+                switch (t.getTypeTag()) {
+                    case UNORDEREDLIST:
+                    case ORDEREDLIST: {
+                        AbstractCollectionType act = (AbstractCollectionType) t;
+                        return act.getItemType();
+                    }
+                    case UNION: {
+                        AUnionType ut = (AUnionType) t;
+                        if (!ut.isNullableType()) {
+                            throw new AlgebricksException("Expecting collection type. Found " + t);
+                        }
+                        IAType t2 = ut.getUnionList().get(1);
+                        ATypeTag tag2 = t2.getTypeTag();
+                        if (tag2 == ATypeTag.UNORDEREDLIST || tag2 == ATypeTag.ORDEREDLIST) {
+                            AbstractCollectionType act = (AbstractCollectionType) t2;
+                            return act.getItemType();
+                        }
+                        throw new AlgebricksException("Expecting collection type. Found " + t);
+                    }
+                    default: {
+                        throw new AlgebricksException("Expecting collection type. Found " + t);
+                    }
+                }
+            }
+        });
+        add(SUBSTRING, SubstringTypeComputer.INSTANCE);
+        addPrivateFunction(SUM, NonTaggedSumTypeComputer.INSTANCE);
+        add(LOCAL_SUM, NonTaggedSumTypeComputer.INSTANCE);
+        add(SWITCH_CASE, NonTaggedSwitchCaseComputer.INSTANCE);
+        add(REG_EXP, ABooleanTypeComputer.INSTANCE);
+        add(INJECT_FAILURE, InjectFailureTypeComputer.INSTANCE);
+        add(CAST_RECORD, CastRecordResultTypeComputer.INSTANCE);
+        add(CAST_LIST, CastListResultTypeComputer.INSTANCE);
+
+        add(TID, AInt32TypeComputer.INSTANCE);
+        add(TIME_CONSTRUCTOR, OptionalATimeTypeComputer.INSTANCE);
+        add(TYPE_OF, null); // TODO
+        add(UNORDERED_LIST_CONSTRUCTOR, UnorderedListConstructorResultType.INSTANCE);
+        add(WORD_TOKENS, new IResultTypeComputer() {
+
+            @Override
+            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
+                return new AOrderedListType(BuiltinType.ASTRING, "string");
+            }
+        });
+
+        // temporal type accessors
+        add(ACCESSOR_TEMPORAL_YEAR, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_MONTH, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_DAY, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_HOUR, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_MIN, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_SEC, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_MILLISEC, OptionalAInt32TypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_INTERVAL_START, OptionalATemporalInstanceTypeComputer.INSTANCE);
+        add(ACCESSOR_TEMPORAL_INTERVAL_END, OptionalATemporalInstanceTypeComputer.INSTANCE);
+
+        // temporal functions
+        add(DATE_FROM_UNIX_TIME_IN_DAYS, OptionalADateTypeComputer.INSTANCE);
+        add(DATE_FROM_DATETIME, OptionalADateTypeComputer.INSTANCE);
+        add(ADD_DATE_DURATION, OptionalADateTypeComputer.INSTANCE);
+        add(SUBTRACT_DATE, OptionalADurationTypeComputer.INSTANCE);
+        add(TIME_FROM_UNIX_TIME_IN_MS, OptionalATimeTypeComputer.INSTANCE);
+        add(TIME_FROM_DATETIME, OptionalATimeTypeComputer.INSTANCE);
+        add(SUBTRACT_TIME, OptionalADurationTypeComputer.INSTANCE);
+        add(ADD_TIME_DURATION, OptionalATimeTypeComputer.INSTANCE);
+        add(DATETIME_FROM_DATE_TIME, OptionalADateTimeTypeComputer.INSTANCE);
+        add(DATETIME_FROM_UNIX_TIME_IN_MS, OptionalADateTimeTypeComputer.INSTANCE);
+        add(SUBTRACT_DATETIME, OptionalADurationTypeComputer.INSTANCE);
+        add(ADD_DATETIME_DURATION, OptionalADateTimeTypeComputer.INSTANCE);
+        add(CALENDAR_DURATION_FROM_DATETIME, OptionalADurationTypeComputer.INSTANCE);
+        add(CALENDAR_DURATION_FROM_DATE, OptionalADurationTypeComputer.INSTANCE);
+        add(ADJUST_DATETIME_FOR_TIMEZONE, OptionalAStringTypeComputer.INSTANCE);
+        add(ADJUST_TIME_FOR_TIMEZONE, OptionalAStringTypeComputer.INSTANCE);
+        add(INTERVAL_BEFORE, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_AFTER, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_MEETS, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_MET_BY, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_OVERLAPS, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_OVERLAPPED_BY, OptionalABooleanTypeComputer.INSTANCE);
+        add(OVERLAP, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_STARTS, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_STARTED_BY, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_COVERS, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_COVERED_BY, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_ENDS, OptionalABooleanTypeComputer.INSTANCE);
+        add(INTERVAL_ENDED_BY, OptionalABooleanTypeComputer.INSTANCE);
+        add(CURRENT_DATE, ADateTypeComputer.INSTANCE);
+        add(CURRENT_TIME, ATimeTypeComputer.INSTANCE);
+        add(CURRENT_DATETIME, ADateTimeTypeComputer.INSTANCE);
+        add(DAY_TIME_DURATION_GREATER_THAN, OptionalABooleanTypeComputer.INSTANCE);
+        add(DAY_TIME_DURATION_LESS_THAN, OptionalABooleanTypeComputer.INSTANCE);
+        add(YEAR_MONTH_DURATION_GREATER_THAN, OptionalABooleanTypeComputer.INSTANCE);
+        add(YEAR_MONTH_DURATION_LESS_THAN, OptionalABooleanTypeComputer.INSTANCE);
+        add(DURATION_EQUAL, OptionalABooleanTypeComputer.INSTANCE);
+        add(DURATION_FROM_MONTHS, OptionalADurationTypeComputer.INSTANCE);
+        add(DURATION_FROM_MILLISECONDS, OptionalADurationTypeComputer.INSTANCE);
+        add(MONTHS_OF_YEAR_MONTH_DURATION, OptionalAInt32TypeComputer.INSTANCE);
+        add(MILLISECONDS_OF_DAY_TIME_DURATION, OptionalAInt64TypeComputer.INSTANCE);
+
+        // interval constructors
+        add(INTERVAL_CONSTRUCTOR_DATE, OptionalAIntervalTypeComputer.INSTANCE);
+        add(INTERVAL_CONSTRUCTOR_TIME, OptionalAIntervalTypeComputer.INSTANCE);
+        add(INTERVAL_CONSTRUCTOR_DATETIME, OptionalAIntervalTypeComputer.INSTANCE);
+        add(INTERVAL_CONSTRUCTOR_START_FROM_DATE, OptionalAIntervalTypeComputer.INSTANCE);
+        add(INTERVAL_CONSTRUCTOR_START_FROM_DATETIME, OptionalAIntervalTypeComputer.INSTANCE);
+        add(INTERVAL_CONSTRUCTOR_START_FROM_TIME, OptionalAIntervalTypeComputer.INSTANCE);
+
+        String metadataFunctionLoaderClassName = "edu.uci.ics.asterix.metadata.functions.MetadataBuiltinFunctions";
+        try {
+            Class.forName(metadataFunctionLoaderClassName);
+        } catch (ClassNotFoundException e) {
+            throw new RuntimeException(e);
+        }
+
+    }
+
+    static {
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_AVG), getAsterixFunctionInfo(AVG));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_COUNT), getAsterixFunctionInfo(COUNT));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_GLOBAL_AVG), getAsterixFunctionInfo(GLOBAL_AVG));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_LOCAL_AVG), getAsterixFunctionInfo(LOCAL_AVG));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_MAX), getAsterixFunctionInfo(MAX));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_MIN), getAsterixFunctionInfo(MIN));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_SUM), getAsterixFunctionInfo(SUM));
+    }
+
+    static {
+        addAgg(AVG);
+        addAgg(LOCAL_AVG);
+        addAgg(GLOBAL_AVG);
+        addLocalAgg(AVG, LOCAL_AVG);
+        addGlobalAgg(AVG, GLOBAL_AVG);
+
+        addAgg(COUNT);
+        addLocalAgg(COUNT, COUNT);
+        addGlobalAgg(COUNT, SUM);
+
+        addAgg(MAX);
+        addAgg(LOCAL_MAX);
+        addLocalAgg(MAX, LOCAL_MAX);
+        addGlobalAgg(MAX, MAX);
+
+        addAgg(MIN);
+        addLocalAgg(MIN, LOCAL_MIN);
+        addGlobalAgg(MIN, MIN);
+
+        addAgg(SUM);
+        addAgg(LOCAL_SUM);
+        addLocalAgg(SUM, LOCAL_SUM);
+        addGlobalAgg(SUM, SUM);
+
+        addAgg(LISTIFY);
+
+        // serializable aggregate functions
+        addSerialAgg(AVG, SERIAL_AVG);
+        addSerialAgg(COUNT, SERIAL_COUNT);
+        addSerialAgg(SUM, SERIAL_SUM);
+        addSerialAgg(LOCAL_SUM, SERIAL_LOCAL_SUM);
+        addSerialAgg(LOCAL_AVG, SERIAL_LOCAL_AVG);
+        addSerialAgg(GLOBAL_AVG, SERIAL_GLOBAL_AVG);
+
+        addAgg(SERIAL_COUNT);
+        addLocalAgg(SERIAL_COUNT, SERIAL_COUNT);
+        addGlobalAgg(SERIAL_COUNT, SERIAL_SUM);
+
+        addAgg(SERIAL_AVG);
+        addAgg(SERIAL_LOCAL_AVG);
+        addAgg(SERIAL_GLOBAL_AVG);
+        addLocalAgg(SERIAL_AVG, SERIAL_LOCAL_AVG);
+        addGlobalAgg(SERIAL_AVG, SERIAL_GLOBAL_AVG);
+
+        addAgg(SERIAL_SUM);
+        addAgg(SERIAL_LOCAL_SUM);
+        addLocalAgg(SERIAL_SUM, SERIAL_LOCAL_SUM);
+        addGlobalAgg(SERIAL_SUM, SERIAL_SUM);
+    }
+
+    static {
+        datasetFunctions.add(getAsterixFunctionInfo(DATASET));
+        datasetFunctions.add(getAsterixFunctionInfo(FEED_INGEST));
+        datasetFunctions.add(getAsterixFunctionInfo(INDEX_SEARCH));
+    }
+
+    static {
+        addUnnestFun(DATASET, false);
+        addUnnestFun(RANGE, true);
+        addUnnestFun(SCAN_COLLECTION, false);
+        addUnnestFun(SUBSET_COLLECTION, false);
+    }
+
+    public static void addDatasetFunction(FunctionIdentifier fi) {
+        datasetFunctions.add(getAsterixFunctionInfo(fi));
+    }
+
+    public static boolean isDatasetFunction(FunctionIdentifier fi) {
+        return datasetFunctions.contains(getAsterixFunctionInfo(fi));
+    }
+
+    public static boolean isBuiltinCompilerFunction(FunctionIdentifier fi) {
+        return builtinFunctionsSet.keySet().contains(getAsterixFunctionInfo(fi));
+    }
+
+    public static boolean isBuiltinAggregateFunction(FunctionIdentifier fi) {
+        return builtinAggregateFunctions.contains(getAsterixFunctionInfo(fi));
+    }
+
+    public static boolean isBuiltinUnnestingFunction(FunctionIdentifier fi) {
+        return builtinUnnestingFunctions.get(getAsterixFunctionInfo(fi)) != null;
+    }
+
+    public static boolean returnsUniqueValues(FunctionIdentifier fi) {
+        Boolean ruv = builtinUnnestingFunctions.get(getAsterixFunctionInfo(fi));
+        if (ruv != null && ruv.booleanValue()) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static FunctionIdentifier getLocalAggregateFunction(FunctionIdentifier fi) {
+        return aggregateToLocalAggregate.get(getAsterixFunctionInfo(fi)).getFunctionIdentifier();
+    }
+
+    public static FunctionIdentifier getGlobalAggregateFunction(FunctionIdentifier fi) {
+        return aggregateToGlobalAggregate.get(getAsterixFunctionInfo(fi)).getFunctionIdentifier();
+    }
+
+    public static FunctionIdentifier getBuiltinFunctionIdentifier(FunctionIdentifier fi) {
+        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
+        return finfo == null ? null : finfo.getFunctionIdentifier();
+    }
+
+    public static AggregateFunctionCallExpression makeAggregateFunctionExpression(FunctionIdentifier fi,
+            List<Mutable<ILogicalExpression>> args) {
+        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
+        IFunctionInfo fiLocal = aggregateToLocalAggregate.get(finfo);
+        IFunctionInfo fiGlobal = aggregateToGlobalAggregate.get(finfo);
+
+        if (fiLocal != null && fiGlobal != null) {
+            AggregateFunctionCallExpression fun = new AggregateFunctionCallExpression(finfo, true, args);
+            fun.setStepTwoAggregate(fiGlobal);
+            fun.setStepOneAggregate(fiLocal);
+            return fun;
+        } else {
+            return new AggregateFunctionCallExpression(finfo, false, args);
+        }
+    }
+
+    public static boolean isAggregateFunctionSerializable(FunctionIdentifier fi) {
+        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
+        return aggregateToSerializableAggregate.get(finfo) != null;
+    }
+
+    public static AggregateFunctionCallExpression makeSerializableAggregateFunctionExpression(FunctionIdentifier fi,
+            List<Mutable<ILogicalExpression>> args) {
+
+        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
+        IFunctionInfo serializableFinfo = aggregateToSerializableAggregate.get(finfo);
+        if (serializableFinfo == null)
+            throw new IllegalStateException("no serializable implementation for aggregate function "
+                    + serializableFinfo);
+
+        IFunctionInfo fiLocal = aggregateToLocalAggregate.get(serializableFinfo);
+        IFunctionInfo fiGlobal = aggregateToGlobalAggregate.get(serializableFinfo);
+
+        if (fiLocal != null && fiGlobal != null) {
+            AggregateFunctionCallExpression fun = new AggregateFunctionCallExpression(serializableFinfo, true, args);
+            fun.setStepTwoAggregate(fiGlobal);
+            fun.setStepOneAggregate(fiLocal);
+            return fun;
+        } else {
+            return new AggregateFunctionCallExpression(serializableFinfo, false, args);
+        }
+    }
+
+    public static IResultTypeComputer getResultTypeComputer(FunctionIdentifier fi) {
+        return funTypeComputer.get(getAsterixFunctionInfo(fi));
+    }
+
+    public static FunctionIdentifier getAggregateFunction(FunctionIdentifier scalarVersionOfAggregate) {
+        IFunctionInfo finfo = scalarToAggregateFunctionMap.get(getAsterixFunctionInfo(scalarVersionOfAggregate));
+        return finfo == null ? null : finfo.getFunctionIdentifier();
+    }
+
+    public static void add(FunctionIdentifier fi, IResultTypeComputer typeComputer) {
+        IFunctionInfo functionInfo = getAsterixFunctionInfo(fi);
+        builtinFunctionsSet.put(functionInfo, functionInfo);
+        funTypeComputer.put(functionInfo, typeComputer);
+        finfoRepo.put(fi);
+    }
+
+    private static IFunctionInfo addPrivateFunction(FunctionIdentifier fi, IResultTypeComputer typeComputer) {
+        IFunctionInfo functionInfo = getAsterixFunctionInfo(fi);
+        builtinFunctionsSet.put(functionInfo, functionInfo);
+        funTypeComputer.put(functionInfo, typeComputer);
+        return functionInfo;
+    }
+
+    private static void addAgg(FunctionIdentifier fi) {
+        builtinAggregateFunctions.add(getAsterixFunctionInfo(fi));
+    }
+
+    private static void addLocalAgg(FunctionIdentifier fi, FunctionIdentifier localfi) {
+        aggregateToLocalAggregate.put(getAsterixFunctionInfo(fi), getAsterixFunctionInfo(localfi));
+    }
+
+    private static void addGlobalAgg(FunctionIdentifier fi, FunctionIdentifier globalfi) {
+        aggregateToGlobalAggregate.put(getAsterixFunctionInfo(fi), getAsterixFunctionInfo(globalfi));
+    }
+
+    public static void addUnnestFun(FunctionIdentifier fi, boolean returnsUniqueValues) {
+        builtinUnnestingFunctions.put(getAsterixFunctionInfo(fi), returnsUniqueValues);
+    }
+
+    private static void addSerialAgg(FunctionIdentifier fi, FunctionIdentifier serialfi) {
+        aggregateToSerializableAggregate.put(getAsterixFunctionInfo(fi), getAsterixFunctionInfo(serialfi));
+    }
+
+    static {
+        spatialFilterFunctions.put(getAsterixFunctionInfo(AsterixBuiltinFunctions.SPATIAL_INTERSECT),
+                SpatialFilterKind.SI);
+    }
+
+    public static boolean isSpatialFilterFunction(FunctionIdentifier fi) {
+        return spatialFilterFunctions.get(getAsterixFunctionInfo(fi)) != null;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixExternalFunctionInfo.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixExternalFunctionInfo.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixExternalFunctionInfo.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixExternalFunctionInfo.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunction.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunction.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunction.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunction.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionIdentifier.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionIdentifier.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionIdentifier.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionIdentifier.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionInfo.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionInfo.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionInfo.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixFunctionInfo.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionInfoRepository.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionInfoRepository.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionInfoRepository.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionInfoRepository.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionManagerHolder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionManagerHolder.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionManagerHolder.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/FunctionManagerHolder.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IExternalFunctionInfo.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IExternalFunctionInfo.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IExternalFunctionInfo.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IExternalFunctionInfo.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptorFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptorFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptorFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionDescriptorFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionManager.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionManager.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionManager.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/IFunctionManager.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/AsterixIOException.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/AsterixIOException.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/AsterixIOException.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/io/AsterixIOException.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IALocation.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IALocation.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IALocation.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IALocation.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReader.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReader.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReader.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReader.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReaderWriterFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReaderWriterFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReaderWriterFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMReaderWriterFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMWriter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMWriter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMWriter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/io/IAOMWriter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AFlatValuePointable.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AFlatValuePointable.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AFlatValuePointable.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AFlatValuePointable.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AListPointable.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AListPointable.java
new file mode 100644
index 0000000..84c9e6c
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AListPointable.java
@@ -0,0 +1,180 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.om.pointables;
+
+import java.io.DataOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.om.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.om.pointables.visitor.IVisitablePointableVisitor;
+import edu.uci.ics.asterix.om.types.AOrderedListType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.asterix.om.util.ResettableByteArrayOutputStream;
+import edu.uci.ics.asterix.om.util.container.IObjectFactory;
+
+/**
+ * This class interprets the binary data representation of a list, one can
+ * call getItems and getItemTags to get pointable objects for items and item
+ * type tags.
+ */
+public class AListPointable extends AbstractVisitablePointable {
+
+    /**
+     * DO NOT allow to create AListPointable object arbitrarily, force to use
+     * object pool based allocator, in order to have object reuse.
+     */
+    static IObjectFactory<IVisitablePointable, IAType> FACTORY = new IObjectFactory<IVisitablePointable, IAType>() {
+        public IVisitablePointable create(IAType type) {
+            return new AListPointable((AbstractCollectionType) type);
+        }
+    };
+
+    private final List<IVisitablePointable> items = new ArrayList<IVisitablePointable>();
+    private final List<IVisitablePointable> itemTags = new ArrayList<IVisitablePointable>();
+    private final PointableAllocator allocator = new PointableAllocator();
+
+    private final ResettableByteArrayOutputStream dataBos = new ResettableByteArrayOutputStream();
+    private final DataOutputStream dataDos = new DataOutputStream(dataBos);
+
+    private IAType itemType;
+    private ATypeTag itemTag;
+    private boolean typedItemList = false;
+    private boolean ordered = false;
+
+    /**
+     * private constructor, to prevent constructing it arbitrarily
+     * 
+     * @param inputType
+     */
+    private AListPointable(AbstractCollectionType inputType) {
+        if (inputType instanceof AOrderedListType) {
+            ordered = true;
+        }
+        if (inputType != null && inputType.getItemType() != null) {
+            itemType = inputType.getItemType();
+            if (itemType.getTypeTag() == ATypeTag.ANY) {
+                typedItemList = false;
+            } else {
+                typedItemList = true;
+                itemTag = inputType.getItemType().getTypeTag();
+            }
+        } else {
+            this.typedItemList = false;
+        }
+    }
+
+    private void reset() {
+        allocator.reset();
+        items.clear();
+        itemTags.clear();
+        dataBos.reset();
+    }
+
+    @Override
+    public void set(byte[] b, int s, int len) {
+        reset();
+        super.set(b, s, len);
+
+        int numberOfitems = AInt32SerializerDeserializer.getInt(b, s + 6);
+        int itemOffset;
+        if (typedItemList) {
+            switch (itemTag) {
+                case STRING:
+                case RECORD:
+                case ORDEREDLIST:
+                case UNORDEREDLIST:
+                case ANY:
+                    itemOffset = s + 10 + (numberOfitems * 4);
+                    break;
+                default:
+                    itemOffset = s + 10;
+            }
+        } else {
+            itemOffset = s + 10 + (numberOfitems * 4);
+        }
+        int itemLength = 0;
+        try {
+            if (typedItemList) {
+                for (int i = 0; i < numberOfitems; i++) {
+                    itemLength = NonTaggedFormatUtil.getFieldValueLength(b, itemOffset, itemTag, false);
+                    IVisitablePointable tag = allocator.allocateEmpty();
+                    IVisitablePointable item = allocator.allocateFieldValue(itemType);
+
+                    // set item type tag
+                    int start = dataBos.size();
+                    dataDos.writeByte(itemTag.serialize());
+                    int end = dataBos.size();
+                    tag.set(dataBos.getByteArray(), start, end - start);
+                    itemTags.add(tag);
+
+                    // set item value
+                    start = dataBos.size();
+                    dataDos.writeByte(itemTag.serialize());
+                    dataDos.write(b, itemOffset, itemLength);
+                    end = dataBos.size();
+                    item.set(dataBos.getByteArray(), start, end - start);
+                    itemOffset += itemLength;
+                    items.add(item);
+                }
+            } else {
+                for (int i = 0; i < numberOfitems; i++) {
+                    itemTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[itemOffset]);
+                    itemLength = NonTaggedFormatUtil.getFieldValueLength(b, itemOffset, itemTag, true) + 1;
+                    IVisitablePointable tag = allocator.allocateEmpty();
+                    IVisitablePointable item = allocator.allocateFieldValue(itemTag);
+
+                    // set item type tag
+                    int start = dataBos.size();
+                    dataDos.writeByte(itemTag.serialize());
+                    int end = dataBos.size();
+                    tag.set(dataBos.getByteArray(), start, end - start);
+                    itemTags.add(tag);
+
+                    // open part field already include the type tag
+                    item.set(b, itemOffset, itemLength);
+                    itemOffset += itemLength;
+                    items.add(item);
+                }
+            }
+        } catch (Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    @Override
+    public <R, T> R accept(IVisitablePointableVisitor<R, T> vistor, T tag) throws AsterixException {
+        return vistor.visit(this, tag);
+    }
+
+    public List<IVisitablePointable> getItems() {
+        return items;
+    }
+
+    public List<IVisitablePointable> getItemTags() {
+        return itemTags;
+    }
+
+    public boolean ordered() {
+        return ordered;
+    }
+}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/ARecordPointable.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/ARecordPointable.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/ARecordPointable.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/ARecordPointable.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AbstractVisitablePointable.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AbstractVisitablePointable.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AbstractVisitablePointable.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AbstractVisitablePointable.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/PointableAllocator.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/PointableAllocator.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/PointableAllocator.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/PointableAllocator.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/DefaultOpenFieldType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/DefaultOpenFieldType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/DefaultOpenFieldType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/DefaultOpenFieldType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/IVisitablePointable.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/IVisitablePointable.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/IVisitablePointable.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/base/IVisitablePointable.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ACastVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ACastVisitor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ACastVisitor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ACastVisitor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/AListCaster.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ARecordCaster.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ARecordCaster.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ARecordCaster.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/cast/ARecordCaster.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/AListPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/APrintVisitor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/ARecordPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/AListPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/AListPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/AListPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/AListPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/APrintVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/APrintVisitor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/APrintVisitor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/APrintVisitor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/ARecordPrinter.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/ARecordPrinter.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/ARecordPrinter.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/printer/json/ARecordPrinter.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/visitor/IVisitablePointableVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/visitor/IVisitablePointableVisitor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/visitor/IVisitablePointableVisitor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/visitor/IVisitablePointableVisitor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/IResultTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/IResultTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/IResultTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/IResultTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ABooleanTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ABooleanTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ABooleanTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ABooleanTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ACircleTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ACircleTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ACircleTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ACircleTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTimeTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTimeTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTimeTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTimeTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADateTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADoubleTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADoubleTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADoubleTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ADoubleTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AFloatTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AFloatTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AFloatTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AFloatTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt32TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt32TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt32TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt32TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt64TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt64TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt64TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AInt64TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ALineTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ALineTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ALineTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ALineTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ANullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ANullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ANullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ANullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APoint3DTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APoint3DTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APoint3DTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APoint3DTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APointTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APointTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APointTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APointTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APolygonTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APolygonTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APolygonTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/APolygonTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ARectangleTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ARectangleTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ARectangleTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ARectangleTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AStringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AStringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AStringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AStringTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ATimeTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ATimeTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ATimeTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ATimeTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractBinaryStringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractBinaryStringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractBinaryStringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractBinaryStringTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractQuadStringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractQuadStringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractQuadStringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractQuadStringTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractTripleStringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractTripleStringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractTripleStringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/AbstractTripleStringTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryBooleanOrNullFunctionTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryBooleanOrNullFunctionTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryBooleanOrNullFunctionTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryBooleanOrNullFunctionTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringBoolOrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringBoolOrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringBoolOrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringBoolOrNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringStringOrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringStringOrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringStringOrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/BinaryStringStringOrNullTypeComputer.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastListResultTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastListResultTypeComputer.java
new file mode 100644
index 0000000..4c3c56b
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastListResultTypeComputer.java
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.om.typecomputer.impl;
+
+import edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer;
+import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+
+/**
+ * The type computer for the cast-list function
+ * 
+ * @author yingyib
+ */
+public class CastListResultTypeComputer implements IResultTypeComputer {
+
+    public static final CastListResultTypeComputer INSTANCE = new CastListResultTypeComputer();
+
+    @Override
+    public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+            IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
+        ScalarFunctionCallExpression funcExpr = (ScalarFunctionCallExpression) expression;
+        return TypeComputerUtilities.getRequiredType(funcExpr);
+    }
+}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastRecordResultTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastRecordResultTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastRecordResultTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/CastRecordResultTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/FieldAccessByIndexResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/GetItemResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/GetItemResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/GetItemResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/GetItemResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/InjectFailureTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedCollectionMemberResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedCollectionMemberResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedCollectionMemberResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedCollectionMemberResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedFieldAccessByNameResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedFieldAccessByNameResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedFieldAccessByNameResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedFieldAccessByNameResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedGetItemResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedLocalAvgTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedLocalAvgTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedLocalAvgTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedLocalAvgTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericAddSubMulDivTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericRoundHalfToEven2TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedNumericUnaryFunctionTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSumTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSumTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSumTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSumTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedSwitchCaseComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NonTaggedUnaryMinusTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NotNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NotNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NotNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NotNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/NumericAddSubMulTypeDescriptor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalABooleanTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalACircleTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTimeTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADateTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADoubleTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADoubleTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADoubleTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADoubleTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADurationTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADurationTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADurationTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalADurationTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAFloatTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAFloatTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAFloatTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAFloatTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt16TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt16TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt16TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt16TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt32TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt32TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt32TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt32TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt64TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt64TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt64TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt64TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt8TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt8TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt8TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAInt8TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAIntervalTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAIntervalTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAIntervalTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAIntervalTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalALineTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalALineTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalALineTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalALineTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPoint3DTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPoint3DTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPoint3DTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPoint3DTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPointTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPointTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPointTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPointTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPolygonTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPolygonTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPolygonTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAPolygonTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalARectangleTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalARectangleTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalARectangleTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalARectangleTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAStringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAStringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAStringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalAStringTypeComputer.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATemporalInstanceTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATemporalInstanceTypeComputer.java
new file mode 100644
index 0000000..eda385f
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATemporalInstanceTypeComputer.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.om.typecomputer.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+
+public class OptionalATemporalInstanceTypeComputer implements IResultTypeComputer {
+
+    public static final OptionalATemporalInstanceTypeComputer INSTANCE = new OptionalATemporalInstanceTypeComputer();
+
+    private OptionalATemporalInstanceTypeComputer() {
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer#computeType(edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression, edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment, edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider)
+     */
+    @Override
+    public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+            IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
+        List<IAType> unionList = new ArrayList<IAType>();
+        unionList.add(BuiltinType.ANULL);
+        unionList.add(BuiltinType.ADATE);
+        unionList.add(BuiltinType.ATIME);
+        unionList.add(BuiltinType.ADATETIME);
+        return new AUnionType(unionList, "OptionalTemporalInstance");
+    }
+
+}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATimeTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATimeTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATimeTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OptionalATimeTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAInt32TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAInt32TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAInt32TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAInt32TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAPointTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAPointTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAPointTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAPointTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAStringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAStringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAStringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAStringTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAnyTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAnyTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAnyTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListOfAnyTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/QuadStringStringOrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/QuadStringStringOrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/QuadStringStringOrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/QuadStringStringOrNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/RecordConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/RecordConstructorResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/RecordConstructorResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/RecordConstructorResultType.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
new file mode 100644
index 0000000..9126065
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
@@ -0,0 +1,43 @@
+package edu.uci.ics.asterix.om.typecomputer.impl;
+
+import edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.types.TypeHelper;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
+
+public class ScalarVersionOfAggregateResultType implements IResultTypeComputer {
+
+    public static final ScalarVersionOfAggregateResultType INSTANCE = new ScalarVersionOfAggregateResultType();
+
+    private ScalarVersionOfAggregateResultType() {
+    }
+
+    @Override
+    public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
+            IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
+        AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression;
+        ILogicalExpression arg1 = fce.getArguments().get(0).getValue();
+        IAType t1 = (IAType) env.getType(arg1);
+        IAType nonOpt = TypeHelper.getNonOptionalType(t1);
+        ATypeTag tag1 = nonOpt.getTypeTag();
+        if (tag1 != ATypeTag.ORDEREDLIST && tag1 != ATypeTag.UNORDEREDLIST) {
+            throw new AlgebricksException("Type of argument in " + expression
+                    + " should be a collection type instead of " + t1);
+        }
+        AbstractCollectionType act = (AbstractCollectionType) nonOpt;
+        IAType t = act.getItemType();
+        if (TypeHelper.canBeNull(t)) {
+            return t;
+        } else {
+            return AUnionType.createNullableType(t);
+        }
+    }
+
+}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/Substring2TypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/Substring2TypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/Substring2TypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/Substring2TypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/SubstringTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/SubstringTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/SubstringTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/SubstringTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringBoolOrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringBoolOrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringBoolOrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringBoolOrNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringStringOrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringStringOrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringStringOrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/TripleStringStringOrNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryBooleanOrNullFunctionTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryBooleanOrNullFunctionTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryBooleanOrNullFunctionTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryBooleanOrNullFunctionTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringInt32OrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringInt32OrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringInt32OrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringInt32OrNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringOrNullTypeComputer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringOrNullTypeComputer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringOrNullTypeComputer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnaryStringOrNullTypeComputer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AOrderedListType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AOrderedListType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AOrderedListType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AOrderedListType.java
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
new file mode 100644
index 0000000..ca7bc24
--- /dev/null
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
@@ -0,0 +1,438 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.om.types;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import edu.uci.ics.asterix.common.annotations.IRecordTypeAnnotation;
+import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.base.IAObject;
+import edu.uci.ics.asterix.om.visitors.IOMVisitor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
+import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunction;
+import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
+import edu.uci.ics.hyracks.dataflow.common.data.marshalling.UTF8StringSerializerDeserializer;
+
+public class ARecordType extends AbstractComplexType {
+
+    private static final long serialVersionUID = 1L;
+    private String[] fieldNames;
+    private IAType[] fieldTypes;
+    private boolean isOpen;
+    private final List<IRecordTypeAnnotation> annotations = new ArrayList<IRecordTypeAnnotation>();
+
+    private transient IBinaryHashFunction fieldNameHashFunction;
+    private transient IBinaryComparator fieldNameComparator;
+    private final byte serializedFieldNames[];
+    private final int serializedFieldNameOffsets[];
+    private final long hashCodeIndexPairs[];
+
+    /**
+     * @param typeName
+     *            the name of the type
+     * @param fieldNames
+     *            the names of the closed fields
+     * @param fieldTypes
+     *            the types of the closed fields
+     * @param isOpen
+     *            whether the record is open
+     * @throws AsterixException
+     *             if there are duplicate field names or if there is an error serializing the field names
+     */
+    public ARecordType(String typeName, String[] fieldNames, IAType[] fieldTypes, boolean isOpen)
+            throws AsterixException {
+        super(typeName);
+        this.fieldNames = fieldNames;
+        this.fieldTypes = fieldTypes;
+        this.isOpen = isOpen;
+
+        fieldNameComparator = new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY)
+                .createBinaryComparator();
+        fieldNameHashFunction = new PointableBinaryHashFunctionFactory(UTF8StringPointable.FACTORY)
+                .createBinaryHashFunction();
+        ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
+        DataOutputStream dos = new DataOutputStream(baaos);
+        serializedFieldNameOffsets = new int[fieldNames.length];
+        hashCodeIndexPairs = new long[fieldNames.length];
+
+        int length = 0;
+        for (int i = 0; i < fieldNames.length; i++) {
+            serializedFieldNameOffsets[i] = baaos.size();
+            try {
+                dos.writeUTF(fieldNames[i]);
+            } catch (IOException e) {
+                throw new AsterixException(e);
+            }
+            length = baaos.size() - serializedFieldNameOffsets[i];
+            hashCodeIndexPairs[i] = fieldNameHashFunction.hash(baaos.getByteArray(), serializedFieldNameOffsets[i],
+                    length);
+            hashCodeIndexPairs[i] = hashCodeIndexPairs[i] << 32;
+            hashCodeIndexPairs[i] = hashCodeIndexPairs[i] | i;
+        }
+        serializedFieldNames = baaos.getByteArray();
+
+        Arrays.sort(hashCodeIndexPairs);
+        int j;
+        for (int i = 0; i < fieldNames.length; i++) {
+            j = findFieldPosition(serializedFieldNames, serializedFieldNameOffsets[i],
+                    UTF8StringPointable.getStringLength(serializedFieldNames, serializedFieldNameOffsets[i]));
+            if (j != i) {
+                throw new AsterixException("Closed fields " + j + " and " + i + " have the same field name \""
+                        + fieldNames[i] + "\"");
+            }
+        }
+    }
+
+    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
+        ois.defaultReadObject();
+        fieldNameComparator = new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY)
+                .createBinaryComparator();
+        fieldNameHashFunction = new PointableBinaryHashFunctionFactory(UTF8StringPointable.FACTORY)
+                .createBinaryHashFunction();
+    }
+
+    /**
+     * Returns the position of the field in the closed schema or -1 if the field does not exist.
+     * 
+     * @param bytes
+     *            the serialized bytes of the field name
+     * @param start
+     *            the starting offset of the field name in bytes
+     * @param length
+     *            the length of the field name in bytes
+     * @return the position of the field in the closed schema or -1 if the field does not exist.
+     */
+    public int findFieldPosition(byte[] bytes, int start, int length) {
+        if (hashCodeIndexPairs.length == 0) {
+            return -1;
+        }
+
+        int fIndex;
+        int probeFieldHash = fieldNameHashFunction.hash(bytes, start, length);
+        int i = Arrays.binarySearch(hashCodeIndexPairs, ((long) probeFieldHash) << 32);
+        i = (i < 0) ? (i = -1 * (i + 1)) : i;
+
+        while (i < hashCodeIndexPairs.length && (int) (hashCodeIndexPairs[i] >>> 32) == probeFieldHash) {
+            fIndex = (int) hashCodeIndexPairs[i];
+            int cFieldLength = UTF8StringPointable.getStringLength(serializedFieldNames,
+                    serializedFieldNameOffsets[fIndex]);
+            if (fieldNameComparator.compare(serializedFieldNames, serializedFieldNameOffsets[fIndex], cFieldLength,
+                    bytes, start, length) == 0) {
+                return fIndex;
+            }
+            i++;
+        }
+
+        return -1;
+    }
+
+    public final String[] getFieldNames() {
+        return fieldNames;
+    }
+
+    public final IAType[] getFieldTypes() {
+        return fieldTypes;
+    }
+
+    public List<IRecordTypeAnnotation> getAnnotations() {
+        return annotations;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        if (isOpen) {
+            sb.append("open ");
+        } else {
+            sb.append("closed ");
+        }
+        sb.append("{\n");
+        int n = fieldNames.length;
+        for (int i = 0; i < n; i++) {
+            sb.append("  " + fieldNames[i] + ": " + fieldTypes[i].toString());
+            if (i < n - 1) {
+                sb.append(",\n");
+            } else {
+                sb.append("\n");
+            }
+        }
+        sb.append("}\n");
+        return sb.toString();
+    }
+
+    @Override
+    public ATypeTag getTypeTag() {
+        return ATypeTag.RECORD;
+    }
+
+    public boolean isOpen() {
+        return isOpen;
+    }
+
+    /**
+     * Returns the position of the field in the closed schema or -1 if the field does not exist.
+     * 
+     * @param fieldName
+     *            the name of the field whose position is sought
+     * @return the position of the field in the closed schema or -1 if the field does not exist.
+     */
+    public int findFieldPosition(String fieldName) throws IOException {
+        ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
+        DataOutputStream dos = new DataOutputStream(baaos);
+        UTF8StringSerializerDeserializer.INSTANCE.serialize(fieldName, dos);
+        return findFieldPosition(baaos.getByteArray(), 0, baaos.getByteArray().length);
+    }
+
+    /**
+     * Returns the field type of the field name if it exists, otherwise null.
+     * 
+     * @param fieldName
+     *            the fieldName whose type is sought
+     * @return the field type of the field name if it exists, otherwise null
+     * @throws IOException
+     *             if an error occurs while serializing the field name
+     */
+    public IAType getFieldType(String fieldName) throws IOException {
+        int fieldPos = findFieldPosition(fieldName);
+        if (fieldPos < 0 || fieldPos >= fieldTypes.length) {
+            return null;
+        }
+        return fieldTypes[fieldPos];
+    }
+
+    /**
+     * Returns true or false indicating whether or not a field is closed.
+     * 
+     * @param fieldName
+     *            the name of the field to check
+     * @return true if fieldName is a closed field, otherwise false
+     * @throws IOException
+     */
+    public boolean isClosedField(String fieldName) throws IOException {
+        return findFieldPosition(fieldName) != -1;
+    }
+
+    /**
+     * Validates the partitioning expression that will be used to partition a dataset.
+     * 
+     * @param partitioningExprs
+     *            a list of partitioning expressions that will be validated
+     * @throws AlgebricksException
+     *             (if the validation failed), IOException
+     */
+    public void validatePartitioningExpressions(List<String> partitioningExprs) throws AlgebricksException, IOException {
+        for (String fieldName : partitioningExprs) {
+            IAType fieldType = getFieldType(fieldName);
+            if (fieldType == null) {
+                throw new AlgebricksException("A field with this name  \"" + fieldName + "\" could not be found.");
+            }
+            switch (fieldType.getTypeTag()) {
+                case INT32:
+                case INT64:
+                case FLOAT:
+                case DOUBLE:
+                case STRING:
+                    break;
+                case UNION:
+                    throw new AlgebricksException("The partitioning key \"" + fieldName + "\" cannot be nullable");
+                default:
+                    throw new AlgebricksException("The partitioning key \"" + fieldName + "\" cannot be of type "
+                            + fieldType.getTypeTag() + ".");
+            }
+        }
+    }
+
+    /**
+     * Validates the key fields that will be used as keys of an index.
+     * 
+     * @param keyFieldNames
+     *            a list of key fields that will be validated
+     * @param indexType
+     *            the type of the index that its key fields is being validated
+     * @throws AlgebricksException
+     *             (if the validation failed), IOException
+     */
+    public void validateKeyFields(List<String> keyFieldNames, IndexType indexType) throws AlgebricksException,
+            IOException {
+        for (String fieldName : keyFieldNames) {
+            IAType fieldType = getFieldType(fieldName);
+            if (fieldType == null) {
+                throw new AlgebricksException("A field with this name  \"" + fieldName + "\" could not be found.");
+            }
+            switch (indexType) {
+                case BTREE:
+                    switch (fieldType.getTypeTag()) {
+                        case INT8:
+                        case INT16:
+                        case INT32:
+                        case INT64:
+                        case FLOAT:
+                        case DOUBLE:
+                        case STRING:
+                        case DATE:
+                        case TIME:
+                        case DATETIME:
+                        case UNION:
+                            break;
+                        default:
+                            throw new AlgebricksException("The field \"" + fieldName + "\" which is of type "
+                                    + fieldType.getTypeTag() + " cannot be indexed using the BTree index.");
+                    }
+                    break;
+                case RTREE:
+                    switch (fieldType.getTypeTag()) {
+                        case POINT:
+                        case LINE:
+                        case RECTANGLE:
+                        case CIRCLE:
+                        case POLYGON:
+                        case UNION:
+                            break;
+                        default:
+                            throw new AlgebricksException("The field \"" + fieldName + "\" which is of type "
+                                    + fieldType.getTypeTag() + " cannot be indexed using the RTree index.");
+                    }
+                    break;
+                case FUZZY_NGRAM_INVIX:
+                    switch (fieldType.getTypeTag()) {
+                        case STRING:
+                        case UNION:
+                            break;
+                        default:
+                            throw new AlgebricksException("The field \"" + fieldName + "\" which is of type "
+                                    + fieldType.getTypeTag() + " cannot be indexed using the Fuzzy N-Gram index.");
+                    }
+                    break;
+                case FUZZY_WORD_INVIX:
+                    switch (fieldType.getTypeTag()) {
+                        case STRING:
+                        case UNORDEREDLIST:
+                        case ORDEREDLIST:
+                        case UNION:
+                            break;
+                        default:
+                            throw new AlgebricksException("The field \"" + fieldName + "\" which is of type "
+                                    + fieldType.getTypeTag() + " cannot be indexed using the Fuzzy Keyword index.");
+                    }
+                    break;
+                case NGRAM_INVIX:
+                    switch (fieldType.getTypeTag()) {
+                        case STRING:
+                        case UNION:
+                            break;
+                        default:
+                            throw new AlgebricksException("The field \"" + fieldName + "\" which is of type "
+                                    + fieldType.getTypeTag() + " cannot be indexed using the N-Gram index.");
+                    }
+                    break;
+                case WORD_INVIX:
+                    switch (fieldType.getTypeTag()) {
+                        case STRING:
+                        case UNORDEREDLIST:
+                        case ORDEREDLIST:
+                        case UNION:
+                            break;
+                        default:
+                            throw new AlgebricksException("The field \"" + fieldName + "\" which is of type "
+                                    + fieldType.getTypeTag() + " cannot be indexed using the Keyword index.");
+                    }
+                    break;
+                default:
+                    throw new AlgebricksException("Invalid index type: " + indexType + ".");
+            }
+        }
+    }
+
+    public boolean doesFieldExist(String fieldName) {
+        for (String f : fieldNames) {
+            if (f.compareTo(fieldName) == 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @Override
+    public String getDisplayName() {
+        return "ARecord";
+    }
+
+    @Override
+    public void accept(IOMVisitor visitor) throws AsterixException {
+        visitor.visitAType(this);
+    }
+
+    @Override
+    public IAType getType() {
+        return BuiltinType.ASTERIX_TYPE;
+    }
+
+    @Override
+    public boolean deepEqual(IAObject obj) {
+        if (!(obj instanceof ARecordType)) {
+            return false;
+        }
+        ARecordType rt = (ARecordType) obj;
+        return isOpen == rt.isOpen && Arrays.deepEquals(fieldNames, rt.fieldNames)
+                && Arrays.deepEquals(fieldTypes, rt.fieldTypes);
+    }
+
+    @Override
+    public int hash() {
+        int h = 0;
+        for (int i = 0; i < fieldNames.length; i++) {
+            h += 31 * h + (int) (hashCodeIndexPairs[i] >> 32);
+        }
+        for (int i = 0; i < fieldTypes.length; i++) {
+            h += 31 * h + fieldTypes[i].hashCode();
+        }
+        return h;
+    }
+
+    @Override
+    public JSONObject toJSON() throws JSONException {
+        JSONObject type = new JSONObject();
+        if (isOpen) {
+            type.put("open", true);
+        } else {
+            type.put("open", false);
+        }
+
+        JSONArray fields = new JSONArray();
+        for (int i = 0; i < fieldNames.length; i++) {
+            JSONObject field = new JSONObject();
+            field.put(fieldNames[i], fieldTypes[i].toJSON());
+            fields.put(field);
+        }
+
+        type.put("fields", fields);
+        return type;
+    }
+}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ATypeTag.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnionType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnionType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnionType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnionType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnorderedListType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnorderedListType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnorderedListType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AUnorderedListType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractCollectionType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractCollectionType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractCollectionType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractCollectionType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractComplexType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractComplexType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractComplexType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/AbstractComplexType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/BuiltinType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/BuiltinType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/BuiltinType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/BuiltinType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/EnumDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/EnumDeserializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/EnumDeserializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/EnumDeserializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IAType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IAType.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IAType.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IAType.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IEnumSerializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IEnumSerializer.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IEnumSerializer.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/IEnumSerializer.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHelper.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHelper.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHelper.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHelper.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHierarchy.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHierarchy.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHierarchy.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeHierarchy.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeSignature.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeSignature.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeSignature.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/types/TypeSignature.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/AsterixRuntimeUtil.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/AsterixRuntimeUtil.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/AsterixRuntimeUtil.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/util/AsterixRuntimeUtil.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/NonTaggedFormatUtil.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/NonTaggedFormatUtil.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/NonTaggedFormatUtil.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/util/NonTaggedFormatUtil.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/ResettableByteArrayOutputStream.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/ResettableByteArrayOutputStream.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/ResettableByteArrayOutputStream.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/util/ResettableByteArrayOutputStream.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectFactory.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectFactory.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectFactory.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectFactory.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectPool.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectPool.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectPool.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/IObjectPool.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/ListObjectPool.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/ListObjectPool.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/ListObjectPool.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/util/container/ListObjectPool.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/IOMVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/IOMVisitor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/IOMVisitor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/IOMVisitor.java
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/OMPrintToStringVisitor.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/OMPrintToStringVisitor.java
similarity index 100%
rename from asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/OMPrintToStringVisitor.java
rename to asterix-om/src/main/java/edu/uci/ics/asterix/om/visitors/OMPrintToStringVisitor.java
diff --git a/asterix-runtime/pom.xml b/asterix-runtime/pom.xml
new file mode 100644
index 0000000..74a1f27
--- /dev/null
+++ b/asterix-runtime/pom.xml
@@ -0,0 +1,160 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-runtime</artifactId>
+
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+	      	<plugin>
+	        	<groupId>edu.uci.ics.asterix</groupId>
+	        	<artifactId>lexer-generator-maven-plugin</artifactId>
+	        	<version>0.0.6-SNAPSHOT</version>
+	        	<configuration>
+	        	  	<grammarFile>src/main/resources/adm.grammar</grammarFile>
+	        	  	<outputDir>${project.build.directory}/generated-sources/edu/uci/ics/asterix/runtime/operators/file/adm</outputDir>
+	        	</configuration>
+	        	<executions>
+		          	<execution>
+		          		<id>generate-lexer</id>
+            			<phase>generate-sources</phase>
+			            <goals>
+	              			<goal>generate-lexer</goal>
+	            		</goals>
+	          		</execution>
+	        	</executions>
+	      	</plugin>
+	      	 <plugin>
+			    <groupId>org.codehaus.mojo</groupId>
+			    <artifactId>build-helper-maven-plugin</artifactId>
+			    <executions>
+			        <execution>
+			            <id>add-source</id>
+			            <phase>generate-sources</phase>
+			            <goals>
+			                <goal>add-source</goal>
+			            </goals>
+			            <configuration>
+			                <sources>
+			                    <source>${project.build.directory}/generated-sources/</source>
+			                </sources>
+			            </configuration>
+			        </execution>
+			    </executions>
+ 			</plugin>
+	    </plugins>
+		<pluginManagement>
+			<plugins>
+				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
+				<plugin>
+					<groupId>org.eclipse.m2e</groupId>
+					<artifactId>lifecycle-mapping</artifactId>
+					<version>1.0.0</version>
+					<configuration>
+						<lifecycleMappingMetadata>
+							<pluginExecutions>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											edu.uci.ics.asterix
+										</groupId>
+										<artifactId>
+											lexer-generator-maven-plugin
+										</artifactId>
+										<versionRange>
+											[0.1,)
+										</versionRange>
+										<goals>
+											<goal>generate-lexer</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<execute>
+											<runOnIncremental>false</runOnIncremental>
+										</execute>
+									</action>
+								</pluginExecution>
+								<pluginExecution>
+									<pluginExecutionFilter>
+										<groupId>
+											org.codehaus.mojo
+										</groupId>
+										<artifactId>
+											build-helper-maven-plugin
+										</artifactId>
+										<versionRange>
+											[1.7,)
+										</versionRange>
+										<goals>
+											<goal>add-source</goal>
+										</goals>
+									</pluginExecutionFilter>
+									<action>
+										<ignore />
+									</action>
+								</pluginExecution>
+							</pluginExecutions>
+						</lifecycleMappingMetadata>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-om</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.fuzzyjoin</groupId>
+			<artifactId>fuzzyjoin-core</artifactId>
+			<version>0.0.3</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-btree</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-transactions</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.twitter4j</groupId>
+			<artifactId>twitter4j-core</artifactId>
+			<version>2.2.3</version>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.hadoop</groupId>
+			<artifactId>hadoop-core</artifactId>
+			<version>0.20.2</version>
+			<type>jar</type>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+		         <groupId>edu.uci.ics.hyracks</groupId>
+		         <artifactId>hyracks-api</artifactId>
+	        </dependency>
+	</dependencies>
+
+</project>
+
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractAggregateFunctionDynamicDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractAggregateFunctionDynamicDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractAggregateFunctionDynamicDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractAggregateFunctionDynamicDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractSerializableAggregateFunctionDynamicDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractSerializableAggregateFunctionDynamicDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractSerializableAggregateFunctionDynamicDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/AbstractSerializableAggregateFunctionDynamicDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/SingleFieldFrameTupleReference.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/SingleFieldFrameTupleReference.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/SingleFieldFrameTupleReference.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/base/SingleFieldFrameTupleReference.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/collections/ListifyAggregateFunctionEvalFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/AbstractScalarAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/GenericScalarAggregateFunction.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/GenericScalarAggregateFunction.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/GenericScalarAggregateFunction.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/GenericScalarAggregateFunction.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarAvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarCountAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMaxAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarMinAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/scalar/ScalarSumAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/BufferSerDeUtil.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/BufferSerDeUtil.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/BufferSerDeUtil.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/BufferSerDeUtil.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableCountAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalSumAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateFunction.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateDescriptor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateFunction.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateFunction.java
new file mode 100644
index 0000000..82c1e8a
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateFunction.java
@@ -0,0 +1,69 @@
+package edu.uci.ics.asterix.runtime.aggregates.std;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyAggregateFunction;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+/**
+ * COUNT returns the number of items in the given list. Note that COUNT(NULL) is not allowed.
+ */
+public class CountAggregateFunction implements ICopyAggregateFunction {
+    private AMutableInt32 result = new AMutableInt32(-1);
+    @SuppressWarnings("unchecked")
+    private ISerializerDeserializer<AInt32> int32Serde = AqlSerializerDeserializerProvider.INSTANCE
+            .getSerializerDeserializer(BuiltinType.AINT32);
+    private ArrayBackedValueStorage inputVal = new ArrayBackedValueStorage();
+    private ICopyEvaluator eval;
+    private int cnt;
+    private DataOutput out;
+
+    public CountAggregateFunction(ICopyEvaluatorFactory[] args, IDataOutputProvider output) throws AlgebricksException {
+        eval = args[0].createEvaluator(inputVal);
+        out = output.getDataOutput();
+    }
+
+    @Override
+    public void init() {
+        cnt = 0;
+    }
+
+    @Override
+    public void step(IFrameTupleReference tuple) throws AlgebricksException {
+        inputVal.reset();
+        eval.evaluate(tuple);
+        ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(inputVal.getByteArray()[0]);
+        // Ignore SYSTEM_NULL.
+        if (typeTag != ATypeTag.SYSTEM_NULL) {
+            cnt++;
+        }
+    }
+
+    @Override
+    public void finish() throws AlgebricksException {
+        try {
+            result.setValue(cnt);
+            int32Serde.serialize(result, out);
+        } catch (IOException e) {
+            throw new AlgebricksException(e);
+        }
+    }
+
+    @Override
+    public void finishPartial() throws AlgebricksException {
+        finish();
+    }
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMaxAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalMinAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalSumAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinMaxAggregateFunction.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateFunction.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateFunction.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateFunction.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateFunction.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/EmptyStreamAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/stream/NonEmptyStreamAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilterFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilterFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilterFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilterFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleCenterAccessor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/CircleRadiusAccessor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/LineRectanglePolygonAccessor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointXCoordinateAccessor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/PointYCoordinateAccessor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
new file mode 100644
index 0000000..6b7a9d2
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalDayAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_DAY;
+
+    // allowed input types
+    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalDayAccessor();
+        }
+    };
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
+     */
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationDay(ADurationSerializerDeserializer
+                                        .getDayTime(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_DATE_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1)
+                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int year = calSystem.getYear(chrononTimeInMs);
+                            int month = calSystem.getMonthOfYear(chrononTimeInMs, year);
+                            int day = calSystem.getDayOfMonthYear(chrononTimeInMs, year, month);
+
+                            aMutableInt32.setValue(day);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
new file mode 100644
index 0000000..38e83db
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalHourAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_HOUR;
+
+    // allowed input types
+    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalHourAccessor();
+        }
+
+    };
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
+     */
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationHour(ADurationSerializerDeserializer
+                                        .getDayTime(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_TIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int hour = calSystem.getHourOfDay(chrononTimeInMs);
+
+                            aMutableInt32.setValue(hour);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
new file mode 100644
index 0000000..e8ea6d5
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalIntervalEndAccessor.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ADate;
+import edu.uci.ics.asterix.om.base.ADateTime;
+import edu.uci.ics.asterix.om.base.AMutableDate;
+import edu.uci.ics.asterix.om.base.AMutableDateTime;
+import edu.uci.ics.asterix.om.base.AMutableTime;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.ATime;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalIntervalEndAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_INTERVAL_END;
+
+    private static final byte SER_INTERVAL_TYPE_TAG = ATypeTag.INTERVAL.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalIntervalEndAccessor();
+        }
+    };
+
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    // possible output
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ADate> dateSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ADATE);
+                    private AMutableDate aDate = new AMutableDate(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ADateTime> datetimeSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ADATETIME);
+                    private AMutableDateTime aDateTime = new AMutableDateTime(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ATime> timeSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ATIME);
+                    private AMutableTime aTime = new AMutableTime(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+                            if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                long endTime = AIntervalSerializerDeserializer.getIntervalEnd(bytes, 1);
+                                if (timeType == SER_DATE_TYPE_TAG) {
+                                    aDate.setValue((int) (endTime));
+                                    dateSerde.serialize(aDate, out);
+                                } else if (timeType == SER_TIME_TYPE_TAG) {
+                                    aTime.setValue((int) (endTime));
+                                    timeSerde.serialize(aTime, out);
+                                } else if (timeType == SER_DATETIME_TYPE_TAG) {
+                                    aDateTime.setValue(endTime);
+                                    datetimeSerde.serialize(aDateTime, out);
+                                }
+                            } else {
+                                throw new AlgebricksException(FID.getName() + ": expects NULL/INTERVAL, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[0]));
+                            }
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
new file mode 100644
index 0000000..ef76934
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalIntervalStartAccessor.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AIntervalSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ADate;
+import edu.uci.ics.asterix.om.base.ADateTime;
+import edu.uci.ics.asterix.om.base.AMutableDate;
+import edu.uci.ics.asterix.om.base.AMutableDateTime;
+import edu.uci.ics.asterix.om.base.AMutableTime;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.ATime;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalIntervalStartAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_INTERVAL_START;
+
+    private static final byte SER_INTERVAL_TYPE_TAG = ATypeTag.INTERVAL.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalIntervalStartAccessor();
+        }
+    };
+
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    // possible output
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ADate> dateSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ADATE);
+                    private AMutableDate aDate = new AMutableDate(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ADateTime> datetimeSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ADATETIME);
+                    private AMutableDateTime aDateTime = new AMutableDateTime(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ATime> timeSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ATIME);
+                    private AMutableTime aTime = new AMutableTime(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+                            if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else if (bytes[0] == SER_INTERVAL_TYPE_TAG) {
+                                byte timeType = AIntervalSerializerDeserializer.getIntervalTimeType(bytes, 1);
+                                long startTime = AIntervalSerializerDeserializer.getIntervalStart(bytes, 1);
+                                if (timeType == SER_DATE_TYPE_TAG) {
+                                    aDate.setValue((int) (startTime));
+                                    dateSerde.serialize(aDate, out);
+                                } else if (timeType == SER_TIME_TYPE_TAG) {
+                                    aTime.setValue((int) (startTime));
+                                    timeSerde.serialize(aTime, out);
+                                } else if (timeType == SER_DATETIME_TYPE_TAG) {
+                                    aDateTime.setValue(startTime);
+                                    datetimeSerde.serialize(aDateTime, out);
+                                }
+                            } else {
+                                throw new AlgebricksException(FID.getName() + ": expects NULL/INTERVAL, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[0]));
+                            }
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
new file mode 100644
index 0000000..0d6e99b
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalMillisecondAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_MILLISEC;
+
+    // allowed input types
+    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalMillisecondAccessor();
+        }
+
+    };
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
+     */
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationMillisecond(ADurationSerializerDeserializer
+                                        .getDayTime(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_TIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int ms = calSystem.getMillisOfSec(chrononTimeInMs);
+
+                            aMutableInt32.setValue(ms);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
new file mode 100644
index 0000000..b61c843
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalMinuteAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_MIN;
+
+    // allowed input types
+    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalMinuteAccessor();
+        }
+
+    };
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
+     */
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationMinute(ADurationSerializerDeserializer
+                                        .getDayTime(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_TIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int min = calSystem.getMinOfHour(chrononTimeInMs);
+
+                            aMutableInt32.setValue(min);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
new file mode 100644
index 0000000..b18afe3
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
@@ -0,0 +1,145 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalMonthAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_MONTH;
+
+    // allowed input types
+    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalMonthAccessor();
+        }
+
+    };
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
+     */
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationMonth(ADurationSerializerDeserializer
+                                        .getYearMonth(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_DATE_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1)
+                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int year = calSystem.getYear(chrononTimeInMs);
+                            int month = calSystem.getMonthOfYear(chrononTimeInMs, year);
+
+                            aMutableInt32.setValue(month);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
new file mode 100644
index 0000000..8a2f240
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalSecondAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_SEC;
+
+    // allowed input types
+    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalSecondAccessor();
+        }
+
+    };
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
+     */
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationSecond(ADurationSerializerDeserializer
+                                        .getDayTime(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_TIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int sec = calSystem.getSecOfMin(chrononTimeInMs);
+
+                            aMutableInt32.setValue(sec);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
new file mode 100644
index 0000000..a940500
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.accessors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class TemporalYearAccessor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+
+    private static final FunctionIdentifier FID = AsterixBuiltinFunctions.ACCESSOR_TEMPORAL_YEAR;
+
+    // allowed input types
+    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    private static final byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new TemporalYearAccessor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
+
+                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
+
+                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
+
+                    // for output: type integer
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut.reset();
+                        eval.evaluate(tuple);
+                        byte[] bytes = argOut.getByteArray();
+
+                        try {
+
+                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
+                                aMutableInt32.setValue(calSystem.getDurationYear(ADurationSerializerDeserializer
+                                        .getYearMonth(bytes, 1)));
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            }
+
+                            long chrononTimeInMs = 0;
+                            if (bytes[0] == SER_DATE_TYPE_TAG) {
+                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1)
+                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
+                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
+                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
+                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            } else if (bytes[0] == SER_STRING_TYPE_TAG) {
+                                int year;
+                                if (UTF8StringPointable.charAt(bytes, 3) == '-') {
+                                    // in case of a negative year
+                                    year = -1
+                                            * ((UTF8StringPointable.charAt(bytes, 4) - '0') * 1000
+                                                    + (UTF8StringPointable.charAt(bytes, 5) - '0') * 100
+                                                    + (UTF8StringPointable.charAt(bytes, 6) - '0') * 10 + (UTF8StringPointable
+                                                    .charAt(bytes, 7) - '0'));
+                                } else {
+                                    year = (UTF8StringPointable.charAt(bytes, 3) - '0') * 1000
+                                            + (UTF8StringPointable.charAt(bytes, 4) - '0') * 100
+                                            + (UTF8StringPointable.charAt(bytes, 5) - '0') * 10
+                                            + (UTF8StringPointable.charAt(bytes, 6) - '0');
+                                }
+                                aMutableInt32.setValue(year);
+                                intSerde.serialize(aMutableInt32, out);
+                                return;
+                            } else {
+                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
+                            }
+
+                            int year = calSystem.getYear(chrononTimeInMs);
+
+                            aMutableInt32.setValue(year);
+                            intSerde.serialize(aMutableInt32, out);
+
+                        } catch (IOException e) {
+                            throw new AlgebricksException(e);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AbstractAsterixListIterator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixListAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixListAccessor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixListAccessor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixListAccessor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixOrderedListIterator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixOrderedListIterator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixOrderedListIterator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixOrderedListIterator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixUnorderedListIterator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixUnorderedListIterator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixUnorderedListIterator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/AsterixUnorderedListIterator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/DoubleArray.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/DoubleArray.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/DoubleArray.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/DoubleArray.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FunctionManagerImpl.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FunctionManagerImpl.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FunctionManagerImpl.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FunctionManagerImpl.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityFiltersCache.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SpatialUtils.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SpatialUtils.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SpatialUtils.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SpatialUtils.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/ComparisonEvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/ComparisonEvalFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/ComparisonEvalFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/ComparisonEvalFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
new file mode 100644
index 0000000..8daf9a6
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
@@ -0,0 +1,151 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADateSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.AMutableInterval;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalFromDateConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-from-date", 2);
+    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalFromDateConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (from Date)";
+                    //TODO: Where to move and fix these?
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+
+                            if (argOut0.getByteArray()[0] == SER_DATE_TYPE_TAG) {
+                                intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
+                                        + (argOut0.getByteArray()[2] & 0xff << 0);
+                                intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
+                                        stringLength) / GregorianCalendarSystem.CHRONON_OF_DAY;
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DATE for the first argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (argOut1.getByteArray()[0] == SER_DATE_TYPE_TAG) {
+                                intervalEnd = ADateSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                            } else if (argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
+                                        + (argOut1.getByteArray()[2] & 0xff << 0);
+                                intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), 3, stringLength)
+                                        / GregorianCalendarSystem.CHRONON_OF_DAY;
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DATE for the second argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+                            
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": interval end must not be less than the interval start.");
+                            }
+
+                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATE.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
new file mode 100644
index 0000000..78d2e4a
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADateTimeSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.AMutableInterval;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalFromDateTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-from-datetime", 2);
+    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalFromDateTimeConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (from DateTime)";
+                    //TODO: Where to move and fix these?
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+
+                            if (argOut0.getByteArray()[0] == SER_DATETIME_TYPE_TAG) {
+                                intervalStart = ADateTimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // start datetime
+                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
+                                        + (argOut0.getByteArray()[2] & 0xff << 0);
+                                // get offset for time part: +1 if it is negative (-)
+                                short timeOffset = (short) ((argOut0.getByteArray()[3] == '-') ? 1 : 0);
+                                timeOffset += 8;
+                                if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
+                                }
+                                intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3, timeOffset);
+                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
+                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DATETIME for the first argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (argOut1.getByteArray()[0] == SER_DATETIME_TYPE_TAG) {
+                                intervalEnd = ADateTimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                            } else if (argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // start datetime
+                                int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
+                                        + (argOut1.getByteArray()[2] & 0xff << 0);
+                                // get offset for time part: +1 if it is negative (-)
+                                short timeOffset = (short) ((argOut1.getByteArray()[3] == '-') ? 1 : 0);
+                                timeOffset += 8;
+                                if (argOut1.getByteArray()[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (argOut1.getByteArray()[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
+                                }
+                                intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), 3, timeOffset);
+                                intervalEnd += ATimeParserFactory.parseTimePart(argOut1.getByteArray(),
+                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DATETIME for the second argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+                            
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": interval end must not be less than the interval start.");
+                            }
+
+                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATETIME.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
new file mode 100644
index 0000000..8816160
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
@@ -0,0 +1,163 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.AMutableInterval;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalFromTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-from-time", 2);
+    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalFromTimeConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (from Date)";
+                    //TODO: Where to move and fix these?
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+
+                            if (argOut0.getByteArray()[0] == SER_TIME_TYPE_TAG) {
+                                intervalStart = ATimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // start date
+                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
+                                        + (argOut0.getByteArray()[2] & 0xff << 0);
+
+                                intervalStart = ATimeParserFactory.parseTimePart(argOut0.getByteArray(), 3,
+                                        stringLength);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/TIME for the first argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (intervalStart < 0) {
+                                intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
+                            }
+                            
+                            if (argOut1.getByteArray()[0] == SER_TIME_TYPE_TAG) {
+                                intervalEnd = ATimeSerializerDeserializer.getChronon(argOut1.getByteArray(), 1);
+                            } else if (argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // start date
+                                int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
+                                        + (argOut1.getByteArray()[2] & 0xff << 0);
+
+                                intervalEnd = ATimeParserFactory.parseTimePart(argOut1.getByteArray(), 3, stringLength);
+
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/TIME for the second argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            if (intervalEnd < 0) {
+                                intervalEnd += GregorianCalendarSystem.CHRONON_OF_DAY;
+                            }
+                            
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": interval end must not be less than the interval start.");
+                            }
+                            
+                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.TIME.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
new file mode 100644
index 0000000..7ea8e90
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADateSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.AMutableDuration;
+import edu.uci.ics.asterix.om.base.AMutableInterval;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalStartFromDateConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-start-from-date", 2);
+    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalStartFromDateConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (from Date)";
+
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    private AMutableDuration aDuration = new AMutableDuration(0, 0L);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+
+                            if (argOut0.getByteArray()[0] == SER_DATE_TYPE_TAG) {
+                                intervalStart = ADateSerializerDeserializer.getChronon(argOut0.getByteArray(), 1)
+                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
+                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // start date
+                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
+                                        + (argOut0.getByteArray()[2] & 0xff << 0);
+                                intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
+                                        stringLength);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DATE for the first argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (argOut1.getByteArray()[0] == SER_DURATION_TYPE_TAG) {
+                                intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
+                                        ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(), 1),
+                                        ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1));
+                            } else if (argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // duration
+                                int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
+                                        + (argOut1.getByteArray()[2] & 0xff << 0);
+
+                                ADurationParserFactory
+                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
+                                intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
+                                        aDuration.getMonths(), aDuration.getMilliseconds());
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DURATION for the second argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            intervalStart = GregorianCalendarSystem.getChrononInDays(intervalStart);
+                            intervalEnd = GregorianCalendarSystem.getChrononInDays(intervalEnd);
+
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": interval end must not be less than the interval start.");
+                            }
+
+                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATE.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
new file mode 100644
index 0000000..f16dccb
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADateTimeSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.AMutableDuration;
+import edu.uci.ics.asterix.om.base.AMutableInterval;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalStartFromDateTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-start-from-datetime", 2);
+    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalStartFromDateTimeConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (from Date)";
+
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    private AMutableDuration aDuration = new AMutableDuration(0, 0L);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+
+                            if (argOut0.getByteArray()[0] == SER_DATETIME_TYPE_TAG) {
+                                intervalStart = ADateTimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
+                                        + (argOut0.getByteArray()[2] & 0xff << 0);
+
+                                // get offset for time part: +1 if it is negative (-)
+                                short timeOffset = (short) ((argOut0.getByteArray()[3] == '-') ? 1 : 0);
+
+                                timeOffset += 8;
+
+                                if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                    timeOffset += 2;
+                                    if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
+                                        throw new AlgebricksException(errorMessage + ": missing T");
+                                    }
+                                }
+
+                                intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3, timeOffset);
+                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
+                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DATETIME for the first argument but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (argOut1.getByteArray()[0] == SER_DURATION_TYPE_TAG) {
+                                intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
+                                        ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(), 1),
+                                        ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1));
+                            } else if (argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+
+                                // duration
+                                int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
+                                        + (argOut1.getByteArray()[2] & 0xff << 0);
+
+                                ADurationParserFactory
+                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
+
+                                intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
+                                        aDuration.getMonths(), aDuration.getMilliseconds());
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/DURATION for the second argument but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": interval end must not be less than the interval start.");
+                            }
+
+                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATETIME.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
new file mode 100644
index 0000000..35bfe17
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
@@ -0,0 +1,183 @@
+/*
+ * Copyright 2009-2011 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.constructors;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.functions.FunctionConstants;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInterval;
+import edu.uci.ics.asterix.om.base.AMutableDuration;
+import edu.uci.ics.asterix.om.base.AMutableInterval;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
+import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
+import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class AIntervalStartFromTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "interval-start-from-time", 2);
+    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new AIntervalStartFromTimeConstructorDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+                    private String errorMessage = "This can not be an instance of interval (from Date)";
+
+                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
+                    private AMutableDuration aDuration = new AMutableDuration(0, 0L);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+
+                        argOut0.reset();
+                        argOut1.reset();
+                        eval0.evaluate(tuple);
+                        eval1.evaluate(tuple);
+
+                        try {
+
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            long intervalStart = 0, intervalEnd = 0;
+
+                            if (argOut0.getByteArray()[0] == SER_TIME_TYPE_TAG) {
+                                intervalStart = ATimeSerializerDeserializer.getChronon(argOut0.getByteArray(), 1);
+                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
+                                        + (argOut0.getByteArray()[2] & 0xff << 0);
+
+                                intervalStart = ATimeParserFactory.parseTimePart(argOut0.getByteArray(), 3,
+                                        stringLength);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/STRING/TIME for the first argument, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            if (intervalStart < 0) {
+                                intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
+                            }
+
+                            if (argOut1.getByteArray()[0] == SER_DURATION_TYPE_TAG) {
+
+                                if (ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(), 1) != 0) {
+                                    throw new AlgebricksException(FID.getName()
+                                            + ": cannot add a year-month duration to a time value.");
+                                }
+
+                                intervalEnd = DurationArithmeticOperations.addDuration(intervalStart, 0,
+                                        ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1));
+
+                            } else if (argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
+                                // duration
+
+                                int stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
+                                        + (argOut1.getByteArray()[2] & 0xff << 0);
+
+                                ADurationParserFactory
+                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
+
+                                if (aDuration.getMonths() != 0) {
+                                    throw new AlgebricksException(FID.getName()
+                                            + ": cannot add a year-month duration to a time value.");
+                                }
+
+                                intervalEnd = DurationArithmeticOperations.addDuration(intervalStart, 0,
+                                        aDuration.getMilliseconds());
+                            } else {
+                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
+                            }
+
+                            if (intervalEnd > GregorianCalendarSystem.CHRONON_OF_DAY) {
+                                intervalEnd = intervalEnd % (int) (GregorianCalendarSystem.CHRONON_OF_DAY);
+                            }
+
+                            if (intervalEnd < intervalStart) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": interval end must not be less than the interval start.");
+                            }
+
+                            aInterval.setValue(intervalStart, intervalEnd, ATypeTag.TIME.serialize());
+                            intervalSerde.serialize(aInterval, out);
+
+                        } catch (IOException e1) {
+                            throw new AlgebricksException(errorMessage);
+                        } catch (Exception e2) {
+                            throw new AlgebricksException(e2);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractBinaryStringBoolEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractNumericArithmeticEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractQuadStringStringEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringBoolEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractTripleStringStringEval.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/BinaryHashMap.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/BinaryHashMap.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/BinaryHashMap.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/BinaryHashMap.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastListDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastListDescriptor.java
new file mode 100644
index 0000000..c1817e5
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastListDescriptor.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.runtime.evaluators.functions;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.pointables.PointableAllocator;
+import edu.uci.ics.asterix.om.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.om.pointables.cast.ACastVisitor;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+/**
+ * The runtime function for casting a list(unordered list or ordered list)
+ * 
+ * @author yingyib
+ *
+ */
+public class CastListDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new CastListDescriptor();
+        }
+    };
+
+    private static final long serialVersionUID = 1L;
+    private AbstractCollectionType reqType;
+    private AbstractCollectionType inputType;
+
+    public void reset(AbstractCollectionType reqType, AbstractCollectionType inputType) {
+        this.reqType = reqType;
+        this.inputType = inputType;
+    }
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return AsterixBuiltinFunctions.CAST_LIST;
+    }
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
+        final ICopyEvaluatorFactory recordEvalFactory = args[0];
+
+        return new ICopyEvaluatorFactory() {
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                final DataOutput out = output.getDataOutput();
+                final ArrayBackedValueStorage recordBuffer = new ArrayBackedValueStorage();
+                final ICopyEvaluator recEvaluator = recordEvalFactory.createEvaluator(recordBuffer);
+
+                return new ICopyEvaluator() {
+                    // pointable allocator
+                    private PointableAllocator allocator = new PointableAllocator();
+                    final IVisitablePointable recAccessor = allocator.allocateListValue(inputType);
+                    final IVisitablePointable resultAccessor = allocator.allocateListValue(reqType);
+                    final ACastVisitor castVisitor = new ACastVisitor();
+                    final Triple<IVisitablePointable, IAType, Boolean> arg = new Triple<IVisitablePointable, IAType, Boolean>(
+                            resultAccessor, reqType, Boolean.FALSE);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        try {
+                            recordBuffer.reset();
+                            recEvaluator.evaluate(tuple);
+                            recAccessor.set(recordBuffer);
+                            recAccessor.accept(castVisitor, arg);
+                            out.write(resultAccessor.getByteArray(), resultAccessor.getStartOffset(),
+                                    resultAccessor.getLength());
+                        } catch (Exception ioe) {
+                            throw new AlgebricksException(ioe);
+                        }
+                    }
+                };
+            }
+        };
+    }
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ClosedRecordConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ClosedRecordConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ClosedRecordConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ClosedRecordConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodePointToStringDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodepointIterator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodepointIterator.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodepointIterator.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CodepointIterator.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ContainsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ContainsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ContainsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/ContainsDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedGramTokensDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedGramTokensDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedGramTokensDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedGramTokensDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedWordTokensDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedWordTokensDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedWordTokensDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CountHashedWordTokensDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateMBRDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateMBRDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateMBRDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateMBRDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceListIsFilterable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceListIsFilterable.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceListIsFilterable.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceListIsFilterable.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterable.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EmbedTypeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EmbedTypeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EmbedTypeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EmbedTypeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EndsWithDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EndsWithDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EndsWithDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EndsWithDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByIndexDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByIndexDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByIndexDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByIndexDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FuzzyEqDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FuzzyEqDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FuzzyEqDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FuzzyEqDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GramTokensDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GramTokensDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GramTokensDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GramTokensDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedGramTokensDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedGramTokensDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedGramTokensDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedGramTokensDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedWordTokensDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedWordTokensDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedWordTokensDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/HashedWordTokensDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotNullDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotNullDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotNullDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotNullDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAbsDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericCeilingDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericFloorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericModuloDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEven2Descriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericRoundHalfToEvenDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrderedListConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrderedListConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrderedListConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrderedListConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixCheckDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixCheckDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixCheckDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixCheckDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardPrefixDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedCheckDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedCheckDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedCheckDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedCheckDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardSortedDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StartsWithDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StartsWithDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StartsWithDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StartsWithDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringConcatDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEndWithDescrtiptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEndWithDescrtiptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEndWithDescrtiptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEndWithDescrtiptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEqualDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEqualDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEqualDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringEqualDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringJoinDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLengthDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLengthDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLengthDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLengthDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringLowerCaseDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesWithFlagDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesWithFlagDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesWithFlagDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringMatchesWithFlagDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceWithFlagsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceWithFlagsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceWithFlagsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringReplaceWithFlagsDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringStartWithDescrtiptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringStartWithDescrtiptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringStartWithDescrtiptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringStartWithDescrtiptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/StringToCodePointDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/Substring2Descriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/Substring2Descriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/Substring2Descriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/Substring2Descriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringAfterDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringBeforeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/UnorderedListConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/UnorderedListConstructorDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/UnorderedListConstructorDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/UnorderedListConstructorDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/WordTokensDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/WordTokensDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/WordTokensDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/WordTokensDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AbstractIntervalLogicFuncDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDateDurationDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDateDurationDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDateDurationDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDateDurationDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDatetimeDurationDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDatetimeDurationDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDatetimeDurationDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddDatetimeDurationDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddTimeDurationDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddTimeDurationDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddTimeDurationDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AddTimeDurationDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustDateTimeForTimeZoneDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/AdjustTimeForTimeZoneDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDuartionFromDateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CalendarDurationFromDateTimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateTimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateTimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateTimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentDateTimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentTimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentTimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentTimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/CurrentTimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromDatetimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromUnixTimeInDaysDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromUnixTimeInDaysDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromUnixTimeInDaysDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DateFromUnixTimeInDaysDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromDateAndTimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DatetimeFromUnixTimeInMsDescriptor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
new file mode 100644
index 0000000..bb83016
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DayTimeDurationComparatorDescriptor.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ABoolean;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class DayTimeDurationComparatorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier GREATER_THAN_FID = AsterixBuiltinFunctions.DAY_TIME_DURATION_GREATER_THAN;
+    public final static FunctionIdentifier LESS_THAN_FID = AsterixBuiltinFunctions.DAY_TIME_DURATION_LESS_THAN;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    private final boolean isGreaterThan;
+
+    private DayTimeDurationComparatorDescriptor(boolean isGreaterThan) {
+        this.isGreaterThan = isGreaterThan;
+    }
+
+    public final static IFunctionDescriptorFactory GREATER_THAN_FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new DayTimeDurationComparatorDescriptor(true);
+        }
+    };
+
+    public final static IFunctionDescriptorFactory LESS_THAN_FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new DayTimeDurationComparatorDescriptor(false);
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ABoolean> boolSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ABOOLEAN);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+                        argOut1.reset();
+                        eval1.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] != SER_DURATION_TYPE_TAG
+                                    || argOut1.getByteArray()[0] != SER_DURATION_TYPE_TAG) {
+                                throw new AlgebricksException(getIdentifier().getName()
+                                        + ": expects type NULL/DURATION, NULL/DURATION but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0])
+                                        + " and "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            if ((ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(), 1) != 0)
+                                    || (ADurationSerializerDeserializer.getYearMonth(argOut1.getByteArray(), 1) != 0)) {
+                                throw new AlgebricksException(getIdentifier().getName()
+                                        + ": only year-month durations are allowed.");
+                            }
+
+                            if (ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(), 1) > ADurationSerializerDeserializer
+                                    .getDayTime(argOut1.getByteArray(), 1)) {
+                                boolSerde.serialize(isGreaterThan ? ABoolean.TRUE : ABoolean.FALSE, out);
+                            } else {
+                                boolSerde.serialize(isGreaterThan ? ABoolean.FALSE : ABoolean.TRUE, out);
+                            }
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return isGreaterThan ? GREATER_THAN_FID : LESS_THAN_FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
new file mode 100644
index 0000000..fceb144
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationEqualDescriptor.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ABoolean;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class DurationEqualDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.DURATION_EQUAL;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    public final static IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new DurationEqualDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ABoolean> boolSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ABOOLEAN);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+                        argOut1.reset();
+                        eval1.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] != SER_DURATION_TYPE_TAG
+                                    || argOut1.getByteArray()[0] != SER_DURATION_TYPE_TAG) {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects type NULL/DURATION, NULL/DURATION but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0])
+                                        + " and "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            if ((ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(), 1) == ADurationSerializerDeserializer
+                                    .getDayTime(argOut1.getByteArray(), 1))
+                                    && (ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(), 1) == ADurationSerializerDeserializer
+                                            .getYearMonth(argOut1.getByteArray(), 1))) {
+                                boolSerde.serialize(ABoolean.TRUE, out);
+                            } else {
+                                boolSerde.serialize(ABoolean.FALSE, out);
+                            }
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
new file mode 100644
index 0000000..267f4a7
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationFromMillisecondsDescriptor.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ADuration;
+import edu.uci.ics.asterix.om.base.AMutableDuration;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class DurationFromMillisecondsDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.DURATION_FROM_MILLISECONDS;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_INT8_TYPE_TAG = ATypeTag.INT8.serialize();
+    private final static byte SER_INT16_TYPE_TAG = ATypeTag.INT16.serialize();
+    private final static byte SER_INT32_TYPE_TAG = ATypeTag.INT32.serialize();
+    private final static byte SER_INT64_TYPE_TAG = ATypeTag.INT64.serialize();
+
+    public final static IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new DurationFromMillisecondsDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ADuration> durationSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ADURATION);
+
+                    AMutableDuration aDuration = new AMutableDuration(0, 0);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] == SER_INT8_TYPE_TAG) {
+                                aDuration.setValue(0, AInt8SerializerDeserializer.getByte(argOut0.getByteArray(), 1));
+                            } else if (argOut0.getByteArray()[0] == SER_INT16_TYPE_TAG) {
+                                aDuration.setValue(0, AInt16SerializerDeserializer.getShort(argOut0.getByteArray(), 1));
+                            } else if (argOut0.getByteArray()[0] == SER_INT32_TYPE_TAG) {
+                                aDuration.setValue(0, AInt32SerializerDeserializer.getInt(argOut0.getByteArray(), 1));
+                            } else if (argOut0.getByteArray()[0] == SER_INT64_TYPE_TAG) {
+                                aDuration.setValue(0, AInt64SerializerDeserializer.getLong(argOut0.getByteArray(), 1));
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/INT8/INT16/INT32/INT64, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            durationSerde.serialize(aDuration, out);
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java
new file mode 100644
index 0000000..f8b7a3e
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/DurationFromMonthsDescriptor.java
@@ -0,0 +1,129 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt16SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt8SerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ADuration;
+import edu.uci.ics.asterix.om.base.AMutableDuration;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class DurationFromMonthsDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.DURATION_FROM_MONTHS;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_INT8_TYPE_TAG = ATypeTag.INT8.serialize();
+    private final static byte SER_INT16_TYPE_TAG = ATypeTag.INT16.serialize();
+    private final static byte SER_INT32_TYPE_TAG = ATypeTag.INT32.serialize();
+
+    public final static IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new DurationFromMonthsDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ADuration> durationSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ADURATION);
+
+                    AMutableDuration aDuration = new AMutableDuration(0, 0);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] == SER_INT8_TYPE_TAG) {
+                                aDuration.setValue(AInt8SerializerDeserializer.getByte(argOut0.getByteArray(), 1), 0);
+                            } else if (argOut0.getByteArray()[0] == SER_INT16_TYPE_TAG) {
+                                aDuration.setValue(AInt16SerializerDeserializer.getShort(argOut0.getByteArray(), 1), 0);
+                            } else if (argOut0.getByteArray()[0] == SER_INT32_TYPE_TAG) {
+                                aDuration.setValue(AInt32SerializerDeserializer.getInt(argOut0.getByteArray(), 1), 0);
+                            } else {
+                                throw new AlgebricksException(FID.getName()
+                                        + ": expects NULL/INT8/INT16/INT32, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            durationSerde.serialize(aDuration, out);
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalAfterDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalAfterDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalAfterDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalAfterDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalBeforeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalBeforeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalBeforeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalBeforeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoveredByDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoveredByDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoveredByDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoveredByDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoversDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoversDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoversDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalCoversDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndedByDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndedByDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndedByDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndedByDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndsDecriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndsDecriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndsDecriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalEndsDecriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalLogic.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMeetsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMeetsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMeetsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMeetsDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMetByDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMetByDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMetByDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalMetByDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlappedByDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlappedByDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlappedByDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlappedByDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlapsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlapsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlapsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalOverlapsDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartedByDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartedByDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartedByDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartedByDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/IntervalStartsDescriptor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/MillisecondsOfDayTimeDurationDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/MillisecondsOfDayTimeDurationDescriptor.java
new file mode 100644
index 0000000..97fa94a
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/MillisecondsOfDayTimeDurationDescriptor.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt64;
+import edu.uci.ics.asterix.om.base.AMutableInt64;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class MillisecondsOfDayTimeDurationDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.MILLISECONDS_OF_DAY_TIME_DURATION;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    public final static IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new MillisecondsOfDayTimeDurationDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt64> int64Serde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT64);
+
+                    AMutableInt64 aInt64 = new AMutableInt64(0);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] != SER_DURATION_TYPE_TAG) {
+                                throw new AlgebricksException(FID.getName() + ": expects NULL/DURATION, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            aInt64.setValue(ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(), 1));
+
+                            int64Serde.serialize(aInt64, out);
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/MonthsOfYearMonthDurationDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/MonthsOfYearMonthDurationDescriptor.java
new file mode 100644
index 0000000..55173a5
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/MonthsOfYearMonthDurationDescriptor.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.AMutableInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class MonthsOfYearMonthDurationDescriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier FID = AsterixBuiltinFunctions.MONTHS_OF_YEAR_MONTH_DURATION;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+
+    public final static IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new MonthsOfYearMonthDurationDescriptor();
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<AInt32> int32Serde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.AINT32);
+
+                    AMutableInt32 aInt32 = new AMutableInt32(0);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] != SER_DURATION_TYPE_TAG) {
+                                throw new AlgebricksException(FID.getName() + ": expects NULL/DURATION, but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0]));
+                            }
+
+                            aInt32.setValue(ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(), 1));
+
+                            int32Serde.serialize(aInt32, out);
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return FID;
+    }
+
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/OverlapDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/OverlapDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/OverlapDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/OverlapDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDatetimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDatetimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDatetimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractDatetimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractTimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractTimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractTimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/SubtractTimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromDatetimeDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromUnixTimeInMsDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromUnixTimeInMsDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromUnixTimeInMsDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/TimeFromUnixTimeInMsDescriptor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDecriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDecriptor.java
new file mode 100644
index 0000000..22ab96c
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/temporal/YearMonthDurationComparatorDecriptor.java
@@ -0,0 +1,149 @@
+/*
+ * Copyright 2009-2013 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.runtime.evaluators.functions.temporal;
+
+import java.io.DataOutput;
+
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.om.base.ABoolean;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class YearMonthDurationComparatorDecriptor extends AbstractScalarFunctionDynamicDescriptor {
+
+    private final static long serialVersionUID = 1L;
+    public final static FunctionIdentifier GREATER_THAN_FID = AsterixBuiltinFunctions.YEAR_MONTH_DURATION_GREATER_THAN;
+    public final static FunctionIdentifier LESS_THAN_FID = AsterixBuiltinFunctions.YEAR_MONTH_DURATION_LESS_THAN;
+
+    // allowed input types
+    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
+    private final static byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
+    
+    private final boolean isGreaterThan;
+
+    private YearMonthDurationComparatorDecriptor(boolean isGreaterThan) {
+        this.isGreaterThan = isGreaterThan;
+    }
+
+    public final static IFunctionDescriptorFactory GREATER_THAN_FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new YearMonthDurationComparatorDecriptor(true);
+        }
+    };
+
+    public final static IFunctionDescriptorFactory LESS_THAN_FACTORY = new IFunctionDescriptorFactory() {
+
+        @Override
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new YearMonthDurationComparatorDecriptor(false);
+        }
+    };
+
+    @Override
+    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
+        return new ICopyEvaluatorFactory() {
+
+            private static final long serialVersionUID = 1L;
+
+            @Override
+            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
+                return new ICopyEvaluator() {
+
+                    private DataOutput out = output.getDataOutput();
+                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
+                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
+                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
+                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
+
+                    // possible output types
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ANULL);
+                    @SuppressWarnings("unchecked")
+                    private ISerializerDeserializer<ABoolean> boolSerde = AqlSerializerDeserializerProvider.INSTANCE
+                            .getSerializerDeserializer(BuiltinType.ABOOLEAN);
+
+                    @Override
+                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+                        argOut0.reset();
+                        eval0.evaluate(tuple);
+                        argOut1.reset();
+                        eval1.evaluate(tuple);
+
+                        try {
+                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
+                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
+                                nullSerde.serialize(ANull.NULL, out);
+                                return;
+                            }
+
+                            if (argOut0.getByteArray()[0] != SER_DURATION_TYPE_TAG
+                                    || argOut1.getByteArray()[0] != SER_DURATION_TYPE_TAG) {
+                                throw new AlgebricksException(getIdentifier().getName()
+                                        + ": expects type NULL/DURATION, NULL/DURATION but got "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut0.getByteArray()[0])
+                                        + " and "
+                                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut1.getByteArray()[0]));
+                            }
+
+                            if ((ADurationSerializerDeserializer.getDayTime(argOut0.getByteArray(), 1) != 0)
+                                    || (ADurationSerializerDeserializer.getDayTime(argOut1.getByteArray(), 1) != 0)) {
+                                throw new AlgebricksException(getIdentifier().getName()
+                                        + ": only year-month durations are allowed.");
+                            }
+
+                            if (ADurationSerializerDeserializer.getYearMonth(argOut0.getByteArray(), 1) > ADurationSerializerDeserializer
+                                    .getYearMonth(argOut1.getByteArray(), 1)) {
+                                boolSerde.serialize(isGreaterThan ? ABoolean.TRUE : ABoolean.FALSE, out);
+                            } else {
+                                boolSerde.serialize(isGreaterThan ? ABoolean.FALSE : ABoolean.TRUE, out);
+                            }
+
+                        } catch (HyracksDataException hex) {
+                            throw new AlgebricksException(hex);
+                        }
+                    }
+                };
+            }
+        };
+    }
+
+    /* (non-Javadoc)
+     * @see edu.uci.ics.asterix.om.functions.AbstractFunctionDescriptor#getIdentifier()
+     */
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return isGreaterThan ? GREATER_THAN_FID : LESS_THAN_FID;
+    }
+
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/FormatUtils.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/FormatUtils.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/FormatUtils.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/FormatUtils.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
new file mode 100644
index 0000000..20d70d6
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -0,0 +1,920 @@
+package edu.uci.ics.asterix.runtime.formats;
+
+import java.io.DataOutput;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+
+import edu.uci.ics.asterix.common.config.GlobalConfig;
+import edu.uci.ics.asterix.common.exceptions.AsterixRuntimeException;
+import edu.uci.ics.asterix.common.parse.IParseFileSplitsDecl;
+import edu.uci.ics.asterix.dataflow.data.nontagged.AqlNullWriterFactory;
+import edu.uci.ics.asterix.formats.base.IDataFormat;
+import edu.uci.ics.asterix.formats.nontagged.AqlBinaryBooleanInspectorImpl;
+import edu.uci.ics.asterix.formats.nontagged.AqlBinaryComparatorFactoryProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlBinaryHashFunctionFactoryProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlBinaryHashFunctionFamilyProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlBinaryIntegerInspector;
+import edu.uci.ics.asterix.formats.nontagged.AqlJSONPrinterFactoryProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlNormalizedKeyComputerFactoryProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlPrinterFactoryProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
+import edu.uci.ics.asterix.formats.nontagged.AqlTypeTraitProvider;
+import edu.uci.ics.asterix.om.base.ABoolean;
+import edu.uci.ics.asterix.om.base.AInt32;
+import edu.uci.ics.asterix.om.base.ANull;
+import edu.uci.ics.asterix.om.base.AString;
+import edu.uci.ics.asterix.om.base.IAObject;
+import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.FunctionManagerHolder;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.functions.IFunctionManager;
+import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
+import edu.uci.ics.asterix.om.types.AOrderedListType;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.AUnorderedListType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.aggregates.collections.ListifyAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarAvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarCountAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarMaxAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarMinAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarSumAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableAvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableCountAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableGlobalAvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableLocalAvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableLocalSumAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableSumAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.AvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.CountAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.GlobalAvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.LocalAvgAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.LocalMaxAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.LocalMinAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.LocalSumAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.MaxAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.MinAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.std.SumAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.stream.EmptyStreamAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.aggregates.stream.NonEmptyStreamAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.CircleCenterAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.CircleRadiusAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.LineRectanglePolygonAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.PointXCoordinateAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.PointYCoordinateAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalDayAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalHourAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalIntervalEndAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalIntervalStartAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalMillisecondAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalMinuteAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalMonthAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalSecondAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalYearAccessor;
+import edu.uci.ics.asterix.runtime.evaluators.common.CreateMBREvalFactory;
+import edu.uci.ics.asterix.runtime.evaluators.common.FieldAccessByIndexEvalFactory;
+import edu.uci.ics.asterix.runtime.evaluators.common.FunctionManagerImpl;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ABooleanConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ACircleConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ADateConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ADateTimeConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ADoubleConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ADurationConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AFloatConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt16ConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt32ConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt64ConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt8ConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalFromDateConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalFromDateTimeConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalFromTimeConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalStartFromDateConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalStartFromDateTimeConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalStartFromTimeConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ALineConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ANullConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.APoint3DConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.APointConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.APolygonConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ARectangleConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.AStringConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.constructors.ATimeConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.AndDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.AnyCollectionMemberDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CastListDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CastRecordDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.ClosedRecordConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CodePointToStringDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.ContainsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CountHashedGramTokensDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CountHashedWordTokensDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CreateCircleDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CreateLineDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CreateMBRDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CreatePointDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CreatePolygonDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.CreateRectangleDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceCheckDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceListIsFilterable;
+import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceStringIsFilterable;
+import edu.uci.ics.asterix.runtime.evaluators.functions.EmbedTypeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.EndsWithDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.FieldAccessByIndexDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.FieldAccessByNameDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.FuzzyEqDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.GetItemDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.GramTokensDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.HashedGramTokensDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.HashedWordTokensDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.InjectFailureDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.IsNullDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.LenDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.LikeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NotDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NotNullDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericAbsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericAddDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericCeilingDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericDivideDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericFloorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericModuloDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericMultiplyDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericRoundDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericRoundHalfToEven2Descriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericRoundHalfToEvenDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericSubtractDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.NumericUnaryMinusDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.OpenRecordConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.OrDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.OrderedListConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.PrefixLenJaccardDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.RegExpDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardCheckDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardPrefixCheckDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardPrefixDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardSortedCheckDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardSortedDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialAreaDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialCellDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialDistanceDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialIntersectDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StartsWithDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringConcatDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringEndWithDescrtiptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringEqualDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringJoinDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringLengthDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringLowerCaseDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringMatchesDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringMatchesWithFlagDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringReplaceDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringReplaceWithFlagsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringStartWithDescrtiptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.StringToCodePointDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.Substring2Descriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SubstringAfterDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SubstringBeforeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SubstringDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.SwitchCaseDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.UnorderedListConstructorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.WordTokensDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AddDateDurationDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AddDatetimeDurationDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AddTimeDurationDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AdjustDateTimeForTimeZoneDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AdjustTimeForTimeZoneDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CalendarDuartionFromDateDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CalendarDurationFromDateTimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CurrentDateDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CurrentDateTimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CurrentTimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DateFromDatetimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DateFromUnixTimeInDaysDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DatetimeFromDateAndTimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DatetimeFromUnixTimeInMsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DayTimeDurationComparatorDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DurationEqualDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DurationFromMillisecondsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DurationFromMonthsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalAfterDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalBeforeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalCoveredByDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalCoversDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalEndedByDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalEndsDecriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalMeetsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalMetByDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalOverlappedByDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalOverlapsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalStartedByDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalStartsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.MillisecondsOfDayTimeDurationDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.MonthsOfYearMonthDurationDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.OverlapDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.SubtractDateDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.SubtractDatetimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.SubtractTimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.TimeFromDatetimeDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.TimeFromUnixTimeInMsDescriptor;
+import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.YearMonthDurationComparatorDecriptor;
+import edu.uci.ics.asterix.runtime.operators.file.AdmSchemafullRecordParserFactory;
+import edu.uci.ics.asterix.runtime.operators.file.NtDelimitedDataTupleParserFactory;
+import edu.uci.ics.asterix.runtime.runningaggregates.std.TidRunningAggregateDescriptor;
+import edu.uci.ics.asterix.runtime.unnestingfunctions.std.RangeDescriptor;
+import edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor;
+import edu.uci.ics.asterix.runtime.unnestingfunctions.std.SubsetCollectionDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionEvalSizeComputer;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableEvalSizeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
+import edu.uci.ics.hyracks.algebricks.data.IBinaryBooleanInspectorFactory;
+import edu.uci.ics.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.data.IBinaryHashFunctionFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.data.IBinaryHashFunctionFamilyProvider;
+import edu.uci.ics.hyracks.algebricks.data.IBinaryIntegerInspectorFactory;
+import edu.uci.ics.hyracks.algebricks.data.INormalizedKeyComputerFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.data.IPrinterFactoryProvider;
+import edu.uci.ics.hyracks.algebricks.data.ISerializerDeserializerProvider;
+import edu.uci.ics.hyracks.algebricks.data.ITypeTraitProvider;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.evaluators.ColumnAccessEvalFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.evaluators.ConstantEvalFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.INullWriterFactory;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.parsers.DoubleParserFactory;
+import edu.uci.ics.hyracks.dataflow.common.data.parsers.FloatParserFactory;
+import edu.uci.ics.hyracks.dataflow.common.data.parsers.IValueParserFactory;
+import edu.uci.ics.hyracks.dataflow.common.data.parsers.IntegerParserFactory;
+import edu.uci.ics.hyracks.dataflow.common.data.parsers.LongParserFactory;
+import edu.uci.ics.hyracks.dataflow.common.data.parsers.UTF8StringParserFactory;
+import edu.uci.ics.hyracks.dataflow.std.file.ITupleParserFactory;
+
+public class NonTaggedDataFormat implements IDataFormat {
+
+    private static boolean registered = false;
+
+    public static final NonTaggedDataFormat INSTANCE = new NonTaggedDataFormat();
+
+    private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1);
+
+    private static final HashMap<ATypeTag, IValueParserFactory> typeToValueParserFactMap = new HashMap<ATypeTag, IValueParserFactory>();
+
+    public static final String NON_TAGGED_DATA_FORMAT = "edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat";
+
+    static {
+        typeToValueParserFactMap.put(ATypeTag.INT32, IntegerParserFactory.INSTANCE);
+        typeToValueParserFactMap.put(ATypeTag.FLOAT, FloatParserFactory.INSTANCE);
+        typeToValueParserFactMap.put(ATypeTag.DOUBLE, DoubleParserFactory.INSTANCE);
+        typeToValueParserFactMap.put(ATypeTag.INT64, LongParserFactory.INSTANCE);
+        typeToValueParserFactMap.put(ATypeTag.STRING, UTF8StringParserFactory.INSTANCE);
+    }
+
+    public NonTaggedDataFormat() {
+    }
+
+    public void registerRuntimeFunctions() throws AlgebricksException {
+
+        if (registered) {
+            return;
+        }
+        registered = true;
+
+        if (FunctionManagerHolder.getFunctionManager() != null) {
+            return;
+        }
+
+        List<IFunctionDescriptorFactory> temp = new ArrayList<IFunctionDescriptorFactory>();
+
+        // format-independent
+        temp.add(ContainsDescriptor.FACTORY);
+        temp.add(EndsWithDescriptor.FACTORY);
+        temp.add(StartsWithDescriptor.FACTORY);
+        temp.add(SubstringDescriptor.FACTORY);
+        temp.add(TidRunningAggregateDescriptor.FACTORY);
+
+        // format-dependent
+        temp.add(AndDescriptor.FACTORY);
+        temp.add(OrDescriptor.FACTORY);
+        temp.add(LikeDescriptor.FACTORY);
+        temp.add(ScanCollectionDescriptor.FACTORY);
+        temp.add(AnyCollectionMemberDescriptor.FACTORY);
+        temp.add(ClosedRecordConstructorDescriptor.FACTORY);
+        temp.add(FieldAccessByIndexDescriptor.FACTORY);
+        temp.add(FieldAccessByNameDescriptor.FACTORY);
+        temp.add(GetItemDescriptor.FACTORY);
+        temp.add(NumericUnaryMinusDescriptor.FACTORY);
+        temp.add(OpenRecordConstructorDescriptor.FACTORY);
+        temp.add(OrderedListConstructorDescriptor.FACTORY);
+        temp.add(UnorderedListConstructorDescriptor.FACTORY);
+        temp.add(EmbedTypeDescriptor.FACTORY);
+
+        temp.add(NumericAddDescriptor.FACTORY);
+        temp.add(NumericDivideDescriptor.FACTORY);
+        temp.add(NumericMultiplyDescriptor.FACTORY);
+        temp.add(NumericSubtractDescriptor.FACTORY);
+        temp.add(NumericModuloDescriptor.FACTORY);
+        temp.add(IsNullDescriptor.FACTORY);
+        temp.add(NotDescriptor.FACTORY);
+        temp.add(LenDescriptor.FACTORY);
+        temp.add(EmptyStreamAggregateDescriptor.FACTORY);
+        temp.add(NonEmptyStreamAggregateDescriptor.FACTORY);
+        temp.add(RangeDescriptor.FACTORY);
+
+        temp.add(NumericAbsDescriptor.FACTORY);
+        temp.add(NumericCeilingDescriptor.FACTORY);
+        temp.add(NumericFloorDescriptor.FACTORY);
+        temp.add(NumericRoundDescriptor.FACTORY);
+        temp.add(NumericRoundHalfToEvenDescriptor.FACTORY);
+        temp.add(NumericRoundHalfToEven2Descriptor.FACTORY);
+        // String functions
+        temp.add(StringEqualDescriptor.FACTORY);
+        temp.add(StringStartWithDescrtiptor.FACTORY);
+        temp.add(StringEndWithDescrtiptor.FACTORY);
+        temp.add(StringMatchesDescriptor.FACTORY);
+        temp.add(StringLowerCaseDescriptor.FACTORY);
+        temp.add(StringMatchesWithFlagDescriptor.FACTORY);
+        temp.add(StringReplaceDescriptor.FACTORY);
+        temp.add(StringReplaceWithFlagsDescriptor.FACTORY);
+        temp.add(StringLengthDescriptor.FACTORY);
+        temp.add(Substring2Descriptor.FACTORY);
+        temp.add(SubstringBeforeDescriptor.FACTORY);
+        temp.add(SubstringAfterDescriptor.FACTORY);
+        temp.add(StringToCodePointDescriptor.FACTORY);
+        temp.add(CodePointToStringDescriptor.FACTORY);
+        temp.add(StringConcatDescriptor.FACTORY);
+        temp.add(StringJoinDescriptor.FACTORY);
+
+        // aggregates
+        temp.add(ListifyAggregateDescriptor.FACTORY);
+        temp.add(CountAggregateDescriptor.FACTORY);
+        temp.add(AvgAggregateDescriptor.FACTORY);
+        temp.add(LocalAvgAggregateDescriptor.FACTORY);
+        temp.add(GlobalAvgAggregateDescriptor.FACTORY);
+        temp.add(SumAggregateDescriptor.FACTORY);
+        temp.add(LocalSumAggregateDescriptor.FACTORY);
+        temp.add(MaxAggregateDescriptor.FACTORY);
+        temp.add(LocalMaxAggregateDescriptor.FACTORY);
+        temp.add(MinAggregateDescriptor.FACTORY);
+        temp.add(LocalMinAggregateDescriptor.FACTORY);
+
+        // serializable aggregates
+        temp.add(SerializableCountAggregateDescriptor.FACTORY);
+        temp.add(SerializableAvgAggregateDescriptor.FACTORY);
+        temp.add(SerializableLocalAvgAggregateDescriptor.FACTORY);
+        temp.add(SerializableGlobalAvgAggregateDescriptor.FACTORY);
+        temp.add(SerializableSumAggregateDescriptor.FACTORY);
+        temp.add(SerializableLocalSumAggregateDescriptor.FACTORY);
+
+        // scalar aggregates
+        temp.add(ScalarCountAggregateDescriptor.FACTORY);
+        temp.add(ScalarAvgAggregateDescriptor.FACTORY);
+        temp.add(ScalarSumAggregateDescriptor.FACTORY);
+        temp.add(ScalarMaxAggregateDescriptor.FACTORY);
+        temp.add(ScalarMinAggregateDescriptor.FACTORY);
+
+        // new functions - constructors
+        temp.add(ABooleanConstructorDescriptor.FACTORY);
+        temp.add(ANullConstructorDescriptor.FACTORY);
+        temp.add(AStringConstructorDescriptor.FACTORY);
+        temp.add(AInt8ConstructorDescriptor.FACTORY);
+        temp.add(AInt16ConstructorDescriptor.FACTORY);
+        temp.add(AInt32ConstructorDescriptor.FACTORY);
+        temp.add(AInt64ConstructorDescriptor.FACTORY);
+        temp.add(AFloatConstructorDescriptor.FACTORY);
+        temp.add(ADoubleConstructorDescriptor.FACTORY);
+        temp.add(APointConstructorDescriptor.FACTORY);
+        temp.add(APoint3DConstructorDescriptor.FACTORY);
+        temp.add(ALineConstructorDescriptor.FACTORY);
+        temp.add(APolygonConstructorDescriptor.FACTORY);
+        temp.add(ACircleConstructorDescriptor.FACTORY);
+        temp.add(ARectangleConstructorDescriptor.FACTORY);
+        temp.add(ATimeConstructorDescriptor.FACTORY);
+        temp.add(ADateConstructorDescriptor.FACTORY);
+        temp.add(ADateTimeConstructorDescriptor.FACTORY);
+        temp.add(ADurationConstructorDescriptor.FACTORY);
+
+        // Spatial
+        temp.add(CreatePointDescriptor.FACTORY);
+        temp.add(CreateLineDescriptor.FACTORY);
+        temp.add(CreatePolygonDescriptor.FACTORY);
+        temp.add(CreateCircleDescriptor.FACTORY);
+        temp.add(CreateRectangleDescriptor.FACTORY);
+        temp.add(SpatialAreaDescriptor.FACTORY);
+        temp.add(SpatialDistanceDescriptor.FACTORY);
+        temp.add(SpatialIntersectDescriptor.FACTORY);
+        temp.add(CreateMBRDescriptor.FACTORY);
+        temp.add(SpatialCellDescriptor.FACTORY);
+        temp.add(PointXCoordinateAccessor.FACTORY);
+        temp.add(PointYCoordinateAccessor.FACTORY);
+        temp.add(CircleRadiusAccessor.FACTORY);
+        temp.add(CircleCenterAccessor.FACTORY);
+        temp.add(LineRectanglePolygonAccessor.FACTORY);
+
+        // fuzzyjoin function
+        temp.add(FuzzyEqDescriptor.FACTORY);
+        temp.add(SubsetCollectionDescriptor.FACTORY);
+        temp.add(PrefixLenJaccardDescriptor.FACTORY);
+
+        temp.add(WordTokensDescriptor.FACTORY);
+        temp.add(HashedWordTokensDescriptor.FACTORY);
+        temp.add(CountHashedWordTokensDescriptor.FACTORY);
+
+        temp.add(GramTokensDescriptor.FACTORY);
+        temp.add(HashedGramTokensDescriptor.FACTORY);
+        temp.add(CountHashedGramTokensDescriptor.FACTORY);
+
+        temp.add(EditDistanceDescriptor.FACTORY);
+        temp.add(EditDistanceCheckDescriptor.FACTORY);
+        temp.add(EditDistanceStringIsFilterable.FACTORY);
+        temp.add(EditDistanceListIsFilterable.FACTORY);
+
+        temp.add(SimilarityJaccardDescriptor.FACTORY);
+        temp.add(SimilarityJaccardCheckDescriptor.FACTORY);
+        temp.add(SimilarityJaccardSortedDescriptor.FACTORY);
+        temp.add(SimilarityJaccardSortedCheckDescriptor.FACTORY);
+        temp.add(SimilarityJaccardPrefixDescriptor.FACTORY);
+        temp.add(SimilarityJaccardPrefixCheckDescriptor.FACTORY);
+
+        temp.add(SwitchCaseDescriptor.FACTORY);
+        temp.add(RegExpDescriptor.FACTORY);
+        temp.add(InjectFailureDescriptor.FACTORY);
+        temp.add(CastListDescriptor.FACTORY);
+        temp.add(CastRecordDescriptor.FACTORY);
+        temp.add(NotNullDescriptor.FACTORY);
+
+        // Spatial and temporal type accessors
+        temp.add(TemporalYearAccessor.FACTORY);
+        temp.add(TemporalMonthAccessor.FACTORY);
+        temp.add(TemporalDayAccessor.FACTORY);
+        temp.add(TemporalHourAccessor.FACTORY);
+        temp.add(TemporalMinuteAccessor.FACTORY);
+        temp.add(TemporalSecondAccessor.FACTORY);
+        temp.add(TemporalMillisecondAccessor.FACTORY);
+        temp.add(TemporalIntervalStartAccessor.FACTORY);
+        temp.add(TemporalIntervalEndAccessor.FACTORY);
+
+        // Temporal functions
+        temp.add(DateFromUnixTimeInDaysDescriptor.FACTORY);
+        temp.add(DateFromDatetimeDescriptor.FACTORY);
+        temp.add(AddDateDurationDescriptor.FACTORY);
+        temp.add(SubtractDateDescriptor.FACTORY);
+        temp.add(TimeFromUnixTimeInMsDescriptor.FACTORY);
+        temp.add(TimeFromDatetimeDescriptor.FACTORY);
+        temp.add(SubtractTimeDescriptor.FACTORY);
+        temp.add(AddTimeDurationDescriptor.FACTORY);
+        temp.add(DatetimeFromUnixTimeInMsDescriptor.FACTORY);
+        temp.add(DatetimeFromDateAndTimeDescriptor.FACTORY);
+        temp.add(SubtractDatetimeDescriptor.FACTORY);
+        temp.add(AddDatetimeDurationDescriptor.FACTORY);
+        temp.add(CalendarDurationFromDateTimeDescriptor.FACTORY);
+        temp.add(CalendarDuartionFromDateDescriptor.FACTORY);
+        temp.add(AdjustDateTimeForTimeZoneDescriptor.FACTORY);
+        temp.add(AdjustTimeForTimeZoneDescriptor.FACTORY);
+        temp.add(IntervalBeforeDescriptor.FACTORY);
+        temp.add(IntervalAfterDescriptor.FACTORY);
+        temp.add(IntervalMeetsDescriptor.FACTORY);
+        temp.add(IntervalMetByDescriptor.FACTORY);
+        temp.add(IntervalOverlapsDescriptor.FACTORY);
+        temp.add(IntervalOverlappedByDescriptor.FACTORY);
+        temp.add(OverlapDescriptor.FACTORY);
+        temp.add(IntervalStartsDescriptor.FACTORY);
+        temp.add(IntervalStartedByDescriptor.FACTORY);
+        temp.add(IntervalCoversDescriptor.FACTORY);
+        temp.add(IntervalCoveredByDescriptor.FACTORY);
+        temp.add(IntervalEndsDecriptor.FACTORY);
+        temp.add(IntervalEndedByDescriptor.FACTORY);
+        temp.add(CurrentDateDescriptor.FACTORY);
+        temp.add(CurrentTimeDescriptor.FACTORY);
+        temp.add(CurrentDateTimeDescriptor.FACTORY);
+        temp.add(DurationFromMillisecondsDescriptor.FACTORY);
+        temp.add(DurationFromMonthsDescriptor.FACTORY);
+        temp.add(YearMonthDurationComparatorDecriptor.GREATER_THAN_FACTORY);
+        temp.add(YearMonthDurationComparatorDecriptor.LESS_THAN_FACTORY);
+        temp.add(DayTimeDurationComparatorDescriptor.GREATER_THAN_FACTORY);
+        temp.add(DayTimeDurationComparatorDescriptor.LESS_THAN_FACTORY);
+        temp.add(MonthsOfYearMonthDurationDescriptor.FACTORY);
+        temp.add(MillisecondsOfDayTimeDurationDescriptor.FACTORY);
+        temp.add(DurationEqualDescriptor.FACTORY);
+
+        // Interval constructor
+        temp.add(AIntervalFromDateConstructorDescriptor.FACTORY);
+        temp.add(AIntervalFromTimeConstructorDescriptor.FACTORY);
+        temp.add(AIntervalFromDateTimeConstructorDescriptor.FACTORY);
+        temp.add(AIntervalStartFromDateConstructorDescriptor.FACTORY);
+        temp.add(AIntervalStartFromDateTimeConstructorDescriptor.FACTORY);
+        temp.add(AIntervalStartFromTimeConstructorDescriptor.FACTORY);
+
+        IFunctionManager mgr = new FunctionManagerImpl();
+        for (IFunctionDescriptorFactory fdFactory : temp) {
+            mgr.registerFunction(fdFactory);
+        }
+        FunctionManagerHolder.setFunctionManager(mgr);
+    }
+
+    @Override
+    public IBinaryBooleanInspectorFactory getBinaryBooleanInspectorFactory() {
+        return AqlBinaryBooleanInspectorImpl.FACTORY;
+    }
+
+    @Override
+    public IBinaryComparatorFactoryProvider getBinaryComparatorFactoryProvider() {
+        return AqlBinaryComparatorFactoryProvider.INSTANCE;
+    }
+
+    @Override
+    public IBinaryHashFunctionFactoryProvider getBinaryHashFunctionFactoryProvider() {
+        return AqlBinaryHashFunctionFactoryProvider.INSTANCE;
+    }
+
+    @Override
+    public ISerializerDeserializerProvider getSerdeProvider() {
+        return AqlSerializerDeserializerProvider.INSTANCE; // done
+    }
+
+    @Override
+    public ITypeTraitProvider getTypeTraitProvider() {
+        return AqlTypeTraitProvider.INSTANCE;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public ICopyEvaluatorFactory getFieldAccessEvaluatorFactory(ARecordType recType, String fldName, int recordColumn)
+            throws AlgebricksException {
+        String[] names = recType.getFieldNames();
+        int n = names.length;
+        for (int i = 0; i < n; i++) {
+            if (names[i].equals(fldName)) {
+                ICopyEvaluatorFactory recordEvalFactory = new ColumnAccessEvalFactory(recordColumn);
+                ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+                DataOutput dos = abvs.getDataOutput();
+                try {
+                    AInt32 ai = new AInt32(i);
+                    AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai,
+                            dos);
+                } catch (HyracksDataException e) {
+                    throw new AlgebricksException(e);
+                }
+                ICopyEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(),
+                        abvs.getLength()));
+                ICopyEvaluatorFactory evalFactory = new FieldAccessByIndexEvalFactory(recordEvalFactory,
+                        fldIndexEvalFactory, recType);
+                return evalFactory;
+            }
+        }
+        throw new AlgebricksException("Could not find field " + fldName + " in the schema.");
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public ICopyEvaluatorFactory[] createMBRFactory(ARecordType recType, String fldName, int recordColumn, int dimension)
+            throws AlgebricksException {
+        ICopyEvaluatorFactory evalFactory = getFieldAccessEvaluatorFactory(recType, fldName, recordColumn);
+        int numOfFields = dimension * 2;
+        ICopyEvaluatorFactory[] evalFactories = new ICopyEvaluatorFactory[numOfFields];
+
+        ArrayBackedValueStorage abvs1 = new ArrayBackedValueStorage();
+        DataOutput dos1 = abvs1.getDataOutput();
+        try {
+            AInt32 ai = new AInt32(dimension);
+            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai, dos1);
+        } catch (HyracksDataException e) {
+            throw new AlgebricksException(e);
+        }
+        ICopyEvaluatorFactory dimensionEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs1.getByteArray(),
+                abvs1.getLength()));
+
+        for (int i = 0; i < numOfFields; i++) {
+            ArrayBackedValueStorage abvs2 = new ArrayBackedValueStorage();
+            DataOutput dos2 = abvs2.getDataOutput();
+            try {
+                AInt32 ai = new AInt32(i);
+                AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai, dos2);
+            } catch (HyracksDataException e) {
+                throw new AlgebricksException(e);
+            }
+            ICopyEvaluatorFactory coordinateEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs2.getByteArray(),
+                    abvs2.getLength()));
+
+            evalFactories[i] = new CreateMBREvalFactory(evalFactory, dimensionEvalFactory, coordinateEvalFactory);
+        }
+        return evalFactories;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioningEvaluatorFactory(
+            ARecordType recType, String fldName) throws AlgebricksException {
+        String[] names = recType.getFieldNames();
+        int n = names.length;
+        for (int i = 0; i < n; i++) {
+            if (names[i].equals(fldName)) {
+                ICopyEvaluatorFactory recordEvalFactory = new ColumnAccessEvalFactory(
+                        GlobalConfig.DEFAULT_INPUT_DATA_COLUMN);
+                ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+                DataOutput dos = abvs.getDataOutput();
+                try {
+                    AInt32 ai = new AInt32(i);
+                    AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai,
+                            dos);
+                } catch (HyracksDataException e) {
+                    throw new AlgebricksException(e);
+                }
+                ICopyEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(),
+                        abvs.getLength()));
+                ICopyEvaluatorFactory evalFactory = new FieldAccessByIndexEvalFactory(recordEvalFactory,
+                        fldIndexEvalFactory, recType);
+                IFunctionInfo finfoAccess = AsterixBuiltinFunctions
+                        .getAsterixFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX);
+
+                ScalarFunctionCallExpression partitionFun = new ScalarFunctionCallExpression(finfoAccess,
+                        new MutableObject<ILogicalExpression>(new VariableReferenceExpression(METADATA_DUMMY_VAR)),
+                        new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
+                                new AInt32(i)))));
+                return new Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType>(evalFactory,
+                        partitionFun, recType.getFieldTypes()[i]);
+            }
+        }
+        throw new AlgebricksException("Could not find field " + fldName + " in the schema.");
+    }
+
+    @Override
+    public IFunctionDescriptor resolveFunction(ILogicalExpression expr, IVariableTypeEnvironment context)
+            throws AlgebricksException {
+        FunctionIdentifier fnId = ((AbstractFunctionCallExpression) expr).getFunctionIdentifier();
+        IFunctionManager mgr = FunctionManagerHolder.getFunctionManager();
+        IFunctionDescriptor fd = mgr.lookupFunction(fnId);
+        if (fd == null) {
+            throw new AsterixRuntimeException("Unresolved function " + fnId);
+        }
+        typeInference(expr, fd, context);
+        return fd;
+    }
+
+    private void typeInference(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context)
+            throws AlgebricksException {
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.LISTIFY)) {
+            AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
+            if (f.getArguments().size() == 0) {
+                ((ListifyAggregateDescriptor) fd).reset(new AOrderedListType(null, null));
+            } else {
+                IAType itemType = (IAType) context.getType(f.getArguments().get(0).getValue());
+                // Convert UNION types into ANY.
+                if (itemType instanceof AUnionType) {
+                    itemType = BuiltinType.ANY;
+                }
+                ((ListifyAggregateDescriptor) fd).reset(new AOrderedListType(itemType, null));
+            }
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.CAST_RECORD)) {
+            AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+            ARecordType rt = (ARecordType) TypeComputerUtilities.getRequiredType(funcExpr);
+            ARecordType it = (ARecordType) context.getType(funcExpr.getArguments().get(0).getValue());
+            ((CastRecordDescriptor) fd).reset(rt, it);
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.CAST_LIST)) {
+            AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+            AbstractCollectionType rt = (AbstractCollectionType) TypeComputerUtilities.getRequiredType(funcExpr);
+            AbstractCollectionType it = (AbstractCollectionType) context.getType(funcExpr.getArguments().get(0).getValue());
+            ((CastListDescriptor) fd).reset(rt, it);
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR)) {
+            ARecordType rt = (ARecordType) context.getType(expr);
+            ((OpenRecordConstructorDescriptor) fd).reset(rt,
+                    computeOpenFields((AbstractFunctionCallExpression) expr, rt));
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.CLOSED_RECORD_CONSTRUCTOR)) {
+            ((ClosedRecordConstructorDescriptor) fd).reset((ARecordType) context.getType(expr));
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR)) {
+            ((OrderedListConstructorDescriptor) fd).reset((AOrderedListType) context.getType(expr));
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR)) {
+            ((UnorderedListConstructorDescriptor) fd).reset((AUnorderedListType) context.getType(expr));
+        }
+        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX)) {
+            AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
+            IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue());
+            switch (t.getTypeTag()) {
+                case RECORD: {
+                    ARecordType recType = (ARecordType) t;
+                    ((FieldAccessByIndexDescriptor) fd).reset(recType);
+                    break;
+                }
+                case UNION: {
+                    AUnionType unionT = (AUnionType) t;
+                    if (unionT.isNullableType()) {
+                        IAType t2 = unionT.getUnionList().get(1);
+                        if (t2.getTypeTag() == ATypeTag.RECORD) {
+                            ARecordType recType = (ARecordType) t2;
+                            ((FieldAccessByIndexDescriptor) fd).reset(recType);
+                            break;
+                        }
+                    }
+                    throw new NotImplementedException("field-access-by-index for data of type " + t);
+                }
+                default: {
+                    throw new NotImplementedException("field-access-by-index for data of type " + t);
+                }
+            }
+        }
+    }
+
+    private boolean[] computeOpenFields(AbstractFunctionCallExpression expr, ARecordType recType) {
+        int n = expr.getArguments().size() / 2;
+        boolean[] open = new boolean[n];
+        for (int i = 0; i < n; i++) {
+            Mutable<ILogicalExpression> argRef = expr.getArguments().get(2 * i);
+            ILogicalExpression arg = argRef.getValue();
+            if (arg.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
+                String fn = ((AString) ((AsterixConstantValue) ((ConstantExpression) arg).getValue()).getObject())
+                        .getStringValue();
+                open[i] = true;
+                for (String s : recType.getFieldNames()) {
+                    if (s.equals(fn)) {
+                        open[i] = false;
+                        break;
+                    }
+                }
+            } else {
+                open[i] = true;
+            }
+        }
+        return open;
+    }
+
+    @Override
+    public IPrinterFactoryProvider getPrinterFactoryProvider() {
+        return AqlPrinterFactoryProvider.INSTANCE;
+    }
+
+    @Override
+    public IPrinterFactoryProvider getJSONPrinterFactoryProvider() {
+        return AqlJSONPrinterFactoryProvider.INSTANCE;
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public ICopyEvaluatorFactory getConstantEvalFactory(IAlgebricksConstantValue value) throws AlgebricksException {
+        IAObject obj = null;
+        if (value.isNull()) {
+            obj = ANull.NULL;
+        } else if (value.isTrue()) {
+            obj = ABoolean.TRUE;
+        } else if (value.isFalse()) {
+            obj = ABoolean.FALSE;
+        } else {
+            AsterixConstantValue acv = (AsterixConstantValue) value;
+            obj = acv.getObject();
+        }
+        ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+        DataOutput dos = abvs.getDataOutput();
+        try {
+            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(obj.getType()).serialize(obj, dos);
+        } catch (HyracksDataException e) {
+            throw new AlgebricksException(e);
+        }
+        return new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength()));
+    }
+
+    @Override
+    public IBinaryIntegerInspectorFactory getBinaryIntegerInspectorFactory() {
+        return AqlBinaryIntegerInspector.FACTORY;
+    }
+
+    @Override
+    public ITupleParserFactory createTupleParser(ARecordType recType, IParseFileSplitsDecl decl) {
+        if (decl.isDelimitedFileFormat()) {
+            int n = recType.getFieldTypes().length;
+            IValueParserFactory[] fieldParserFactories = new IValueParserFactory[n];
+            for (int i = 0; i < n; i++) {
+                ATypeTag tag = recType.getFieldTypes()[i].getTypeTag();
+                IValueParserFactory vpf = typeToValueParserFactMap.get(tag);
+                if (vpf == null) {
+                    throw new NotImplementedException("No value parser factory for delimited fields of type " + tag);
+                }
+                fieldParserFactories[i] = vpf;
+            }
+            return new NtDelimitedDataTupleParserFactory(recType, fieldParserFactories, decl.getDelimChar());
+        } else {
+            return new AdmSchemafullRecordParserFactory(recType);
+        }
+    }
+
+    @Override
+    public ITupleParserFactory createTupleParser(ARecordType recType, boolean delimitedFormat, Character delimiter) {
+        if (delimitedFormat) {
+            int n = recType.getFieldTypes().length;
+            IValueParserFactory[] fieldParserFactories = new IValueParserFactory[n];
+            for (int i = 0; i < n; i++) {
+                ATypeTag tag = recType.getFieldTypes()[i].getTypeTag();
+                IValueParserFactory vpf = typeToValueParserFactMap.get(tag);
+                if (vpf == null) {
+                    throw new NotImplementedException("No value parser factory for delimited fields of type " + tag);
+                }
+                fieldParserFactories[i] = vpf;
+            }
+            return new NtDelimitedDataTupleParserFactory(recType, fieldParserFactories, delimiter);
+        } else {
+            return new AdmSchemafullRecordParserFactory(recType);
+        }
+    }
+
+    @Override
+    public INullWriterFactory getNullWriterFactory() {
+        return AqlNullWriterFactory.INSTANCE;
+    }
+
+    @Override
+    public IExpressionEvalSizeComputer getExpressionEvalSizeComputer() {
+        return new IExpressionEvalSizeComputer() {
+            @Override
+            public int getEvalSize(ILogicalExpression expr, IVariableEvalSizeEnvironment env)
+                    throws AlgebricksException {
+                switch (expr.getExpressionTag()) {
+                    case CONSTANT: {
+                        ConstantExpression c = (ConstantExpression) expr;
+                        if (c == ConstantExpression.NULL) {
+                            return 1;
+                        } else if (c == ConstantExpression.FALSE || c == ConstantExpression.TRUE) {
+                            return 2;
+                        } else {
+                            AsterixConstantValue acv = (AsterixConstantValue) c.getValue();
+                            IAObject o = acv.getObject();
+                            switch (o.getType().getTypeTag()) {
+                                case DOUBLE: {
+                                    return 9;
+                                }
+                                case BOOLEAN: {
+                                    return 2;
+                                }
+                                case NULL: {
+                                    return 1;
+                                }
+                                case INT32: {
+                                    return 5;
+                                }
+                                case INT64: {
+                                    return 9;
+                                }
+                                default: {
+                                    // TODO
+                                    return -1;
+                                }
+                            }
+                        }
+                    }
+                    case FUNCTION_CALL: {
+                        AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
+                        if (f.getFunctionIdentifier().equals(AsterixBuiltinFunctions.TID)) {
+                            return 5;
+                        } else {
+                            // TODO
+                            return -1;
+                        }
+                    }
+                    default: {
+                        // TODO
+                        return -1;
+                    }
+                }
+            }
+        };
+    }
+
+    @Override
+    public INormalizedKeyComputerFactoryProvider getNormalizedKeyComputerFactoryProvider() {
+        return AqlNormalizedKeyComputerFactoryProvider.INSTANCE;
+    }
+
+    @Override
+    public IBinaryHashFunctionFamilyProvider getBinaryHashFunctionFamilyProvider() {
+        return AqlBinaryHashFunctionFamilyProvider.INSTANCE;
+    }
+
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/job/listener/JobEventListenerFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/ADMDataParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractDataParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractDataParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractDataParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractDataParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractTupleParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractTupleParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractTupleParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AbstractTupleParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataTupleParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataTupleParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataTupleParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/DelimitedDataTupleParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/IDataParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/IDataParser.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/IDataParser.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/IDataParser.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/NtDelimitedDataTupleParserFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/NtDelimitedDataTupleParserFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/NtDelimitedDataTupleParserFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/NtDelimitedDataTupleParserFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/std/NoTupleSourceRuntimeFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/std/NoTupleSourceRuntimeFactory.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/std/NoTupleSourceRuntimeFactory.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/std/NoTupleSourceRuntimeFactory.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/base/AbstractRunningAggregateFunctionDynamicDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/base/AbstractRunningAggregateFunctionDynamicDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/base/AbstractRunningAggregateFunctionDynamicDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/base/AbstractRunningAggregateFunctionDynamicDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/std/TidRunningAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/std/TidRunningAggregateDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/std/TidRunningAggregateDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/runningaggregates/std/TidRunningAggregateDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/base/AbstractUnnestingFunctionDynamicDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/base/AbstractUnnestingFunctionDynamicDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/base/AbstractUnnestingFunctionDynamicDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/base/AbstractUnnestingFunctionDynamicDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
new file mode 100644
index 0000000..f29d6be
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
@@ -0,0 +1,120 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.runtime.unnestingfunctions.std;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
+import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.runtime.evaluators.common.AsterixListAccessor;
+import edu.uci.ics.asterix.runtime.unnestingfunctions.base.AbstractUnnestingFunctionDynamicDescriptor;
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyUnnestingFunction;
+import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyUnnestingFunctionFactory;
+import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+public class ScanCollectionDescriptor extends AbstractUnnestingFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
+        public IFunctionDescriptor createFunctionDescriptor() {
+            return new ScanCollectionDescriptor();
+        }
+    };
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return AsterixBuiltinFunctions.SCAN_COLLECTION;
+    }
+
+    @Override
+    public ICopyUnnestingFunctionFactory createUnnestingFunctionFactory(final ICopyEvaluatorFactory[] args) {
+        return new ScanCollectionUnnestingFunctionFactory(args[0]);
+    }
+
+    public static class ScanCollectionUnnestingFunctionFactory implements ICopyUnnestingFunctionFactory {
+
+        private static final long serialVersionUID = 1L;
+        private ICopyEvaluatorFactory listEvalFactory;
+
+        public ScanCollectionUnnestingFunctionFactory(ICopyEvaluatorFactory arg) {
+            this.listEvalFactory = arg;
+        }
+
+        @Override
+        public ICopyUnnestingFunction createUnnestingFunction(IDataOutputProvider provider) throws AlgebricksException {
+
+            final DataOutput out = provider.getDataOutput();
+
+            return new ICopyUnnestingFunction() {
+
+                private final AsterixListAccessor listAccessor = new AsterixListAccessor();
+                private ArrayBackedValueStorage inputVal = new ArrayBackedValueStorage();
+                private ICopyEvaluator argEval = listEvalFactory.createEvaluator(inputVal);
+                private int itemIndex;
+                private boolean metNull = false;
+
+                @Override
+                public void init(IFrameTupleReference tuple) throws AlgebricksException {
+                    try {
+                        inputVal.reset();
+                        argEval.evaluate(tuple);
+                        ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
+                                .deserialize(inputVal.getByteArray()[0]);
+                        if (typeTag == ATypeTag.NULL) {
+                            metNull = true;
+                            return;
+                        }
+                        listAccessor.reset(inputVal.getByteArray(), 0);
+                        itemIndex = 0;
+                    } catch (AsterixException e) {
+                        throw new AlgebricksException(e);
+                    }
+                }
+
+                @Override
+                public boolean step() throws AlgebricksException {
+                    try {
+                        if (!metNull) {
+                            if (itemIndex < listAccessor.size()) {
+                                listAccessor.writeItem(itemIndex, out);
+                                ++itemIndex;
+                                return true;
+                            }
+                        }
+                    } catch (IOException e) {
+                        throw new AlgebricksException(e);
+                    } catch (AsterixException e) {
+                        throw new AlgebricksException(e);
+                    }
+                    return false;
+                }
+
+            };
+        }
+
+    }
+}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java
similarity index 100%
rename from asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java
diff --git a/asterix/asterix-runtime/src/main/resources/adm.grammar b/asterix-runtime/src/main/resources/adm.grammar
similarity index 100%
rename from asterix/asterix-runtime/src/main/resources/adm.grammar
rename to asterix-runtime/src/main/resources/adm.grammar
diff --git a/asterix-server/pom.xml b/asterix-server/pom.xml
new file mode 100644
index 0000000..d1d6acb
--- /dev/null
+++ b/asterix-server/pom.xml
@@ -0,0 +1,86 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>asterix-server</artifactId>
+  <name>asterix-server</name>
+  <parent>
+    <groupId>edu.uci.ics.asterix</groupId>
+    <artifactId>asterix</artifactId>
+    <version>0.0.6-SNAPSHOT</version>
+  </parent>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>appassembler-maven-plugin</artifactId>
+        <version>1.3</version>
+        <executions>
+          <execution>
+            <configuration>
+              <programs>
+                <program>
+                  <mainClass>edu.uci.ics.hyracks.control.cc.CCDriver</mainClass>
+                  <name>asterixcc</name>
+                  <commandLineArguments>
+                    <commandLineArgument>-app-cc-main-class</commandLineArgument>
+                    <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.CCApplicationEntryPoint</commandLineArgument>
+                  </commandLineArguments>
+                </program>
+                <program>
+                  <mainClass>edu.uci.ics.hyracks.control.nc.NCDriver</mainClass>
+                  <name>asterixnc</name>
+                  <commandLineArguments>
+                    <commandLineArgument>-app-nc-main-class</commandLineArgument>
+                    <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.NCApplicationEntryPoint</commandLineArgument>
+                  </commandLineArguments>
+                </program>
+              </programs>
+              <repositoryLayout>flat</repositoryLayout>
+              <repositoryName>lib</repositoryName>
+            </configuration>
+            <phase>package</phase>
+            <goals>
+              <goal>assemble</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-assembly-plugin</artifactId>
+        <version>2.2-beta-5</version>
+        <executions>
+          <execution>
+            <configuration>
+              <descriptors>
+                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+              </descriptors>
+            </configuration>
+            <phase>package</phase>
+            <goals>
+              <goal>attached</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <dependencies>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-control-cc</artifactId>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>edu.uci.ics.hyracks</groupId>
+  		<artifactId>hyracks-control-nc</artifactId>
+  		<type>jar</type>
+  		<scope>compile</scope>
+  	</dependency>
+  	<dependency>
+  		<groupId>edu.uci.ics.asterix</groupId>
+  		<artifactId>asterix-app</artifactId>
+  		<version>0.0.6-SNAPSHOT</version>
+  	</dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/asterix/asterix-server/src/main/assembly/binary-assembly.xml b/asterix-server/src/main/assembly/binary-assembly.xml
similarity index 100%
rename from asterix/asterix-server/src/main/assembly/binary-assembly.xml
rename to asterix-server/src/main/assembly/binary-assembly.xml
diff --git a/asterix-test-framework/pom.xml b/asterix-test-framework/pom.xml
new file mode 100755
index 0000000..791bf26
--- /dev/null
+++ b/asterix-test-framework/pom.xml
@@ -0,0 +1,37 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-test-framework</artifactId>
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.jvnet.jaxb2.maven2</groupId>
+				<artifactId>maven-jaxb2-plugin</artifactId>
+				<executions>
+					<execution>
+						<goals>
+							<goal>generate</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+	</dependencies>
+</project>
diff --git a/asterix/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java b/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java
similarity index 100%
rename from asterix/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java
rename to asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestCaseContext.java
diff --git a/asterix/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestFileContext.java b/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestFileContext.java
similarity index 100%
rename from asterix/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestFileContext.java
rename to asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/context/TestFileContext.java
diff --git a/asterix/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/xml/TestSuiteParser.java b/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/xml/TestSuiteParser.java
similarity index 100%
rename from asterix/asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/xml/TestSuiteParser.java
rename to asterix-test-framework/src/main/java/edu/uci/ics/asterix/testframework/xml/TestSuiteParser.java
diff --git a/asterix/asterix-test-framework/src/main/resources/Catalog.xsd b/asterix-test-framework/src/main/resources/Catalog.xsd
similarity index 100%
rename from asterix/asterix-test-framework/src/main/resources/Catalog.xsd
rename to asterix-test-framework/src/main/resources/Catalog.xsd
diff --git a/asterix/asterix-tools/data/events/chapter_names.txt b/asterix-tools/data/events/chapter_names.txt
similarity index 100%
rename from asterix/asterix-tools/data/events/chapter_names.txt
rename to asterix-tools/data/events/chapter_names.txt
diff --git a/asterix/asterix-tools/data/events/cities.txt b/asterix-tools/data/events/cities.txt
similarity index 100%
rename from asterix/asterix-tools/data/events/cities.txt
rename to asterix-tools/data/events/cities.txt
diff --git a/asterix/asterix-tools/data/events/interests.txt b/asterix-tools/data/events/interests.txt
similarity index 100%
rename from asterix/asterix-tools/data/events/interests.txt
rename to asterix-tools/data/events/interests.txt
diff --git a/asterix/asterix-tools/data/events/latlongs.txt b/asterix-tools/data/events/latlongs.txt
similarity index 100%
rename from asterix/asterix-tools/data/events/latlongs.txt
rename to asterix-tools/data/events/latlongs.txt
diff --git a/asterix/asterix-tools/data/events/streets.txt b/asterix-tools/data/events/streets.txt
similarity index 100%
rename from asterix/asterix-tools/data/events/streets.txt
rename to asterix-tools/data/events/streets.txt
diff --git a/asterix/asterix-tools/data/uscensus/dist.all.first.cleaned b/asterix-tools/data/uscensus/dist.all.first.cleaned
similarity index 100%
rename from asterix/asterix-tools/data/uscensus/dist.all.first.cleaned
rename to asterix-tools/data/uscensus/dist.all.first.cleaned
diff --git a/asterix/asterix-tools/data/uscensus/dist.all.last.cleaned b/asterix-tools/data/uscensus/dist.all.last.cleaned
similarity index 100%
rename from asterix/asterix-tools/data/uscensus/dist.all.last.cleaned
rename to asterix-tools/data/uscensus/dist.all.last.cleaned
diff --git a/asterix/asterix-tools/data/uscensus/dist.female.first.cleaned b/asterix-tools/data/uscensus/dist.female.first.cleaned
similarity index 100%
rename from asterix/asterix-tools/data/uscensus/dist.female.first.cleaned
rename to asterix-tools/data/uscensus/dist.female.first.cleaned
diff --git a/asterix/asterix-tools/data/uscensus/dist.male.first.cleaned b/asterix-tools/data/uscensus/dist.male.first.cleaned
similarity index 100%
rename from asterix/asterix-tools/data/uscensus/dist.male.first.cleaned
rename to asterix-tools/data/uscensus/dist.male.first.cleaned
diff --git a/asterix-tools/pom.xml b/asterix-tools/pom.xml
new file mode 100644
index 0000000..248cdb5
--- /dev/null
+++ b/asterix-tools/pom.xml
@@ -0,0 +1,156 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-tools</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+			<plugin>
+				<artifactId>maven-jar-plugin</artifactId>
+				<executions>
+					<execution>
+						<id>aqlclient</id>
+						<goals>
+							<goal>jar</goal>
+						</goals>
+						<phase>package</phase>
+						<configuration>
+							<classifier>aqlclient</classifier>
+							<archive>
+								<manifest>
+									<MainClass>edu.uci.ics.asterix.tools.aqlclient.AqlClient</MainClass>
+								</manifest>
+							</archive>
+							<includes>
+								<include>**/uci/ics/asterix/tools/aqlclient/*</include>
+							</includes>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<version>2.7.2</version>
+				<executions>
+					<execution>
+						<id>default-test</id>
+						<phase>test</phase>
+						<goals>
+							<goal>test</goal>
+						</goals>
+						<configuration>
+							<forkMode>pertest</forkMode>
+							<argLine>-enableassertions -Xmx1024m -Dfile.encoding=UTF-8
+								-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
+							<includes>
+								<include>**/*TestSuite.java</include>
+								<include>**/*Test.java</include>
+							</includes>
+						</configuration>
+					</execution>
+				</executions>
+				<configuration>
+					<forkMode>pertest</forkMode>
+					<argLine>-enableassertions -Xmx1536m -Dfile.encoding=UTF-8
+						-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
+					<includes>
+						<include>**/*TestSuite.java</include>
+						<include>**/*Test.java</include>
+					</includes>
+				</configuration>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>appassembler-maven-plugin</artifactId>
+				<version>1.0</version>
+				<executions>
+					<execution>
+						<configuration>
+							<programs>
+								<program>
+									<mainClass>edu.uci.ics.asterix.tools.TblToAdm</mainClass>
+									<name>tbl2adm</name>
+								</program>
+								<program>
+									<mainClass>edu.uci.ics.asterix.tools.datagen.AdgClientDriver</mainClass>
+									<name>adg</name>
+								</program>
+							</programs>
+							<repositoryLayout>flat</repositoryLayout>
+							<repositoryName>lib</repositoryName>
+						</configuration>
+						<phase>package</phase>
+						<goals>
+							<goal>assemble</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			<plugin>
+				<artifactId>maven-assembly-plugin</artifactId>
+				<version>2.2-beta-5</version>
+				<executions>
+					<execution>
+						<configuration>
+							<descriptors>
+								<descriptor>src/main/assembly/binary-assembly.xml</descriptor>
+							</descriptors>
+						</configuration>
+						<phase>package</phase>
+						<goals>
+							<goal>attached</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-aql</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.asterix</groupId>
+			<artifactId>asterix-algebra</artifactId>
+			<version>0.0.6-SNAPSHOT</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpclient</artifactId>
+			<version>4.2.2</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>org.apache.httpcomponents</groupId>
+			<artifactId>httpcore</artifactId>
+			<version>4.2.2</version>
+			<scope>compile</scope>
+		</dependency>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.8.1</version>
+			<scope>test</scope>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/asterix/asterix-tools/scripts/bash/trim.sh b/asterix-tools/scripts/bash/trim.sh
similarity index 100%
rename from asterix/asterix-tools/scripts/bash/trim.sh
rename to asterix-tools/scripts/bash/trim.sh
diff --git a/asterix/asterix-tools/scripts/bash/upcase.sh b/asterix-tools/scripts/bash/upcase.sh
similarity index 100%
rename from asterix/asterix-tools/scripts/bash/upcase.sh
rename to asterix-tools/scripts/bash/upcase.sh
diff --git a/asterix/asterix-tools/src/main/assembly/binary-assembly.xml b/asterix-tools/src/main/assembly/binary-assembly.xml
similarity index 100%
rename from asterix/asterix-tools/src/main/assembly/binary-assembly.xml
rename to asterix-tools/src/main/assembly/binary-assembly.xml
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/aqlclient/AqlClient.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/aqlclient/AqlClient.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/aqlclient/AqlClient.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/aqlclient/AqlClient.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdgClientDriver.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdgClientDriver.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdgClientDriver.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdgClientDriver.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdmDataGen.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdmDataGen.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdmDataGen.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/AdmDataGen.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/CustOrdDataGen.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/CustOrdDataGen.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/CustOrdDataGen.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/CustOrdDataGen.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/EventDataGen.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/EventDataGen.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/EventDataGen.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/datagen/EventDataGen.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapter.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapter.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapter.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapter.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapterFactory.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapterFactory.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapterFactory.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/external/data/RateControlledFileSystemBasedAdapterFactory.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/tbltoadm/TblToAdm.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/tbltoadm/TblToAdm.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/tbltoadm/TblToAdm.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/tbltoadm/TblToAdm.java
diff --git a/asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/translator/ADGenDmlTranslator.java b/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/translator/ADGenDmlTranslator.java
similarity index 100%
rename from asterix/asterix-tools/src/main/java/edu/uci/ics/asterix/tools/translator/ADGenDmlTranslator.java
rename to asterix-tools/src/main/java/edu/uci/ics/asterix/tools/translator/ADGenDmlTranslator.java
diff --git a/asterix/asterix-tools/src/main/resources/test.properties b/asterix-tools/src/main/resources/test.properties
similarity index 100%
rename from asterix/asterix-tools/src/main/resources/test.properties
rename to asterix-tools/src/main/resources/test.properties
diff --git a/asterix/asterix-tools/src/test/java/edu/uci/ics/asterix/tools/test/AdmDataGenTest.java b/asterix-tools/src/test/java/edu/uci/ics/asterix/tools/test/AdmDataGenTest.java
similarity index 100%
rename from asterix/asterix-tools/src/test/java/edu/uci/ics/asterix/tools/test/AdmDataGenTest.java
rename to asterix-tools/src/test/java/edu/uci/ics/asterix/tools/test/AdmDataGenTest.java
diff --git a/asterix/asterix-tools/src/test/resources/adgts/dgscripts/events/event.adg b/asterix-tools/src/test/resources/adgts/dgscripts/events/event.adg
similarity index 100%
rename from asterix/asterix-tools/src/test/resources/adgts/dgscripts/events/event.adg
rename to asterix-tools/src/test/resources/adgts/dgscripts/events/event.adg
diff --git a/asterix/asterix-tools/src/test/resources/adgts/dgscripts/users/user.adg b/asterix-tools/src/test/resources/adgts/dgscripts/users/user.adg
similarity index 100%
rename from asterix/asterix-tools/src/test/resources/adgts/dgscripts/users/user.adg
rename to asterix-tools/src/test/resources/adgts/dgscripts/users/user.adg
diff --git a/asterix/asterix-tools/src/test/resources/adgts/only.txt b/asterix-tools/src/test/resources/adgts/only.txt
similarity index 100%
rename from asterix/asterix-tools/src/test/resources/adgts/only.txt
rename to asterix-tools/src/test/resources/adgts/only.txt
diff --git a/asterix/asterix-tools/src/test/resources/adgts/results/events/event.adm b/asterix-tools/src/test/resources/adgts/results/events/event.adm
similarity index 100%
rename from asterix/asterix-tools/src/test/resources/adgts/results/events/event.adm
rename to asterix-tools/src/test/resources/adgts/results/events/event.adm
diff --git a/asterix/asterix-tools/src/test/resources/adgts/results/users/user.adm b/asterix-tools/src/test/resources/adgts/results/users/user.adm
similarity index 100%
rename from asterix/asterix-tools/src/test/resources/adgts/results/users/user.adm
rename to asterix-tools/src/test/resources/adgts/results/users/user.adm
diff --git a/asterix/asterix-tools/src/test/resources/logging.properties b/asterix-tools/src/test/resources/logging.properties
similarity index 100%
rename from asterix/asterix-tools/src/test/resources/logging.properties
rename to asterix-tools/src/test/resources/logging.properties
diff --git a/asterix-transactions/pom.xml b/asterix-transactions/pom.xml
new file mode 100644
index 0000000..7d951ce
--- /dev/null
+++ b/asterix-transactions/pom.xml
@@ -0,0 +1,45 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<artifactId>asterix</artifactId>
+		<groupId>edu.uci.ics.asterix</groupId>
+		<version>0.0.6-SNAPSHOT</version>
+	</parent>
+	<artifactId>asterix-transactions</artifactId>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>2.0.2</version>
+				<configuration>
+					<source>1.7</source>
+					<target>1.7</target>
+					<fork>true</fork>
+				</configuration>
+			</plugin>
+		</plugins>
+
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-common</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-btree</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
+		</dependency>
+	</dependencies>
+
+</project>
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/exception/ACIDException.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/exception/ACIDException.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/exception/ACIDException.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/exception/ACIDException.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/AbstractLSMIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/AbstractLSMIOOperationCallback.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/AbstractLSMIOOperationCallback.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/AbstractLSMIOOperationCallback.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallback.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMBTreeIOOperationCallbackFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallback.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMInvertedIndexIOOperationCallbackFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallback.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/ioopcallbacks/LSMRTreeIOOperationCallbackFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallback.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallback.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallback.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/AbstractOperationCallbackFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTracker.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTrackerFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTrackerFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTrackerFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/IndexOperationTrackerFactory.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
new file mode 100644
index 0000000..a78f2ff
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
@@ -0,0 +1,71 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.opcallbacks;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.locking.ILockManager;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
+
+/**
+ * Assumes LSM-BTrees as primary indexes. Implements try/locking and unlocking on primary keys.
+ */
+public class PrimaryIndexInstantSearchOperationCallback extends AbstractOperationCallback implements
+        ISearchOperationCallback {
+
+    public PrimaryIndexInstantSearchOperationCallback(int datasetId, int[] entityIdFields, ILockManager lockManager,
+            TransactionContext txnCtx) {
+        super(datasetId, entityIdFields, txnCtx, lockManager);
+    }
+
+    @Override
+    public boolean proceed(ITupleReference tuple) throws HyracksDataException {
+        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+        try {
+            return lockManager.instantTryLock(datasetId, pkHash, LockMode.S, txnCtx);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+
+    @Override
+    public void reconcile(ITupleReference tuple) throws HyracksDataException {
+        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+        try {
+            lockManager.lock(datasetId, pkHash, LockMode.S, txnCtx);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+
+    @Override
+    public void cancel(ITupleReference tuple) throws HyracksDataException {
+        //no op
+    }
+
+    @Override
+    public void complete(ITupleReference tuple) throws HyracksDataException {
+        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+        try {
+            lockManager.unlock(datasetId, pkHash, txnCtx);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallbackFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallback.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexModificationOperationCallbackFactory.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
new file mode 100644
index 0000000..62ec3c9
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.opcallbacks;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.locking.ILockManager;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
+
+/**
+ * Assumes LSM-BTrees as primary indexes. Implements try/locking and unlocking on primary keys.
+ */
+public class PrimaryIndexSearchOperationCallback extends AbstractOperationCallback implements ISearchOperationCallback {
+
+    public PrimaryIndexSearchOperationCallback(int datasetId, int[] entityIdFields, ILockManager lockManager,
+            TransactionContext txnCtx) {
+        super(datasetId, entityIdFields, txnCtx, lockManager);
+    }
+
+    @Override
+    public boolean proceed(ITupleReference tuple) throws HyracksDataException {
+        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+        try {
+            return lockManager.tryLock(datasetId, pkHash, LockMode.S, txnCtx);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+
+    @Override
+    public void reconcile(ITupleReference tuple) throws HyracksDataException {
+        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+        try {
+            lockManager.lock(datasetId, pkHash, LockMode.S, txnCtx);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+
+    @Override
+    public void cancel(ITupleReference tuple) throws HyracksDataException {
+        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
+        try {
+            lockManager.unlock(datasetId, pkHash, txnCtx);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+
+    @Override
+    public void complete(ITupleReference tuple) throws HyracksDataException {
+        //no op
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallbackFactory.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java
new file mode 100644
index 0000000..5b55e9a
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.opcallbacks;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.locking.ILockManager;
+import edu.uci.ics.asterix.transaction.management.service.logging.IndexLogger;
+import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallback;
+import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOperation;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.tuples.LSMBTreeTupleReference;
+
+/**
+ * Secondary-index modifications do not require any locking.
+ * We assume that the modification of the corresponding primary index has already taken an appropriate lock.
+ * This callback performs logging of the before and/or after images for secondary indexes.
+ */
+public class SecondaryIndexModificationOperationCallback extends AbstractOperationCallback implements
+        IModificationOperationCallback {
+
+    protected final long resourceId;
+    protected final byte resourceType;
+    protected final IndexOperation indexOp;
+    protected final IndexOperation oldOp;
+    protected final TransactionSubsystem txnSubsystem;
+
+    public SecondaryIndexModificationOperationCallback(int datasetId, int[] primaryKeyFields,
+            TransactionContext txnCtx, ILockManager lockManager, TransactionSubsystem txnSubsystem, long resourceId,
+            byte resourceType, IndexOperation indexOp) {
+        super(datasetId, primaryKeyFields, txnCtx, lockManager);
+        this.resourceId = resourceId;
+        this.resourceType = resourceType;
+        this.indexOp = indexOp;
+        oldOp = (indexOp == IndexOperation.DELETE) ? IndexOperation.INSERT : IndexOperation.DELETE;
+        this.txnSubsystem = txnSubsystem;
+    }
+
+    @Override
+    public void before(ITupleReference tuple) throws HyracksDataException {
+        // Do nothing.
+    }
+
+    @Override
+    public void found(ITupleReference before, ITupleReference after) throws HyracksDataException {
+        IndexLogger logger = txnSubsystem.getTreeLoggerRepository().getIndexLogger(resourceId, resourceType);
+        int pkHash = computePrimaryKeyHashValue(after, primaryKeyFields);
+        try {
+            IndexOperation effectiveOldOp;
+            if (resourceType == ResourceType.LSM_BTREE) {
+                LSMBTreeTupleReference lsmBTreeTuple = (LSMBTreeTupleReference) before;
+                if (before == null) {
+                    effectiveOldOp = IndexOperation.NOOP;
+                } else if (lsmBTreeTuple != null && lsmBTreeTuple.isAntimatter()) {
+                    effectiveOldOp = IndexOperation.DELETE;
+                } else {
+                    effectiveOldOp = IndexOperation.INSERT;
+                }
+            } else {
+                effectiveOldOp = oldOp;
+            }
+            logger.generateLogRecord(txnSubsystem, txnCtx, datasetId.getId(), pkHash, resourceId, indexOp, after,
+                    effectiveOldOp, before);
+        } catch (ACIDException e) {
+            throw new HyracksDataException(e);
+        }
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallbackFactory.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
new file mode 100644
index 0000000..4c8a583
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.opcallbacks;
+
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
+import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
+
+/**
+ * Secondary index searches perform no locking at all.
+ */
+public class SecondaryIndexSearchOperationCallback extends AbstractOperationCallback implements
+        ISearchOperationCallback {
+
+    public SecondaryIndexSearchOperationCallback() {
+        super(-1, null, null, null);
+    }
+
+    @Override
+    public boolean proceed(ITupleReference tuple) throws HyracksDataException {
+        return true;
+    }
+
+    @Override
+    public void reconcile(ITupleReference tuple) throws HyracksDataException {
+        // Do nothing.
+    }
+
+    @Override
+    public void cancel(ITupleReference tuple) throws HyracksDataException {
+        // Do nothing.
+    }
+
+    @Override
+    public void complete(ITupleReference tuple) throws HyracksDataException {
+        // Do nothing.
+    }
+
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallbackFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallbackFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallbackFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallbackFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ICloseable.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ICloseable.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ICloseable.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ICloseable.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ILocalResourceMetadata.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ILocalResourceMetadata.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ILocalResourceMetadata.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/ILocalResourceMetadata.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMBTreeLocalResourceMetadata.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMInvertedIndexLocalResourceMetadata.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMInvertedIndexLocalResourceMetadata.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMInvertedIndexLocalResourceMetadata.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMInvertedIndexLocalResourceMetadata.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMRTreeLocalResourceMetadata.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMRTreeLocalResourceMetadata.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMRTreeLocalResourceMetadata.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/LSMRTreeLocalResourceMetadata.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactoryProvider.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactoryProvider.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactoryProvider.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceFactoryProvider.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepository.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
new file mode 100644
index 0000000..01dce6c
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
@@ -0,0 +1,289 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.resource;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.transaction.management.service.logging.LogManager;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.storage.common.file.ILocalResourceRepository;
+import edu.uci.ics.hyracks.storage.common.file.LocalResource;
+import edu.uci.ics.hyracks.storage.common.file.ResourceIdFactory;
+
+public class PersistentLocalResourceRepository implements ILocalResourceRepository {
+
+    private static final Logger LOGGER = Logger.getLogger(PersistentLocalResourceRepository.class.getName());
+    private final String mountPoint;
+    private static final String ROOT_METADATA_DIRECTORY = "asterix_root_metadata/";
+    private static final String ROOT_METADATA_FILE_NAME_PREFIX = ".asterix_root_metadata_";
+    private static final long ROOT_LOCAL_RESOURCE_ID = -4321;
+    private static final String METADATA_FILE_NAME = ".metadata";
+    private Map<String, LocalResource> name2ResourceMap = new HashMap<String, LocalResource>();
+    private Map<Long, LocalResource> id2ResourceMap = new HashMap<Long, LocalResource>();
+    private String rootMetadataFileName;
+    private String rootDir;
+
+    public PersistentLocalResourceRepository(String mountPoint) throws HyracksDataException {
+        File mountPointDir = new File(mountPoint);
+        if (!mountPointDir.exists()) {
+            throw new HyracksDataException(mountPointDir.getAbsolutePath() + "doesn't exist.");
+        }
+        if (!mountPoint.endsWith(System.getProperty("file.separator"))) {
+            this.mountPoint = new String(mountPoint + System.getProperty("file.separator"));
+        } else {
+            this.mountPoint = new String(mountPoint);
+        }
+    }
+
+    public void initialize(String nodeId, String rootDir, boolean isNewUniverse, ResourceIdFactory resourceIdFactory)
+            throws HyracksDataException {
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Initializing local resource repository ... ");
+        }
+        LocalResource rootLocalResource = null;
+
+        //#. if the rootMetadataFile doesn't exist, create it and return.
+        rootMetadataFileName = new String(mountPoint + ROOT_METADATA_DIRECTORY + ROOT_METADATA_FILE_NAME_PREFIX
+                + nodeId);
+        File rootMetadataFile = new File(rootMetadataFileName);
+        if (isNewUniverse) {
+            File rootMetadataDir = new File(mountPoint + ROOT_METADATA_DIRECTORY);
+            if (!rootMetadataDir.exists()) {
+                rootMetadataDir.mkdir();
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.info("created the root-metadata-file's directory: " + rootMetadataDir.getAbsolutePath());
+                }
+            }
+
+            rootMetadataFile.delete();
+            if (rootDir.startsWith(System.getProperty("file.separator"))) {
+                this.rootDir = new String(mountPoint + rootDir.substring(System.getProperty("file.separator").length()));
+            } else {
+                this.rootDir = new String(mountPoint + rootDir);
+            }
+            rootLocalResource = new LocalResource(ROOT_LOCAL_RESOURCE_ID, rootMetadataFileName, 0, 0, this.rootDir);
+            insert(rootLocalResource);
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("created the root-metadata-file: " + rootMetadataFileName);
+            }
+            
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("Completed the initialization of the local resource repository");
+            }
+            return;
+        }
+
+        //#. if the rootMetadataFile exists, read it and set this.rootDir.
+        rootLocalResource = readLocalResource(rootMetadataFile);
+        this.rootDir = (String) rootLocalResource.getResourceObject();
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("The root directory of the local resource repository is " + this.rootDir);
+        }
+
+        //#. load all local resources. 
+        File rootDirFile = new File(this.rootDir);
+        if (!rootDirFile.exists()) {
+            //rootDir may not exist if this node is not the metadata node and doesn't have any user data.
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("The root directory of the local resource repository doesn't exist: there is no local resource.");
+                LOGGER.info("Completed the initialization of the local resource repository");
+            }
+            return;
+        }
+
+        FilenameFilter filter = new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                if (name.equalsIgnoreCase(METADATA_FILE_NAME)) {
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+        };
+
+        long maxResourceId = 0;
+        File[] dataverseFileList = rootDirFile.listFiles();
+        if (dataverseFileList == null) {
+            throw new HyracksDataException("Metadata dataverse doesn't exist.");
+        }
+        for (File dataverseFile : dataverseFileList) {
+            if (dataverseFile.isDirectory()) {
+                File[] indexFileList = dataverseFile.listFiles();
+                if (indexFileList != null) {
+                    for (File indexFile : indexFileList) {
+                        if (indexFile.isDirectory()) {
+                            File[] metadataFiles = indexFile.listFiles(filter);
+                            if (metadataFiles != null) {
+                                for (File metadataFile : metadataFiles) {
+                                    LocalResource localResource = readLocalResource(metadataFile);
+                                    id2ResourceMap.put(localResource.getResourceId(), localResource);
+                                    name2ResourceMap.put(localResource.getResourceName(), localResource);
+                                    maxResourceId = Math.max(localResource.getResourceId(), maxResourceId);
+                                    if (LOGGER.isLoggable(Level.INFO)) {
+                                        LOGGER.info("loaded local resource - [id: " + localResource.getResourceId()
+                                                + ", name: " + localResource.getResourceName() + "]");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        resourceIdFactory.initId(maxResourceId + 1);
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("The resource id factory is intialized with the value: " + (maxResourceId + 1));
+            LOGGER.info("Completed the initialization of the local resource repository");
+        }
+    }
+
+    @Override
+    public LocalResource getResourceById(long id) throws HyracksDataException {
+        return id2ResourceMap.get(id);
+    }
+
+    @Override
+    public LocalResource getResourceByName(String name) throws HyracksDataException {
+        return name2ResourceMap.get(name);
+    }
+
+    @Override
+    public synchronized void insert(LocalResource resource) throws HyracksDataException {
+        long id = resource.getResourceId();
+
+        if (id2ResourceMap.containsKey(id)) {
+            throw new HyracksDataException("Duplicate resource");
+        }
+
+        if (resource.getResourceId() != ROOT_LOCAL_RESOURCE_ID) {
+            id2ResourceMap.put(id, resource);
+            name2ResourceMap.put(resource.getResourceName(), resource);
+        }
+
+        FileOutputStream fos = null;
+        ObjectOutputStream oosToFos = null;
+        try {
+            fos = new FileOutputStream(getFileName(mountPoint, resource.getResourceName(), resource.getResourceId()));
+            oosToFos = new ObjectOutputStream(fos);
+            oosToFos.writeObject(resource);
+            oosToFos.flush();
+        } catch (IOException e) {
+            throw new HyracksDataException(e);
+        } finally {
+            if (oosToFos != null) {
+                try {
+                    oosToFos.close();
+                } catch (IOException e) {
+                    throw new HyracksDataException(e);
+                }
+            }
+            if (oosToFos == null && fos != null) {
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    throw new HyracksDataException(e);
+                }
+            }
+        }
+    }
+
+    @Override
+    public synchronized void deleteResourceById(long id) throws HyracksDataException {
+        LocalResource resource = id2ResourceMap.get(id);
+        if (resource == null) {
+            throw new HyracksDataException("Resource doesn't exist");
+        }
+        id2ResourceMap.remove(id);
+        name2ResourceMap.remove(resource.getResourceName());
+        File file = new File(getFileName(mountPoint, resource.getResourceName(), resource.getResourceId()));
+        file.delete();
+    }
+
+    @Override
+    public synchronized void deleteResourceByName(String name) throws HyracksDataException {
+        LocalResource resource = name2ResourceMap.get(name);
+        if (resource == null) {
+            throw new HyracksDataException("Resource doesn't exist");
+        }
+        id2ResourceMap.remove(resource.getResourceId());
+        name2ResourceMap.remove(name);
+        File file = new File(getFileName(mountPoint, resource.getResourceName(), resource.getResourceId()));
+        file.delete();
+    }
+
+    @Override
+    public List<LocalResource> getAllResources() throws HyracksDataException {
+        List<LocalResource> resources = new ArrayList<LocalResource>();
+        for (LocalResource resource : id2ResourceMap.values()) {
+            resources.add(resource);
+        }
+        return resources;
+    }
+
+    private String getFileName(String mountPoint, String baseDir, long resourceId) {
+
+        if (resourceId == ROOT_LOCAL_RESOURCE_ID) {
+            return baseDir;
+        } else {
+            String fileName = new String(mountPoint);
+            if (!baseDir.endsWith(System.getProperty("file.separator"))) {
+                baseDir += System.getProperty("file.separator");
+            }
+            fileName += baseDir + METADATA_FILE_NAME;
+            return fileName;
+        }
+    }
+
+    private LocalResource readLocalResource(File file) throws HyracksDataException {
+        FileInputStream fis = null;
+        ObjectInputStream oisFromFis = null;
+
+        try {
+            fis = new FileInputStream(file);
+            oisFromFis = new ObjectInputStream(fis);
+            LocalResource resource = (LocalResource) oisFromFis.readObject();
+            return resource;
+        } catch (Exception e) {
+            throw new HyracksDataException(e);
+        } finally {
+            if (oisFromFis != null) {
+                try {
+                    oisFromFis.close();
+                } catch (IOException e) {
+                    throw new HyracksDataException(e);
+                }
+            }
+            if (oisFromFis == null && fis != null) {
+                try {
+                    fis.close();
+                } catch (IOException e) {
+                    throw new HyracksDataException(e);
+                }
+            }
+        }
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepositoryFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepositoryFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepositoryFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepositoryFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/TransactionalResourceManagerRepository.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/TransactionalResourceManagerRepository.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/TransactionalResourceManagerRepository.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/TransactionalResourceManagerRepository.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DatasetLockInfo.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DatasetLockInfo.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DatasetLockInfo.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DatasetLockInfo.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DeadlockDetector.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DeadlockDetector.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DeadlockDetector.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/DeadlockDetector.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityInfoManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityInfoManager.java
new file mode 100644
index 0000000..5d81e8a
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityInfoManager.java
@@ -0,0 +1,695 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.service.locking;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+/**
+ * EntityInfoManager provides EntityInfo arrays backed by ByteBuffer.
+ * The array grows when the slots are overflowed.
+ * Also, the array shrinks according to the following shrink policy
+ * : Shrink when the resource under-utilization lasts for a certain threshold time.
+ * 
+ * @author kisskys
+ */
+public class EntityInfoManager {
+
+    public static final int SHRINK_TIMER_THRESHOLD = 120000; //2min
+
+    private ArrayList<ChildEntityInfoArrayManager> pArray;
+    private int allocChild; //used to allocate the next free EntityInfo slot.
+    private long shrinkTimer;
+    private boolean isShrinkTimerOn;
+    private int occupiedSlots;
+
+    //    ////////////////////////////////////////////////
+    //    // begin of unit test
+    //    ////////////////////////////////////////////////
+    //
+    //    public static final int SHRINK_TIMER_THRESHOLD = 0; //for unit test
+    //
+    //    /**
+    //     * @param args
+    //     */
+    //    public static void main(String[] args) {
+    //        final int DataSize = 5000;
+    //
+    //        int i, j;
+    //        int slots = ChildEntityInfoArrayManager.NUM_OF_SLOTS;
+    //        int data[] = new int[DataSize];
+    //        EntityInfoManager eiMgr = new EntityInfoManager();
+    //
+    //        //allocate: 50
+    //        System.out.println("allocate: 50");
+    //        for (i = 0; i < 5; i++) {
+    //            for (j = i * slots; j < i * slots + slots; j++) {
+    //                data[j] = eiMgr.allocate();
+    //            }
+    //
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //
+    //        //deallocate from the last child to the first child
+    //        System.out.println("deallocate from the last child to the first child");
+    //        for (i = 4; i >= 0; i--) {
+    //            for (j = i * slots + slots - 1; j >= i * slots; j--) {
+    //                eiMgr.deallocate(data[j]);
+    //            }
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //
+    //        //allocate: 50
+    //        System.out.println("allocate: 50");
+    //        for (i = 0; i < 5; i++) {
+    //            for (j = i * slots; j < i * slots + slots; j++) {
+    //                data[j] = eiMgr.allocate();
+    //            }
+    //
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //
+    //        //deallocate from the first child to last child
+    //        System.out.println("deallocate from the first child to last child");
+    //        for (i = 0; i < 5; i++) {
+    //            for (j = i * slots; j < i * slots + slots; j++) {
+    //                eiMgr.deallocate(data[j]);
+    //            }
+    //
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //
+    //        //allocate: 50
+    //        System.out.println("allocate: 50");
+    //        for (i = 0; i < 5; i++) {
+    //            for (j = i * slots; j < i * slots + slots; j++) {
+    //                data[j] = eiMgr.allocate();
+    //            }
+    //
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //
+    //        //deallocate from the first child to 4th child
+    //        System.out.println("deallocate from the first child to 4th child");
+    //        for (i = 0; i < 4; i++) {
+    //            for (j = i * slots; j < i * slots + slots; j++) {
+    //                eiMgr.deallocate(data[j]);
+    //            }
+    //
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //
+    //        //allocate: 40
+    //        System.out.println("allocate: 40");
+    //        for (i = 0; i < 4; i++) {
+    //            for (j = i * slots; j < i * slots + slots; j++) {
+    //                data[j] = eiMgr.allocate();
+    //            }
+    //
+    //            System.out.println(eiMgr.prettyPrint());
+    //        }
+    //    }
+    //    
+    //    ////////////////////////////////////////////////
+    //    // end of unit test
+    //    ////////////////////////////////////////////////
+
+    public EntityInfoManager() {
+        pArray = new ArrayList<ChildEntityInfoArrayManager>();
+        pArray.add(new ChildEntityInfoArrayManager());
+        allocChild = 0;
+        occupiedSlots = 0;
+        isShrinkTimerOn = false;
+    }
+
+    public int allocate(int jobId, int datasetId, int entityHashVal, byte lockMode) {
+        int slotNum = allocate();
+        initEntityInfo(slotNum, jobId, datasetId, entityHashVal, lockMode);
+        return slotNum;
+    }
+
+    public int allocate() {
+        if (pArray.get(allocChild).isFull()) {
+            int size = pArray.size();
+            boolean bAlloc = false;
+            ChildEntityInfoArrayManager child;
+
+            //find a deinitialized child and initialze it
+            for (int i = 0; i < size; i++) {
+                child = pArray.get(i);
+                if (child.isDeinitialized()) {
+                    child.initialize();
+                    allocChild = i;
+                    bAlloc = true;
+                    break;
+                }
+            }
+
+            //allocate new child when there is no deinitialized child
+            if (!bAlloc) {
+                pArray.add(new ChildEntityInfoArrayManager());
+                allocChild = pArray.size() - 1;
+            }
+        }
+
+        occupiedSlots++;
+        return pArray.get(allocChild).allocate() + allocChild * ChildEntityInfoArrayManager.NUM_OF_SLOTS;
+    }
+
+    void deallocate(int slotNum) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).deallocate(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+        occupiedSlots--;
+
+        if (needShrink()) {
+            shrink();
+        }
+    }
+
+    /**
+     * Shrink policy:
+     * Shrink when the resource under-utilization lasts for a certain amount of time.
+     * TODO Need to figure out which of the policies is better
+     * case1.
+     * pArray status : O x x x x x O (O is initialized, x is deinitialized)
+     * In the above status, 'CURRENT' needShrink() returns 'TRUE'
+     * even if there is nothing to shrink or deallocate.
+     * It doesn't distinguish the deinitialized children from initialized children
+     * by calculating totalNumOfSlots = pArray.size() * ChildEntityInfoArrayManager.NUM_OF_SLOTS.
+     * In other words, it doesn't subtract the deinitialized children's slots.
+     * case2.
+     * pArray status : O O x x x x x
+     * However, in the above case, if we subtract the deinitialized children's slots,
+     * needShrink() will return false even if we shrink the pArray at this case.
+     * 
+     * @return
+     */
+    private boolean needShrink() {
+        int size = pArray.size();
+        int usedSlots = occupiedSlots;
+        if (usedSlots == 0) {
+            usedSlots = 1;
+        }
+
+        if (size > 1 && size * ChildEntityInfoArrayManager.NUM_OF_SLOTS / usedSlots >= 3) {
+            if (isShrinkTimerOn) {
+                if (System.currentTimeMillis() - shrinkTimer >= SHRINK_TIMER_THRESHOLD) {
+                    isShrinkTimerOn = false;
+                    return true;
+                }
+            } else {
+                //turn on timer
+                isShrinkTimerOn = true;
+                shrinkTimer = System.currentTimeMillis();
+            }
+        } else {
+            //turn off timer
+            isShrinkTimerOn = false;
+        }
+
+        return false;
+    }
+
+    /**
+     * Shrink() may
+     * deinitialize(:deallocates ByteBuffer of child) Children(s) or
+     * shrink pArray according to the deinitialized children's contiguity status.
+     * It doesn't deinitialze or shrink more than half of children at a time.
+     */
+    private void shrink() {
+        int i;
+        int removeCount = 0;
+        int size = pArray.size();
+        int maxDecreaseCount = size / 2;
+        ChildEntityInfoArrayManager child;
+
+        //The first buffer never be deinitialized.
+        for (i = 1; i < size; i++) {
+            if (pArray.get(i).isEmpty()) {
+                pArray.get(i).deinitialize();
+            }
+        }
+
+        //remove the empty buffers from the end
+        for (i = size - 1; i >= 1; i--) {
+            child = pArray.get(i);
+            if (child.isDeinitialized()) {
+                pArray.remove(i);
+                if (++removeCount == maxDecreaseCount) {
+                    break;
+                }
+            } else {
+                break;
+            }
+        }
+        
+        //reset allocChild to the first buffer
+        allocChild = 0;
+
+        isShrinkTimerOn = false;
+    }
+
+    public String prettyPrint() {
+        StringBuilder s = new StringBuilder("\n########### EntityInfoManager Status #############\n");
+        int size = pArray.size();
+        ChildEntityInfoArrayManager child;
+
+        for (int i = 0; i < size; i++) {
+            child = pArray.get(i);
+            if (child.isDeinitialized()) {
+                continue;
+            }
+            s.append("child[" + i + "]: occupiedSlots:" + child.getNumOfOccupiedSlots());
+            s.append(" freeSlotNum:" + child.getFreeSlotNum() + "\n");
+            s.append("\tjid\t").append("did\t").append("PK\t").append("DLM\t").append("DLC\t").append("ELM\t")
+                    .append("ELC\t").append("NEA\t").append("PJR\t").append("NJR\n");
+            for (int j = 0; j < ChildEntityInfoArrayManager.NUM_OF_SLOTS; j++) {
+                s.append(j).append(": ");
+                s.append("\t" + child.getJobId(j));
+                s.append("\t" + child.getDatasetId(j));
+                s.append("\t" + child.getPKHashVal(j));
+                s.append("\t" + child.getDatasetLockMode(j));
+                s.append("\t" + child.getDatasetLockCount(j));
+                s.append("\t" + child.getEntityLockMode(j));
+                s.append("\t" + child.getEntityLockCount(j));
+                s.append("\t" + child.getNextEntityActor(j));
+                s.append("\t" + child.getPrevJobResource(j));
+                s.append("\t" + child.getNextJobResource(j));
+                //s.append("\t" + child.getNextDatasetActor(j));
+                s.append("\n");
+            }
+            s.append("\n");
+        }
+        return s.toString();
+    }
+
+    public void initEntityInfo(int slotNum, int jobId, int datasetId, int PKHashVal, byte lockMode) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).initEntityInfo(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, jobId, datasetId, PKHashVal, lockMode);
+    }
+
+    public boolean compareEntityInfo(int slotNum, int jobId, int datasetId, int PKHashVal) {
+        return getPKHashVal(slotNum) == PKHashVal && getDatasetId(slotNum) == datasetId && getJobId(slotNum) == jobId;
+    }
+
+    public void increaseDatasetLockCount(int slotNum) {
+        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) + 1));
+    }
+
+    public void decreaseDatasetLockCount(int slotNum) {
+        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) - 1));
+    }
+
+    public void increaseEntityLockCount(int slotNum) {
+        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) + 1));
+    }
+
+    public void decreaseEntityLockCount(int slotNum) {
+        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) - 1));
+    }
+
+    public void increaseDatasetLockCount(int slotNum, int count) {
+        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) + count));
+    }
+
+    public void decreaseDatasetLockCount(int slotNum, int count) {
+        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) - count));
+    }
+
+    public void increaseEntityLockCount(int slotNum, int count) {
+        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) + count));
+    }
+
+    public void decreaseEntityLockCount(int slotNum, int count) {
+        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) - count));
+    }
+
+    //////////////////////////////////////////////////////////////////
+    //   set/get method for each field of EntityInfo
+    //////////////////////////////////////////////////////////////////
+
+    public void setJobId(int slotNum, int id) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setJobId(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, id);
+    }
+
+    public int getJobId(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getJobId(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setDatasetId(int slotNum, int id) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setDatasetId(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, id);
+    }
+
+    public int getDatasetId(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getDatasetId(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setPKHashVal(int slotNum, int hashVal) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setPKHashVal(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, hashVal);
+    }
+
+    public int getPKHashVal(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getPKHashVal(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setDatasetLockMode(int slotNum, byte mode) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setDatasetLockMode(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, mode);
+    }
+
+    public byte getDatasetLockMode(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getDatasetLockMode(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setDatasetLockCount(int slotNum, byte count) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setDatasetLockCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
+    }
+
+    public byte getDatasetLockCount(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getDatasetLockCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setEntityLockMode(int slotNum, byte mode) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setEntityLockMode(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, mode);
+    }
+
+    public byte getEntityLockMode(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getEntityLockMode(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setEntityLockCount(int slotNum, byte count) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setEntityLockCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
+    }
+
+    public byte getEntityLockCount(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getEntityLockCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    //Used for Waiter/Upgrader
+    public void setNextEntityActor(int slotNum, int nextActorSlotNum) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setNextEntityActor(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextActorSlotNum);
+    }
+
+    //Used for Waiter/Upgrader
+    public int getNextEntityActor(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getNextEntityActor(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    //Used for Holder
+    public void setPrevEntityActor(int slotNum, int nextActorSlotNum) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setPrevEntityActor(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextActorSlotNum);
+    }
+
+    //Used for Holder
+    public int getPrevEntityActor(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getPrevEntityActor(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setPrevJobResource(int slotNum, int prevResourceSlotNum) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setPrevJobResource(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, prevResourceSlotNum);
+    }
+
+    public int getPrevJobResource(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getPrevJobResource(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setNextJobResource(int slotNum, int nextResourceSlotNum) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setNextJobResource(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextResourceSlotNum);
+    }
+
+    public int getNextJobResource(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getNextJobResource(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    //    public void setNextDatasetActor(int slotNum, int nextActorSlotNum) {
+    //        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setNextDatasetActor(
+    //                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextActorSlotNum);
+    //    }
+    //
+    //    public int getNextDatasetActor(int slotNum) {
+    //        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getNextDatasetActor(
+    //                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    //    }
+}
+
+/******************************************
+ * EntityInfo (28 bytes)
+ * ****************************************
+ * int jobId
+ * int datasetId
+ * int PKHashValue
+ * byte datasetLockMode
+ * byte datasetLockCount
+ * byte enitityLockMode
+ * byte entityLockCount
+ * int nextEntityActor : actor can be either holder/waiter/upgrader
+ * int prevJobResource : resource can be either dataset or entity and a job is holding/waiting/upgrading lock(s) on it.
+ * int nextJobResource : resource can be either dataset or entity and a job is holding/waiting/upgrading lock(s) on it.
+ * (int nextDatasetActor : actor can be either holder/waiter/upgrader) --> not used.
+ *******************************************/
+
+class ChildEntityInfoArrayManager {
+    public static final int ENTITY_INFO_SIZE = 28; //28bytes
+    public static final int NUM_OF_SLOTS = 1024; //number of entities in a buffer
+    //    public static final int NUM_OF_SLOTS = 10; //for unit test
+    public static final int BUFFER_SIZE = ENTITY_INFO_SIZE * NUM_OF_SLOTS;
+
+    //byte offset of each field of EntityInfo
+    public static final int JOB_ID_OFFSET = 0;
+    public static final int DATASET_ID_OFFSET = 4;
+    public static final int PKHASH_VAL_OFFSET = 8;
+    public static final int DATASET_LOCK_MODE_OFFSET = 12;
+    public static final int DATASET_LOCK_COUNT_OFFSET = 13;
+    public static final int ENTITY_LOCK_MODE_OFFSET = 14;
+    public static final int ENTITY_LOCK_COUNT_OFFSET = 15;
+    public static final int ENTITY_ACTOR_OFFSET = 16;
+    public static final int PREV_JOB_RESOURCE_OFFSET = 20;
+    public static final int NEXT_JOB_RESOURCE_OFFSET = 24;
+    //public static final int DATASET_ACTOR_OFFSET = 28;
+
+    //byte offset of nextFreeSlotNum which shares the same space of JobId
+    //If a slot is in use, the space is used for JobId. Otherwise, it is used for nextFreeSlotNum. 
+    public static final int NEXT_FREE_SLOT_OFFSET = 0;
+
+    private ByteBuffer buffer;
+    private int freeSlotNum;
+    private int occupiedSlots; //-1 represents 'deinitialized' state.
+
+    public ChildEntityInfoArrayManager() {
+        initialize();
+    }
+
+    public void initialize() {
+        this.buffer = ByteBuffer.allocate(BUFFER_SIZE);
+        this.freeSlotNum = 0;
+        this.occupiedSlots = 0;
+
+        for (int i = 0; i < NUM_OF_SLOTS - 1; i++) {
+            setNextFreeSlot(i, i + 1);
+        }
+        setNextFreeSlot(NUM_OF_SLOTS - 1, -1); //-1 represents EOL(end of link)
+    }
+
+    public int allocate() {
+        int currentSlot = freeSlotNum;
+        freeSlotNum = getNextFreeSlot(currentSlot);
+        occupiedSlots++;
+        if (LockManager.IS_DEBUG_MODE) {
+            System.out.println(Thread.currentThread().getName() + " entity allocate: " + currentSlot);
+        }
+        return currentSlot;
+    }
+
+    public void deallocate(int slotNum) {
+        setNextFreeSlot(slotNum, freeSlotNum);
+        freeSlotNum = slotNum;
+        occupiedSlots--;
+        if (LockManager.IS_DEBUG_MODE) {
+            System.out.println(Thread.currentThread().getName() + " entity deallocate: " + slotNum);
+        }
+    }
+
+    public void deinitialize() {
+        buffer = null;
+        occupiedSlots = -1;
+    }
+
+    public boolean isDeinitialized() {
+        return occupiedSlots == -1;
+    }
+
+    public boolean isFull() {
+        return occupiedSlots == NUM_OF_SLOTS;
+    }
+
+    public boolean isEmpty() {
+        return occupiedSlots == 0;
+    }
+
+    public int getNumOfOccupiedSlots() {
+        return occupiedSlots;
+    }
+
+    public int getFreeSlotNum() {
+        return freeSlotNum;
+    }
+
+    //////////////////////////////////////////////////////////////////
+    //   set/get method for each field of EntityInfo plus freeSlot
+    //////////////////////////////////////////////////////////////////
+    public void initEntityInfo(int slotNum, int jobId, int datasetId, int PKHashVal, byte lockMode) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + JOB_ID_OFFSET, jobId);
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ID_OFFSET, datasetId);
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PKHASH_VAL_OFFSET, PKHashVal);
+        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_MODE_OFFSET, lockMode);
+        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_COUNT_OFFSET, (byte) 0);
+        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_MODE_OFFSET, lockMode);
+        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_COUNT_OFFSET, (byte) 0);
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET, -1);
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PREV_JOB_RESOURCE_OFFSET, -1);
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + NEXT_JOB_RESOURCE_OFFSET, -1);
+        //buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET, -1);
+    }
+
+    public void setNextFreeSlot(int slotNum, int nextFreeSlot) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + NEXT_FREE_SLOT_OFFSET, nextFreeSlot);
+    }
+
+    public int getNextFreeSlot(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + NEXT_FREE_SLOT_OFFSET);
+    }
+
+    public void setJobId(int slotNum, int id) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + JOB_ID_OFFSET, id);
+    }
+
+    public int getJobId(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + JOB_ID_OFFSET);
+    }
+
+    public void setDatasetId(int slotNum, int id) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ID_OFFSET, id);
+    }
+
+    public int getDatasetId(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + DATASET_ID_OFFSET);
+    }
+
+    public void setPKHashVal(int slotNum, int hashVal) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PKHASH_VAL_OFFSET, hashVal);
+    }
+
+    public int getPKHashVal(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + PKHASH_VAL_OFFSET);
+    }
+
+    public void setDatasetLockMode(int slotNum, byte mode) {
+        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_MODE_OFFSET, mode);
+    }
+
+    public byte getDatasetLockMode(int slotNum) {
+        return buffer.get(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_MODE_OFFSET);
+    }
+
+    public void setDatasetLockCount(int slotNum, byte count) {
+        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_COUNT_OFFSET, count);
+    }
+
+    public byte getDatasetLockCount(int slotNum) {
+        return buffer.get(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_COUNT_OFFSET);
+    }
+
+    public void setEntityLockMode(int slotNum, byte mode) {
+        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_MODE_OFFSET, mode);
+    }
+
+    public byte getEntityLockMode(int slotNum) {
+        return buffer.get(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_MODE_OFFSET);
+    }
+
+    public void setEntityLockCount(int slotNum, byte count) {
+        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_COUNT_OFFSET, count);
+    }
+
+    public byte getEntityLockCount(int slotNum) {
+        return buffer.get(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_COUNT_OFFSET);
+    }
+
+    //Used for Waiter/Upgrader
+    public void setNextEntityActor(int slotNum, int nextActorSlotNum) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET, nextActorSlotNum);
+    }
+
+    //Used for Waiter/Upgrader
+    public int getNextEntityActor(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET);
+    }
+
+    //Used for Holder
+    public void setPrevEntityActor(int slotNum, int nextActorSlotNum) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET, nextActorSlotNum);
+    }
+
+    //Used for Holder
+    public int getPrevEntityActor(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET);
+    }
+
+    public void setPrevJobResource(int slotNum, int prevResourceSlotNum) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PREV_JOB_RESOURCE_OFFSET, prevResourceSlotNum);
+    }
+
+    public int getPrevJobResource(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + PREV_JOB_RESOURCE_OFFSET);
+    }
+
+    public void setNextJobResource(int slotNum, int prevResourceSlotNum) {
+        buffer.putInt(slotNum * ENTITY_INFO_SIZE + NEXT_JOB_RESOURCE_OFFSET, prevResourceSlotNum);
+    }
+
+    public int getNextJobResource(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + NEXT_JOB_RESOURCE_OFFSET);
+    }
+
+    //    public void setNextDatasetActor(int slotNum, int nextActorSlotNum) {
+    //        buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET, nextActorSlotNum);
+    //    }
+    //
+    //    public int getNextDatasetActor(int slotNum) {
+    //        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET);
+    //    }
+}
\ No newline at end of file
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityLockInfoManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityLockInfoManager.java
new file mode 100644
index 0000000..ca00aa2
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityLockInfoManager.java
@@ -0,0 +1,791 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.service.locking;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
+
+/**
+ * EntityLockInfoManager provides EntityLockInfo arrays backed by ByteBuffer.
+ * The array grows when the slots are overflowed.
+ * Also, the array shrinks according to the following shrink policy
+ * : Shrink when the resource under-utilization lasts for a certain threshold time.
+ * 
+ * @author kisskys
+ */
+public class EntityLockInfoManager {
+
+    public static final int SHRINK_TIMER_THRESHOLD = 120000; //2min
+
+    private ArrayList<ChildEntityLockInfoArrayManager> pArray;
+    private int allocChild; //used to allocate the next free EntityInfo slot.
+    private long shrinkTimer;
+    private boolean isShrinkTimerOn;
+    private int occupiedSlots;
+    private EntityInfoManager entityInfoManager;
+    LockWaiterManager lockWaiterManager;
+
+    //        ////////////////////////////////////////////////
+    //        // begin of unit test
+    //        ////////////////////////////////////////////////
+    //    
+    //        public static final int SHRINK_TIMER_THRESHOLD = 0; //for unit test
+    //    
+    //        /**
+    //         * @param args
+    //         */
+    //        public static void main(String[] args) {
+    //            final int DataSize = 5000;
+    //    
+    //            int i, j;
+    //            int slots = ChildEntityLockInfoArrayManager.NUM_OF_SLOTS;
+    //            int data[] = new int[DataSize];
+    //            EntityLockInfoManager eliMgr = new EntityLockInfoManager();
+    //    
+    //            //allocate: 50
+    //            System.out.println("allocate: 50");
+    //            for (i = 0; i < 5; i++) {
+    //                for (j = i * slots; j < i * slots + slots; j++) {
+    //                    data[j] = eliMgr.allocate();
+    //                }
+    //    
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //    
+    //            //deallocate from the last child to the first child
+    //            System.out.println("deallocate from the last child to the first child");
+    //            for (i = 4; i >= 0; i--) {
+    //                for (j = i * slots + slots - 1; j >= i * slots; j--) {
+    //                    eliMgr.deallocate(data[j]);
+    //                }
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //    
+    //            //allocate: 50
+    //            System.out.println("allocate: 50");
+    //            for (i = 0; i < 5; i++) {
+    //                for (j = i * slots; j < i * slots + slots; j++) {
+    //                    data[j] = eliMgr.allocate();
+    //                }
+    //    
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //    
+    //            //deallocate from the first child to last child
+    //            System.out.println("deallocate from the first child to last child");
+    //            for (i = 0; i < 5; i++) {
+    //                for (j = i * slots; j < i * slots + slots; j++) {
+    //                    eliMgr.deallocate(data[j]);
+    //                }
+    //    
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //    
+    //            //allocate: 50
+    //            System.out.println("allocate: 50");
+    //            for (i = 0; i < 5; i++) {
+    //                for (j = i * slots; j < i * slots + slots; j++) {
+    //                    data[j] = eliMgr.allocate();
+    //                }
+    //    
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //    
+    //            //deallocate from the first child to 4th child
+    //            System.out.println("deallocate from the first child to 4th child");
+    //            for (i = 0; i < 4; i++) {
+    //                for (j = i * slots; j < i * slots + slots; j++) {
+    //                    eliMgr.deallocate(data[j]);
+    //                }
+    //    
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //    
+    //            //allocate: 40
+    //            System.out.println("allocate: 40");
+    //            for (i = 0; i < 4; i++) {
+    //                for (j = i * slots; j < i * slots + slots; j++) {
+    //                    data[j] = eliMgr.allocate();
+    //                }
+    //    
+    //                System.out.println(eliMgr.prettyPrint());
+    //            }
+    //        }
+    //        
+    //        ////////////////////////////////////////////////
+    //        // end of unit test
+    //        ////////////////////////////////////////////////
+
+    public EntityLockInfoManager(EntityInfoManager entityInfoManager, LockWaiterManager lockWaiterManager) {
+        pArray = new ArrayList<ChildEntityLockInfoArrayManager>();
+        pArray.add(new ChildEntityLockInfoArrayManager());
+        allocChild = 0;
+        occupiedSlots = 0;
+        isShrinkTimerOn = false;
+        this.entityInfoManager = entityInfoManager;
+        this.lockWaiterManager = lockWaiterManager;
+    }
+
+    public int allocate() {
+        if (pArray.get(allocChild).isFull()) {
+            int size = pArray.size();
+            boolean bAlloc = false;
+            ChildEntityLockInfoArrayManager child;
+
+            //find a deinitialized child and initialze it
+            for (int i = 0; i < size; i++) {
+                child = pArray.get(i);
+                if (child.isDeinitialized()) {
+                    child.initialize();
+                    allocChild = i;
+                    bAlloc = true;
+                    break;
+                }
+            }
+
+            //allocate new child when there is no deinitialized child
+            if (!bAlloc) {
+                pArray.add(new ChildEntityLockInfoArrayManager());
+                allocChild = pArray.size() - 1;
+            }
+        }
+        occupiedSlots++;
+        return pArray.get(allocChild).allocate() + allocChild * ChildEntityLockInfoArrayManager.NUM_OF_SLOTS;
+    }
+
+    void deallocate(int slotNum) {
+        pArray.get(slotNum / ChildEntityLockInfoArrayManager.NUM_OF_SLOTS).deallocate(
+                slotNum % ChildEntityLockInfoArrayManager.NUM_OF_SLOTS);
+        occupiedSlots--;
+
+        if (needShrink()) {
+            shrink();
+        }
+    }
+
+    /**
+     * Shrink policy:
+     * Shrink when the resource under-utilization lasts for a certain amount of time.
+     * TODO Need to figure out which of the policies is better
+     * case1.
+     * pArray status : O x x x x x O (O is initialized, x is deinitialized)
+     * In the above status, 'CURRENT' needShrink() returns 'TRUE'
+     * even if there is nothing to shrink or deallocate.
+     * It doesn't distinguish the deinitialized children from initialized children
+     * by calculating totalNumOfSlots = pArray.size() * ChildEntityLockInfoArrayManager.NUM_OF_SLOTS.
+     * In other words, it doesn't subtract the deinitialized children's slots.
+     * case2.
+     * pArray status : O O x x x x x
+     * However, in the above case, if we subtract the deinitialized children's slots,
+     * needShrink() will return false even if we shrink the pArray at this case.
+     * 
+     * @return
+     */
+    private boolean needShrink() {
+        int size = pArray.size();
+        int usedSlots = occupiedSlots;
+        if (usedSlots == 0) {
+            usedSlots = 1;
+        }
+
+        if (size > 1 && size * ChildEntityLockInfoArrayManager.NUM_OF_SLOTS / usedSlots >= 3) {
+            if (isShrinkTimerOn) {
+                if (System.currentTimeMillis() - shrinkTimer >= SHRINK_TIMER_THRESHOLD) {
+                    isShrinkTimerOn = false;
+                    return true;
+                }
+            } else {
+                //turn on timer
+                isShrinkTimerOn = true;
+                shrinkTimer = System.currentTimeMillis();
+            }
+        } else {
+            //turn off timer
+            isShrinkTimerOn = false;
+        }
+
+        return false;
+    }
+
+    /**
+     * Shrink() may
+     * deinitialize(:deallocates ByteBuffer of child) Children(s) or
+     * shrink pArray according to the deinitialized children's contiguity status.
+     * It doesn't deinitialze or shrink more than half of children at a time.
+     */
+    private void shrink() {
+        int i;
+        int removeCount = 0;
+        int size = pArray.size();
+        int maxDecreaseCount = size / 2;
+        ChildEntityLockInfoArrayManager child;
+
+        //The first buffer never be deinitialized.
+        for (i = 1; i < size; i++) {
+            if (pArray.get(i).isEmpty()) {
+                pArray.get(i).deinitialize();
+            }
+        }
+
+        //remove the empty buffers from the end
+        for (i = size - 1; i >= 1; i--) {
+            child = pArray.get(i);
+            if (child.isDeinitialized()) {
+                pArray.remove(i);
+                if (++removeCount == maxDecreaseCount) {
+                    break;
+                }
+            } else {
+                break;
+            }
+        }
+        
+        //reset allocChild to the first buffer
+        allocChild = 0;
+
+        isShrinkTimerOn = false;
+    }
+
+    public String prettyPrint() {
+        StringBuilder s = new StringBuilder("\n########### EntityLockInfoManager Status #############\n");
+        int size = pArray.size();
+        ChildEntityLockInfoArrayManager child;
+
+        for (int i = 0; i < size; i++) {
+            child = pArray.get(i);
+            if (child.isDeinitialized()) {
+                continue;
+            }
+            s.append("child[" + i + "]: occupiedSlots:" + child.getNumOfOccupiedSlots());
+            s.append(" freeSlotNum:" + child.getFreeSlotNum() + "\n");
+            s.append("\tX\t").append("S\t").append("LH\t").append("FW\t").append("UP\n");
+            for (int j = 0; j < ChildEntityLockInfoArrayManager.NUM_OF_SLOTS; j++) {
+                s.append(j).append(": ");
+                s.append("\t" + child.getXCount(j));
+                s.append("\t" + child.getSCount(j));
+                s.append("\t" + child.getLastHolder(j));
+                s.append("\t" + child.getFirstWaiter(j));
+                s.append("\t" + child.getUpgrader(j));
+                s.append("\n");
+            }
+            s.append("\n");
+        }
+        return s.toString();
+    }
+
+    //debugging method
+    public String printWaiters(int slotNum) {
+        StringBuilder s = new StringBuilder();
+        int waiterObjId;
+        LockWaiter waiterObj;
+        int entityInfo;
+
+        s.append("WID\tWCT\tEID\tJID\tDID\tPK\n");
+
+        waiterObjId = getFirstWaiter(slotNum);
+        while (waiterObjId != -1) {
+            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+            entityInfo = waiterObj.getEntityInfoSlot();
+            s.append(waiterObjId).append("\t").append(waiterObj.getWaiterCount()).append("\t").append(entityInfo)
+                    .append("\t").append(entityInfoManager.getJobId(entityInfo)).append("\t")
+                    .append(entityInfoManager.getDatasetId(entityInfo)).append("\t")
+                    .append(entityInfoManager.getPKHashVal(entityInfo)).append("\n");
+            waiterObjId = waiterObj.getNextWaiterObjId();
+        }
+
+        return s.toString();
+    }
+
+    public void addHolder(int slotNum, int holder) {
+        entityInfoManager.setPrevEntityActor(holder, getLastHolder(slotNum));
+        setLastHolder(slotNum, holder);
+    }
+
+    /**
+     * Remove holder from linked list of Actor.
+     * Also, remove the corresponding resource from linked list of resource
+     * in order to minimize JobInfo's resource link traversal.
+     * 
+     * @param slotNum
+     * @param holder
+     * @param jobInfo
+     */
+    public void removeHolder(int slotNum, int holder, JobInfo jobInfo) {
+        int prev = getLastHolder(slotNum);
+        int current = -1;
+        int next;
+
+        //remove holder from linked list of Actor
+        while (prev != holder) {
+            if (LockManager.IS_DEBUG_MODE) {
+                if (prev == -1) {
+                    //shouldn't occur: debugging purpose
+                    try {
+                        throw new Exception();
+                    } catch (Exception e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+            current = prev;
+            prev = entityInfoManager.getPrevEntityActor(current);
+        }
+
+        if (current != -1) {
+            //current->prev = prev->prev
+            entityInfoManager.setPrevEntityActor(current, entityInfoManager.getPrevEntityActor(prev));
+        } else {
+            //lastHolder = prev->prev
+            setLastHolder(slotNum, entityInfoManager.getPrevEntityActor(prev));
+        }
+
+        //Notice!!
+        //remove the corresponding resource from linked list of resource.
+        prev = entityInfoManager.getPrevJobResource(holder);
+        next = entityInfoManager.getNextJobResource(holder);
+
+        if (prev != -1) {
+            entityInfoManager.setNextJobResource(prev, next);
+        }
+
+        if (next != -1) {
+            entityInfoManager.setPrevJobResource(next, prev);
+        } else {
+            //This entityInfo(i.e., holder) is the last resource held by this job.
+            jobInfo.setlastHoldingResource(prev);
+        }
+
+        //jobInfo.decreaseDatasetLockCount(holder);
+    }
+
+    public void addWaiter(int slotNum, int waiterObjId) {
+        int lastObjId;
+        LockWaiter lastObj = null;
+        int firstWaiter = getFirstWaiter(slotNum);
+
+        if (firstWaiter != -1) {
+            //find the lastWaiter
+            lastObjId = firstWaiter;
+            while (lastObjId != -1) {
+                lastObj = lockWaiterManager.getLockWaiter(lastObjId);
+                lastObjId = lastObj.getNextWaiterObjId();
+            }
+            //last->next = new_waiter
+            lastObj.setNextWaiterObjId(waiterObjId);
+        } else {
+            setFirstWaiter(slotNum, waiterObjId);
+        }
+        //new_waiter->next = -1
+        lastObj = lockWaiterManager.getLockWaiter(waiterObjId);
+        lastObj.setNextWaiterObjId(-1);
+    }
+
+    public void removeWaiter(int slotNum, int waiterObjId) {
+        int currentObjId = getFirstWaiter(slotNum);
+        LockWaiter currentObj;
+        LockWaiter prevObj = null;
+        int prevObjId = -1;
+        int nextObjId;
+
+        while (currentObjId != waiterObjId) {
+
+            if (LockManager.IS_DEBUG_MODE) {
+                if (currentObjId == -1) {
+                    //shouldn't occur: debugging purpose
+                    try {
+                        throw new Exception();
+                    } catch (Exception e) {
+                        // TODO Auto-generated catch block
+                        e.printStackTrace();
+                    }
+                }
+            }
+
+            prevObj = lockWaiterManager.getLockWaiter(currentObjId);
+            prevObjId = currentObjId;
+            currentObjId = prevObj.getNextWaiterObjId();
+        }
+
+        //get current waiter object
+        currentObj = lockWaiterManager.getLockWaiter(currentObjId);
+
+        //get next waiterObjId
+        nextObjId = currentObj.getNextWaiterObjId();
+
+        if (prevObjId != -1) {
+            //prev->next = next
+            prevObj.setNextWaiterObjId(nextObjId);
+        } else {
+            //removed first waiter. firstWaiter = current->next
+            setFirstWaiter(slotNum, nextObjId);
+        }
+    }
+
+    public void addUpgrader(int slotNum, int waiterObjId) {
+        //[Notice]
+        //Even if there are multiple threads in a job try to upgrade lock mode on same resource which is entity-granule,
+        //while the first upgrader is waiting, all the incoming upgrade requests from other threads should be rejected by aborting them.
+        //Therefore, there is no actual "ADD" upgrader method. Instead, it only has "SET" upgrader method.
+        if (LockManager.IS_DEBUG_MODE) {
+            if (getUpgrader(slotNum) != -1) {
+                throw new IllegalStateException("Invalid lock upgrade request. This call should be handled as deadlock");
+            }
+        }
+
+        setUpgrader(slotNum, waiterObjId);
+    }
+
+    public void removeUpgrader(int slotNum, int waiterObjId) {
+        setUpgrader(slotNum, -1);
+    }
+
+    public boolean isUpgradeCompatible(int slotNum, byte lockMode, int entityInfo) {
+        switch (lockMode) {
+            case LockMode.X:
+                return getSCount(slotNum) - entityInfoManager.getEntityLockCount(entityInfo) == 0;
+
+            default:
+                throw new IllegalStateException("Invalid upgrade lock mode");
+        }
+    }
+
+    public boolean isCompatible(int slotNum, byte lockMode) {
+        switch (lockMode) {
+            case LockMode.X:
+                return getSCount(slotNum) == 0 && getXCount(slotNum) == 0;
+
+            case LockMode.S:
+                return getXCount(slotNum) == 0;
+
+            default:
+                throw new IllegalStateException("Invalid upgrade lock mode");
+        }
+    }
+
+    public int findEntityInfoFromHolderList(int eLockInfo, int jobId, int hashVal) {
+        int entityInfo = getLastHolder(eLockInfo);
+
+        while (entityInfo != -1) {
+            if (jobId == entityInfoManager.getJobId(entityInfo)
+                    && hashVal == entityInfoManager.getPKHashVal(entityInfo)) {
+                return entityInfo;
+            }
+            //            if (LockManager.IS_DEBUG_MODE) {
+            //                System.out.println("eLockInfo(" + eLockInfo + "),entityInfo(" + entityInfo + "), Request[" + jobId
+            //                        + "," + hashVal + "]:Result[" + entityInfoManager.getJobId(entityInfo) + ","
+            //                        + entityInfoManager.getPKHashVal(entityInfo) + "]");
+            //            }
+            entityInfo = entityInfoManager.getPrevEntityActor(entityInfo);
+        }
+
+        return -1;
+    }
+
+    public int findWaiterFromWaiterList(int eLockInfo, int jobId, int hashVal) {
+        int waiterObjId = getFirstWaiter(eLockInfo);
+        LockWaiter waiterObj;
+        int entityInfo;
+
+        while (waiterObjId != -1) {
+            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+            entityInfo = waiterObj.getEntityInfoSlot();
+            if (jobId == entityInfoManager.getJobId(entityInfo)
+                    && hashVal == entityInfoManager.getPKHashVal(entityInfo)) {
+                return waiterObjId;
+            }
+            waiterObjId = waiterObj.getNextWaiterObjId();
+        }
+
+        return -1;
+    }
+
+    public int findUpgraderFromUpgraderList(int eLockInfo, int jobId, int hashVal) {
+        int waiterObjId = getUpgrader(eLockInfo);
+        LockWaiter waiterObj;
+        int entityInfo;
+
+        if (waiterObjId != -1) {
+            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+            entityInfo = waiterObj.getEntityInfoSlot();
+            if (jobId == entityInfoManager.getJobId(entityInfo)
+                    && hashVal == entityInfoManager.getPKHashVal(entityInfo)) {
+                return waiterObjId;
+            }
+        }
+
+        return -1;
+    }
+
+    public void increaseLockCount(int slotNum, byte lockMode) {
+        switch (lockMode) {
+            case LockMode.X:
+                setXCount(slotNum, (short) (getXCount(slotNum) + 1));
+                break;
+            case LockMode.S:
+                setSCount(slotNum, (short) (getSCount(slotNum) + 1));
+                break;
+            default:
+                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
+        }
+    }
+
+    public void decreaseLockCount(int slotNum, byte lockMode) {
+        switch (lockMode) {
+            case LockMode.X:
+                setXCount(slotNum, (short) (getXCount(slotNum) - 1));
+                break;
+            case LockMode.S:
+                setSCount(slotNum, (short) (getSCount(slotNum) - 1));
+                break;
+            default:
+                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
+        }
+    }
+
+    public void increaseLockCount(int slotNum, byte lockMode, short count) {
+        switch (lockMode) {
+            case LockMode.X:
+                setXCount(slotNum, (short) (getXCount(slotNum) + count));
+                break;
+            case LockMode.S:
+                setSCount(slotNum, (short) (getSCount(slotNum) + count));
+                break;
+            default:
+                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
+        }
+    }
+
+    public void decreaseLockCount(int slotNum, byte lockMode, short count) {
+        switch (lockMode) {
+            case LockMode.X:
+                setXCount(slotNum, (short) (getXCount(slotNum) - count));
+                break;
+            case LockMode.S:
+                setSCount(slotNum, (short) (getSCount(slotNum) - count));
+                break;
+            default:
+                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
+        }
+    }
+
+    //////////////////////////////////////////////////////////////////
+    //   set/get method for each field of EntityLockInfo
+    //////////////////////////////////////////////////////////////////
+
+    public void setXCount(int slotNum, short count) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setXCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
+    }
+
+    public short getXCount(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getXCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setSCount(int slotNum, short count) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setSCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
+    }
+
+    public short getSCount(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getSCount(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setLastHolder(int slotNum, int holder) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setLastHolder(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, holder);
+    }
+
+    public int getLastHolder(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getLastHolder(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setFirstWaiter(int slotNum, int waiter) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setFirstWaiter(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, waiter);
+    }
+
+    public int getFirstWaiter(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getFirstWaiter(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+    public void setUpgrader(int slotNum, int upgrader) {
+        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setUpgrader(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, upgrader);
+    }
+
+    public int getUpgrader(int slotNum) {
+        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getUpgrader(
+                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
+    }
+
+}
+
+/******************************************
+ * EntityLockInfo (16 bytes)
+ * ****************************************
+ * short XCount : used to represent the count of X mode lock if it is allocated. Otherwise, it represents next free slot.
+ * short SCount
+ * int lastHolder
+ * int firstWaiter
+ * int upgrader : may exist only one since there are only S and X mode lock in Entity-level
+ *******************************************/
+
+class ChildEntityLockInfoArrayManager {
+    public static final int ENTITY_LOCK_INFO_SIZE = 16; //16bytes
+    public static final int NUM_OF_SLOTS = 1024; //number of entityLockInfos in a buffer
+    //public static final int NUM_OF_SLOTS = 10; //for unit test
+    public static final int BUFFER_SIZE = ENTITY_LOCK_INFO_SIZE * NUM_OF_SLOTS;
+
+    //byte offset of each field of EntityLockInfo
+    public static final int XCOUNT_OFFSET = 0;
+    public static final int SCOUNT_OFFSET = 2;
+    public static final int LAST_HOLDER_OFFSET = 4;
+    public static final int FIRST_WAITER_OFFSET = 8;
+    public static final int UPGRADER_OFFSET = 12;
+
+    //byte offset of nextFreeSlotNum which shares the same space with LastHolder field
+    //If a slot is in use, the space is used for LastHolder. Otherwise, it is used for nextFreeSlotNum. 
+    public static final int NEXT_FREE_SLOT_OFFSET = 4;
+
+    private ByteBuffer buffer;
+    private int freeSlotNum;
+    private int occupiedSlots; //-1 represents 'deinitialized' state.
+
+    public ChildEntityLockInfoArrayManager() {
+        initialize();
+    }
+
+    public void initialize() {
+        this.buffer = ByteBuffer.allocate(BUFFER_SIZE);
+        this.freeSlotNum = 0;
+        this.occupiedSlots = 0;
+
+        for (int i = 0; i < NUM_OF_SLOTS - 1; i++) {
+            setNextFreeSlot(i, i + 1);
+        }
+        setNextFreeSlot(NUM_OF_SLOTS - 1, -1); //-1 represents EOL(end of link)
+    }
+
+    public int allocate() {
+        int currentSlot = freeSlotNum;
+        freeSlotNum = getNextFreeSlot(currentSlot);
+        //initialize values
+        setXCount(currentSlot, (short) 0);
+        setSCount(currentSlot, (short) 0);
+        setLastHolder(currentSlot, -1);
+        setFirstWaiter(currentSlot, -1);
+        setUpgrader(currentSlot, -1);
+        occupiedSlots++;
+        if (LockManager.IS_DEBUG_MODE) {
+            System.out.println(Thread.currentThread().getName() + " Allocated ELockInfo[" + currentSlot + "]");
+        }
+        return currentSlot;
+    }
+
+    public void deallocate(int slotNum) {
+        setNextFreeSlot(slotNum, freeSlotNum);
+        freeSlotNum = slotNum;
+        occupiedSlots--;
+        if (LockManager.IS_DEBUG_MODE) {
+            System.out.println(Thread.currentThread().getName() + " Deallocated ELockInfo[" + slotNum + "]");
+        }
+    }
+
+    public void deinitialize() {
+        buffer = null;
+        occupiedSlots = -1;
+    }
+
+    public boolean isDeinitialized() {
+        return occupiedSlots == -1;
+    }
+
+    public boolean isFull() {
+        return occupiedSlots == NUM_OF_SLOTS;
+    }
+
+    public boolean isEmpty() {
+        return occupiedSlots == 0;
+    }
+
+    public int getNumOfOccupiedSlots() {
+        return occupiedSlots;
+    }
+
+    public int getFreeSlotNum() {
+        return freeSlotNum;
+    }
+
+    //////////////////////////////////////////////////////////////////
+    //   set/get method for each field of EntityLockInfo plus freeSlot
+    //////////////////////////////////////////////////////////////////
+
+    public void setNextFreeSlot(int slotNum, int nextFreeSlot) {
+        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + NEXT_FREE_SLOT_OFFSET, nextFreeSlot);
+    }
+
+    public int getNextFreeSlot(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + NEXT_FREE_SLOT_OFFSET);
+    }
+
+    public void setXCount(int slotNum, short count) {
+        buffer.putShort(slotNum * ENTITY_LOCK_INFO_SIZE + XCOUNT_OFFSET, count);
+    }
+
+    public short getXCount(int slotNum) {
+        return buffer.getShort(slotNum * ENTITY_LOCK_INFO_SIZE + XCOUNT_OFFSET);
+    }
+
+    public void setSCount(int slotNum, short count) {
+        buffer.putShort(slotNum * ENTITY_LOCK_INFO_SIZE + SCOUNT_OFFSET, count);
+    }
+
+    public short getSCount(int slotNum) {
+        return buffer.getShort(slotNum * ENTITY_LOCK_INFO_SIZE + SCOUNT_OFFSET);
+    }
+
+    public void setLastHolder(int slotNum, int holder) {
+        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + LAST_HOLDER_OFFSET, holder);
+    }
+
+    public int getLastHolder(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + LAST_HOLDER_OFFSET);
+    }
+
+    public void setFirstWaiter(int slotNum, int waiter) {
+        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + FIRST_WAITER_OFFSET, waiter);
+    }
+
+    public int getFirstWaiter(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + FIRST_WAITER_OFFSET);
+    }
+
+    public void setUpgrader(int slotNum, int upgrader) {
+        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + UPGRADER_OFFSET, upgrader);
+    }
+
+    public int getUpgrader(int slotNum) {
+        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + UPGRADER_OFFSET);
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockHashTable.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockHashTable.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockHashTable.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockHashTable.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockMatrix.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockMatrix.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockMatrix.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/ILockMatrix.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/JobInfo.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/JobInfo.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/JobInfo.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/JobInfo.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
new file mode 100644
index 0000000..a354d2a
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
@@ -0,0 +1,2106 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+
+package edu.uci.ics.asterix.transaction.management.service.locking;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogType;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogUtil;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogicalLogLocator;
+import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetId;
+import edu.uci.ics.asterix.transaction.management.service.transaction.ITransactionManager.TransactionState;
+import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
+
+/**
+ * An implementation of the ILockManager interface for the
+ * specific case of locking protocol with two lock modes: (S) and (X),
+ * where S lock mode is shown by 0, and X lock mode is shown by 1.
+ * 
+ * @author pouria, kisskys
+ */
+
+public class LockManager implements ILockManager {
+
+    public static final boolean IS_DEBUG_MODE = false;//true
+    //This variable indicates that the dataset granule X lock request is allowed when 
+    //there are concurrent lock requests. As of 4/16/2013, we only allow the dataset granule X lock 
+    //during DDL operation which is preceded by holding X latch on metadata.
+    //Therefore, we don't allow the concurrent lock requests with the dataset granule X lock. 
+    public static final boolean ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS = false;
+
+    public static final boolean ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET = true;
+    //Threshold must be greater than 1 and should be reasonably large enough not to escalate too soon.
+    public static final int ESCALATE_TRHESHOLD_ENTITY_TO_DATASET = 1000;
+    private static final int DO_ESCALATE = 0;
+    private static final int ESCALATED = 1;
+    private static final int DONOT_ESCALATE = 2;
+
+    private TransactionSubsystem txnSubsystem;
+
+    //all threads accessing to LockManager's tables such as jobHT and datasetResourceHT
+    //are serialized through LockTableLatch. All threads waiting the latch will be fairly served
+    //in FIFO manner when the latch is available. 
+    private final ReadWriteLock lockTableLatch;
+    private final ReadWriteLock waiterLatch;
+    private HashMap<JobId, JobInfo> jobHT;
+    private HashMap<DatasetId, DatasetLockInfo> datasetResourceHT;
+
+    private EntityLockInfoManager entityLockInfoManager;
+    private EntityInfoManager entityInfoManager;
+    private LockWaiterManager lockWaiterManager;
+
+    private DeadlockDetector deadlockDetector;
+    private TimeOutDetector toutDetector;
+    private DatasetId tempDatasetIdObj; //temporary object to avoid object creation
+
+    private int tryLockDatasetGranuleRevertOperation;
+
+    private LockRequestTracker lockRequestTracker; //for debugging
+    private ConsecutiveWakeupContext consecutiveWakeupContext;
+
+    //TODO 
+    //This code should be taken care properly when there is a way to avoid doubling memory space for txnIds. 
+    private LogicalLogLocator logicalLogLocator;
+
+    public LockManager(TransactionSubsystem txnSubsystem) throws ACIDException {
+        this.txnSubsystem = txnSubsystem;
+        this.lockTableLatch = new ReentrantReadWriteLock(true);
+        this.waiterLatch = new ReentrantReadWriteLock(true);
+        this.jobHT = new HashMap<JobId, JobInfo>();
+        this.datasetResourceHT = new HashMap<DatasetId, DatasetLockInfo>();
+        this.entityInfoManager = new EntityInfoManager();
+        this.lockWaiterManager = new LockWaiterManager();
+        this.entityLockInfoManager = new EntityLockInfoManager(entityInfoManager, lockWaiterManager);
+        this.deadlockDetector = new DeadlockDetector(jobHT, datasetResourceHT, entityLockInfoManager,
+                entityInfoManager, lockWaiterManager);
+        this.toutDetector = new TimeOutDetector(this);
+        this.tempDatasetIdObj = new DatasetId(0);
+        this.consecutiveWakeupContext = new ConsecutiveWakeupContext();
+
+        this.logicalLogLocator = LogUtil.getDummyLogicalLogLocator(txnSubsystem.getLogManager());
+
+        if (IS_DEBUG_MODE) {
+            this.lockRequestTracker = new LockRequestTracker();
+        }
+    }
+
+    @Override
+    public void lock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
+            throws ACIDException {
+        internalLock(datasetId, entityHashValue, lockMode, txnContext, false);
+    }
+
+    private void internalLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext,
+            boolean isInstant) throws ACIDException {
+
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int dId = datasetId.getId(); //int-type datasetId
+        int entityInfo;
+        int eLockInfo = -1;
+        DatasetLockInfo dLockInfo = null;
+        JobInfo jobInfo;
+        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+        boolean doEscalate = false;
+        boolean caughtLockMgrLatchException = false;
+
+        latchLockTable();
+        try {
+            validateJob(txnContext);
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Requested", RequestType.LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+
+            dLockInfo = datasetResourceHT.get(datasetId);
+            jobInfo = jobHT.get(jobId);
+
+            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                if (!isInstant && datasetLockMode == LockMode.IS && jobInfo != null && dLockInfo != null) {
+                    int escalateStatus = needEscalateFromEntityToDataset(jobInfo, dId, lockMode);
+                    switch (escalateStatus) {
+                        case DO_ESCALATE:
+                            entityHashValue = -1;
+                            doEscalate = true;
+                            break;
+
+                        case ESCALATED:
+                            return;
+
+                        default:
+                            break;
+                    }
+                }
+            }
+
+            //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
+            if (dLockInfo == null || dLockInfo.isNoHolder()) {
+                if (dLockInfo == null) {
+                    dLockInfo = new DatasetLockInfo(entityLockInfoManager, entityInfoManager, lockWaiterManager);
+                    datasetResourceHT.put(new DatasetId(dId), dLockInfo); //datsetId obj should be created
+                }
+                entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
+
+                //if dataset-granule lock
+                if (entityHashValue == -1) { //-1 stands for dataset-granule
+                    entityInfoManager.increaseDatasetLockCount(entityInfo);
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                    dLockInfo.addHolder(entityInfo);
+                } else {
+                    entityInfoManager.increaseDatasetLockCount(entityInfo);
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                    //add entityLockInfo
+                    eLockInfo = entityLockInfoManager.allocate();
+                    dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
+                    entityInfoManager.increaseEntityLockCount(entityInfo);
+                    entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
+                    entityLockInfoManager.addHolder(eLockInfo, entityInfo);
+                }
+
+                if (jobInfo == null) {
+                    jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
+                    jobHT.put(jobId, jobInfo); //jobId obj doesn't have to be created
+                }
+                jobInfo.addHoldingResource(entityInfo);
+
+                if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                    if (!isInstant && datasetLockMode == LockMode.IS) {
+                        jobInfo.increaseDatasetISLockCount(dId);
+                        if (doEscalate) {
+                            throw new IllegalStateException(
+                                    "ESCALATE_TRHESHOLD_ENTITY_TO_DATASET should not be set to "
+                                            + ESCALATE_TRHESHOLD_ENTITY_TO_DATASET);
+                        }
+                    }
+                }
+
+                if (IS_DEBUG_MODE) {
+                    trackLockRequest("Granted", RequestType.LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                            dLockInfo, eLockInfo);
+                }
+
+                return;
+            }
+
+            //#. the datasetLockInfo exists in datasetResourceHT.
+            //1. handle dataset-granule lock
+            entityInfo = lockDatasetGranule(datasetId, entityHashValue, lockMode, txnContext);
+
+            //2. handle entity-granule lock
+            if (entityHashValue != -1) {
+                lockEntityGranule(datasetId, entityHashValue, lockMode, entityInfo, txnContext);
+            }
+
+            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                if (!isInstant) {
+                    if (doEscalate) {
+                        //jobInfo must not be null.
+                        assert jobInfo != null;
+                        jobInfo.increaseDatasetISLockCount(dId);
+                        //release pre-acquired locks
+                        releaseDatasetISLocks(jobInfo, jobId, datasetId, txnContext);
+                    } else if (datasetLockMode == LockMode.IS) {
+                        if (jobInfo == null) {
+                            jobInfo = jobHT.get(jobId);
+                            //jobInfo must not be null;
+                            assert jobInfo != null;
+                        }
+                        jobInfo.increaseDatasetISLockCount(dId);
+                    }
+                }
+            }
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Granted", RequestType.LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+        } catch (Exception e) {
+            if (e instanceof LockMgrLatchHandlerException) {
+                // don't unlatch
+                caughtLockMgrLatchException = true;
+                throw new ACIDException(((LockMgrLatchHandlerException) e).getInternalException());
+            }
+        } finally {
+            if (!caughtLockMgrLatchException) {
+                unlatchLockTable();
+            }
+        }
+
+        return;
+    }
+
+    private void releaseDatasetISLocks(JobInfo jobInfo, JobId jobId, DatasetId datasetId, TransactionContext txnContext)
+            throws ACIDException {
+        int entityInfo;
+        int prevEntityInfo;
+        int entityHashValue;
+        int did;//int-type dataset id
+
+        //while traversing all holding resources, 
+        //release IS locks on the escalated dataset and
+        //release S locks on the corresponding enttites
+        //by calling unlock() method.
+        entityInfo = jobInfo.getLastHoldingResource();
+        while (entityInfo != -1) {
+            prevEntityInfo = entityInfoManager.getPrevJobResource(entityInfo);
+
+            //release a lock only if the datset is the escalated dataset and
+            //the entityHashValue is not -1("not -1" means a non-dataset-level lock)
+            did = entityInfoManager.getDatasetId(entityInfo);
+            entityHashValue = entityInfoManager.getPKHashVal(entityInfo);
+            if (did == datasetId.getId() && entityHashValue != -1) {
+                this.unlock(datasetId, entityHashValue, txnContext);
+            }
+
+            entityInfo = prevEntityInfo;
+        }
+    }
+
+    private int needEscalateFromEntityToDataset(JobInfo jobInfo, int datasetId, byte lockMode) {
+        //we currently allow upgrade only if the lockMode is S. 
+        if (lockMode != LockMode.S) {
+            return DONOT_ESCALATE;
+        }
+
+        int count = jobInfo.getDatasetISLockCount(datasetId);
+        if (count == ESCALATE_TRHESHOLD_ENTITY_TO_DATASET) {
+            return DO_ESCALATE;
+        } else if (count > ESCALATE_TRHESHOLD_ENTITY_TO_DATASET) {
+            return ESCALATED;
+        } else {
+            return DONOT_ESCALATE;
+        }
+    }
+
+    private void validateJob(TransactionContext txnContext) throws ACIDException {
+        if (txnContext.getTxnState() == TransactionState.ABORTED) {
+            throw new ACIDException("" + txnContext.getJobId() + " is in ABORTED state.");
+        } else if (txnContext.getStatus() == TransactionContext.TIMED_OUT_STATUS) {
+            requestAbort(txnContext);
+        }
+    }
+
+    private int lockDatasetGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
+            TransactionContext txnContext) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int dId = datasetId.getId(); //int-type datasetId
+        int waiterObjId;
+        int entityInfo = -1;
+        DatasetLockInfo dLockInfo;
+        JobInfo jobInfo;
+        boolean isUpgrade = false;
+        int weakerModeLockCount;
+        int waiterCount = 0;
+        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+
+        dLockInfo = datasetResourceHT.get(datasetId);
+        jobInfo = jobHT.get(jobId);
+
+        //check duplicated call
+
+        //1. lock request causing duplicated upgrading requests from different threads in a same job
+        waiterObjId = dLockInfo.findUpgraderFromUpgraderList(jId, entityHashValue);
+        if (waiterObjId != -1) {
+            //make the caller wait on the same LockWaiter object
+            entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
+            waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo, waiterObjId);
+
+            //Only for the first-get-up thread, the waiterCount will be more than 0 and
+            //the thread updates lock count on behalf of the all other waiting threads.
+            //Therefore, all the next-get-up threads will not update any lock count.
+            if (waiterCount > 0) {
+                //add ((the number of waiting upgrader) - 1) to entityInfo's dataset lock count and datasetLockInfo's lock count
+                //where -1 is for not counting the first upgrader's request since the lock count for the first upgrader's request
+                //is already counted.
+                weakerModeLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
+                entityInfoManager.setDatasetLockMode(entityInfo, lockMode);
+                entityInfoManager.increaseDatasetLockCount(entityInfo, waiterCount - 1);
+
+                if (entityHashValue == -1) { //dataset-granule lock
+                    dLockInfo.increaseLockCount(LockMode.X, weakerModeLockCount + waiterCount - 1);//new lock mode
+                    dLockInfo.decreaseLockCount(LockMode.S, weakerModeLockCount);//current lock mode
+                } else {
+                    dLockInfo.increaseLockCount(LockMode.IX, weakerModeLockCount + waiterCount - 1);
+                    dLockInfo.decreaseLockCount(LockMode.IS, weakerModeLockCount);
+                }
+            }
+
+            return entityInfo;
+        }
+
+        //2. lock request causing duplicated waiting requests from different threads in a same job
+        waiterObjId = dLockInfo.findWaiterFromWaiterList(jId, entityHashValue);
+        if (waiterObjId != -1) {
+            //make the caller wait on the same LockWaiter object
+            entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
+            waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, false, true, txnContext, jobInfo, waiterObjId);
+
+            if (waiterCount > 0) {
+                entityInfoManager.increaseDatasetLockCount(entityInfo, waiterCount);
+                if (entityHashValue == -1) {
+                    dLockInfo.increaseLockCount(datasetLockMode, waiterCount);
+                    dLockInfo.addHolder(entityInfo);
+                } else {
+                    dLockInfo.increaseLockCount(datasetLockMode, waiterCount);
+                    //IS and IX holders are implicitly handled.
+                }
+                //add entityInfo to JobInfo's holding-resource list
+                jobInfo.addHoldingResource(entityInfo);
+            }
+
+            return entityInfo;
+        }
+
+        //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
+        entityInfo = dLockInfo.findEntityInfoFromHolderList(jId, entityHashValue);
+        if (entityInfo == -1) {
+
+            entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
+            if (jobInfo == null) {
+                jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
+                jobHT.put(jobId, jobInfo);
+            }
+
+            //wait if any upgrader exists or upgrading lock mode is not compatible
+            if (dLockInfo.getFirstUpgrader() != -1 || dLockInfo.getFirstWaiter() != -1
+                    || !dLockInfo.isCompatible(datasetLockMode)) {
+
+                /////////////////////////////////////////////////////////////////////////////////////////////
+                //[Notice] Mimicking SIX mode
+                //When the lock escalation from IS to S in dataset-level is allowed, the following case occurs
+                //DatasetLockInfo's SCount = 1 and the same job who carried out the escalation tries to insert,
+                //then the job should be able to insert without being blocked by itself. 
+                //Our approach is to introduce SIX mode, but we don't have currently, 
+                //so I simply mimicking SIX by allowing S and IX coexist in the dataset level 
+                //only if their job id is identical for the requests. 
+                if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                    if (datasetLockMode == LockMode.IX && dLockInfo.getSCount() == 1
+                            && jobInfo.isDatasetLockGranted(dId, LockMode.S)) {
+                        entityInfoManager.increaseDatasetLockCount(entityInfo);
+                        //IX holders are implicitly handled without adding holder
+                        dLockInfo.increaseLockCount(datasetLockMode);
+                        //add entityInfo to JobInfo's holding-resource list
+                        jobInfo.addHoldingResource(entityInfo);
+                        return entityInfo;
+                    }
+                }
+                ///////////////////////////////////////////////////////////////////////////////////////////////
+
+                /////////////////////////////////////////////////////////////////////////////////////////////
+                if (ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS) {
+                    //The following case only may occur when the dataset level X lock is requested 
+                    //with the other lock
+
+                    //[Notice]
+                    //There has been no same caller as (jId, dId, entityHashValue) triplet.
+                    //But there could be the same caller in terms of (jId, dId) pair.
+                    //For example, 
+                    //1) (J1, D1, E1) acquires IS in Dataset D1
+                    //2) (J2, D1, -1) requests X  in Dataset D1, but waits
+                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait 
+                    //The 3) may cause deadlock if 1) and 3) are under the same thread.
+                    //Even if (J1, D1, E1) and (J1, D1, E2) are two different thread, instead of
+                    //aborting (J1, D1, E1) triggered by the deadlock, we give higher priority to 3) than 2)
+                    //as long as the dataset level lock D1 is being held by the same jobId. 
+                    //The above consideration is covered in the following code.
+                    //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
+                    if (jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
+                        if (dLockInfo.isCompatible(datasetLockMode)) {
+                            //this is duplicated call
+                            entityInfoManager.increaseDatasetLockCount(entityInfo);
+                            if (entityHashValue == -1) {
+                                dLockInfo.increaseLockCount(datasetLockMode);
+                                dLockInfo.addHolder(entityInfo);
+                            } else {
+                                dLockInfo.increaseLockCount(datasetLockMode);
+                                //IS and IX holders are implicitly handled.
+                            }
+                            //add entityInfo to JobInfo's holding-resource list
+                            jobInfo.addHoldingResource(entityInfo);
+
+                            return entityInfo;
+                        } else {
+                            //considered as upgrader
+                            waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo,
+                                    -1);
+                            if (waiterCount > 0) {
+                                entityInfoManager.increaseDatasetLockCount(entityInfo);
+                                if (entityHashValue == -1) {
+                                    dLockInfo.increaseLockCount(datasetLockMode);
+                                    dLockInfo.addHolder(entityInfo);
+                                } else {
+                                    dLockInfo.increaseLockCount(datasetLockMode);
+                                    //IS and IX holders are implicitly handled.
+                                }
+                                //add entityInfo to JobInfo's holding-resource list
+                                jobInfo.addHoldingResource(entityInfo);
+                            }
+                            return entityInfo;
+                        }
+                    }
+                }
+                /////////////////////////////////////////////////////////////////////////////////////////////
+
+                waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, false, true, txnContext, jobInfo, -1);
+            } else {
+                waiterCount = 1;
+            }
+
+            if (waiterCount > 0) {
+                entityInfoManager.increaseDatasetLockCount(entityInfo);
+                if (entityHashValue == -1) {
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                    dLockInfo.addHolder(entityInfo);
+                } else {
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                    //IS and IX holders are implicitly handled.
+                }
+                //add entityInfo to JobInfo's holding-resource list
+                jobInfo.addHoldingResource(entityInfo);
+            }
+        } else {
+            isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
+            if (isUpgrade) { //upgrade call 
+                //wait if any upgrader exists or upgrading lock mode is not compatible
+                if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
+                    waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo, -1);
+                } else {
+                    waiterCount = 1;
+                }
+
+                if (waiterCount > 0) {
+                    //add ((the number of waiting upgrader) - 1) to entityInfo's dataset lock count and datasetLockInfo's lock count
+                    //where -1 is for not counting the first upgrader's request since the lock count for the first upgrader's request
+                    //is already counted.
+                    weakerModeLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
+                    entityInfoManager.setDatasetLockMode(entityInfo, lockMode);
+                    entityInfoManager.increaseDatasetLockCount(entityInfo, waiterCount - 1);
+
+                    if (entityHashValue == -1) { //dataset-granule lock
+                        dLockInfo.increaseLockCount(LockMode.X, weakerModeLockCount + waiterCount - 1);//new lock mode
+                        dLockInfo.decreaseLockCount(LockMode.S, weakerModeLockCount);//current lock mode
+                    } else {
+                        dLockInfo.increaseLockCount(LockMode.IX, weakerModeLockCount + waiterCount - 1);
+                        dLockInfo.decreaseLockCount(LockMode.IS, weakerModeLockCount);
+                    }
+                }
+            } else { //duplicated call
+                entityInfoManager.increaseDatasetLockCount(entityInfo);
+                datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo);
+
+                if (entityHashValue == -1) { //dataset-granule
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                } else { //entity-granule
+                    datasetLockMode = datasetLockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                }
+            }
+        }
+
+        return entityInfo;
+    }
+
+    private void lockEntityGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
+            int entityInfoFromDLockInfo, TransactionContext txnContext) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int waiterObjId;
+        int eLockInfo = -1;
+        int entityInfo;
+        DatasetLockInfo dLockInfo;
+        JobInfo jobInfo;
+        boolean isUpgrade = false;
+        int waiterCount = 0;
+        int weakerModeLockCount;
+
+        dLockInfo = datasetResourceHT.get(datasetId);
+        jobInfo = jobHT.get(jobId);
+        eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
+
+        if (eLockInfo != -1) {
+            //check duplicated call
+
+            //1. lock request causing duplicated upgrading requests from different threads in a same job
+            waiterObjId = entityLockInfoManager.findUpgraderFromUpgraderList(eLockInfo, jId, entityHashValue);
+            if (waiterObjId != -1) {
+                entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
+                waiterCount = handleLockWaiter(dLockInfo, eLockInfo, -1, true, false, txnContext, jobInfo, waiterObjId);
+
+                if (waiterCount > 0) {
+                    weakerModeLockCount = entityInfoManager.getEntityLockCount(entityInfo);
+                    entityInfoManager.setEntityLockMode(entityInfo, LockMode.X);
+                    entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount - 1);
+
+                    entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) (weakerModeLockCount
+                            + waiterCount - 1));//new lock mode
+                    entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode 
+                }
+                return;
+            }
+
+            //2. lock request causing duplicated waiting requests from different threads in a same job
+            waiterObjId = entityLockInfoManager.findWaiterFromWaiterList(eLockInfo, jId, entityHashValue);
+            if (waiterObjId != -1) {
+                entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
+                waiterCount = handleLockWaiter(dLockInfo, eLockInfo, -1, false, false, txnContext, jobInfo, waiterObjId);
+
+                if (waiterCount > 0) {
+                    entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount);
+                    entityLockInfoManager.increaseLockCount(eLockInfo, lockMode, (short) waiterCount);
+                    entityLockInfoManager.addHolder(eLockInfo, entityInfo);
+                }
+                return;
+            }
+
+            //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
+            entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jId, entityHashValue);
+            if (entityInfo != -1) {//duplicated call or upgrader
+
+                isUpgrade = isLockUpgrade(entityInfoManager.getEntityLockMode(entityInfo), lockMode);
+                if (isUpgrade) {//upgrade call
+                    //wait if any upgrader exists or upgrading lock mode is not compatible
+                    if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
+                            || !entityLockInfoManager.isUpgradeCompatible(eLockInfo, lockMode, entityInfo)) {
+                        waiterCount = handleLockWaiter(dLockInfo, eLockInfo, entityInfo, true, false, txnContext,
+                                jobInfo, -1);
+                    } else {
+                        waiterCount = 1;
+                    }
+
+                    if (waiterCount > 0) {
+                        weakerModeLockCount = entityInfoManager.getEntityLockCount(entityInfo);
+                        entityInfoManager.setEntityLockMode(entityInfo, lockMode);
+                        entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount - 1);
+
+                        entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) (weakerModeLockCount
+                                + waiterCount - 1));//new lock mode
+                        entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode 
+                    }
+
+                } else {//duplicated call
+                    entityInfoManager.increaseEntityLockCount(entityInfo);
+                    entityLockInfoManager.increaseLockCount(eLockInfo, entityInfoManager.getEntityLockMode(entityInfo));
+                }
+            } else {//new call from this job, but still eLockInfo exists since other threads hold it or wait on it
+                entityInfo = entityInfoFromDLockInfo;
+                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
+                        || entityLockInfoManager.getFirstWaiter(eLockInfo) != -1
+                        || !entityLockInfoManager.isCompatible(eLockInfo, lockMode)) {
+                    waiterCount = handleLockWaiter(dLockInfo, eLockInfo, entityInfo, false, false, txnContext, jobInfo,
+                            -1);
+                } else {
+                    waiterCount = 1;
+                }
+
+                if (waiterCount > 0) {
+                    entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount);
+                    entityLockInfoManager.increaseLockCount(eLockInfo, lockMode, (short) waiterCount);
+                    entityLockInfoManager.addHolder(eLockInfo, entityInfo);
+                }
+            }
+        } else {//eLockInfo doesn't exist, so this lock request is the first request and can be granted without waiting.
+            eLockInfo = entityLockInfoManager.allocate();
+            dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
+            entityInfoManager.increaseEntityLockCount(entityInfoFromDLockInfo);
+            entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
+            entityLockInfoManager.addHolder(eLockInfo, entityInfoFromDLockInfo);
+        }
+    }
+
+    @Override
+    public void unlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext) throws ACIDException {
+        internalUnlock(datasetId, entityHashValue, txnContext, false, false);
+    }
+
+    @Override
+    public void unlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext, boolean commitFlag)
+            throws ACIDException {
+        internalUnlock(datasetId, entityHashValue, txnContext, false, commitFlag);
+    }
+
+    private void instantUnlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext)
+            throws ACIDException {
+        internalUnlock(datasetId, entityHashValue, txnContext, true, false);
+    }
+
+    private void internalUnlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext,
+            boolean isInstant, boolean commitFlag) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int eLockInfo = -1;
+        DatasetLockInfo dLockInfo = null;
+        JobInfo jobInfo;
+        int entityInfo = -1;
+        byte datasetLockMode;
+
+        if (IS_DEBUG_MODE) {
+            if (entityHashValue == -1) {
+                throw new UnsupportedOperationException(
+                        "Unsupported unlock request: dataset-granule unlock is not supported");
+            }
+        }
+
+        latchLockTable();
+        try {
+            validateJob(txnContext);
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Requested", RequestType.UNLOCK, datasetId, entityHashValue, (byte) 0, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+
+            //find the resource to be unlocked
+            dLockInfo = datasetResourceHT.get(datasetId);
+            jobInfo = jobHT.get(jobId);
+            if (dLockInfo == null || jobInfo == null) {
+                throw new IllegalStateException("Invalid unlock request: Corresponding lock info doesn't exist.");
+            }
+
+            eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
+
+            if (eLockInfo == -1) {
+                throw new IllegalStateException("Invalid unlock request: Corresponding lock info doesn't exist.");
+            }
+
+            //find the corresponding entityInfo
+            entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jobId.getId(), entityHashValue);
+            if (entityInfo == -1) {
+                throw new IllegalStateException("Invalid unlock request[" + jobId.getId() + "," + datasetId.getId()
+                        + "," + entityHashValue + "]: Corresponding lock info doesn't exist.");
+            }
+
+            datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo) == LockMode.S ? LockMode.IS
+                    : LockMode.IX;
+
+            //decrease the corresponding count of dLockInfo/eLockInfo/entityInfo
+            dLockInfo.decreaseLockCount(datasetLockMode);
+            entityLockInfoManager.decreaseLockCount(eLockInfo, entityInfoManager.getEntityLockMode(entityInfo));
+            entityInfoManager.decreaseDatasetLockCount(entityInfo);
+            entityInfoManager.decreaseEntityLockCount(entityInfo);
+
+            if (entityInfoManager.getEntityLockCount(entityInfo) == 0
+                    && entityInfoManager.getDatasetLockCount(entityInfo) == 0) {
+                int threadCount = 0; //number of threads(in the same job) waiting on the same resource 
+                int waiterObjId = jobInfo.getFirstWaitingResource();
+                int waitingEntityInfo;
+                LockWaiter waiterObj;
+
+                //TODO
+                //This code should be taken care properly when there is a way to avoid doubling memory space for txnIds.
+                //This commit log is written here in order to avoid increasing the memory space for managing transactionIds
+                if (commitFlag) {
+                    if (txnContext.getTransactionType().equals(TransactionContext.TransactionType.READ_WRITE)) {
+                        try {
+                            txnSubsystem.getLogManager().log(LogType.ENTITY_COMMIT, txnContext, datasetId.getId(),
+                                    entityHashValue, -1, (byte) 0, 0, null, null, logicalLogLocator);
+                        } catch (ACIDException e) {
+                            requestAbort(txnContext);
+                        }
+                    }
+
+                    txnContext.updateLastLSNForIndexes(logicalLogLocator.getLsn());
+                }
+
+                //1) wake up waiters and remove holder
+                //wake up waiters of dataset-granule lock
+                wakeUpDatasetLockWaiters(dLockInfo);
+                //wake up waiters of entity-granule lock
+                wakeUpEntityLockWaiters(eLockInfo);
+                //remove the holder from eLockInfo's holder list and remove the holding resource from jobInfo's holding resource list
+                //this can be done in the following single function call.
+                entityLockInfoManager.removeHolder(eLockInfo, entityInfo, jobInfo);
+
+                //2) if 
+                //      there is no waiting thread on the same resource (this can be checked through jobInfo)
+                //   then 
+                //      a) delete the corresponding entityInfo
+                //      b) write commit log for the unlocked resource(which is a committed txn).
+                while (waiterObjId != -1) {
+                    waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+                    waitingEntityInfo = waiterObj.getEntityInfoSlot();
+                    if (entityInfoManager.getDatasetId(waitingEntityInfo) == datasetId.getId()
+                            && entityInfoManager.getPKHashVal(waitingEntityInfo) == entityHashValue) {
+                        threadCount++;
+                        break;
+                    }
+                    waiterObjId = waiterObj.getNextWaiterObjId();
+                }
+                if (threadCount == 0) {
+                    if (entityInfoManager.getEntityLockMode(entityInfo) == LockMode.X) {
+                        //TODO
+                        //write a commit log for the unlocked resource
+                        //need to figure out that instantLock() also needs to write a commit log. 
+                    }
+                    entityInfoManager.deallocate(entityInfo);
+                }
+            }
+
+            //deallocate entityLockInfo's slot if there is no txn referring to the entityLockInfo.
+            if (entityLockInfoManager.getFirstWaiter(eLockInfo) == -1
+                    && entityLockInfoManager.getLastHolder(eLockInfo) == -1
+                    && entityLockInfoManager.getUpgrader(eLockInfo) == -1) {
+                dLockInfo.getEntityResourceHT().remove(entityHashValue);
+                entityLockInfoManager.deallocate(eLockInfo);
+            }
+
+            //we don't deallocate datasetLockInfo even if there is no txn referring to the datasetLockInfo
+            //since the datasetLockInfo is likely to be referred to again.
+
+            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                if (!isInstant && datasetLockMode == LockMode.IS) {
+                    jobInfo.decreaseDatasetISLockCount(datasetId.getId());
+                }
+            }
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Granted", RequestType.UNLOCK, datasetId, entityHashValue, (byte) 0, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+        } finally {
+            unlatchLockTable();
+        }
+    }
+
+    @Override
+    public void releaseLocks(TransactionContext txnContext) throws ACIDException {
+        LockWaiter waiterObj;
+        int entityInfo;
+        int prevEntityInfo;
+        int entityHashValue;
+        DatasetLockInfo dLockInfo = null;
+        int eLockInfo = -1;
+        int did;//int-type dataset id
+        int datasetLockCount;
+        int entityLockCount;
+        byte lockMode;
+        boolean existWaiter = false;
+
+        JobId jobId = txnContext.getJobId();
+
+        latchLockTable();
+        try {
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Requested", RequestType.RELEASE_LOCKS, new DatasetId(0), 0, (byte) 0, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+
+            JobInfo jobInfo = jobHT.get(jobId);
+            if (jobInfo == null) {
+                return;
+            }
+
+            //remove waiterObj of JobInfo 
+            //[Notice]
+            //waiterObjs may exist if aborted thread is the caller of this function.
+            //Even if there are the waiterObjs, there is no waiting thread on the objects. 
+            //If the caller of this function is an aborted thread, it is guaranteed that there is no waiting threads
+            //on the waiterObjs since when the aborted caller thread is waken up, all other waiting threads are
+            //also waken up at the same time through 'notifyAll()' call.
+            //In contrast, if the caller of this function is not an aborted thread, then there is no waiting object.
+            int waiterObjId = jobInfo.getFirstWaitingResource();
+            int nextWaiterObjId;
+            while (waiterObjId != -1) {
+                existWaiter = true;
+                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+                nextWaiterObjId = waiterObj.getNextWaitingResourceObjId();
+                entityInfo = waiterObj.getEntityInfoSlot();
+                if (IS_DEBUG_MODE) {
+                    if (jobId.getId() != entityInfoManager.getJobId(entityInfo)) {
+                        throw new IllegalStateException("JobInfo(" + jobId + ") has diffrent Job(JID:"
+                                + entityInfoManager.getJobId(entityInfo) + "'s lock request!!!");
+                    }
+                }
+
+                //1. remove from waiter(or upgrader)'s list of dLockInfo or eLockInfo.
+                did = entityInfoManager.getDatasetId(entityInfo);
+                tempDatasetIdObj.setId(did);
+                dLockInfo = datasetResourceHT.get(tempDatasetIdObj);
+
+                if (waiterObj.isWaitingOnEntityLock()) {
+                    entityHashValue = entityInfoManager.getPKHashVal(entityInfo);
+                    eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
+                    if (waiterObj.isWaiter()) {
+                        entityLockInfoManager.removeWaiter(eLockInfo, waiterObjId);
+                    } else {
+                        entityLockInfoManager.removeUpgrader(eLockInfo, waiterObjId);
+                    }
+                } else {
+                    if (waiterObj.isWaiter()) {
+                        dLockInfo.removeWaiter(waiterObjId);
+                    } else {
+                        dLockInfo.removeUpgrader(waiterObjId);
+                    }
+                }
+
+                //2. wake-up waiters
+                latchWaitNotify();
+                synchronized (waiterObj) {
+                    unlatchWaitNotify();
+                    waiterObj.setWait(false);
+                    if (IS_DEBUG_MODE) {
+                        System.out.println("" + Thread.currentThread().getName() + "\twake-up(D): WID(" + waiterObjId
+                                + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
+                    }
+                    waiterObj.notifyAll();
+                }
+
+                //3. deallocate waiterObj
+                lockWaiterManager.deallocate(waiterObjId);
+
+                //4. deallocate entityInfo only if this waiter is not an upgrader
+                if (entityInfoManager.getDatasetLockCount(entityInfo) == 0
+                        && entityInfoManager.getEntityLockCount(entityInfo) == 0) {
+                    entityInfoManager.deallocate(entityInfo);
+                }
+                waiterObjId = nextWaiterObjId;
+            }
+
+            //release holding resources
+            entityInfo = jobInfo.getLastHoldingResource();
+            while (entityInfo != -1) {
+                prevEntityInfo = entityInfoManager.getPrevJobResource(entityInfo);
+
+                //decrease lock count of datasetLock and entityLock
+                did = entityInfoManager.getDatasetId(entityInfo);
+                tempDatasetIdObj.setId(did);
+                dLockInfo = datasetResourceHT.get(tempDatasetIdObj);
+                entityHashValue = entityInfoManager.getPKHashVal(entityInfo);
+
+                if (entityHashValue == -1) {
+                    //decrease datasetLockCount
+                    lockMode = entityInfoManager.getDatasetLockMode(entityInfo);
+                    datasetLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
+                    if (datasetLockCount != 0) {
+                        dLockInfo.decreaseLockCount(lockMode, datasetLockCount);
+
+                        //wakeup waiters of datasetLock and remove holder from datasetLockInfo
+                        wakeUpDatasetLockWaiters(dLockInfo);
+
+                        //remove the holder from datasetLockInfo only if the lock is dataset-granule lock.
+                        //--> this also removes the holding resource from jobInfo               
+                        //(Because the IX and IS lock's holders are handled implicitly, 
+                        //those are not in the holder list of datasetLockInfo.)
+                        dLockInfo.removeHolder(entityInfo, jobInfo);
+                    }
+                } else {
+                    //decrease datasetLockCount
+                    lockMode = entityInfoManager.getDatasetLockMode(entityInfo);
+                    lockMode = lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+                    datasetLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
+
+                    if (datasetLockCount != 0) {
+                        dLockInfo.decreaseLockCount(lockMode, datasetLockCount);
+                    }
+
+                    //decrease entityLockCount
+                    lockMode = entityInfoManager.getEntityLockMode(entityInfo);
+                    entityLockCount = entityInfoManager.getEntityLockCount(entityInfo);
+                    eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
+                    if (IS_DEBUG_MODE) {
+                        if (eLockInfo < 0) {
+                            System.out.println("eLockInfo:" + eLockInfo);
+                        }
+                    }
+
+                    if (entityLockCount != 0) {
+                        entityLockInfoManager.decreaseLockCount(eLockInfo, lockMode, (short) entityLockCount);
+                    }
+
+                    if (datasetLockCount != 0) {
+                        //wakeup waiters of datasetLock and don't remove holder from datasetLockInfo
+                        wakeUpDatasetLockWaiters(dLockInfo);
+                    }
+
+                    if (entityLockCount != 0) {
+                        //wakeup waiters of entityLock
+                        wakeUpEntityLockWaiters(eLockInfo);
+
+                        //remove the holder from entityLockInfo 
+                        //--> this also removes the holding resource from jobInfo
+                        entityLockInfoManager.removeHolder(eLockInfo, entityInfo, jobInfo);
+                    }
+
+                    //deallocate entityLockInfo if there is no holder and waiter.
+                    if (entityLockInfoManager.getLastHolder(eLockInfo) == -1
+                            && entityLockInfoManager.getFirstWaiter(eLockInfo) == -1
+                            && entityLockInfoManager.getUpgrader(eLockInfo) == -1) {
+                        dLockInfo.getEntityResourceHT().remove(entityHashValue);
+                        entityLockInfoManager.deallocate(eLockInfo);
+                    }
+                }
+
+                //deallocate entityInfo
+                entityInfoManager.deallocate(entityInfo);
+
+                entityInfo = prevEntityInfo;
+            }
+
+            //remove JobInfo
+            jobHT.remove(jobId);
+
+            if (existWaiter) {
+                txnContext.setStatus(TransactionContext.TIMED_OUT_STATUS);
+                txnContext.setTxnState(TransactionState.ABORTED);
+            }
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Granted", RequestType.RELEASE_LOCKS, new DatasetId(0), 0, (byte) 0, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+        } finally {
+            unlatchLockTable();
+        }
+    }
+
+    @Override
+    public void instantLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
+            throws ACIDException {
+
+        //        try {
+        //            internalLock(datasetId, entityHashValue, lockMode, txnContext);
+        //            return;
+        //        } finally {
+        //            unlock(datasetId, entityHashValue, txnContext);
+        //        }
+        internalLock(datasetId, entityHashValue, lockMode, txnContext, true);
+        instantUnlock(datasetId, entityHashValue, txnContext);
+    }
+
+    @Override
+    public boolean tryLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
+            throws ACIDException {
+        return internalTryLock(datasetId, entityHashValue, lockMode, txnContext, false);
+    }
+
+    @Override
+    public boolean instantTryLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
+            throws ACIDException {
+        return internalInstantTryLock(datasetId, entityHashValue, lockMode, txnContext);
+    }
+
+    private boolean internalInstantTryLock(DatasetId datasetId, int entityHashValue, byte lockMode,
+            TransactionContext txnContext) throws ACIDException {
+        DatasetLockInfo dLockInfo = null;
+        boolean isSuccess = true;
+
+        latchLockTable();
+        try {
+            validateJob(txnContext);
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Requested", RequestType.INSTANT_TRY_LOCK, datasetId, entityHashValue, lockMode,
+                        txnContext, dLockInfo, -1);
+            }
+
+            dLockInfo = datasetResourceHT.get(datasetId);
+
+            //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
+            if (dLockInfo == null || dLockInfo.isNoHolder()) {
+                if (IS_DEBUG_MODE) {
+                    trackLockRequest("Granted", RequestType.INSTANT_TRY_LOCK, datasetId, entityHashValue, lockMode,
+                            txnContext, dLockInfo, -1);
+                }
+                return true;
+            }
+
+            //#. the datasetLockInfo exists in datasetResourceHT.
+            //1. handle dataset-granule lock
+            byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS
+                    : LockMode.IX;
+            if (datasetLockMode == LockMode.IS) {
+                //[Notice]
+                //Skip checking the dataset level lock compatibility if the requested LockMode is IS lock.
+                //We know that this internalInstantTryLock() call with IS lock mode will be always granted 
+                //because we don't allow X lock on dataset-level except DDL operation. 
+                //During DDL operation, all other operations will be pending, so there is no conflict. 
+                isSuccess = true;
+            } else {
+                isSuccess = instantTryLockDatasetGranule(datasetId, entityHashValue, lockMode, txnContext, dLockInfo,
+                        datasetLockMode);
+            }
+
+            if (isSuccess && entityHashValue != -1) {
+                //2. handle entity-granule lock
+                isSuccess = instantTryLockEntityGranule(datasetId, entityHashValue, lockMode, txnContext, dLockInfo);
+            }
+
+            if (IS_DEBUG_MODE) {
+                if (isSuccess) {
+                    trackLockRequest("Granted", RequestType.INSTANT_TRY_LOCK, datasetId, entityHashValue, lockMode,
+                            txnContext, dLockInfo, -1);
+                } else {
+                    trackLockRequest("Failed", RequestType.INSTANT_TRY_LOCK, datasetId, entityHashValue, lockMode,
+                            txnContext, dLockInfo, -1);
+                }
+            }
+
+        } finally {
+            unlatchLockTable();
+        }
+
+        return isSuccess;
+    }
+
+    private boolean instantTryLockDatasetGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
+            TransactionContext txnContext, DatasetLockInfo dLockInfo, byte datasetLockMode) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int dId = datasetId.getId(); //int-type datasetId
+        int waiterObjId;
+        int entityInfo = -1;
+        JobInfo jobInfo;
+        boolean isUpgrade = false;
+
+        jobInfo = jobHT.get(jobId);
+
+        //check duplicated call
+
+        //1. lock request causing duplicated upgrading requests from different threads in a same job
+        waiterObjId = dLockInfo.findUpgraderFromUpgraderList(jId, entityHashValue);
+        if (waiterObjId != -1) {
+            return false;
+        }
+
+        //2. lock request causing duplicated waiting requests from different threads in a same job
+        waiterObjId = dLockInfo.findWaiterFromWaiterList(jId, entityHashValue);
+        if (waiterObjId != -1) {
+            return false;
+        }
+
+        //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
+        entityInfo = dLockInfo.findEntityInfoFromHolderList(jId, entityHashValue);
+        if (entityInfo == -1) { //new call from this job -> doesn't mean that eLockInfo doesn't exist since another thread might have create the eLockInfo already.
+
+            //return fail if any upgrader exists or upgrading lock mode is not compatible
+            if (dLockInfo.getFirstUpgrader() != -1 || dLockInfo.getFirstWaiter() != -1
+                    || !dLockInfo.isCompatible(datasetLockMode)) {
+
+                if (ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS) {
+                    //The following case only may occur when the dataset level X lock is requested 
+                    //with the other lock
+
+                    //[Notice]
+                    //There has been no same caller as (jId, dId, entityHashValue) triplet.
+                    //But there could be the same caller in terms of (jId, dId) pair.
+                    //For example, 
+                    //1) (J1, D1, E1) acquires IS in Dataset D1
+                    //2) (J2, D1, -1) requests X  in Dataset D1, but waits
+                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait 
+                    //The 3) may cause deadlock if 1) and 3) are under the same thread.
+                    //Even if (J1, D1, E1) and (J1, D1, E2) are two different thread, instead of
+                    //aborting (J1, D1, E1) triggered by the deadlock, we give higher priority to 3) than 2)
+                    //as long as the dataset level lock D1 is being held by the same jobId. 
+                    //The above consideration is covered in the following code.
+                    //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
+                    if (jobInfo != null && jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
+                        if (dLockInfo.isCompatible(datasetLockMode)) {
+                            //this is duplicated call
+                            return true;
+                        }
+                    }
+                }
+
+                return false;
+            }
+        } else {
+            isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
+            if (isUpgrade) { //upgrade call 
+                //return fail if any upgrader exists or upgrading lock mode is not compatible
+                if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
+                    return false;
+                }
+            }
+            /************************************
+             * else { //duplicated call
+             * //do nothing
+             * }
+             *************************************/
+        }
+
+        return true;
+    }
+
+    private boolean instantTryLockEntityGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
+            TransactionContext txnContext, DatasetLockInfo dLockInfo) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int waiterObjId;
+        int eLockInfo = -1;
+        int entityInfo;
+        boolean isUpgrade = false;
+
+        dLockInfo = datasetResourceHT.get(datasetId);
+        eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
+
+        if (eLockInfo != -1) {
+            //check duplicated call
+
+            //1. lock request causing duplicated upgrading requests from different threads in a same job
+            waiterObjId = entityLockInfoManager.findUpgraderFromUpgraderList(eLockInfo, jId, entityHashValue);
+            if (waiterObjId != -1) {
+                return false;
+            }
+
+            //2. lock request causing duplicated waiting requests from different threads in a same job
+            waiterObjId = entityLockInfoManager.findWaiterFromWaiterList(eLockInfo, jId, entityHashValue);
+            if (waiterObjId != -1) {
+                return false;
+            }
+
+            //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
+            entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jId, entityHashValue);
+            if (entityInfo != -1) {//duplicated call or upgrader
+
+                isUpgrade = isLockUpgrade(entityInfoManager.getEntityLockMode(entityInfo), lockMode);
+                if (isUpgrade) {//upgrade call
+                    //wait if any upgrader exists or upgrading lock mode is not compatible
+                    if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
+                            || !entityLockInfoManager.isUpgradeCompatible(eLockInfo, lockMode, entityInfo)) {
+                        return false;
+                    }
+                }
+                /***************************
+                 * else {//duplicated call
+                 * //do nothing
+                 * }
+                 ****************************/
+            } else {//new call from this job, but still eLockInfo exists since other threads hold it or wait on it
+                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
+                        || entityLockInfoManager.getFirstWaiter(eLockInfo) != -1
+                        || !entityLockInfoManager.isCompatible(eLockInfo, lockMode)) {
+                    return false;
+                }
+            }
+        }
+        /*******************************
+         * else {//eLockInfo doesn't exist, so this lock request is the first request and can be granted without waiting.
+         * //do nothing
+         * }
+         *********************************/
+
+        return true;
+    }
+
+    private boolean internalTryLock(DatasetId datasetId, int entityHashValue, byte lockMode,
+            TransactionContext txnContext, boolean isInstant) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int dId = datasetId.getId(); //int-type datasetId
+        int entityInfo;
+        int eLockInfo = -1;
+        DatasetLockInfo dLockInfo = null;
+        JobInfo jobInfo;
+        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+        boolean isSuccess = true;
+        boolean doEscalate = false;
+
+        latchLockTable();
+        try {
+            validateJob(txnContext);
+
+            if (IS_DEBUG_MODE) {
+                trackLockRequest("Requested", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                        dLockInfo, eLockInfo);
+            }
+
+            dLockInfo = datasetResourceHT.get(datasetId);
+            jobInfo = jobHT.get(jobId);
+
+            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                if (!isInstant && datasetLockMode == LockMode.IS && jobInfo != null && dLockInfo != null) {
+                    int upgradeStatus = needEscalateFromEntityToDataset(jobInfo, dId, lockMode);
+                    switch (upgradeStatus) {
+                        case DO_ESCALATE:
+                            entityHashValue = -1;
+                            doEscalate = true;
+                            break;
+
+                        case ESCALATED:
+                            return true;
+
+                        default:
+                            break;
+                    }
+                }
+            }
+
+            //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
+            if (dLockInfo == null || dLockInfo.isNoHolder()) {
+                if (dLockInfo == null) {
+                    dLockInfo = new DatasetLockInfo(entityLockInfoManager, entityInfoManager, lockWaiterManager);
+                    datasetResourceHT.put(new DatasetId(dId), dLockInfo); //datsetId obj should be created
+                }
+                entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
+
+                //if dataset-granule lock
+                if (entityHashValue == -1) { //-1 stands for dataset-granule
+                    entityInfoManager.increaseDatasetLockCount(entityInfo);
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                    dLockInfo.addHolder(entityInfo);
+                } else {
+                    entityInfoManager.increaseDatasetLockCount(entityInfo);
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                    //add entityLockInfo
+                    eLockInfo = entityLockInfoManager.allocate();
+                    dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
+                    entityInfoManager.increaseEntityLockCount(entityInfo);
+                    entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
+                    entityLockInfoManager.addHolder(eLockInfo, entityInfo);
+                }
+
+                if (jobInfo == null) {
+                    jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
+                    jobHT.put(jobId, jobInfo); //jobId obj doesn't have to be created
+                }
+                jobInfo.addHoldingResource(entityInfo);
+
+                if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                    if (!isInstant && datasetLockMode == LockMode.IS) {
+                        jobInfo.increaseDatasetISLockCount(dId);
+                        if (doEscalate) {
+                            //This exception is thrown when the threshold value is set to 1.
+                            //We don't want to allow the lock escalation when there is a first lock request on a dataset. 
+                            throw new IllegalStateException(
+                                    "ESCALATE_TRHESHOLD_ENTITY_TO_DATASET should not be set to "
+                                            + ESCALATE_TRHESHOLD_ENTITY_TO_DATASET);
+                        }
+                    }
+                }
+
+                if (IS_DEBUG_MODE) {
+                    trackLockRequest("Granted", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                            dLockInfo, eLockInfo);
+                }
+
+                return true;
+            }
+
+            //#. the datasetLockInfo exists in datasetResourceHT.
+            //1. handle dataset-granule lock
+            tryLockDatasetGranuleRevertOperation = 0;
+            entityInfo = tryLockDatasetGranule(datasetId, entityHashValue, lockMode, txnContext);
+            if (entityInfo == -2) {//-2 represents fail
+                isSuccess = false;
+            } else {
+                //2. handle entity-granule lock
+                if (entityHashValue != -1) {
+                    isSuccess = tryLockEntityGranule(datasetId, entityHashValue, lockMode, entityInfo, txnContext);
+                    if (!isSuccess) {
+                        revertTryLockDatasetGranuleOperation(datasetId, entityHashValue, lockMode, entityInfo,
+                                txnContext);
+                    }
+                }
+            }
+
+            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
+                if (!isInstant) {
+                    if (doEscalate) {
+                        //jobInfo must not be null.
+                        assert jobInfo != null;
+                        jobInfo.increaseDatasetISLockCount(dId);
+                        //release pre-acquired locks
+                        releaseDatasetISLocks(jobInfo, jobId, datasetId, txnContext);
+                    } else if (datasetLockMode == LockMode.IS) {
+                        if (jobInfo == null) {
+                            jobInfo = jobHT.get(jobId);
+                            //jobInfo must not be null;
+                            assert jobInfo != null;
+                        }
+                        jobInfo.increaseDatasetISLockCount(dId);
+                    }
+                }
+            }
+
+            if (IS_DEBUG_MODE) {
+                if (isSuccess) {
+                    trackLockRequest("Granted", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                            dLockInfo, eLockInfo);
+                } else {
+                    trackLockRequest("Failed", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
+                            dLockInfo, eLockInfo);
+                }
+            }
+
+        } finally {
+            unlatchLockTable();
+        }
+
+        return isSuccess;
+    }
+
+    private void trackLockRequest(String msg, int requestType, DatasetId datasetIdObj, int entityHashValue,
+            byte lockMode, TransactionContext txnContext, DatasetLockInfo dLockInfo, int eLockInfo) {
+        StringBuilder s = new StringBuilder();
+        LockRequest request = new LockRequest(Thread.currentThread().getName(), requestType, datasetIdObj,
+                entityHashValue, lockMode, txnContext);
+        s.append(Thread.currentThread().getId() + ":");
+        s.append(msg);
+        if (msg.equals("Granted")) {
+            if (dLockInfo != null) {
+                s.append("\t|D| ");
+                s.append(dLockInfo.getIXCount()).append(",");
+                s.append(dLockInfo.getISCount()).append(",");
+                s.append(dLockInfo.getXCount()).append(",");
+                s.append(dLockInfo.getSCount()).append(",");
+                if (dLockInfo.getFirstUpgrader() != -1) {
+                    s.append("+");
+                } else {
+                    s.append("-");
+                }
+                s.append(",");
+                if (dLockInfo.getFirstWaiter() != -1) {
+                    s.append("+");
+                } else {
+                    s.append("-");
+                }
+            }
+
+            if (eLockInfo != -1) {
+                s.append("\t|E| ");
+                s.append(entityLockInfoManager.getXCount(eLockInfo)).append(",");
+                s.append(entityLockInfoManager.getSCount(eLockInfo)).append(",");
+                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1) {
+                    s.append("+");
+                } else {
+                    s.append("-");
+                }
+                s.append(",");
+                if (entityLockInfoManager.getFirstWaiter(eLockInfo) != -1) {
+                    s.append("+");
+                } else {
+                    s.append("-");
+                }
+            }
+        }
+
+        lockRequestTracker.addEvent(s.toString(), request);
+        if (msg.equals("Requested")) {
+            lockRequestTracker.addRequest(request);
+        }
+        System.out.println(request.prettyPrint() + "--> " + s.toString());
+    }
+
+    public String getHistoryForAllJobs() {
+        if (IS_DEBUG_MODE) {
+            return lockRequestTracker.getHistoryForAllJobs();
+        }
+        return null;
+    }
+
+    public String getHistoryPerJob() {
+        if (IS_DEBUG_MODE) {
+            return lockRequestTracker.getHistoryPerJob();
+        }
+        return null;
+    }
+
+    public String getRequestHistoryForAllJobs() {
+        if (IS_DEBUG_MODE) {
+            return lockRequestTracker.getRequestHistoryForAllJobs();
+        }
+        return null;
+    }
+
+    private void revertTryLockDatasetGranuleOperation(DatasetId datasetId, int entityHashValue, byte lockMode,
+            int entityInfo, TransactionContext txnContext) {
+        JobId jobId = txnContext.getJobId();
+        DatasetLockInfo dLockInfo;
+        JobInfo jobInfo;
+        int lockCount;
+        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+
+        dLockInfo = datasetResourceHT.get(datasetId);
+        jobInfo = jobHT.get(jobId);
+
+        //see tryLockDatasetGranule() function to know the revert operation
+        switch (tryLockDatasetGranuleRevertOperation) {
+
+            case 1://[revertOperation1]: reverting 'adding a holder'
+
+                if (entityHashValue == -1) {
+                    dLockInfo.decreaseLockCount(datasetLockMode);
+                    dLockInfo.removeHolder(entityInfo, jobInfo); //--> this call removes entityInfo from JobInfo's holding-resource-list as well.
+                } else {
+                    dLockInfo.decreaseLockCount(datasetLockMode);
+                    jobInfo.removeHoldingResource(entityInfo);
+                }
+                entityInfoManager.decreaseDatasetLockCount(entityInfo);
+                if (jobInfo.getLastHoldingResource() == -1 && jobInfo.getFirstWaitingResource() == -1) {
+                    jobHT.remove(jobId);
+                }
+                entityInfoManager.deallocate(entityInfo);
+                break;
+
+            case 2://[revertOperation2]: reverting 'adding an upgrader'
+                lockCount = entityInfoManager.getDatasetLockCount(entityInfo);
+                if (entityHashValue == -1) { //dataset-granule lock
+                    dLockInfo.decreaseLockCount(LockMode.X, lockCount);
+                    dLockInfo.increaseLockCount(LockMode.S, lockCount);
+                } else {
+                    dLockInfo.decreaseLockCount(LockMode.IX, lockCount);
+                    dLockInfo.increaseLockCount(LockMode.IS, lockCount);
+                }
+                entityInfoManager.setDatasetLockMode(entityInfo, LockMode.S);
+                break;
+
+            case 3://[revertOperation3]: reverting 'adding a duplicated call'
+                entityInfoManager.decreaseDatasetLockCount(entityInfo);
+                datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo);
+                if (entityHashValue == -1) { //dataset-granule
+                    dLockInfo.decreaseLockCount(datasetLockMode);
+                } else { //entity-granule
+                    datasetLockMode = datasetLockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+                    dLockInfo.decreaseLockCount(datasetLockMode);
+                }
+
+                break;
+            default:
+                //do nothing;
+        }
+    }
+
+    private int tryLockDatasetGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
+            TransactionContext txnContext) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int dId = datasetId.getId(); //int-type datasetId
+        int waiterObjId;
+        int entityInfo = -1;
+        DatasetLockInfo dLockInfo;
+        JobInfo jobInfo;
+        boolean isUpgrade = false;
+        int weakerModeLockCount;
+        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+
+        dLockInfo = datasetResourceHT.get(datasetId);
+        jobInfo = jobHT.get(jobId);
+
+        //check duplicated call
+
+        //1. lock request causing duplicated upgrading requests from different threads in a same job
+        waiterObjId = dLockInfo.findUpgraderFromUpgraderList(jId, entityHashValue);
+        if (waiterObjId != -1) {
+            return -2;
+        }
+
+        //2. lock request causing duplicated waiting requests from different threads in a same job
+        waiterObjId = dLockInfo.findWaiterFromWaiterList(jId, entityHashValue);
+        if (waiterObjId != -1) {
+            return -2;
+        }
+
+        //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
+        entityInfo = dLockInfo.findEntityInfoFromHolderList(jId, entityHashValue);
+        if (entityInfo == -1) { //new call from this job -> doesn't mean that eLockInfo doesn't exist since another thread might have create the eLockInfo already.
+
+            //////////////////////////////////////////////////////////////////////////////////////
+            //[part of revertOperation1]
+            entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
+            if (jobInfo == null) {
+                jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
+                jobHT.put(jobId, jobInfo);
+            }
+            //////////////////////////////////////////////////////////////////////////////////////
+
+            //return fail if any upgrader exists or upgrading lock mode is not compatible
+            if (dLockInfo.getFirstUpgrader() != -1 || dLockInfo.getFirstWaiter() != -1
+                    || !dLockInfo.isCompatible(datasetLockMode)) {
+
+                if (ALLOW_DATASET_GRANULE_X_LOCK_WITH_OTHER_CONCURRENT_LOCK_REQUESTS) {
+                    //The following case only may occur when the dataset level X lock is requested 
+                    //with the other lock
+
+                    //[Notice]
+                    //There has been no same caller as (jId, dId, entityHashValue) triplet.
+                    //But there could be the same caller in terms of (jId, dId) pair.
+                    //For example, 
+                    //1) (J1, D1, E1) acquires IS in Dataset D1
+                    //2) (J2, D1, -1) requests X  in Dataset D1, but waits
+                    //3) (J1, D1, E2) requests IS in Dataset D1, but should wait 
+                    //The 3) may cause deadlock if 1) and 3) are under the same thread.
+                    //Even if (J1, D1, E1) and (J1, D1, E2) are two different thread, instead of
+                    //aborting (J1, D1, E1) triggered by the deadlock, we give higher priority to 3) than 2)
+                    //as long as the dataset level lock D1 is being held by the same jobId. 
+                    //The above consideration is covered in the following code.
+                    //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
+                    if (jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
+                        if (dLockInfo.isCompatible(datasetLockMode)) {
+                            //this is duplicated call
+                            entityInfoManager.increaseDatasetLockCount(entityInfo);
+                            if (entityHashValue == -1) {
+                                dLockInfo.increaseLockCount(datasetLockMode);
+                                dLockInfo.addHolder(entityInfo);
+                            } else {
+                                dLockInfo.increaseLockCount(datasetLockMode);
+                                //IS and IX holders are implicitly handled.
+                            }
+                            //add entityInfo to JobInfo's holding-resource list
+                            jobInfo.addHoldingResource(entityInfo);
+
+                            tryLockDatasetGranuleRevertOperation = 1;
+
+                            return entityInfo;
+                        }
+                    }
+                }
+
+                //revert [part of revertOperation1] before return
+                if (jobInfo.getLastHoldingResource() == -1 && jobInfo.getFirstWaitingResource() == -1) {
+                    jobHT.remove(jobId);
+                }
+                entityInfoManager.deallocate(entityInfo);
+
+                return -2;
+            }
+
+            //////////////////////////////////////////////////////////////////////////////////////
+            //revert the following operations if the caller thread has to wait during this call.
+            //[revertOperation1]
+            entityInfoManager.increaseDatasetLockCount(entityInfo);
+            if (entityHashValue == -1) {
+                dLockInfo.increaseLockCount(datasetLockMode);
+                dLockInfo.addHolder(entityInfo);
+            } else {
+                dLockInfo.increaseLockCount(datasetLockMode);
+                //IS and IX holders are implicitly handled.
+            }
+            //add entityInfo to JobInfo's holding-resource list
+            jobInfo.addHoldingResource(entityInfo);
+
+            //set revert operation to be reverted when tryLock() fails
+            tryLockDatasetGranuleRevertOperation = 1;
+            //////////////////////////////////////////////////////////////////////////////////////
+
+        } else {
+            isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
+            if (isUpgrade) { //upgrade call 
+                //return fail if any upgrader exists or upgrading lock mode is not compatible
+                if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
+                    return -2;
+                }
+
+                //update entityInfo's dataset lock count and datasetLockInfo's lock count
+                weakerModeLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
+
+                //////////////////////////////////////////////////////////////////////////////////////
+                //revert the following operations if the caller thread has to wait during this call.
+                //[revertOperation2]
+                entityInfoManager.setDatasetLockMode(entityInfo, lockMode);
+
+                if (entityHashValue == -1) { //dataset-granule lock
+                    dLockInfo.increaseLockCount(LockMode.X, weakerModeLockCount);//new lock mode
+                    dLockInfo.decreaseLockCount(LockMode.S, weakerModeLockCount);//current lock mode
+                } else {
+                    dLockInfo.increaseLockCount(LockMode.IX, weakerModeLockCount);
+                    dLockInfo.decreaseLockCount(LockMode.IS, weakerModeLockCount);
+                }
+                tryLockDatasetGranuleRevertOperation = 2;
+                //////////////////////////////////////////////////////////////////////////////////////
+
+            } else { //duplicated call
+
+                //////////////////////////////////////////////////////////////////////////////////////
+                //revert the following operations if the caller thread has to wait during this call.
+                //[revertOperation3]
+                entityInfoManager.increaseDatasetLockCount(entityInfo);
+                datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo);
+
+                if (entityHashValue == -1) { //dataset-granule
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                } else { //entity-granule
+                    datasetLockMode = datasetLockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+                    dLockInfo.increaseLockCount(datasetLockMode);
+                }
+
+                tryLockDatasetGranuleRevertOperation = 3;
+                //////////////////////////////////////////////////////////////////////////////////////
+
+            }
+        }
+
+        return entityInfo;
+    }
+
+    private boolean tryLockEntityGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
+            int entityInfoFromDLockInfo, TransactionContext txnContext) throws ACIDException {
+        JobId jobId = txnContext.getJobId();
+        int jId = jobId.getId(); //int-type jobId
+        int waiterObjId;
+        int eLockInfo = -1;
+        int entityInfo;
+        DatasetLockInfo dLockInfo;
+        boolean isUpgrade = false;
+        int weakerModeLockCount;
+
+        dLockInfo = datasetResourceHT.get(datasetId);
+        eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
+
+        if (eLockInfo != -1) {
+            //check duplicated call
+
+            //1. lock request causing duplicated upgrading requests from different threads in a same job
+            waiterObjId = entityLockInfoManager.findUpgraderFromUpgraderList(eLockInfo, jId, entityHashValue);
+            if (waiterObjId != -1) {
+                return false;
+            }
+
+            //2. lock request causing duplicated waiting requests from different threads in a same job
+            waiterObjId = entityLockInfoManager.findWaiterFromWaiterList(eLockInfo, jId, entityHashValue);
+            if (waiterObjId != -1) {
+                return false;
+            }
+
+            //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
+            entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jId, entityHashValue);
+            if (entityInfo != -1) {//duplicated call or upgrader
+
+                isUpgrade = isLockUpgrade(entityInfoManager.getEntityLockMode(entityInfo), lockMode);
+                if (isUpgrade) {//upgrade call
+                    //wait if any upgrader exists or upgrading lock mode is not compatible
+                    if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
+                            || !entityLockInfoManager.isUpgradeCompatible(eLockInfo, lockMode, entityInfo)) {
+                        return false;
+                    }
+
+                    weakerModeLockCount = entityInfoManager.getEntityLockCount(entityInfo);
+                    entityInfoManager.setEntityLockMode(entityInfo, lockMode);
+
+                    entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) weakerModeLockCount);//new lock mode
+                    entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode
+
+                } else {//duplicated call
+                    entityInfoManager.increaseEntityLockCount(entityInfo);
+                    entityLockInfoManager.increaseLockCount(eLockInfo, entityInfoManager.getEntityLockMode(entityInfo));
+                }
+            } else {//new call from this job, but still eLockInfo exists since other threads hold it or wait on it
+                entityInfo = entityInfoFromDLockInfo;
+                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
+                        || entityLockInfoManager.getFirstWaiter(eLockInfo) != -1
+                        || !entityLockInfoManager.isCompatible(eLockInfo, lockMode)) {
+                    return false;
+                }
+
+                entityInfoManager.increaseEntityLockCount(entityInfo);
+                entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
+                entityLockInfoManager.addHolder(eLockInfo, entityInfo);
+            }
+        } else {//eLockInfo doesn't exist, so this lock request is the first request and can be granted without waiting.
+            eLockInfo = entityLockInfoManager.allocate();
+            dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
+            entityInfoManager.increaseEntityLockCount(entityInfoFromDLockInfo);
+            entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
+            entityLockInfoManager.addHolder(eLockInfo, entityInfoFromDLockInfo);
+        }
+
+        return true;
+    }
+
+    private void latchLockTable() {
+        lockTableLatch.writeLock().lock();
+    }
+
+    private void unlatchLockTable() {
+        lockTableLatch.writeLock().unlock();
+    }
+
+    private void latchWaitNotify() {
+        waiterLatch.writeLock().lock();
+    }
+
+    private void unlatchWaitNotify() {
+        waiterLatch.writeLock().unlock();
+    }
+
+    private int handleLockWaiter(DatasetLockInfo dLockInfo, int eLockInfo, int entityInfo, boolean isUpgrade,
+            boolean isDatasetLockInfo, TransactionContext txnContext, JobInfo jobInfo, int duplicatedWaiterObjId)
+            throws ACIDException {
+        int waiterId = -1;
+        LockWaiter waiter;
+        int waiterCount = 0;
+        boolean isInterruptedExceptionOccurred = false;
+
+        if (duplicatedWaiterObjId != -1
+                || isDeadlockFree(dLockInfo, eLockInfo, entityInfo, isDatasetLockInfo, isUpgrade)) {//deadlock free -> wait
+            if (duplicatedWaiterObjId == -1) {
+                waiterId = lockWaiterManager.allocate(); //initial value of waiterObj: wait = true, victim = false
+                waiter = lockWaiterManager.getLockWaiter(waiterId);
+                waiter.setEntityInfoSlot(entityInfo);
+                jobInfo.addWaitingResource(waiterId);
+                waiter.setBeginWaitTime(System.currentTimeMillis());
+            } else {
+                waiterId = duplicatedWaiterObjId;
+                waiter = lockWaiterManager.getLockWaiter(waiterId);
+            }
+
+            if (duplicatedWaiterObjId == -1) {
+                //add actor properly
+                if (isDatasetLockInfo) {
+                    waiter.setWaitingOnEntityLock(false);
+                    if (isUpgrade) {
+                        dLockInfo.addUpgrader(waiterId);
+                        waiter.setWaiter(false);
+                    } else {
+                        dLockInfo.addWaiter(waiterId);
+                        waiter.setWaiter(true);
+                    }
+                } else {
+                    waiter.setWaitingOnEntityLock(true);
+                    if (isUpgrade) {
+                        waiter.setWaiter(false);
+                        entityLockInfoManager.addUpgrader(eLockInfo, waiterId);
+                    } else {
+                        waiter.setWaiter(true);
+                        entityLockInfoManager.addWaiter(eLockInfo, waiterId);
+                    }
+                }
+            }
+            waiter.increaseWaiterCount();
+            waiter.setFirstGetUp(true);
+
+            latchWaitNotify();
+            unlatchLockTable();
+            try {
+                synchronized (waiter) {
+                    unlatchWaitNotify();
+                    while (waiter.needWait()) {
+                        try {
+                            if (IS_DEBUG_MODE) {
+                                System.out.println("" + Thread.currentThread().getName() + "\twaits("
+                                        + waiter.getWaiterCount() + "): WID(" + waiterId + "),EID("
+                                        + waiter.getEntityInfoSlot() + ")");
+                            }
+                            waiter.wait();
+                        } catch (InterruptedException e) {
+                            //TODO figure-out what is the appropriate way to handle this exception
+                            e.printStackTrace();
+                            isInterruptedExceptionOccurred = true;
+                            waiter.setWait(false);
+                        }
+                    }
+                }
+
+                if (isInterruptedExceptionOccurred) {
+                    throw new ACIDException("InterruptedException is caught");
+                }
+            } catch (Exception e) {
+                throw new LockMgrLatchHandlerException(e);
+            }
+
+            //waiter woke up -> remove/deallocate waiter object and abort if timeout
+            latchLockTable();
+
+            if (txnContext.getStatus() == TransactionContext.TIMED_OUT_STATUS || waiter.isVictim()) {
+                requestAbort(txnContext);
+            }
+
+            if (waiter.isFirstGetUp()) {
+                waiter.setFirstGetUp(false);
+                waiterCount = waiter.getWaiterCount();
+            } else {
+                waiterCount = 0;
+            }
+
+            waiter.decreaseWaiterCount();
+            if (IS_DEBUG_MODE) {
+                System.out.println("" + Thread.currentThread().getName() + "\tgot-up!(" + waiter.getWaiterCount()
+                        + "): WID(" + waiterId + "),EID(" + waiter.getEntityInfoSlot() + ")");
+            }
+            if (waiter.getWaiterCount() == 0) {
+                //remove actor properly
+                if (isDatasetLockInfo) {
+                    if (isUpgrade) {
+                        dLockInfo.removeUpgrader(waiterId);
+                    } else {
+                        dLockInfo.removeWaiter(waiterId);
+                    }
+                } else {
+                    if (isUpgrade) {
+                        entityLockInfoManager.removeUpgrader(eLockInfo, waiterId);
+                    } else {
+                        entityLockInfoManager.removeWaiter(eLockInfo, waiterId);
+                    }
+                }
+
+                //if (!isUpgrade && isDatasetLockInfo) {
+                jobInfo.removeWaitingResource(waiterId);
+                //}
+                lockWaiterManager.deallocate(waiterId);
+            }
+
+        } else { //deadlock -> abort
+            //[Notice]
+            //Before requesting abort, the entityInfo for waiting datasetLock request is deallocated.
+            if (!isUpgrade && isDatasetLockInfo) {
+                //deallocate the entityInfo
+                entityInfoManager.deallocate(entityInfo);
+            }
+            requestAbort(txnContext);
+        }
+
+        return waiterCount;
+    }
+
+    private boolean isDeadlockFree(DatasetLockInfo dLockInfo, int eLockInfo, int entityInfo, boolean isDatasetLockInfo,
+            boolean isUpgrade) {
+        return deadlockDetector.isSafeToAdd(dLockInfo, eLockInfo, entityInfo, isDatasetLockInfo, isUpgrade);
+    }
+
+    private void requestAbort(TransactionContext txnContext) throws ACIDException {
+        txnContext.setStatus(TransactionContext.TIMED_OUT_STATUS);
+        txnContext.setStartWaitTime(TransactionContext.INVALID_TIME);
+        throw new ACIDException("Transaction " + txnContext.getJobId()
+                + " should abort (requested by the Lock Manager)");
+    }
+
+    /**
+     * For now, upgrading lock granule from entity-granule to dataset-granule is not supported!!
+     * 
+     * @param fromLockMode
+     * @param toLockMode
+     * @return
+     */
+    private boolean isLockUpgrade(byte fromLockMode, byte toLockMode) {
+        return fromLockMode == LockMode.S && toLockMode == LockMode.X;
+    }
+
+    /**
+     * wake up upgraders first, then waiters.
+     * Criteria to wake up upgraders: if the upgrading lock mode is compatible, then wake up the upgrader.
+     */
+    private void wakeUpDatasetLockWaiters(DatasetLockInfo dLockInfo) {
+        int waiterObjId = dLockInfo.getFirstUpgrader();
+        int entityInfo;
+        LockWaiter waiterObj;
+        byte datasetLockMode;
+        byte lockMode;
+        boolean areAllUpgradersAwaken = true;
+
+        consecutiveWakeupContext.reset();
+        while (waiterObjId != -1) {
+            //wake up upgraders
+            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+            entityInfo = waiterObj.getEntityInfoSlot();
+            datasetLockMode = entityInfoManager.getPKHashVal(entityInfo) == -1 ? LockMode.X : LockMode.IX;
+            if (dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)
+                    && consecutiveWakeupContext.isCompatible(datasetLockMode)) {
+                consecutiveWakeupContext.setLockMode(datasetLockMode);
+                //compatible upgrader is waken up
+                latchWaitNotify();
+                synchronized (waiterObj) {
+                    unlatchWaitNotify();
+                    waiterObj.setWait(false);
+                    if (IS_DEBUG_MODE) {
+                        System.out.println("" + Thread.currentThread().getName() + "\twake-up(D): WID(" + waiterObjId
+                                + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
+                    }
+                    waiterObj.notifyAll();
+                }
+                waiterObjId = waiterObj.getNextWaiterObjId();
+            } else {
+                areAllUpgradersAwaken = false;
+                break;
+            }
+        }
+
+        if (areAllUpgradersAwaken) {
+            //wake up waiters
+            waiterObjId = dLockInfo.getFirstWaiter();
+            while (waiterObjId != -1) {
+                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+                entityInfo = waiterObj.getEntityInfoSlot();
+                lockMode = entityInfoManager.getDatasetLockMode(entityInfo);
+                datasetLockMode = entityInfoManager.getPKHashVal(entityInfo) == -1 ? lockMode
+                        : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
+                if (dLockInfo.isCompatible(datasetLockMode) && consecutiveWakeupContext.isCompatible(datasetLockMode)) {
+                    consecutiveWakeupContext.setLockMode(datasetLockMode);
+                    //compatible waiter is waken up
+                    latchWaitNotify();
+                    synchronized (waiterObj) {
+                        unlatchWaitNotify();
+                        waiterObj.setWait(false);
+                        if (IS_DEBUG_MODE) {
+                            System.out.println("" + Thread.currentThread().getName() + "\twake-up(D): WID("
+                                    + waiterObjId + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
+                        }
+                        waiterObj.notifyAll();
+                    }
+                    waiterObjId = waiterObj.getNextWaiterObjId();
+                } else {
+                    break;
+                }
+            }
+        }
+    }
+
+    private void wakeUpEntityLockWaiters(int eLockInfo) {
+        boolean areAllUpgradersAwaken = true;
+        int waiterObjId = entityLockInfoManager.getUpgrader(eLockInfo);
+        int entityInfo;
+        LockWaiter waiterObj;
+        byte entityLockMode;
+
+        consecutiveWakeupContext.reset();
+        while (waiterObjId != -1) {
+            //wake up upgraders
+            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+            entityInfo = waiterObj.getEntityInfoSlot();
+            if (entityLockInfoManager.isUpgradeCompatible(eLockInfo, LockMode.X, entityInfo)
+                    && consecutiveWakeupContext.isCompatible(LockMode.X)) {
+                consecutiveWakeupContext.setLockMode(LockMode.X);
+                latchWaitNotify();
+                synchronized (waiterObj) {
+                    unlatchWaitNotify();
+                    waiterObj.setWait(false);
+                    if (IS_DEBUG_MODE) {
+                        System.out.println("" + Thread.currentThread().getName() + "\twake-up(E): WID(" + waiterObjId
+                                + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
+                    }
+                    waiterObj.notifyAll();
+                }
+                waiterObjId = waiterObj.getNextWaiterObjId();
+            } else {
+                areAllUpgradersAwaken = false;
+                break;
+            }
+        }
+
+        if (areAllUpgradersAwaken) {
+            //wake up waiters
+            waiterObjId = entityLockInfoManager.getFirstWaiter(eLockInfo);
+            while (waiterObjId != -1) {
+                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+                entityInfo = waiterObj.getEntityInfoSlot();
+                entityLockMode = entityInfoManager.getEntityLockMode(entityInfo);
+                if (entityLockInfoManager.isCompatible(eLockInfo, entityLockMode)
+                        && consecutiveWakeupContext.isCompatible(entityLockMode)) {
+                    consecutiveWakeupContext.setLockMode(entityLockMode);
+                    //compatible waiter is waken up
+                    latchWaitNotify();
+                    synchronized (waiterObj) {
+                        unlatchWaitNotify();
+                        waiterObj.setWait(false);
+                        if (IS_DEBUG_MODE) {
+                            System.out.println("" + Thread.currentThread().getName() + "\twake-up(E): WID("
+                                    + waiterObjId + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
+                        }
+                        waiterObj.notifyAll();
+                    }
+                } else {
+                    break;
+                }
+                waiterObjId = waiterObj.getNextWaiterObjId();
+            }
+        }
+    }
+
+    @Override
+    public String prettyPrint() throws ACIDException {
+        StringBuilder s = new StringBuilder("\n########### LockManager Status #############\n");
+        return s + "\n";
+    }
+
+    public void sweepForTimeout() throws ACIDException {
+        JobInfo jobInfo;
+        int waiterObjId;
+        LockWaiter waiterObj;
+
+        latchLockTable();
+        try {
+
+            Iterator<Entry<JobId, JobInfo>> iter = jobHT.entrySet().iterator();
+            while (iter.hasNext()) {
+                Map.Entry<JobId, JobInfo> pair = (Map.Entry<JobId, JobInfo>) iter.next();
+                jobInfo = pair.getValue();
+                waiterObjId = jobInfo.getFirstWaitingResource();
+                while (waiterObjId != -1) {
+                    waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
+                    toutDetector.checkAndSetVictim(waiterObj);
+                    waiterObjId = waiterObj.getNextWaiterObjId();
+                }
+            }
+        } finally {
+            unlatchLockTable();
+        }
+    }
+}
+
+class ConsecutiveWakeupContext {
+    private boolean IS;
+    private boolean IX;
+    private boolean S;
+    private boolean X;
+
+    public void reset() {
+        IS = false;
+        IX = false;
+        S = false;
+        X = false;
+    }
+
+    public boolean isCompatible(byte lockMode) {
+        switch (lockMode) {
+            case LockMode.IX:
+                return !S && !X;
+
+            case LockMode.IS:
+                return !X;
+
+            case LockMode.X:
+                return !IS && !IX && !S && !X;
+
+            case LockMode.S:
+                return !IX && !X;
+
+            default:
+                throw new IllegalStateException("Invalid upgrade lock mode");
+        }
+    }
+
+    public void setLockMode(byte lockMode) {
+        switch (lockMode) {
+            case LockMode.IX:
+                IX = true;
+                return;
+
+            case LockMode.IS:
+                IS = true;
+                return;
+
+            case LockMode.X:
+                X = true;
+                return;
+
+            case LockMode.S:
+                S = true;
+                return;
+
+            default:
+                throw new IllegalStateException("Invalid lock mode");
+        }
+
+    }
+
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerDeterministicUnitTest.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerRandomUnitTest.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerRandomUnitTest.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerRandomUnitTest.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManagerRandomUnitTest.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockMgrLatchHandlerException.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockMgrLatchHandlerException.java
new file mode 100644
index 0000000..05a582c
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockMgrLatchHandlerException.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2012-2014 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.service.locking;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+
+public class LockMgrLatchHandlerException extends ACIDException {
+
+    private static final long serialVersionUID = 1203182080428864199L;
+    private final Exception internalException;
+
+    public LockMgrLatchHandlerException(Exception e) {
+        super(e);
+        this.internalException = e;
+    }
+
+    public Exception getInternalException() {
+        return internalException;
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestFile b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestFile
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestFile
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestFile
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestTracker.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestTracker.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestTracker.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockRequestTracker.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiter.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiter.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiter.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiter.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiterManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiterManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiterManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockWaiterManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/PrimitiveIntHashMap.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/TimeOutDetector.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/TimeOutDetector.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/TimeOutDetector.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/TimeOutDetector.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/Buffer.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/Buffer.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/Buffer.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/Buffer.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/DataUtil.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/DataUtil.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/DataUtil.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/DataUtil.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileBasedBuffer.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileBasedBuffer.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileBasedBuffer.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileBasedBuffer.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileUtil.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileUtil.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileUtil.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/FileUtil.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/GenericFilter.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/GenericFilter.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/GenericFilter.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/GenericFilter.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IBuffer.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IBuffer.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IBuffer.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IBuffer.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IFileBasedBuffer.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IFileBasedBuffer.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IFileBasedBuffer.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IFileBasedBuffer.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogCursor.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogCursor.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogCursor.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogCursor.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogFilter.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogFilter.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogFilter.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogFilter.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogRecordHelper.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogRecordHelper.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogRecordHelper.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogRecordHelper.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogger.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogger.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogger.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/ILogger.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLogger.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLogger.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLogger.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLogger.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLoggerRepository.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLoggerRepository.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLoggerRepository.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexLoggerRepository.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexResourceManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexResourceManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexResourceManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/IndexResourceManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogActionType.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogActionType.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogActionType.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogActionType.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogCursor.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogCursor.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogCursor.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogCursor.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
new file mode 100644
index 0000000..9b8f09c
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
@@ -0,0 +1,967 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.service.logging;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.RandomAccessFile;
+import java.nio.ByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.concurrent.atomic.AtomicLong;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.service.logging.IndexLogger.ReusableLogContentObject;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogManager.PageOwnershipStatus;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogManager.PageState;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+
+public class LogManager implements ILogManager {
+
+    public static final boolean IS_DEBUG_MODE = false;//true
+    private static final Logger LOGGER = Logger.getLogger(LogManager.class.getName());
+    private final TransactionSubsystem provider;
+    private LogManagerProperties logManagerProperties;
+    private LogPageFlushThread logPageFlusher;
+
+    /*
+     * the array of log pages. The number of log pages is configurable. Pages
+     * taken together form an in-memory log buffer.
+     */
+    private IFileBasedBuffer[] logPages;
+
+    private ILogRecordHelper logRecordHelper;
+
+    /*
+     * Number of log pages that constitute the in-memory log buffer.
+     */
+    private int numLogPages;
+
+    /*
+     * Initially all pages have an owner count of 1 that is the LogManager. When
+     * a transaction requests to write in a log page, the owner count is
+     * incremented. The log manager reserves space in the log page and puts in
+     * the log header but leaves the space for the content and the checksum
+     * (covering the whole log record). When the content has been put, the log
+     * manager computes the checksum and puts it after the content. At this
+     * point, the ownership count is decremented as the transaction is done with
+     * using the page. When a page is requested to be flushed, logPageFlusher
+     * set the count to 0(LOG_FLUSHER: meaning that the page is being flushed)
+     * only if the count is 1(LOG_WRITER: meaning that there is no other
+     * transactions who own the page to write logs.) After flushing the page,
+     * logPageFlusher set this count to 1.
+     */
+    private AtomicInteger[] logPageOwnerCount;
+
+    static class PageOwnershipStatus {
+        public static final int LOG_WRITER = 1;
+        public static final int LOG_FLUSHER = 0;
+    }
+
+    /*
+     * LogPageStatus: A page is either ACTIVE or INACTIVE. The status for each
+     * page is maintained in logPageStatus. A page is ACTIVE when the LogManager
+     * can allocate space in the page for writing a log record. Initially all
+     * pages are ACTIVE. As transactions fill up space by writing log records, a
+     * page may not have sufficient space left for serving a request by a
+     * transaction. When this happens, the page is flushed to disk by calling
+     * logPageFlusher.requestFlush(). In the requestFlush(), after
+     * groupCommitWaitTime, the page status is set to INACTIVE. Then, there is
+     * no more writer on the page(meaning the corresponding logPageOwnerCount is
+     * 1), the page is flushed by the logPageFlusher and the status is reset to
+     * ACTIVE by the logPageFlusher.
+     */
+    private AtomicInteger[] logPageStatus;
+
+    static class PageState {
+        public static final int INACTIVE = 0;
+        public static final int ACTIVE = 1;
+    }
+
+    private AtomicLong lastFlushedLSN = new AtomicLong(-1);
+
+    /*
+     * When the transaction eco-system comes to life, the log manager positions
+     * itself to the end of the last written log. the startingLsn represent the
+     * lsn value of the next log record to be written after a system (re)start.
+     * The value is zero when the system is starting for the first time.
+     */
+    private long startingLSN = 0;
+
+    /*
+     * lsn represents the monotonically increasing long value that can be broken
+     * down into a file id and an offset within a log file.
+     */
+    private AtomicLong lsn = new AtomicLong(0);
+
+    private List<HashMap<TransactionContext, Integer>> activeTxnCountMaps;
+
+    public void addFlushRequest(int pageIndex, long lsn, boolean isSynchronous) {
+        logPageFlusher.requestFlush(pageIndex, lsn, isSynchronous);
+    }
+
+    public AtomicLong getLastFlushedLsn() {
+        return lastFlushedLSN;
+    }
+
+    public AtomicInteger getLogPageStatus(int pageIndex) {
+        return logPageStatus[pageIndex];
+    }
+
+    public AtomicLong getCurrentLsn() {
+        return lsn;
+    }
+
+    public long incrementLastFlushedLsn(long delta) {
+        return lastFlushedLSN.addAndGet(delta);
+    }
+
+    public LogManager(TransactionSubsystem provider) throws ACIDException {
+        this.provider = provider;
+        initLogManagerProperties(this.provider.getId());
+        initLogManager();
+    }
+
+    public LogManager(TransactionSubsystem provider, String nodeId) throws ACIDException {
+        this.provider = provider;
+        initLogManagerProperties(nodeId);
+        initLogManager();
+    }
+
+    /*
+     * initialize the log manager properties either from the configuration file
+     * on disk or with default values
+     */
+    private void initLogManagerProperties(String nodeId) throws ACIDException {
+        LogManagerProperties logProperties = null;
+        InputStream is = null;
+        try {
+            is = this.getClass().getClassLoader()
+                    .getResourceAsStream(TransactionManagementConstants.LogManagerConstants.LOG_CONF_FILE);
+
+            Properties p = new Properties();
+
+            if (is != null) {
+                p.load(is);
+            }
+            logProperties = new LogManagerProperties(p, nodeId);
+
+        } catch (IOException ioe) {
+            if (is != null) {
+                try {
+                    is.close();
+                } catch (IOException e) {
+                    throw new ACIDException("unable to close input stream ", e);
+                }
+            }
+        }
+        logManagerProperties = logProperties;
+    }
+
+    private void initLogManager() throws ACIDException {
+        logRecordHelper = new LogRecordHelper(this);
+        numLogPages = logManagerProperties.getNumLogPages();
+        logPageOwnerCount = new AtomicInteger[numLogPages];
+        logPageStatus = new AtomicInteger[numLogPages];
+
+        activeTxnCountMaps = new ArrayList<HashMap<TransactionContext, Integer>>(numLogPages);
+        for (int i = 0; i < numLogPages; i++) {
+            activeTxnCountMaps.add(new HashMap<TransactionContext, Integer>());
+        }
+
+        logPages = new FileBasedBuffer[numLogPages];
+
+        /*
+         * place the log anchor at the end of the last log record written.
+         */
+        PhysicalLogLocator nextPhysicalLsn = initLSN();
+
+        /*
+         * initialize meta data for each log page.
+         */
+        for (int i = 0; i < numLogPages; i++) {
+            logPageOwnerCount[i] = new AtomicInteger(PageOwnershipStatus.LOG_WRITER);
+            logPageStatus[i] = new AtomicInteger(PageState.ACTIVE);
+        }
+
+        /*
+         * initialize the log pages.
+         */
+        initializeLogPages(nextPhysicalLsn);
+
+        /*
+         * Instantiate and begin the LogFlusher thread. The Log Flusher thread
+         * is responsible for putting log pages to disk. It is configured as a
+         * daemon thread so that it does not stop the JVM from exiting when all
+         * other threads are done with their work.
+         */
+        logPageFlusher = new LogPageFlushThread(this);
+        logPageFlusher.setDaemon(true);
+        logPageFlusher.start();
+    }
+
+    public int getLogPageIndex(long lsnValue) {
+        return (int) (((lsnValue - startingLSN) / logManagerProperties.getLogPageSize()) % numLogPages);
+    }
+
+    /*
+     * given a lsn, get the file id where the corresponding log record is
+     * located.
+     */
+    public int getLogFileId(long lsnValue) {
+        return (int) ((lsnValue) / logManagerProperties.getLogPartitionSize());
+    }
+
+    /*
+     * given a lsn, get the offset within a log page where the corresponding log
+     * record is (to be) placed.
+     */
+    public int getLogPageOffset(long lsnValue) {
+        return (int) ((lsnValue - startingLSN) % logManagerProperties.getLogPageSize());
+    }
+
+    /*
+     * a transaction thread under certain scenarios is required to wait until
+     * the page where it has to write a log record becomes available for writing
+     * a log record.
+     */
+    private void waitUntillPageIsAvailableForWritingLog(int pageIndex) throws ACIDException {
+        if (logPageStatus[pageIndex].get() == PageState.ACTIVE
+                && logPageOwnerCount[pageIndex].get() >= PageOwnershipStatus.LOG_WRITER) {
+            return;
+        }
+        try {
+            synchronized (logPages[pageIndex]) {
+                while (!(logPageStatus[pageIndex].get() == PageState.ACTIVE && logPageOwnerCount[pageIndex].get() >= PageOwnershipStatus.LOG_WRITER)) {
+                    logPages[pageIndex].wait();
+                }
+            }
+        } catch (InterruptedException e) {
+            throw new ACIDException(" thread interrupted while waiting for page " + pageIndex + " to be available ", e);
+        }
+    }
+
+    /*
+     * The method that reserves the space for a transaction to write log record
+     * in the log buffer. Note that the method is not synchronized for
+     * performance reasons as we do not want transactions to be blocked by each
+     * other when writing log records.
+     * 
+     * @param entrySize: the requested space.
+     * 
+     * @param logType: the type of log record.
+     */
+    private long getLsn(int entrySize, byte logType) throws ACIDException {
+        long pageSize = logManagerProperties.getLogPageSize();
+
+        while (true) {
+            boolean forwardPage = false;
+            long old = lsn.get();
+
+            // get the log page corresponding to the current lsn value
+            int pageIndex = getLogPageIndex(old);
+            long retVal = old;
+
+            // the lsn value for the next request if the current request is
+            // served.
+            long next = old + entrySize;
+            int prevPage = -1;
+
+            // check if the log record will cross page boundaries, a case that
+            // is not allowed.
+            if ((next - 1) / pageSize != old / pageSize || (next % pageSize == 0)) {
+
+                if ((old != 0 && old % pageSize == 0)) {
+                    // On second thought, this shall never be the case as it
+                    // means that the lsn is
+                    // currently at the beginning of a page and we still need to
+                    // forward the page which
+                    // means that the entrySize exceeds a log page size. If this
+                    // is the case, an
+                    // exception is thrown before calling this API. would remove
+                    // this case.
+                    retVal = old;
+
+                } else {
+                    // set the lsn to point to the beginning of the next page.
+                    retVal = ((old / pageSize) + 1) * pageSize;
+                }
+
+                next = retVal;
+
+                // as the log record shall cross log page boundary, we must
+                // re-assign the lsn so
+                // that the log record begins on a different location.
+                forwardPage = true;
+
+                prevPage = pageIndex;
+                pageIndex = getNextPageInSequence(pageIndex);
+            }
+
+            /*
+             * we do not want to keep allocating LSNs if the corresponding page
+             * is unavailable. Consider a scenario when the log flusher thread
+             * is incredibly slow in flushing pages. Transaction threads will
+             * acquire an lsn each for writing their next log record. When a
+             * page has been made available, mulltiple transaction threads that
+             * were waiting can continue to write their log record at the
+             * assigned LSNs. Two transaction threads may get LSNs that are on
+             * the same log page but actually differ by the size of the log
+             * buffer. This would be erroneous. Transaction threads are made to
+             * wait upfront for avoiding this situation.
+             */
+            waitUntillPageIsAvailableForWritingLog(pageIndex);
+
+            if (!lsn.compareAndSet(old, next)) {
+                // Atomic call -> returns true only when the value represented
+                // by lsn is same as
+                // "old". The value is updated to "next".
+                continue;
+            }
+
+            if (forwardPage) {
+                addFlushRequest(prevPage, old, false);
+
+                // The transaction thread that discovers the need to forward a
+                // page is made to re-acquire a lsn.
+                continue;
+
+            } else {
+                // the transaction thread has been given a space in a log page,
+                // but is made to wait until the page is available.
+                // (Is this needed? when does this wait happen?)
+                waitUntillPageIsAvailableForWritingLog(pageIndex);
+
+                // increment the counter as the transaction thread now holds a
+                // space in the log page and hence is an owner.
+                logPageOwnerCount[pageIndex].incrementAndGet();
+
+                // Before the count is incremented, if the flusher flushed the
+                // allocated page,
+                // then retry to get new LSN. Otherwise, the log with allocated
+                // lsn will be lost.
+                if (lastFlushedLSN.get() >= retVal) {
+                    logPageOwnerCount[pageIndex].decrementAndGet();
+                    continue;
+                }
+            }
+
+            return retVal;
+        }
+    }
+
+    @Override
+    public void log(byte logType, TransactionContext txnCtx, int datasetId, int PKHashValue, long resourceId,
+            byte resourceMgrId, int logContentSize, ReusableLogContentObject reusableLogContentObject, ILogger logger,
+            LogicalLogLocator logicalLogLocator) throws ACIDException {
+
+        HashMap<TransactionContext, Integer> map = null;
+        int activeTxnCount;
+
+        // logLocator is a re-usable object that is appropriately set in each
+        // invocation.
+        // If the reference is null, the log manager must throw an exception.
+        if (logicalLogLocator == null) {
+            throw new ACIDException(
+                    " you need to pass in a non-null logLocator, if you dont have it, then pass in a dummy so that the +"
+                            + "log manager can set it approporiately for you");
+        }
+
+        // compute the total log size including the header and the checksum.
+        int totalLogSize = logRecordHelper.getLogRecordSize(logType, logContentSize);
+
+        // check for the total space requirement to be less than a log page.
+        if (totalLogSize > logManagerProperties.getLogPageSize()) {
+            throw new ACIDException(
+                    " Maximum Log Content Size is "
+                            + (logManagerProperties.getLogPageSize() - logRecordHelper.getLogHeaderSize(LogType.UPDATE) - logRecordHelper
+                                    .getLogChecksumSize()));
+        }
+
+        // all constraints checked and we are good to go and acquire a lsn.
+        long previousLSN = -1;
+
+        // the will be set to the location (a long value) where the log record
+        // needs to be placed.
+        long currentLSN;
+
+        // The logs written by a transaction need to be linked to each other for
+        // a successful rollback/recovery. However there could be multiple
+        // threads operating concurrently that are part of a common transaction.
+        // These threads need to synchronize and record the lsn corresponding to
+        // the last log record written by (any thread of) the transaction.
+        synchronized (txnCtx) {
+            previousLSN = txnCtx.getLastLogLocator().getLsn();
+            currentLSN = getLsn(totalLogSize, logType);
+            txnCtx.setLastLSN(currentLSN);
+            if (IS_DEBUG_MODE) {
+                System.out.println("--------------> LSN(" + currentLSN + ") is allocated");
+            }
+            logicalLogLocator.setLsn(currentLSN);
+        }
+
+        /*
+         * At this point, the transaction thread has obtained reserved space for
+         * writing the log record. In doing so, it has acquired (shared)
+         * ownership of the log page. All subsequent actions are under a try
+         * catch block so that if any exception is encountered, a clean can be
+         * performed correctly that is ownership is released.
+         */
+
+        // indicates if the transaction thread has release ownership of the
+        // page.
+        boolean decremented = false;
+
+        int pageIndex = (int) getLogPageIndex(currentLSN);
+
+        // the lsn has been obtained for the log record. need to set the
+        // LogLocator instance accordingly.
+        try {
+            logicalLogLocator.setBuffer(logPages[pageIndex]);
+            int pageOffset = getLogPageOffset(currentLSN);
+            logicalLogLocator.setMemoryOffset(pageOffset);
+
+            // write the log header.
+            logRecordHelper.writeLogHeader(logicalLogLocator, logType, txnCtx, datasetId, PKHashValue, previousLSN,
+                    resourceId, resourceMgrId, logContentSize);
+
+            // increment the offset so that the transaction can fill up the
+            // content in the correct region of the allocated space.
+            logicalLogLocator.increaseMemoryOffset(logRecordHelper.getLogHeaderSize(logType));
+
+            // a COMMIT log record does not have any content and hence
+            // the logger (responsible for putting the log content) is not
+            // invoked.
+            if (logContentSize != 0) {
+                logger.preLog(txnCtx, reusableLogContentObject);
+            }
+
+            if (logContentSize != 0) {
+                // call the logger implementation and ask to fill in the log
+                // record content at the allocated space.
+                logger.log(txnCtx, logicalLogLocator, logContentSize, reusableLogContentObject);
+                logger.postLog(txnCtx, reusableLogContentObject);
+                if (IS_DEBUG_MODE) {
+                    logicalLogLocator.setMemoryOffset(logicalLogLocator.getMemoryOffset()
+                            - logRecordHelper.getLogHeaderSize(logType));
+                    System.out.println(logRecordHelper.getLogRecordForDisplay(logicalLogLocator));
+                    logicalLogLocator.increaseMemoryOffset(logRecordHelper.getLogHeaderSize(logType));
+                }
+            }
+
+            // The log record has been written. For integrity checks, compute
+            // the checksum and put it at the end of the log record.
+            int startPosChecksum = logicalLogLocator.getMemoryOffset() - logRecordHelper.getLogHeaderSize(logType);
+            int length = totalLogSize - logRecordHelper.getLogChecksumSize();
+            long checksum = DataUtil.getChecksum(logPages[pageIndex], startPosChecksum, length);
+            logPages[pageIndex].writeLong(pageOffset + logRecordHelper.getLogHeaderSize(logType) + logContentSize,
+                    checksum);
+
+            if (IS_DEBUG_MODE) {
+                System.out.println("--------------> LSN(" + currentLSN + ") is written");
+            }
+
+            // release the ownership as the log record has been placed in
+            // created space.
+            logPageOwnerCount[pageIndex].decrementAndGet();
+
+            // indicating that the transaction thread has released ownership
+            decremented = true;
+
+            if (logType == LogType.ENTITY_COMMIT) {
+                map = activeTxnCountMaps.get(pageIndex);
+                if (map.containsKey(txnCtx)) {
+                    activeTxnCount = (Integer) map.get(txnCtx);
+                    activeTxnCount++;
+                    map.put(txnCtx, activeTxnCount);
+                } else {
+                    map.put(txnCtx, 1);
+                }
+                addFlushRequest(pageIndex, currentLSN, false);
+            } else if (logType == LogType.COMMIT) {
+                addFlushRequest(pageIndex, currentLSN, true);
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ACIDException(txnCtx, "Thread: " + Thread.currentThread().getName()
+                    + " logger encountered exception", e);
+        } finally {
+            if (!decremented) {
+                logPageOwnerCount[pageIndex].decrementAndGet();
+            }
+        }
+    }
+
+    /*
+     * This method resets the log page and is called by the log flusher thread
+     * after a page has been flushed to disk.
+     */
+    public void resetLogPage(long lsn, long nextWritePosition, int pageIndex) throws IOException {
+
+        String filePath = LogUtil.getLogFilePath(logManagerProperties, getLogFileId(lsn));
+
+        logPages[pageIndex].reset(filePath, LogUtil.getFileOffset(this, nextWritePosition),
+                logManagerProperties.getLogPageSize());
+    }
+
+    @Override
+    public ILogCursor readLog(ILogFilter logFilter) throws ACIDException {
+        LogCursor cursor = new LogCursor(this, logFilter);
+        return cursor;
+    }
+
+    @Override
+    public ILogCursor readLog(PhysicalLogLocator physicalLogLocator, ILogFilter logFilter) throws IOException,
+            ACIDException {
+        LogCursor cursor = new LogCursor(this, physicalLogLocator, logFilter);
+        return cursor;
+    }
+
+    /*
+     * Read a log that is residing on the disk.
+     */
+    private void readDiskLog(long lsnValue, LogicalLogLocator logicalLogLocator) throws ACIDException {
+        String filePath = LogUtil.getLogFilePath(logManagerProperties, LogUtil.getFileId(this, lsnValue));
+        long fileOffset = LogUtil.getFileOffset(this, lsnValue);
+
+        ByteBuffer buffer = ByteBuffer.allocate(logManagerProperties.getLogPageSize());
+        RandomAccessFile raf = null;
+        FileChannel fileChannel = null;
+        try {
+            raf = new RandomAccessFile(filePath, "r");
+            fileChannel = raf.getChannel();
+            fileChannel.position(fileOffset);
+            fileChannel.read(buffer);
+            buffer.position(0);
+
+            byte logType = buffer.get(4);
+            int logHeaderSize = logRecordHelper.getLogHeaderSize(logType);
+            int logBodySize = buffer.getInt(logHeaderSize - 4);
+            int logRecordSize = logHeaderSize + logBodySize + logRecordHelper.getLogChecksumSize();
+            buffer.limit(logRecordSize);
+            MemBasedBuffer memBuffer = new MemBasedBuffer(buffer.slice());
+            if (logicalLogLocator == null) {
+                logicalLogLocator = new LogicalLogLocator(lsnValue, memBuffer, 0, this);
+            } else {
+                logicalLogLocator.setLsn(lsnValue);
+                logicalLogLocator.setBuffer(memBuffer);
+                logicalLogLocator.setMemoryOffset(0);
+            }
+            if (!logRecordHelper.validateLogRecord(logicalLogLocator)) {
+                throw new ACIDException(" invalid log record at lsn " + lsnValue);
+            }
+        } catch (Exception fnfe) {
+            fnfe.printStackTrace();
+            throw new ACIDException(" unable to retrieve log record with lsn " + lsnValue + " from the file system",
+                    fnfe);
+        } finally {
+            try {
+                if (fileChannel != null) {
+                    fileChannel.close();
+                } else if (raf != null) {
+                    raf.close();
+                }
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+                throw new ACIDException(" exception in closing a file: " + filePath, ioe);
+            }
+        }
+    }
+
+    @Override
+    public void readLog(long lsnValue, LogicalLogLocator logicalLogLocator) throws ACIDException {
+        byte[] logRecord = null;
+
+        if (lsnValue >= lsn.get()) {
+            throw new ACIDException(" invalid lsn " + lsnValue);
+        }
+
+        /* check if the log record in the log buffer or has reached the disk. */
+        if (lsnValue > getLastFlushedLsn().get()) {
+            int pageIndex = getLogPageIndex(lsnValue);
+            int pageOffset = getLogPageOffset(lsnValue);
+
+            // TODO
+            // minimize memory allocation overhead. current code allocates the
+            // log page size per reading a log record.
+
+            byte[] pageContent = new byte[logManagerProperties.getLogPageSize()];
+
+            // take a lock on the log page so that the page is not flushed to
+            // disk interim
+            synchronized (logPages[pageIndex]) {
+
+                // need to check again (this thread may have got de-scheduled
+                // and must refresh!)
+                if (lsnValue > getLastFlushedLsn().get()) {
+
+                    // get the log record length
+                    logPages[pageIndex].getBytes(pageContent, 0, pageContent.length);
+                    byte logType = pageContent[pageOffset + 4];
+                    int logHeaderSize = logRecordHelper.getLogHeaderSize(logType);
+                    int logBodySize = DataUtil.byteArrayToInt(pageContent, pageOffset + logHeaderSize - 4);
+                    int logRecordSize = logHeaderSize + logBodySize + logRecordHelper.getLogChecksumSize();
+                    logRecord = new byte[logRecordSize];
+
+                    // copy the log record content
+                    System.arraycopy(pageContent, pageOffset, logRecord, 0, logRecordSize);
+                    MemBasedBuffer memBuffer = new MemBasedBuffer(logRecord);
+                    if (logicalLogLocator == null) {
+                        logicalLogLocator = new LogicalLogLocator(lsnValue, memBuffer, 0, this);
+                    } else {
+                        logicalLogLocator.setLsn(lsnValue);
+                        logicalLogLocator.setBuffer(memBuffer);
+                        logicalLogLocator.setMemoryOffset(0);
+                    }
+                    try {
+                        // validate the log record by comparing checksums
+                        if (!logRecordHelper.validateLogRecord(logicalLogLocator)) {
+                            throw new ACIDException(" invalid log record at lsn " + lsnValue);
+                        }
+                    } catch (Exception e) {
+                        throw new ACIDException("exception encoutered in validating log record at lsn " + lsnValue, e);
+                    }
+                    return;
+                }
+            }
+        }
+
+        // the log record is residing on the disk, read it from there.
+        readDiskLog(lsnValue, logicalLogLocator);
+    }
+
+    public void renewLogFiles() throws ACIDException {
+        List<String> logFileNames = LogUtil.getLogFiles(logManagerProperties);
+        for (String name : logFileNames) {
+            File file = new File(LogUtil.getLogFilePath(logManagerProperties, Long.parseLong(name)));
+            if (!file.delete()) {
+                throw new ACIDException("Failed to delete a file: " + name);
+            }
+        }
+        closeLogPages();
+        initLSN();
+        openLogPages();
+        logPageFlusher.renew();
+    }
+
+    private PhysicalLogLocator initLSN() throws ACIDException {
+        PhysicalLogLocator nextPhysicalLsn = LogUtil.initializeLogAnchor(this);
+        startingLSN = nextPhysicalLsn.getLsn();
+        lastFlushedLSN.set(startingLSN - 1);
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info(" Starting lsn is : " + startingLSN);
+        }
+        lsn.set(startingLSN);
+        return nextPhysicalLsn;
+    }
+
+    private void closeLogPages() throws ACIDException {
+        for (int i = 0; i < numLogPages; i++) {
+            try {
+                logPages[i].close();
+            } catch (IOException e) {
+                throw new ACIDException(e);
+            }
+        }
+    }
+
+    private void openLogPages() throws ACIDException {
+        try {
+            String filePath = LogUtil.getLogFilePath(logManagerProperties, LogUtil.getFileId(this, startingLSN));
+            for (int i = 0; i < numLogPages; i++) {
+                logPages[i].open(filePath,
+                        LogUtil.getFileOffset(this, startingLSN) + i * logManagerProperties.getLogPageSize(),
+                        logManagerProperties.getLogPageSize());
+            }
+        } catch (Exception e) {
+            throw new ACIDException(Thread.currentThread().getName() + " unable to create log buffer", e);
+        }
+    }
+
+    @Override
+    public ILogRecordHelper getLogRecordHelper() {
+        return logRecordHelper;
+    }
+
+    /*
+     * This method shall be called by the Buffer manager when it needs to evict
+     * a page from the cache. TODO: Change the implementation from a looping
+     * logic to event based when log manager support is integrated with the
+     * Buffer Manager.
+     */
+    @Override
+    public synchronized void flushLog(LogicalLogLocator logicalLogLocator) throws ACIDException {
+        if (logicalLogLocator.getLsn() > lsn.get()) {
+            throw new ACIDException(" invalid lsn " + logicalLogLocator.getLsn());
+        }
+        while (lastFlushedLSN.get() < logicalLogLocator.getLsn());
+    }
+
+    /*
+     * Map each log page to cover a physical byte range over a log file. When a
+     * page is flushed, the page contents are put to disk in the corresponding
+     * byte range.
+     */
+    private void initializeLogPages(PhysicalLogLocator physicalLogLocator) throws ACIDException {
+        try {
+            String filePath = LogUtil.getLogFilePath(logManagerProperties,
+                    LogUtil.getFileId(this, physicalLogLocator.getLsn()));
+            for (int i = 0; i < numLogPages; i++) {
+                logPages[i] = FileUtil.getFileBasedBuffer(
+                        filePath,
+                        LogUtil.getFileOffset(this, physicalLogLocator.getLsn()) + i
+                                * logManagerProperties.getLogPageSize(), logManagerProperties.getLogPageSize());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new ACIDException(Thread.currentThread().getName() + " unable to create log buffer", e);
+        }
+    }
+
+    /*
+     * Pages are sequenced starting with 0 going upto numLogPages-1.
+     */
+    public int getNextPageInSequence(int pageNo) {
+        return (pageNo + 1) % numLogPages;
+    }
+
+    public int getPreviousPageInSequence(int pageNo) {
+        return pageNo == 0 ? numLogPages - 1 : pageNo - 1;
+    }
+
+    @Override
+    public LogManagerProperties getLogManagerProperties() {
+        return logManagerProperties;
+    }
+
+    public IFileBasedBuffer getLogPage(int pageIndex) {
+        return logPages[pageIndex];
+    }
+
+    public AtomicInteger getLogPageOwnershipCount(int pageIndex) {
+        return logPageOwnerCount[pageIndex];
+    }
+
+    public IFileBasedBuffer[] getLogPages() {
+        return logPages;
+    }
+
+    @Override
+    public TransactionSubsystem getTransactionSubsystem() {
+        return provider;
+    }
+
+    public void decrementActiveTxnCountOnIndexes(int pageIndex) throws HyracksDataException {
+        TransactionContext ctx = null;
+        int count = 0;
+        int i = 0;
+
+        HashMap<TransactionContext, Integer> map = activeTxnCountMaps.get(pageIndex);
+        Set<Map.Entry<TransactionContext, Integer>> entrySet = map.entrySet();
+        if (entrySet != null) {
+            for (Map.Entry<TransactionContext, Integer> entry : entrySet) {
+                if (entry != null) {
+                    if (entry.getValue() != null) {
+                        count = entry.getValue();
+                    }
+                    if (count > 0) {
+                        ctx = entry.getKey();
+                        for (i = 0; i < count; i++) {
+                            ctx.decreaseActiveTransactionCountOnIndexes();
+                        }
+                    }
+                }
+            }
+        }
+
+        map.clear();
+    }
+}
+
+/*
+ * The thread responsible for putting log pages to disk in an ordered manner.
+ * The Log Flusher updates the bookkeeping data internal to the log manager and
+ * acquires appropriate locks. It also acquires finer level locks on the log
+ * page when it is in process of flushing the content to disk.
+ */
+class LogPageFlushThread extends Thread {
+
+    private LogManager logManager;
+    /*
+     * pendingFlushRequests is a map with key as Integer denoting the page
+     * index. When a (transaction) thread discovers the need to flush a page, it
+     * puts its Thread object into the corresponding value that is a
+     * LinkedBlockingQueue. The LogManager has a LogFlusher thread that scans
+     * this map in order of page index (and circling around). The flusher thread
+     * needs to flush pages in order and waits for a thread to deposit an object
+     * in the blocking queue corresponding to the next page in order. A request
+     * to flush a page is conveyed to the flush thread by simply depositing an
+     * object in to corresponding blocking queue. It is blocking in the sense
+     * that the flusher thread will continue to wait for an object to arrive in
+     * the queue. The object itself is ignored by the fliusher and just acts as
+     * a signal/event that a page needs to be flushed.
+     */
+    private final LinkedBlockingQueue<Object>[] flushRequestQueue;
+    private final Object[] flushRequests;
+    private int pageToFlush;
+    private final long groupCommitWaitPeriod;
+    private boolean isRenewRequest;
+
+    public LogPageFlushThread(LogManager logManager) {
+        this.logManager = logManager;
+        setName("Flusher");
+        int numLogPages = logManager.getLogManagerProperties().getNumLogPages();
+        this.flushRequestQueue = new LinkedBlockingQueue[numLogPages];
+        this.flushRequests = new Object[numLogPages];
+        for (int i = 0; i < numLogPages; i++) {
+            flushRequestQueue[i] = new LinkedBlockingQueue<Object>(1);
+            flushRequests[i] = new Object();
+        }
+        this.pageToFlush = -1;
+        groupCommitWaitPeriod = logManager.getLogManagerProperties().getGroupCommitWaitPeriod();
+        isRenewRequest = false;
+    }
+
+    public void renew() {
+        isRenewRequest = true;
+        pageToFlush = -1;
+        this.interrupt();
+        isRenewRequest = false;
+    }
+
+    public void requestFlush(int pageIndex, long lsn, boolean isSynchronous) {
+        synchronized (logManager.getLogPage(pageIndex)) {
+            // return if flushedLSN >= lsn
+            if (logManager.getLastFlushedLsn().get() >= lsn) {
+                return;
+            }
+
+            // put a new request to the queue only if the request on the page is
+            // not in the queue.
+            flushRequestQueue[pageIndex].offer(flushRequests[pageIndex]);
+
+            // return if the request is asynchronous
+            if (!isSynchronous) {
+                return;
+            }
+
+            // wait until there is flush.
+            boolean isNotified = false;
+            while (!isNotified) {
+                try {
+                    logManager.getLogPage(pageIndex).wait();
+                    isNotified = true;
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
+    @Override
+    public void run() {
+        while (true) {
+            try {
+                pageToFlush = logManager.getNextPageInSequence(pageToFlush);
+
+                // A wait call on the linkedBLockingQueue. The flusher thread is
+                // notified when an object is added to the queue. Please note
+                // that each page has an associated blocking queue.
+                try {
+                    flushRequestQueue[pageToFlush].take();
+                } catch (InterruptedException ie) {
+                    while (isRenewRequest) {
+                        sleep(1);
+                    }
+                    continue;
+                }
+
+                synchronized (logManager.getLogPage(pageToFlush)) {
+
+                    // #. sleep during the groupCommitWaitTime
+                    sleep(groupCommitWaitPeriod);
+
+                    // #. set the logPageStatus to INACTIVE in order to prevent
+                    // other txns from writing on this page.
+                    logManager.getLogPageStatus(pageToFlush).set(PageState.INACTIVE);
+
+                    // #. need to wait until the logPageOwnerCount reaches 1
+                    // (LOG_WRITER)
+                    // meaning every one has finished writing logs on this page.
+                    while (logManager.getLogPageOwnershipCount(pageToFlush).get() != PageOwnershipStatus.LOG_WRITER) {
+                        sleep(0);
+                    }
+
+                    // #. set the logPageOwnerCount to 0 (LOG_FLUSHER)
+                    // meaning it is flushing.
+                    logManager.getLogPageOwnershipCount(pageToFlush).set(PageOwnershipStatus.LOG_FLUSHER);
+
+                    // put the content to disk (the thread still has a lock on
+                    // the log page)
+                    logManager.getLogPage(pageToFlush).flush();
+
+                    // Map the log page to a new region in the log file.
+                    long nextWritePosition = logManager.getLogPages()[pageToFlush].getNextWritePosition()
+                            + logManager.getLogManagerProperties().getLogBufferSize();
+
+                    logManager.resetLogPage(logManager.getLastFlushedLsn().get() + 1
+                            + logManager.getLogManagerProperties().getLogBufferSize(), nextWritePosition, pageToFlush);
+
+                    // increment the last flushed lsn and lastFlushedPage
+                    logManager.incrementLastFlushedLsn(logManager.getLogManagerProperties().getLogPageSize());
+
+                    // decrement activeTxnCountOnIndexes
+                    logManager.decrementActiveTxnCountOnIndexes(pageToFlush);
+
+                    // reset the count to 1
+                    logManager.getLogPageOwnershipCount(pageToFlush).set(PageOwnershipStatus.LOG_WRITER);
+
+                    // mark the page as ACTIVE
+                    logManager.getLogPageStatus(pageToFlush).set(LogManager.PageState.ACTIVE);
+
+                    // #. checks the queue whether there is another flush
+                    // request on the same log buffer
+                    // If there is another request, then simply remove it.
+                    if (flushRequestQueue[pageToFlush].peek() != null) {
+                        flushRequestQueue[pageToFlush].take();
+                    }
+
+                    // notify all waiting (transaction) threads.
+                    logManager.getLogPage(pageToFlush).notifyAll();
+                }
+            } catch (IOException ioe) {
+                ioe.printStackTrace();
+                throw new Error(" exception in flushing log page", ioe);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+                break;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManagerProperties.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManagerProperties.java
new file mode 100644
index 0000000..5040fa9
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManagerProperties.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2009-2012 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.service.logging;
+
+import java.io.Serializable;
+import java.util.Properties;
+
+public class LogManagerProperties implements Serializable {
+
+    private static final long serialVersionUID = 2084227360840799662L;
+
+    public static final int LOG_MAGIC_NUMBER = 123456789;
+    public static final String LOG_DIR_SUFFIX_KEY = ".txnLogDir";
+    public static final String LOG_PAGE_SIZE_KEY = "log_page_size";
+    public static final String LOG_PARTITION_SIZE_KEY = "log_partition_size";
+    public static final String NUM_LOG_PAGES_KEY = "num_log_pages";
+    public static final String LOG_FILE_PREFIX_KEY = "log_file_prefix";
+    public static final String GROUP_COMMIT_WAIT_PERIOD_KEY = "group_commit_wait_period";
+
+    private static final int DEFAULT_LOG_PAGE_SIZE = 128 * 1024; //128KB
+    private static final int DEFAULT_NUM_LOG_PAGES = 8;
+    private static final long DEFAULT_LOG_PARTITION_SIZE = (long) 1024 * 1024 * 1024 * 2; //2GB 
+    private static final long DEFAULT_GROUP_COMMIT_WAIT_PERIOD = 200; // time in millisec.
+    private static final String DEFAULT_LOG_FILE_PREFIX = "asterix_transaction_log";
+    private static final String DEFAULT_LOG_DIRECTORY = "asterix_logs/";
+
+    // follow the naming convention <logFilePrefix>_<number> where number starts from 0
+    private final String logFilePrefix;
+    private final String logDir;
+    public String logDirKey;
+
+    // number of log pages in the log buffer
+    private final int logPageSize;
+    // number of log pages in the log buffer.
+    private final int numLogPages;
+    // time in milliseconds
+    private final long groupCommitWaitPeriod;
+    // logBufferSize = logPageSize * numLogPages;
+    private final int logBufferSize;
+    // maximum size of each log file
+    private final long logPartitionSize;
+
+    public LogManagerProperties(Properties properties, String nodeId) {
+        this.logDirKey = new String(nodeId + LOG_DIR_SUFFIX_KEY);
+        this.logPageSize = Integer.parseInt(properties.getProperty(LOG_PAGE_SIZE_KEY, "" + DEFAULT_LOG_PAGE_SIZE));
+        this.numLogPages = Integer.parseInt(properties.getProperty(NUM_LOG_PAGES_KEY, "" + DEFAULT_NUM_LOG_PAGES));
+        long logPartitionSize = Long.parseLong(properties.getProperty(LOG_PARTITION_SIZE_KEY, ""
+                + DEFAULT_LOG_PARTITION_SIZE));
+        this.logDir = properties.getProperty(logDirKey, DEFAULT_LOG_DIRECTORY + nodeId);
+        this.logFilePrefix = properties.getProperty(LOG_FILE_PREFIX_KEY, DEFAULT_LOG_FILE_PREFIX);
+        this.groupCommitWaitPeriod = Long.parseLong(properties.getProperty(GROUP_COMMIT_WAIT_PERIOD_KEY, ""
+                + DEFAULT_GROUP_COMMIT_WAIT_PERIOD));
+
+        this.logBufferSize = logPageSize * numLogPages;
+        //make sure that the log partition size is the multiple of log buffer size.
+        this.logPartitionSize = (logPartitionSize / logBufferSize) * logBufferSize;
+    }
+
+    public long getLogPartitionSize() {
+        return logPartitionSize;
+    }
+
+    public String getLogFilePrefix() {
+        return logFilePrefix;
+    }
+
+    public String getLogDir() {
+        return logDir;
+    }
+
+    public int getLogPageSize() {
+        return logPageSize;
+    }
+
+    public int getNumLogPages() {
+        return numLogPages;
+    }
+
+    public int getLogBufferSize() {
+        return logBufferSize;
+    }
+
+    public long getGroupCommitWaitPeriod() {
+        return groupCommitWaitPeriod;
+    }
+
+    public String getLogDirKey() {
+        return logDirKey;
+    }
+
+    public String toString() {
+        StringBuilder builder = new StringBuilder();
+        builder.append("log_dir_ : " + logDir + FileUtil.lineSeparator);
+        builder.append("log_file_prefix" + logFilePrefix + FileUtil.lineSeparator);
+        builder.append("log_page_size : " + logPageSize + FileUtil.lineSeparator);
+        builder.append("num_log_pages : " + numLogPages + FileUtil.lineSeparator);
+        builder.append("log_partition_size : " + logPartitionSize + FileUtil.lineSeparator);
+        builder.append("group_commit_wait_period : " + groupCommitWaitPeriod + FileUtil.lineSeparator);
+        return builder.toString();
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecordHelper.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecordHelper.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecordHelper.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogRecordHelper.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogType.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogUtil.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogUtil.java
new file mode 100644
index 0000000..77a99bc
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogUtil.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.service.logging;
+
+import java.io.File;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+
+/**
+ * A utility class providing helper methods for the {@link ILogManager}
+ */
+public class LogUtil {
+
+    private static final Logger LOGGER = Logger.getLogger(LogUtil.class.getName());
+
+    // read the log directory and initialize log anchor to point to the
+    // current log partition file and the offset where the log manager shall
+    // continue to insert log records.
+
+    public static PhysicalLogLocator initializeLogAnchor(ILogManager logManager) throws ACIDException {
+        int fileId = 0;
+        long offset = 0;
+        LogManagerProperties logManagerProperties = logManager.getLogManagerProperties();
+        File logDir = new File(logManagerProperties.getLogDir());
+        try {
+            if (logDir.exists()) {
+                List<String> logFiles = getLogFiles(logManagerProperties);
+                if (logFiles == null || logFiles.size() == 0) {
+                    FileUtil.createFileIfNotExists(getLogFilePath(logManagerProperties, 0));
+                    if (LOGGER.isLoggable(Level.INFO)) {
+                        LOGGER.info("created a log file: " + getLogFilePath(logManagerProperties, 0));
+                    }
+                } else {
+                    File logFile = new File(LogUtil.getLogFilePath(logManagerProperties,
+                            Long.parseLong(logFiles.get(logFiles.size() - 1))));
+                    fileId = logFiles.size() - 1;
+                    offset = logFile.length();
+                }
+            } else {
+                FileUtil.createNewDirectory(logManagerProperties.getLogDir());
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.info("created the log directory: " + logManagerProperties.getLogDir());
+                }
+                FileUtil.createFileIfNotExists(getLogFilePath(logManagerProperties, 0));
+                if (LOGGER.isLoggable(Level.INFO)) {
+                    LOGGER.info("created a log file: " + getLogFilePath(logManagerProperties, 0));
+                }
+            }
+        } catch (IOException ioe) {
+            throw new ACIDException("Unable to initialize log anchor", ioe);
+        }
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info(" file id :" + fileId + " offset " + offset);
+        }
+        return new PhysicalLogLocator(fileId, offset, logManager);
+    }
+
+    public static List<String> getLogFiles(final LogManagerProperties logManagerProperties) {
+        File logDir = new File(logManagerProperties.getLogDir());
+        String[] logFiles = new String[0];
+        List<String> logFileCollection = new ArrayList<String>();
+        if (logDir.exists()) {
+            logFiles = logDir.list(new FilenameFilter() {
+                public boolean accept(File dir, String name) {
+                    if (name.startsWith(logManagerProperties.getLogFilePrefix())) {
+                        return true;
+                    }
+                    return false;
+                }
+            });
+        }
+        for (String logFile : logFiles) {
+            logFileCollection.add(logFile.substring(logManagerProperties.getLogFilePrefix().length() + 1));
+        }
+        Collections.sort(logFileCollection, new Comparator<String>() {
+            @Override
+            public int compare(String arg0, String arg1) {
+                return Integer.parseInt(arg0) - Integer.parseInt(arg1);
+            }
+        });
+        return logFileCollection;
+    }
+
+    public static long getFileId(String logFilePath, LogManagerProperties logManagerProperties) {
+        String logFileName = logFilePath;
+        if (logFilePath.contains(File.separator)) {
+            logFileName = logFilePath.substring(logFilePath.lastIndexOf(File.separator));
+        }
+        return Long.parseLong(logFileName.substring(logFileName.indexOf(logManagerProperties.getLogFilePrefix())));
+    }
+
+    public static String getLogFilePath(LogManagerProperties logManagerProperties, long fileId) {
+        return logManagerProperties.getLogDir() + File.separator + logManagerProperties.getLogFilePrefix() + "_"
+                + fileId;
+    }
+
+    public static LogicalLogLocator getDummyLogicalLogLocator(ILogManager logManager) {
+        LogicalLogLocator logicalLogLocator = new LogicalLogLocator(-1, null, -1, logManager);
+        return logicalLogLocator;
+    }
+
+    /*
+     * given a lsn, get the offset within the log file where the corresponding
+     * log record is (to be) placed.
+     */
+    public static long getFileOffset(ILogManager logManager, long lsn) {
+        return lsn % logManager.getLogManagerProperties().getLogPartitionSize();
+    }
+
+    /*
+     * given a lsn, get the file id that contains the log record.
+     */
+    public static long getFileId(ILogManager logManager, long lsn) {
+        return lsn / logManager.getLogManagerProperties().getLogPartitionSize();
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogicalLogLocator.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogicalLogLocator.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogicalLogLocator.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogicalLogLocator.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/MemBasedBuffer.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/MemBasedBuffer.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/MemBasedBuffer.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/MemBasedBuffer.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/PhysicalLogLocator.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/PhysicalLogLocator.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/PhysicalLogLocator.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/PhysicalLogLocator.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointObject.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointObject.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointObject.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointObject.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointThread.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointThread.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointThread.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/CheckpointThread.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IAsterixAppRuntimeContextProvider.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IAsterixAppRuntimeContextProvider.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IAsterixAppRuntimeContextProvider.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IAsterixAppRuntimeContextProvider.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IRecoveryManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IRecoveryManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IRecoveryManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/IRecoveryManager.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
new file mode 100644
index 0000000..47c5dcb
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
@@ -0,0 +1,830 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.service.recovery;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
+import edu.uci.ics.asterix.transaction.management.opcallbacks.IndexOperationTracker;
+import edu.uci.ics.asterix.transaction.management.resource.ILocalResourceMetadata;
+import edu.uci.ics.asterix.transaction.management.service.logging.IBuffer;
+import edu.uci.ics.asterix.transaction.management.service.logging.ILogCursor;
+import edu.uci.ics.asterix.transaction.management.service.logging.ILogFilter;
+import edu.uci.ics.asterix.transaction.management.service.logging.ILogManager;
+import edu.uci.ics.asterix.transaction.management.service.logging.ILogRecordHelper;
+import edu.uci.ics.asterix.transaction.management.service.logging.IndexResourceManager;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogManager;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogType;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogUtil;
+import edu.uci.ics.asterix.transaction.management.service.logging.LogicalLogLocator;
+import edu.uci.ics.asterix.transaction.management.service.logging.PhysicalLogLocator;
+import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager;
+import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManager;
+import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
+import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
+import edu.uci.ics.hyracks.storage.am.btree.impls.BTree;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndex;
+import edu.uci.ics.hyracks.storage.am.common.api.IIndexLifecycleManager;
+import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndex;
+import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrame;
+import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallback;
+import edu.uci.ics.hyracks.storage.am.lsm.btree.impls.LSMBTreeImmutableComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
+import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
+import edu.uci.ics.hyracks.storage.am.lsm.common.impls.BlockingIOOperationCallbackWrapper;
+import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.impls.LSMInvertedIndexImmutableComponent;
+import edu.uci.ics.hyracks.storage.am.lsm.rtree.impls.LSMRTreeImmutableComponent;
+import edu.uci.ics.hyracks.storage.am.rtree.impls.RTree;
+import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
+import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
+import edu.uci.ics.hyracks.storage.common.file.BufferedFileHandle;
+import edu.uci.ics.hyracks.storage.common.file.ILocalResourceRepository;
+import edu.uci.ics.hyracks.storage.common.file.LocalResource;
+
+/**
+ * This is the Recovery Manager and is responsible for rolling back a
+ * transaction as well as doing a system recovery. TODO: Crash Recovery logic is
+ * not in place completely. Once we have physical logging implemented, we would
+ * add support for crash recovery.
+ */
+public class RecoveryManager implements IRecoveryManager {
+
+    public static final boolean IS_DEBUG_MODE = false;//true
+    private static final Logger LOGGER = Logger.getLogger(RecoveryManager.class.getName());
+    private final TransactionSubsystem txnSubsystem;
+
+    /**
+     * A file at a known location that contains the LSN of the last log record
+     * traversed doing a successful checkpoint.
+     */
+    private static final String CHECKPOINT_FILENAME_PREFIX = "checkpoint_";
+    private SystemState state;
+
+    public RecoveryManager(TransactionSubsystem TransactionProvider) throws ACIDException {
+        this.txnSubsystem = TransactionProvider;
+    }
+
+    /**
+     * returns system state which could be one of the three states: HEALTHY, RECOVERING, CORRUPTED.
+     * This state information could be used in a case where more than one thread is running
+     * in the bootstrap process to provide higher availability. In other words, while the system
+     * is recovered, another thread may start a new transaction with understanding the side effect
+     * of the operation, or the system can be recovered concurrently. This kind of concurrency is
+     * not supported, yet.
+     */
+    public SystemState getSystemState() throws ACIDException {
+
+        //#. read checkpoint file
+        CheckpointObject checkpointObject = null;
+        try {
+            checkpointObject = readCheckpoint();
+        } catch (FileNotFoundException e) {
+            //This is initial bootstrap. 
+            //Otherwise, the checkpoint file is deleted unfortunately. What we can do in this case?
+            state = SystemState.NEW_UNIVERSE;
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info("The checkpoint file doesn't exist: systemState = NEW_UNIVERSE");
+            }
+            return state;
+        }
+
+        //#. if minMCTFirstLSN is equal to -1 && 
+        //   checkpointLSN in the checkpoint file is equal to the lastLSN in the log file,
+        //   then return healthy state. Otherwise, return corrupted.
+        LogManager logMgr = (LogManager) txnSubsystem.getLogManager();
+        if (checkpointObject.getMinMCTFirstLSN() == -1
+                && checkpointObject.getCheckpointLSN() == logMgr.getCurrentLsn().get()) {
+            state = SystemState.HEALTHY;
+            return state;
+        } else {
+            state = SystemState.CORRUPTED;
+            return state;
+        }
+    }
+
+    public void startRecovery(boolean synchronous) throws IOException, ACIDException {
+
+        int updateLogCount = 0;
+        int commitLogCount = 0;
+        int redoCount = 0;
+
+        state = SystemState.RECOVERING;
+
+        ILogManager logManager = txnSubsystem.getLogManager();
+        ILogRecordHelper logRecordHelper = logManager.getLogRecordHelper();
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("[RecoveryMgr] starting recovery ...");
+        }
+
+        //winnerTxnTable is used to add pairs, <committed TxnId, the most recent commit LSN of the TxnId>
+        Map<TxnId, Long> winnerTxnTable = new HashMap<TxnId, Long>();
+        TxnId tempKeyTxnId = new TxnId(-1, -1, -1);
+        byte logType;
+
+        //#. read checkpoint file and set lowWaterMark where anaylsis and redo start
+        CheckpointObject checkpointObject = readCheckpoint();
+        long lowWaterMarkLSN = checkpointObject.getMinMCTFirstLSN();
+        if (lowWaterMarkLSN == -1) {
+            lowWaterMarkLSN = 0;
+        }
+        int maxJobId = checkpointObject.getMaxJobId();
+        int currentJobId;
+
+        //-------------------------------------------------------------------------
+        //  [ analysis phase ]
+        //  - collect all committed LSN 
+        //  - if there are duplicate commits for the same TxnId, 
+        //    keep only the mostRecentCommitLSN among the duplicates.
+        //-------------------------------------------------------------------------
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("[RecoveryMgr] in analysis phase");
+        }
+
+        //#. set log cursor to the lowWaterMarkLSN
+        ILogCursor logCursor = logManager.readLog(new PhysicalLogLocator(lowWaterMarkLSN, logManager),
+                new ILogFilter() {
+                    public boolean accept(IBuffer logs, long startOffset, int endOffset) {
+                        return true;
+                    }
+                });
+        LogicalLogLocator currentLogLocator = LogUtil.getDummyLogicalLogLocator(logManager);
+
+        //#. collect all committed txn's pairs,<TxnId, LSN>
+        while (logCursor.next(currentLogLocator)) {
+
+            if (LogManager.IS_DEBUG_MODE) {
+                System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
+            }
+
+            logType = logRecordHelper.getLogType(currentLogLocator);
+
+            //update max jobId
+            currentJobId = logRecordHelper.getJobId(currentLogLocator);
+            if (currentJobId > maxJobId) {
+                maxJobId = currentJobId;
+            }
+
+            TxnId commitTxnId = null;
+            switch (logType) {
+                case LogType.UPDATE:
+                    if (IS_DEBUG_MODE) {
+                        updateLogCount++;
+                    }
+                    break;
+
+                case LogType.COMMIT:
+                case LogType.ENTITY_COMMIT:
+                    commitTxnId = new TxnId(logRecordHelper.getJobId(currentLogLocator),
+                            logRecordHelper.getDatasetId(currentLogLocator),
+                            logRecordHelper.getPKHashValue(currentLogLocator));
+                    winnerTxnTable.put(commitTxnId, currentLogLocator.getLsn());
+                    if (IS_DEBUG_MODE) {
+                        commitLogCount++;
+                    }
+                    break;
+
+                default:
+                    throw new ACIDException("Unsupported LogType: " + logType);
+            }
+        }
+
+        //-------------------------------------------------------------------------
+        //  [ redo phase ]
+        //  - redo if
+        //    1) The TxnId is committed --> gurantee durability
+        //      &&  
+        //    2) the currentLSN > maxDiskLastLSN of the index --> guarantee idempotance
+        //-------------------------------------------------------------------------
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("[RecoveryMgr] in redo phase");
+        }
+        //#. set log cursor to the lowWaterMarkLSN again.
+        logCursor = logManager.readLog(new PhysicalLogLocator(lowWaterMarkLSN, logManager), new ILogFilter() {
+            public boolean accept(IBuffer logs, long startOffset, int endOffset) {
+                return true;
+            }
+        });
+        currentLogLocator = LogUtil.getDummyLogicalLogLocator(logManager);
+
+        long resourceId;
+        byte resourceMgrId;
+        long maxDiskLastLSN;
+        long currentLSN = -1;
+        int resourceType;
+        ILSMIndex index = null;
+        LocalResource localResource = null;
+        ILocalResourceMetadata localResourceMetadata = null;
+        Map<Long, Long> resourceId2MaxLSNMap = new HashMap<Long, Long>();
+        List<ILSMComponent> immutableDiskIndexList = null;
+        TxnId jobLevelTxnId = new TxnId(-1, -1, -1);
+        boolean foundWinnerTxn;
+
+        //#. get indexLifeCycleManager 
+        IAsterixAppRuntimeContextProvider appRuntimeContext = txnSubsystem.getAsterixAppRuntimeContextProvider();
+        IIndexLifecycleManager indexLifecycleManager = appRuntimeContext.getIndexLifecycleManager();
+        ILocalResourceRepository localResourceRepository = appRuntimeContext.getLocalResourceRepository();
+
+        //#. redo
+        while (logCursor.next(currentLogLocator)) {
+            foundWinnerTxn = false;
+            if (LogManager.IS_DEBUG_MODE) {
+                System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
+            }
+
+            logType = logRecordHelper.getLogType(currentLogLocator);
+
+            switch (logType) {
+                case LogType.UPDATE:
+                    tempKeyTxnId.setTxnId(logRecordHelper.getJobId(currentLogLocator),
+                            logRecordHelper.getDatasetId(currentLogLocator),
+                            logRecordHelper.getPKHashValue(currentLogLocator));
+                    jobLevelTxnId.setTxnId(logRecordHelper.getJobId(currentLogLocator), -1, -1);
+                    if (winnerTxnTable.containsKey(tempKeyTxnId)) {
+                        currentLSN = winnerTxnTable.get(tempKeyTxnId);
+                        foundWinnerTxn = true;
+                    } else if (winnerTxnTable.containsKey(jobLevelTxnId)) {
+                        currentLSN = winnerTxnTable.get(jobLevelTxnId);
+                        foundWinnerTxn = true;
+                    }
+
+                    if (foundWinnerTxn) {
+                        resourceId = logRecordHelper.getResourceId(currentLogLocator);
+                        localResource = localResourceRepository.getResourceById(resourceId);
+
+                        //get index instance from IndexLifeCycleManager
+                        //if index is not registered into IndexLifeCycleManager,
+                        //create the index using LocalMetadata stored in LocalResourceRepository
+                        index = (ILSMIndex) indexLifecycleManager.getIndex(resourceId);
+                        if (index == null) {
+
+                            /*******************************************************************
+                             * [Notice]
+                             * -> Issue
+                             * Delete index may cause a problem during redo.
+                             * The index operation to be redone couldn't be redone because the corresponding index
+                             * may not exist in NC due to the possible index drop DDL operation.
+                             * -> Approach
+                             * Avoid the problem during redo.
+                             * More specifically, the problem will be detected when the localResource of
+                             * the corresponding index is retrieved, which will end up with 'null' return from
+                             * localResourceRepository. If null is returned, then just go and process the next
+                             * log record.
+                             *******************************************************************/
+                            if (localResource == null) {
+                                continue;
+                            }
+                            /*******************************************************************/
+
+                            //#. create index instance and register to indexLifeCycleManager
+                            localResourceMetadata = (ILocalResourceMetadata) localResource.getResourceObject();
+                            index = localResourceMetadata.createIndexInstance(appRuntimeContext,
+                                    localResource.getResourceName(), localResource.getPartition());
+                            indexLifecycleManager.register(resourceId, index);
+                            indexLifecycleManager.open(resourceId);
+
+                            //#. get maxDiskLastLSN
+                            resourceType = localResource.getResourceType();
+                            immutableDiskIndexList = index.getImmutableComponents();
+
+                            maxDiskLastLSN = -1;
+                            switch (resourceType) {
+
+                                case ResourceType.LSM_BTREE:
+                                    for (ILSMComponent c : immutableDiskIndexList) {
+                                        BTree btree = ((LSMBTreeImmutableComponent) c).getBTree();
+                                        maxDiskLastLSN = Math.max(getTreeIndexLSN(btree), maxDiskLastLSN);
+                                    }
+                                    break;
+
+                                case ResourceType.LSM_RTREE:
+                                    for (ILSMComponent c : immutableDiskIndexList) {
+                                        RTree rtree = ((LSMRTreeImmutableComponent) c).getRTree();
+                                        maxDiskLastLSN = Math.max(getTreeIndexLSN(rtree), maxDiskLastLSN);
+                                    }
+                                    break;
+
+                                case ResourceType.LSM_INVERTED_INDEX:
+                                    for (ILSMComponent c : immutableDiskIndexList) {
+                                        BTree delKeyBtree = ((LSMInvertedIndexImmutableComponent) c)
+                                                .getDeletedKeysBTree();
+                                        maxDiskLastLSN = Math.max(getTreeIndexLSN(delKeyBtree), maxDiskLastLSN);
+                                    }
+                                    break;
+
+                                default:
+                                    throw new ACIDException("Unsupported resouce type");
+                            }
+
+                            //#. set resourceId and maxDiskLastLSN to the map
+                            resourceId2MaxLSNMap.put(resourceId, maxDiskLastLSN);
+                        } else {
+                            maxDiskLastLSN = resourceId2MaxLSNMap.get(resourceId);
+                        }
+
+                        if (currentLSN > maxDiskLastLSN) {
+                            resourceMgrId = logRecordHelper.getResourceMgrId(currentLogLocator);
+
+                            // look up the repository to get the resource manager
+                            // register resourceMgr if it is not registered. 
+                            IResourceManager resourceMgr = txnSubsystem.getTransactionalResourceRepository()
+                                    .getTransactionalResourceMgr(resourceMgrId);
+                            if (resourceMgr == null) {
+                                resourceMgr = new IndexResourceManager(resourceMgrId, txnSubsystem);
+                                txnSubsystem.getTransactionalResourceRepository().registerTransactionalResourceManager(
+                                        resourceMgrId, resourceMgr);
+                            }
+
+                            //redo finally.
+                            resourceMgr.redo(logRecordHelper, currentLogLocator);
+                            if (IS_DEBUG_MODE) {
+                                redoCount++;
+                            }
+                        }
+                    }
+                    break;
+
+                case LogType.COMMIT:
+                case LogType.ENTITY_COMMIT:
+                    //do nothing
+                    break;
+
+                default:
+                    throw new ACIDException("Unsupported LogType: " + logType);
+            }
+        }
+
+        //close all indexes
+        Set<Long> resourceIdList = resourceId2MaxLSNMap.keySet();
+        for (long r : resourceIdList) {
+            indexLifecycleManager.close(r);
+        }
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("[RecoveryMgr] recovery is completed.");
+        }
+        if (IS_DEBUG_MODE) {
+            System.out.println("[RecoveryMgr] Count: Update/Commit/Redo = " + updateLogCount + "/" + commitLogCount
+                    + "/" + redoCount);
+        }
+    }
+
+    //TODO
+    //This function came from the AbstractLSMIOOperationCallback class. 
+    //We'd better factor out this function into a component of reading/writing the local metadata of indexes.
+    private long getTreeIndexLSN(ITreeIndex treeIndex) throws HyracksDataException {
+        int fileId = treeIndex.getFileId();
+        IBufferCache bufferCache = treeIndex.getBufferCache();
+        ITreeIndexMetaDataFrame metadataFrame = treeIndex.getFreePageManager().getMetaDataFrameFactory().createFrame();
+        int metadataPageId = treeIndex.getFreePageManager().getFirstMetadataPage();
+        ICachedPage metadataPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, metadataPageId), false);
+        metadataPage.acquireReadLatch();
+        try {
+            metadataFrame.setPage(metadataPage);
+            return metadataFrame.getLSN();
+        } finally {
+            metadataPage.releaseReadLatch();
+            bufferCache.unpin(metadataPage);
+        }
+    }
+
+    @Override
+    public synchronized void checkpoint(boolean isSharpCheckpoint) throws ACIDException {
+
+        if (isSharpCheckpoint && LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Starting sharp checkpoint ... ");
+        }
+        
+        LogManager logMgr = (LogManager) txnSubsystem.getLogManager();
+        TransactionManager txnMgr = (TransactionManager) txnSubsystem.getTransactionManager();
+        String logDir = logMgr.getLogManagerProperties().getLogDir();
+
+        //#. get the filename of the previous checkpoint files which are about to be deleted 
+        //   right after the new checkpoint file is written.
+        File[] prevCheckpointFiles = getPreviousCheckpointFiles();
+
+        IIndexLifecycleManager indexLifecycleManager = txnSubsystem.getAsterixAppRuntimeContextProvider()
+                .getIndexLifecycleManager();
+        List<IIndex> openIndexList = indexLifecycleManager.getOpenIndexes();
+        List<BlockingIOOperationCallbackWrapper> callbackList = new LinkedList<BlockingIOOperationCallbackWrapper>();
+
+        //#. flush all in-memory components if it is the sharp checkpoint
+        if (isSharpCheckpoint) {
+            for (IIndex index : openIndexList) {
+                ILSMIndex lsmIndex = (ILSMIndex) index;
+                ILSMIndexAccessor indexAccessor = lsmIndex.createAccessor(NoOpOperationCallback.INSTANCE,
+                        NoOpOperationCallback.INSTANCE);
+                IndexOperationTracker indexOpTracker = (IndexOperationTracker) lsmIndex.getOperationTracker();
+                BlockingIOOperationCallbackWrapper cb = new BlockingIOOperationCallbackWrapper(
+                        indexOpTracker.getIOOperationCallback());
+                callbackList.add(cb);
+                try {
+                    indexAccessor.scheduleFlush(cb);
+                } catch (HyracksDataException e) {
+                    throw new ACIDException(e);
+                }
+            }
+
+            for (BlockingIOOperationCallbackWrapper cb : callbackList) {
+                try {
+                    cb.waitForIO();
+                } catch (InterruptedException e) {
+                    throw new ACIDException(e);
+                }
+            }
+        }
+
+        //#. create and store the checkpointObject into the new checkpoint file
+        long minMCTFirstLSN = Long.MAX_VALUE;
+        long firstLSN;
+        if (openIndexList.size() > 0) {
+            for (IIndex index : openIndexList) {
+                firstLSN = ((IndexOperationTracker) ((ILSMIndex) index).getOperationTracker()).getFirstLSN();
+                minMCTFirstLSN = Math.min(minMCTFirstLSN, firstLSN);
+            }
+        } else {
+            minMCTFirstLSN = -1;
+        }
+
+        CheckpointObject checkpointObject = new CheckpointObject(logMgr.getCurrentLsn().get(), minMCTFirstLSN,
+                txnMgr.getMaxJobId(), System.currentTimeMillis());
+
+        FileOutputStream fos = null;
+        ObjectOutputStream oosToFos = null;
+        try {
+            String fileName = getFileName(logDir, Long.toString(checkpointObject.getTimeStamp()));
+            fos = new FileOutputStream(fileName);
+            oosToFos = new ObjectOutputStream(fos);
+            oosToFos.writeObject(checkpointObject);
+            oosToFos.flush();
+        } catch (IOException e) {
+            throw new ACIDException("Failed to checkpoint", e);
+        } finally {
+            if (oosToFos != null) {
+                try {
+                    oosToFos.close();
+                } catch (IOException e) {
+                    throw new ACIDException("Failed to checkpoint", e);
+                }
+            }
+            if (oosToFos == null && fos != null) {
+                try {
+                    fos.close();
+                } catch (IOException e) {
+                    throw new ACIDException("Failed to checkpoint", e);
+                }
+            }
+        }
+
+        //#. delete the previous checkpoint files
+        if (prevCheckpointFiles != null) {
+            for (File file : prevCheckpointFiles) {
+                file.delete();
+            }
+        }
+
+        if (isSharpCheckpoint) {
+            logMgr.renewLogFiles();
+        }
+        
+        if (isSharpCheckpoint && LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info("Completed sharp checkpoint.");
+        }
+    }
+
+    private CheckpointObject readCheckpoint() throws ACIDException, FileNotFoundException {
+
+        CheckpointObject checkpointObject = null;
+
+        //#. read all checkpointObjects from the existing checkpoint files
+        File[] prevCheckpointFiles = getPreviousCheckpointFiles();
+
+        if (prevCheckpointFiles == null || prevCheckpointFiles.length == 0) {
+            throw new FileNotFoundException("Checkpoint file is not found");
+        }
+
+        List<CheckpointObject> checkpointObjectList = new ArrayList<CheckpointObject>();
+
+        for (File file : prevCheckpointFiles) {
+            FileInputStream fis = null;
+            ObjectInputStream oisFromFis = null;
+
+            try {
+                fis = new FileInputStream(file);
+                oisFromFis = new ObjectInputStream(fis);
+                checkpointObject = (CheckpointObject) oisFromFis.readObject();
+                checkpointObjectList.add(checkpointObject);
+            } catch (Exception e) {
+                throw new ACIDException("Failed to read a checkpoint file", e);
+            } finally {
+                if (oisFromFis != null) {
+                    try {
+                        oisFromFis.close();
+                    } catch (IOException e) {
+                        throw new ACIDException("Failed to read a checkpoint file", e);
+                    }
+                }
+                if (oisFromFis == null && fis != null) {
+                    try {
+                        fis.close();
+                    } catch (IOException e) {
+                        throw new ACIDException("Failed to read a checkpoint file", e);
+                    }
+                }
+            }
+        }
+
+        //#. sort checkpointObjects in descending order by timeStamp to find out the most recent one.
+        Collections.sort(checkpointObjectList);
+
+        //#. return the most recent one (the first one in sorted list)
+        return checkpointObjectList.get(0);
+    }
+
+    private File[] getPreviousCheckpointFiles() {
+        String logDir = txnSubsystem.getLogManager().getLogManagerProperties().getLogDir();
+
+        File parentDir = new File(logDir);
+
+        FilenameFilter filter = new FilenameFilter() {
+            @Override
+            public boolean accept(File dir, String name) {
+                if (name.contains(CHECKPOINT_FILENAME_PREFIX)) {
+                    return true;
+                } else {
+                    return false;
+                }
+            }
+        };
+
+        File[] prevCheckpointFiles = parentDir.listFiles(filter);
+
+        return prevCheckpointFiles;
+    }
+
+    private String getFileName(String baseDir, String suffix) {
+
+        if (!baseDir.endsWith(System.getProperty("file.separator"))) {
+            baseDir += System.getProperty("file.separator");
+        }
+
+        return baseDir + CHECKPOINT_FILENAME_PREFIX + suffix;
+    }
+
+    /**
+     * Rollback a transaction
+     * 
+     * @see edu.uci.ics.transaction.management.service.recovery.IRecoveryManager# rollbackTransaction (edu.uci.ics.TransactionContext.management.service.transaction .TransactionContext)
+     */
+    @Override
+    public void rollbackTransaction(TransactionContext txnContext) throws ACIDException {
+        ILogManager logManager = txnSubsystem.getLogManager();
+        ILogRecordHelper logRecordHelper = logManager.getLogRecordHelper();
+        Map<TxnId, List<Long>> loserTxnTable = new HashMap<TxnId, List<Long>>();
+        TxnId tempKeyTxnId = new TxnId(-1, -1, -1);
+
+        int updateLogCount = 0;
+        int commitLogCount = 0;
+
+        // Obtain the first log record written by the Job
+        PhysicalLogLocator firstLSNLogLocator = txnContext.getFirstLogLocator();
+        PhysicalLogLocator lastLSNLogLocator = txnContext.getLastLogLocator();
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info(" rollbacking transaction log records from " + firstLSNLogLocator.getLsn() + " to "
+                    + lastLSNLogLocator.getLsn());
+        }
+
+        // check if the transaction actually wrote some logs.
+        if (firstLSNLogLocator.getLsn() == TransactionManagementConstants.LogManagerConstants.TERMINAL_LSN) {
+            if (LOGGER.isLoggable(Level.INFO)) {
+                LOGGER.info(" no need to roll back as there were no operations by the transaction "
+                        + txnContext.getJobId());
+            }
+            return;
+        }
+
+        // While reading log records from firstLSN to lastLSN, collect uncommitted txn's LSNs 
+        ILogCursor logCursor;
+        try {
+            logCursor = logManager.readLog(firstLSNLogLocator, new ILogFilter() {
+                @Override
+                public boolean accept(IBuffer buffer, long startOffset, int length) {
+                    return true;
+                }
+            });
+        } catch (IOException e) {
+            throw new ACIDException("Failed to create LogCursor with LSN:" + firstLSNLogLocator.getLsn(), e);
+        }
+
+        LogicalLogLocator currentLogLocator = LogUtil.getDummyLogicalLogLocator(logManager);
+        boolean valid;
+        byte logType;
+        List<Long> undoLSNSet = null;
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info(" collecting loser transaction's LSNs from " + firstLSNLogLocator.getLsn() + " to "
+                    + +lastLSNLogLocator.getLsn());
+        }
+
+        while (currentLogLocator.getLsn() != lastLSNLogLocator.getLsn()) {
+            try {
+                valid = logCursor.next(currentLogLocator);
+            } catch (IOException e) {
+                throw new ACIDException("Failed to read log at LSN:" + currentLogLocator.getLsn(), e);
+            }
+            if (!valid) {
+                if (currentLogLocator.getLsn() != lastLSNLogLocator.getLsn()) {
+                    throw new ACIDException("LastLSN mismatch: " + lastLSNLogLocator.getLsn() + " vs "
+                            + currentLogLocator.getLsn() + " during Rollback a transaction( " + txnContext.getJobId()
+                            + ")");
+                } else {
+                    break;//End of Log File
+                }
+            }
+
+            if (IS_DEBUG_MODE) {
+                System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
+            }
+
+            tempKeyTxnId.setTxnId(logRecordHelper.getJobId(currentLogLocator),
+                    logRecordHelper.getDatasetId(currentLogLocator), logRecordHelper.getPKHashValue(currentLogLocator));
+            logType = logRecordHelper.getLogType(currentLogLocator);
+
+            switch (logType) {
+                case LogType.UPDATE:
+                    undoLSNSet = loserTxnTable.get(tempKeyTxnId);
+                    if (undoLSNSet == null) {
+                        TxnId txnId = new TxnId(logRecordHelper.getJobId(currentLogLocator),
+                                logRecordHelper.getDatasetId(currentLogLocator),
+                                logRecordHelper.getPKHashValue(currentLogLocator));
+                        undoLSNSet = new LinkedList<Long>();
+                        loserTxnTable.put(txnId, undoLSNSet);
+                    }
+                    undoLSNSet.add(currentLogLocator.getLsn());
+                    if (IS_DEBUG_MODE) {
+                        updateLogCount++;
+                        System.out.println("" + Thread.currentThread().getId() + "======> update["
+                                + currentLogLocator.getLsn() + "]:" + tempKeyTxnId);
+                    }
+                    break;
+
+                case LogType.COMMIT:
+                case LogType.ENTITY_COMMIT:
+                    undoLSNSet = loserTxnTable.get(tempKeyTxnId);
+                    if (undoLSNSet != null) {
+                        loserTxnTable.remove(tempKeyTxnId);
+                    }
+                    if (IS_DEBUG_MODE) {
+                        commitLogCount++;
+                        System.out.println("" + Thread.currentThread().getId() + "======> commit["
+                                + currentLogLocator.getLsn() + "]" + tempKeyTxnId);
+                    }
+                    break;
+
+                default:
+                    throw new ACIDException("Unsupported LogType: " + logType);
+            }
+        }
+
+        //undo loserTxn's effect
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info(" undoing loser transaction's effect");
+        }
+
+        TxnId txnId = null;
+        Iterator<Entry<TxnId, List<Long>>> iter = loserTxnTable.entrySet().iterator();
+        byte resourceMgrId;
+        int undoCount = 0;
+        while (iter.hasNext()) {
+            //TODO 
+            //Sort the lsns in order to undo in one pass. 
+
+            Map.Entry<TxnId, List<Long>> loserTxn = (Map.Entry<TxnId, List<Long>>) iter.next();
+            txnId = loserTxn.getKey();
+
+            undoLSNSet = loserTxn.getValue();
+
+            for (long undoLSN : undoLSNSet) {
+                // here, all the log records are UPDATE type. So, we don't need to check the type again.
+
+                //read the corresponding log record to be undone.
+                logManager.readLog(undoLSN, currentLogLocator);
+
+                if (IS_DEBUG_MODE) {
+                    System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
+                }
+
+                // extract the resource manager id from the log record.
+                resourceMgrId = logRecordHelper.getResourceMgrId(currentLogLocator);
+                if (LOGGER.isLoggable(Level.FINE)) {
+                    LOGGER.fine(logRecordHelper.getLogRecordForDisplay(currentLogLocator));
+                }
+
+                // look up the repository to get the resource manager
+                IResourceManager resourceMgr = txnSubsystem.getTransactionalResourceRepository()
+                        .getTransactionalResourceMgr(resourceMgrId);
+
+                // register resourceMgr if it is not registered. 
+                if (resourceMgr == null) {
+                    resourceMgr = new IndexResourceManager(resourceMgrId, txnSubsystem);
+                    txnSubsystem.getTransactionalResourceRepository().registerTransactionalResourceManager(
+                            resourceMgrId, resourceMgr);
+                }
+                resourceMgr.undo(logRecordHelper, currentLogLocator);
+
+                if (IS_DEBUG_MODE) {
+                    undoCount++;
+                }
+            }
+        }
+
+        if (LOGGER.isLoggable(Level.INFO)) {
+            LOGGER.info(" undone loser transaction's effect");
+        }
+        if (IS_DEBUG_MODE) {
+            System.out.println("UpdateLogCount/CommitLogCount/UndoCount:" + updateLogCount + "/" + commitLogCount + "/"
+                    + undoCount);
+        }
+    }
+}
+
+class TxnId {
+    public int jobId;
+    public int datasetId;
+    public int pkHashVal;
+
+    public TxnId(int jobId, int datasetId, int pkHashVal) {
+        this.jobId = jobId;
+        this.datasetId = datasetId;
+        this.pkHashVal = pkHashVal;
+    }
+
+    public void setTxnId(int jobId, int datasetId, int pkHashVal) {
+        this.jobId = jobId;
+        this.datasetId = datasetId;
+        this.pkHashVal = pkHashVal;
+    }
+
+    public void setTxnId(TxnId txnId) {
+        this.jobId = txnId.jobId;
+        this.datasetId = txnId.datasetId;
+        this.pkHashVal = txnId.pkHashVal;
+    }
+
+    @Override
+    public String toString() {
+        return "[" + jobId + "," + datasetId + "," + pkHashVal + "]";
+    }
+
+    @Override
+    public int hashCode() {
+        return pkHashVal;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == this) {
+            return true;
+        }
+        if (!(o instanceof TxnId)) {
+            return false;
+        }
+        TxnId txnId = (TxnId) o;
+
+        return (txnId.pkHashVal == pkHashVal && txnId.datasetId == datasetId && txnId.jobId == jobId);
+    }
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/TransactionTableEntry.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/TransactionTableEntry.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/TransactionTableEntry.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/TransactionTableEntry.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetId.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetId.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetId.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetId.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetIdFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetIdFactory.java
new file mode 100644
index 0000000..17eaf38
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetIdFactory.java
@@ -0,0 +1,25 @@
+package edu.uci.ics.asterix.transaction.management.service.transaction;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+public class DatasetIdFactory {
+    private static AtomicInteger id = new AtomicInteger();
+    private static boolean isInitialized = false; 
+    
+    public static boolean isInitialized() {
+        return isInitialized;
+    }
+    
+    public static void initialize(int initialId) {
+    	id.set(initialId);
+    	isInitialized = true;
+    }
+
+    public static int generateDatasetId() {
+        return id.incrementAndGet();
+    }
+    
+    public static int getMostRecentDatasetId() {
+        return id.get();
+    }
+}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/FieldsHashValueGenerator.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/FieldsHashValueGenerator.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/FieldsHashValueGenerator.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/FieldsHashValueGenerator.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/IResourceManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/IResourceManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/IResourceManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/IResourceManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionSubsystemProvider.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionSubsystemProvider.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionSubsystemProvider.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/ITransactionSubsystemProvider.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobId.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobId.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobId.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobId.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobIdFactory.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobIdFactory.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobIdFactory.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/JobIdFactory.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/MutableResourceId.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/MutableResourceId.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/MutableResourceId.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/MutableResourceId.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionContext.java
diff --git a/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManagementConstants.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
new file mode 100644
index 0000000..7d04f61
--- /dev/null
+++ b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2009-2010 by The Regents of the University of California
+ * Licensed 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 from
+ * 
+ *     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.
+ */
+package edu.uci.ics.asterix.transaction.management.service.transaction;
+
+/**
+ * Represents a umbrella class containing constant that are used by transaction
+ * sub-systems (Lock/Log)Manager.
+ */
+public class TransactionManagementConstants {
+
+    public static class ResourceMgrIds {
+        public static final byte BTREE_RESOURCE_MGR_ID = 1;
+        public static final byte METADATA_RESOURCE_MGR_ID = 2;
+    }
+
+    public static class LogManagerConstants {
+        public static final String LOG_CONF_DIR = "log_conf";
+        public static final String LOG_CONF_FILE = "log.properties";
+        public static final String ASTERIX_CONF_DIR = "src/main/resources";
+        public static final String DEFAULT_LOG_DIR = "asterix_logs";
+        public static final int TERMINAL_LSN = -1;
+    }
+
+    public static class LockManagerConstants {
+        public static final String LOCK_CONF_DIR = "lock_conf";
+        public static final String LOCK_CONF_FILE = "lock.conf";
+        public static final int[] LOCK_CONFLICT_MATRIX = new int[] { 2, 3 };
+        public static final int[] LOCK_CONVERT_MATRIX = new int[] { 2, 0 };
+
+        public static class LockMode {
+            public static final byte S = 0;
+            public static final byte X = 1;
+            public static final byte IS = 2;
+            public static final byte IX = 3;
+        }
+    }
+
+}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManager.java
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionSubsystem.java b/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionSubsystem.java
similarity index 100%
rename from asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionSubsystem.java
rename to asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionSubsystem.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/BasicLogger.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/BasicLogger.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/BasicLogger.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/BasicLogger.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/IResource.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/IResource.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/IResource.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/IResource.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/RecoverySimulator.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/RecoverySimulator.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/RecoverySimulator.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/RecoverySimulator.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/TransactionWorkloadSimulator.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/TransactionWorkloadSimulator.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/TransactionWorkloadSimulator.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/logging/test/TransactionWorkloadSimulator.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileLogger.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileLogger.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileLogger.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileLogger.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResource.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResource.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResource.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResource.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResourceManager.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResourceManager.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResourceManager.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/FileResourceManager.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/LogRecordReader.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/LogRecordReader.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/LogRecordReader.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/LogRecordReader.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionRecoverySimulator.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionRecoverySimulator.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionRecoverySimulator.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionRecoverySimulator.java
diff --git a/asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionSimulator.java b/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionSimulator.java
similarity index 100%
rename from asterix/asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionSimulator.java
rename to asterix-transactions/src/test/java/edu/uci/ics/asterix/transaction/management/test/TransactionSimulator.java
diff --git a/asterix/asterix-algebra/pom.xml b/asterix/asterix-algebra/pom.xml
deleted file mode 100644
index 6e24513..0000000
--- a/asterix/asterix-algebra/pom.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-algebra</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>javacc-maven-plugin</artifactId>
-				<version>2.6</version>
-				<executions>
-					<execution>
-						<id>javacc</id>
-						<goals>
-							<goal>javacc</goal>
-						</goals>
-						<configuration>
-							<isStatic>false</isStatic>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-		<pluginManagement>
-			<plugins>
-				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.codehaus.mojo
-										</groupId>
-										<artifactId>
-											javacc-maven-plugin
-										</artifactId>
-										<versionRange>
-											[2.6,)
-										</versionRange>
-										<goals>
-											<goal>javacc</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore />
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-runtime</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-aql</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-metadata</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>algebricks-compiler</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.json</groupId>
-			<artifactId>json</artifactId>
-			<version>20090211</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-	</dependencies>
-</project>
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
deleted file mode 100644
index d8477f1..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
+++ /dev/null
@@ -1,433 +0,0 @@
-package edu.uci.ics.asterix.algebra.base;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.Counter;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DataSourceScanOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DieOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistributeResultOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ExchangeOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ExtensionOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.IndexInsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.PartitioningSplitOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ReplicateOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.RunningAggregateOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ScriptOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SinkOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestMapOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteResultOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
-import edu.uci.ics.hyracks.algebricks.core.algebra.properties.FunctionalDependency;
-import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
-
-public class LogicalOperatorDeepCopyVisitor implements ILogicalOperatorVisitor<ILogicalOperator, ILogicalOperator> {
-    private final Counter counter;
-    private final LogicalExpressionDeepCopyVisitor exprDeepCopyVisitor;
-
-    // Key: Variable in the original plan. Value: New variable replacing the original one in the copied plan.
-    private final Map<LogicalVariable, LogicalVariable> outVarMapping = new HashMap<LogicalVariable, LogicalVariable>();
-
-    // Key: Variable in the original plan. Value: Variable with which to replace original variable in the plan copy.
-    private final Map<LogicalVariable, LogicalVariable> inVarMapping;
-
-    public LogicalOperatorDeepCopyVisitor(Counter counter) {
-        this.counter = counter;
-        this.inVarMapping = Collections.emptyMap();
-        exprDeepCopyVisitor = new LogicalExpressionDeepCopyVisitor(counter, inVarMapping, outVarMapping);
-    }
-
-    /**
-     * @param counter
-     *            Starting variable counter.
-     * @param inVarMapping
-     *            Variable mapping keyed by variables in the original plan.
-     *            Those variables are replaced by their corresponding value in the map in the copied plan.
-     */
-    public LogicalOperatorDeepCopyVisitor(Counter counter, Map<LogicalVariable, LogicalVariable> inVarMapping) {
-        this.counter = counter;
-        this.inVarMapping = inVarMapping;
-        exprDeepCopyVisitor = new LogicalExpressionDeepCopyVisitor(counter, inVarMapping, outVarMapping);
-    }
-
-    private void copyAnnotations(ILogicalOperator src, ILogicalOperator dest) {
-        dest.getAnnotations().putAll(src.getAnnotations());
-    }
-
-    public ILogicalOperator deepCopy(ILogicalOperator op, ILogicalOperator arg) throws AlgebricksException {
-        return op.accept(this, arg);
-    }
-
-    private void deepCopyInputs(ILogicalOperator src, ILogicalOperator dest, ILogicalOperator arg)
-            throws AlgebricksException {
-        List<Mutable<ILogicalOperator>> inputs = src.getInputs();
-        List<Mutable<ILogicalOperator>> inputsCopy = dest.getInputs();
-        for (Mutable<ILogicalOperator> input : inputs) {
-            inputsCopy.add(deepCopyOperatorReference(input, arg));
-        }
-    }
-
-    private Mutable<ILogicalOperator> deepCopyOperatorReference(Mutable<ILogicalOperator> opRef, ILogicalOperator arg)
-            throws AlgebricksException {
-        return new MutableObject<ILogicalOperator>(deepCopy(opRef.getValue(), arg));
-    }
-
-    private List<Mutable<ILogicalOperator>> deepCopyOperatorReferenceList(List<Mutable<ILogicalOperator>> list,
-            ILogicalOperator arg) throws AlgebricksException {
-        List<Mutable<ILogicalOperator>> listCopy = new ArrayList<Mutable<ILogicalOperator>>(list.size());
-        for (Mutable<ILogicalOperator> opRef : list) {
-            listCopy.add(deepCopyOperatorReference(opRef, arg));
-        }
-        return listCopy;
-    }
-
-    private IOrder deepCopyOrder(IOrder order) {
-        switch (order.getKind()) {
-            case ASC:
-            case DESC:
-                return order;
-            case FUNCTIONCALL:
-            default:
-                throw new UnsupportedOperationException();
-        }
-    }
-
-    private List<Pair<IOrder, Mutable<ILogicalExpression>>> deepCopyOrderExpressionReferencePairList(
-            List<Pair<IOrder, Mutable<ILogicalExpression>>> list) throws AlgebricksException {
-        ArrayList<Pair<IOrder, Mutable<ILogicalExpression>>> listCopy = new ArrayList<Pair<IOrder, Mutable<ILogicalExpression>>>(
-                list.size());
-        for (Pair<IOrder, Mutable<ILogicalExpression>> pair : list) {
-            listCopy.add(new Pair<OrderOperator.IOrder, Mutable<ILogicalExpression>>(deepCopyOrder(pair.first),
-                    exprDeepCopyVisitor.deepCopyExpressionReference(pair.second)));
-        }
-        return listCopy;
-    }
-
-    private ILogicalPlan deepCopyPlan(ILogicalPlan plan, ILogicalOperator arg) throws AlgebricksException {
-        List<Mutable<ILogicalOperator>> rootsCopy = deepCopyOperatorReferenceList(plan.getRoots(), arg);
-        ILogicalPlan planCopy = new ALogicalPlanImpl(rootsCopy);
-        return planCopy;
-    }
-
-    private List<ILogicalPlan> deepCopyPlanList(List<ILogicalPlan> list, List<ILogicalPlan> listCopy,
-            ILogicalOperator arg) throws AlgebricksException {
-        for (ILogicalPlan plan : list) {
-            listCopy.add(deepCopyPlan(plan, arg));
-        }
-        return listCopy;
-    }
-
-    private LogicalVariable deepCopyVariable(LogicalVariable var) {
-        if (var == null) {
-            return null;
-        }
-        LogicalVariable givenVarReplacement = inVarMapping.get(var);
-        if (givenVarReplacement != null) {
-            outVarMapping.put(var, givenVarReplacement);
-            return givenVarReplacement;
-        }
-        LogicalVariable varCopy = outVarMapping.get(var);
-        if (varCopy == null) {
-            counter.inc();
-            varCopy = new LogicalVariable(counter.get());
-            outVarMapping.put(var, varCopy);
-        }
-        return varCopy;
-    }
-
-    private List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> deepCopyVariableExpressionReferencePairList(
-            List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> list) throws AlgebricksException {
-        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> listCopy = new ArrayList<Pair<LogicalVariable, Mutable<ILogicalExpression>>>(
-                list.size());
-        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> pair : list) {
-            listCopy.add(new Pair<LogicalVariable, Mutable<ILogicalExpression>>(deepCopyVariable(pair.first),
-                    exprDeepCopyVisitor.deepCopyExpressionReference(pair.second)));
-        }
-        return listCopy;
-    }
-
-    // TODO return List<...>
-    private ArrayList<LogicalVariable> deepCopyVariableList(List<LogicalVariable> list) {
-        ArrayList<LogicalVariable> listCopy = new ArrayList<LogicalVariable>(list.size());
-        for (LogicalVariable var : list) {
-            listCopy.add(deepCopyVariable(var));
-        }
-        return listCopy;
-    }
-
-    public void reset() {
-        outVarMapping.clear();
-    }
-
-    public void updatePrimaryKeys(IOptimizationContext context) {
-        for (Map.Entry<LogicalVariable, LogicalVariable> entry : outVarMapping.entrySet()) {
-            List<LogicalVariable> primaryKey = context.findPrimaryKey(entry.getKey());
-            if (primaryKey != null) {
-                List<LogicalVariable> head = new ArrayList<LogicalVariable>();
-                for (LogicalVariable variable : primaryKey) {
-                    head.add(outVarMapping.get(variable));
-                }
-                List<LogicalVariable> tail = new ArrayList<LogicalVariable>(1);
-                tail.add(entry.getValue());
-                context.addPrimaryKey(new FunctionalDependency(head, tail));
-            }
-        }
-    }
-
-    public LogicalVariable varCopy(LogicalVariable var) throws AlgebricksException {
-        return outVarMapping.get(var);
-    }
-
-    @Override
-    public ILogicalOperator visitAggregateOperator(AggregateOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        AggregateOperator opCopy = new AggregateOperator(deepCopyVariableList(op.getVariables()),
-                exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getExpressions()));
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitAssignOperator(AssignOperator op, ILogicalOperator arg) throws AlgebricksException {
-        AssignOperator opCopy = new AssignOperator(deepCopyVariableList(op.getVariables()),
-                exprDeepCopyVisitor.deepCopyExpressionReferenceList(op.getExpressions()));
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitDataScanOperator(DataSourceScanOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        DataSourceScanOperator opCopy = new DataSourceScanOperator(deepCopyVariableList(op.getVariables()),
-                op.getDataSource());
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitDistinctOperator(DistinctOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitEmptyTupleSourceOperator(EmptyTupleSourceOperator op, ILogicalOperator arg) {
-        EmptyTupleSourceOperator opCopy = new EmptyTupleSourceOperator();
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitExchangeOperator(ExchangeOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitGroupByOperator(GroupByOperator op, ILogicalOperator arg) throws AlgebricksException {
-        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> groupByListCopy = deepCopyVariableExpressionReferencePairList(op
-                .getGroupByList());
-        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> decorListCopy = deepCopyVariableExpressionReferencePairList(op
-                .getDecorList());
-        List<ILogicalPlan> nestedPlansCopy = new ArrayList<ILogicalPlan>();
-
-        GroupByOperator opCopy = new GroupByOperator(groupByListCopy, decorListCopy, nestedPlansCopy);
-        deepCopyPlanList(op.getNestedPlans(), nestedPlansCopy, opCopy);
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitInnerJoinOperator(InnerJoinOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        InnerJoinOperator opCopy = new InnerJoinOperator(exprDeepCopyVisitor.deepCopyExpressionReference(op
-                .getCondition()), deepCopyOperatorReference(op.getInputs().get(0), null), deepCopyOperatorReference(op
-                .getInputs().get(1), null));
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitLeftOuterJoinOperator(LeftOuterJoinOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitLimitOperator(LimitOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitDieOperator(DieOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitNestedTupleSourceOperator(NestedTupleSourceOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        NestedTupleSourceOperator opCopy = new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(arg));
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitOrderOperator(OrderOperator op, ILogicalOperator arg) throws AlgebricksException {
-        OrderOperator opCopy = new OrderOperator(deepCopyOrderExpressionReferencePairList(op.getOrderExpressions()));
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitPartitioningSplitOperator(PartitioningSplitOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitProjectOperator(ProjectOperator op, ILogicalOperator arg) throws AlgebricksException {
-        ProjectOperator opCopy = new ProjectOperator(deepCopyVariableList(op.getVariables()));
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitReplicateOperator(ReplicateOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitRunningAggregateOperator(RunningAggregateOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitScriptOperator(ScriptOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitSelectOperator(SelectOperator op, ILogicalOperator arg) throws AlgebricksException {
-        SelectOperator opCopy = new SelectOperator(exprDeepCopyVisitor.deepCopyExpressionReference(op.getCondition()));
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitSubplanOperator(SubplanOperator op, ILogicalOperator arg) throws AlgebricksException {
-        List<ILogicalPlan> nestedPlansCopy = new ArrayList<ILogicalPlan>();
-
-        SubplanOperator opCopy = new SubplanOperator(nestedPlansCopy);
-        deepCopyPlanList(op.getNestedPlans(), nestedPlansCopy, opCopy);
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitUnionOperator(UnionAllOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitUnnestMapOperator(UnnestMapOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitUnnestOperator(UnnestOperator op, ILogicalOperator arg) throws AlgebricksException {
-        UnnestOperator opCopy = new UnnestOperator(deepCopyVariable(op.getVariable()),
-                exprDeepCopyVisitor.deepCopyExpressionReference(op.getExpressionRef()),
-                deepCopyVariable(op.getPositionalVariable()), op.getPositionalVariableType());
-        deepCopyInputs(op, opCopy, arg);
-        copyAnnotations(op, opCopy);
-        opCopy.setExecutionMode(op.getExecutionMode());
-        return opCopy;
-    }
-
-    @Override
-    public ILogicalOperator visitWriteOperator(WriteOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitDistributeResultOperator(DistributeResultOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitWriteResultOperator(WriteResultOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitInsertDeleteOperator(InsertDeleteOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitIndexInsertDeleteOperator(IndexInsertDeleteOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitSinkOperator(SinkOperator op, ILogicalOperator arg) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public ILogicalOperator visitExtensionOperator(ExtensionOperator op, ILogicalOperator arg)
-            throws AlgebricksException {
-        throw new UnsupportedOperationException();
-    }
-
-    public Map<LogicalVariable, LogicalVariable> getVariableMapping() {
-        return outVarMapping;
-    }
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/RuleCollections.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/RuleCollections.java
deleted file mode 100644
index 3f434b7..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/base/RuleCollections.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.optimizer.base;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import edu.uci.ics.asterix.optimizer.rules.AsterixInlineVariablesRule;
-import edu.uci.ics.asterix.optimizer.rules.ByNameToByIndexFieldAccessRule;
-import edu.uci.ics.asterix.optimizer.rules.ConstantFoldingRule;
-import edu.uci.ics.asterix.optimizer.rules.CountVarToCountOneRule;
-import edu.uci.ics.asterix.optimizer.rules.ExtractDistinctByExpressionsRule;
-import edu.uci.ics.asterix.optimizer.rules.ExtractOrderExpressionsRule;
-import edu.uci.ics.asterix.optimizer.rules.FeedScanCollectionToUnnest;
-import edu.uci.ics.asterix.optimizer.rules.FuzzyEqRule;
-import edu.uci.ics.asterix.optimizer.rules.IfElseToSwitchCaseFunctionRule;
-import edu.uci.ics.asterix.optimizer.rules.InlineUnnestFunctionRule;
-import edu.uci.ics.asterix.optimizer.rules.IntroduceDynamicTypeCastRule;
-import edu.uci.ics.asterix.optimizer.rules.IntroduceEnforcedListTypeRule;
-import edu.uci.ics.asterix.optimizer.rules.IntroduceInstantLockSearchCallbackRule;
-import edu.uci.ics.asterix.optimizer.rules.IntroduceSecondaryIndexInsertDeleteRule;
-import edu.uci.ics.asterix.optimizer.rules.IntroduceStaticTypeCastRule;
-import edu.uci.ics.asterix.optimizer.rules.LoadRecordFieldsRule;
-import edu.uci.ics.asterix.optimizer.rules.NestGroupByRule;
-import edu.uci.ics.asterix.optimizer.rules.PullPositionalVariableFromUnnestRule;
-import edu.uci.ics.asterix.optimizer.rules.PushAggFuncIntoStandaloneAggregateRule;
-import edu.uci.ics.asterix.optimizer.rules.PushAggregateIntoGroupbyRule;
-import edu.uci.ics.asterix.optimizer.rules.PushFieldAccessRule;
-import edu.uci.ics.asterix.optimizer.rules.PushGroupByThroughProduct;
-import edu.uci.ics.asterix.optimizer.rules.PushProperJoinThroughProduct;
-import edu.uci.ics.asterix.optimizer.rules.PushSimilarityFunctionsBelowJoin;
-import edu.uci.ics.asterix.optimizer.rules.RemoveRedundantListifyRule;
-import edu.uci.ics.asterix.optimizer.rules.RemoveUnusedOneToOneEquiJoinRule;
-import edu.uci.ics.asterix.optimizer.rules.ReplaceSinkOpWithCommitOpRule;
-import edu.uci.ics.asterix.optimizer.rules.SetAsterixPhysicalOperatorsRule;
-import edu.uci.ics.asterix.optimizer.rules.SetClosedRecordConstructorsRule;
-import edu.uci.ics.asterix.optimizer.rules.SimilarityCheckRule;
-import edu.uci.ics.asterix.optimizer.rules.UnnestToDataScanRule;
-import edu.uci.ics.asterix.optimizer.rules.am.IntroduceJoinAccessMethodRule;
-import edu.uci.ics.asterix.optimizer.rules.am.IntroduceSelectAccessMethodRule;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.BreakSelectIntoConjunctsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ComplexJoinInferenceRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ComplexUnnestToProductRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ConsolidateAssignsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ConsolidateSelectsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.EliminateSubplanRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.EnforceOrderByAfterSubplan;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.EnforceStructuralPropertiesRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractCommonExpressionsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractCommonOperatorsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ExtractGbyExpressionsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.FactorRedundantGroupAndDecorVarsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.InferTypesRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.InlineAssignIntoAggregateRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.InlineSingleReferenceVariablesRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.InsertOuterJoinRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.InsertProjectBeforeUnionRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroHashPartitionMergeExchange;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroJoinInsideSubplanRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceAggregateCombinerRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceGroupByCombinerRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceGroupByForSubplanRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IntroduceProjectsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.IsolateHyracksOperatorsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PullSelectOutOfEqJoin;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushAssignBelowUnionAllRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushAssignDownThroughProductRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushDieUpRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushLimitDownRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushNestedOrderByUnderPreSortedGroupByRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushProjectDownRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushSelectDownRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushSelectIntoJoinRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.PushSubplanWithAggregateDownThroughProductRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.ReinferAllTypesRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.RemoveRedundantGroupByDecorVars;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.RemoveRedundantVariablesRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.RemoveUnusedAssignAndAggregateRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.SetAlgebricksPhysicalOperatorsRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.SetExecutionModeRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.SimpleUnnestToProductRule;
-import edu.uci.ics.hyracks.algebricks.rewriter.rules.SubplanOutOfGroupRule;
-
-public final class RuleCollections {
-
-    public final static List<IAlgebraicRewriteRule> buildTypeInferenceRuleCollection() {
-        List<IAlgebraicRewriteRule> typeInfer = new LinkedList<IAlgebraicRewriteRule>();
-        typeInfer.add(new InlineUnnestFunctionRule());
-        typeInfer.add(new InferTypesRule());
-        return typeInfer;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildNormalizationRuleCollection() {
-        List<IAlgebraicRewriteRule> normalization = new LinkedList<IAlgebraicRewriteRule>();
-        normalization.add(new EliminateSubplanRule());
-        normalization.add(new EnforceOrderByAfterSubplan());
-        normalization.add(new PushAggFuncIntoStandaloneAggregateRule());
-        normalization.add(new BreakSelectIntoConjunctsRule());
-        normalization.add(new ExtractGbyExpressionsRule());
-        normalization.add(new ExtractDistinctByExpressionsRule());
-        normalization.add(new ExtractOrderExpressionsRule());
-        normalization.add(new ExtractCommonExpressionsRule());
-
-        // IntroduceStaticTypeCastRule should go before
-        // IntroduceDynamicTypeCastRule to
-        // avoid unnecessary dynamic casting
-        normalization.add(new IntroduceStaticTypeCastRule());
-        normalization.add(new IntroduceDynamicTypeCastRule());
-        normalization.add(new IntroduceEnforcedListTypeRule());
-        normalization.add(new ConstantFoldingRule());
-        normalization.add(new UnnestToDataScanRule());
-        normalization.add(new IfElseToSwitchCaseFunctionRule());
-        normalization.add(new FuzzyEqRule());
-        normalization.add(new SimilarityCheckRule());
-        return normalization;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildCondPushDownAndJoinInferenceRuleCollection() {
-        List<IAlgebraicRewriteRule> condPushDownAndJoinInference = new LinkedList<IAlgebraicRewriteRule>();
-
-        condPushDownAndJoinInference.add(new PushSelectDownRule());
-        condPushDownAndJoinInference.add(new PushDieUpRule());
-        condPushDownAndJoinInference.add(new RemoveRedundantListifyRule());
-        condPushDownAndJoinInference.add(new SimpleUnnestToProductRule());
-        condPushDownAndJoinInference.add(new ComplexUnnestToProductRule());
-        condPushDownAndJoinInference.add(new ComplexJoinInferenceRule());
-        condPushDownAndJoinInference.add(new PushSelectIntoJoinRule());
-        condPushDownAndJoinInference.add(new IntroJoinInsideSubplanRule());
-        condPushDownAndJoinInference.add(new PushAssignDownThroughProductRule());
-        condPushDownAndJoinInference.add(new PushSubplanWithAggregateDownThroughProductRule());
-        condPushDownAndJoinInference.add(new IntroduceGroupByForSubplanRule());
-        condPushDownAndJoinInference.add(new SubplanOutOfGroupRule());
-        condPushDownAndJoinInference.add(new InsertOuterJoinRule());
-
-        condPushDownAndJoinInference.add(new RemoveRedundantVariablesRule());
-        condPushDownAndJoinInference.add(new AsterixInlineVariablesRule());
-        condPushDownAndJoinInference.add(new RemoveUnusedAssignAndAggregateRule());
-
-        condPushDownAndJoinInference.add(new FactorRedundantGroupAndDecorVarsRule());
-        condPushDownAndJoinInference.add(new PushAggregateIntoGroupbyRule());
-        condPushDownAndJoinInference.add(new EliminateSubplanRule());
-        condPushDownAndJoinInference.add(new PushProperJoinThroughProduct());
-        condPushDownAndJoinInference.add(new PushGroupByThroughProduct());
-        condPushDownAndJoinInference.add(new NestGroupByRule());
-
-        return condPushDownAndJoinInference;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildLoadFieldsRuleCollection() {
-        List<IAlgebraicRewriteRule> fieldLoads = new LinkedList<IAlgebraicRewriteRule>();
-        fieldLoads.add(new LoadRecordFieldsRule());
-        fieldLoads.add(new PushFieldAccessRule());
-        // fieldLoads.add(new ByNameToByHandleFieldAccessRule()); -- disabled
-        fieldLoads.add(new ByNameToByIndexFieldAccessRule());
-        fieldLoads.add(new RemoveRedundantVariablesRule());
-        fieldLoads.add(new AsterixInlineVariablesRule());
-        fieldLoads.add(new RemoveUnusedAssignAndAggregateRule());
-        fieldLoads.add(new ConstantFoldingRule());
-        fieldLoads.add(new FeedScanCollectionToUnnest());
-        fieldLoads.add(new ComplexJoinInferenceRule());
-        return fieldLoads;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildFuzzyJoinRuleCollection() {
-        List<IAlgebraicRewriteRule> fuzzy = new LinkedList<IAlgebraicRewriteRule>();
-        // fuzzy.add(new FuzzyJoinRule()); -- The non-indexed fuzzy join will be temporarily disabled. It should be enabled some time in the near future.
-        fuzzy.add(new InferTypesRule());
-        return fuzzy;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildConsolidationRuleCollection() {
-        List<IAlgebraicRewriteRule> consolidation = new LinkedList<IAlgebraicRewriteRule>();
-        consolidation.add(new ConsolidateSelectsRule());
-        consolidation.add(new ConsolidateAssignsRule());
-        consolidation.add(new InlineAssignIntoAggregateRule());
-        consolidation.add(new IntroduceGroupByCombinerRule());
-        consolidation.add(new IntroduceAggregateCombinerRule());
-        consolidation.add(new CountVarToCountOneRule());
-        consolidation.add(new RemoveUnusedAssignAndAggregateRule());
-        consolidation.add(new RemoveRedundantGroupByDecorVars());
-        return consolidation;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildAccessMethodRuleCollection() {
-        List<IAlgebraicRewriteRule> accessMethod = new LinkedList<IAlgebraicRewriteRule>();
-        accessMethod.add(new IntroduceSelectAccessMethodRule());
-        accessMethod.add(new IntroduceJoinAccessMethodRule());
-        accessMethod.add(new IntroduceSecondaryIndexInsertDeleteRule());
-        accessMethod.add(new RemoveUnusedOneToOneEquiJoinRule());
-        accessMethod.add(new PushSimilarityFunctionsBelowJoin());
-        accessMethod.add(new RemoveUnusedAssignAndAggregateRule());
-        return accessMethod;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildPlanCleanupRuleCollection() {
-        List<IAlgebraicRewriteRule> planCleanupRules = new LinkedList<IAlgebraicRewriteRule>();
-        planCleanupRules.add(new PushAssignBelowUnionAllRule());
-        planCleanupRules.add(new ExtractCommonExpressionsRule());
-        planCleanupRules.add(new RemoveRedundantVariablesRule());
-        planCleanupRules.add(new PushProjectDownRule());
-        planCleanupRules.add(new PushSelectDownRule());
-        planCleanupRules.add(new RemoveUnusedAssignAndAggregateRule());
-        return planCleanupRules;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildDataExchangeRuleCollection() {
-        List<IAlgebraicRewriteRule> dataExchange = new LinkedList<IAlgebraicRewriteRule>();
-        dataExchange.add(new SetExecutionModeRule());
-        return dataExchange;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesAllLevelsRuleCollection() {
-        List<IAlgebraicRewriteRule> physicalRewritesAllLevels = new LinkedList<IAlgebraicRewriteRule>();
-        physicalRewritesAllLevels.add(new PullSelectOutOfEqJoin());
-        //Turned off the following rule for now not to change OptimizerTest results.
-        //physicalRewritesAllLevels.add(new IntroduceTransactionCommitByAssignOpRule());
-        physicalRewritesAllLevels.add(new ReplaceSinkOpWithCommitOpRule());
-        physicalRewritesAllLevels.add(new SetAlgebricksPhysicalOperatorsRule());
-        physicalRewritesAllLevels.add(new SetAsterixPhysicalOperatorsRule());
-        physicalRewritesAllLevels.add(new IntroduceInstantLockSearchCallbackRule());
-        physicalRewritesAllLevels.add(new EnforceStructuralPropertiesRule());
-        physicalRewritesAllLevels.add(new IntroHashPartitionMergeExchange());
-        physicalRewritesAllLevels.add(new SetClosedRecordConstructorsRule());
-        physicalRewritesAllLevels.add(new PullPositionalVariableFromUnnestRule());
-        physicalRewritesAllLevels.add(new PushProjectDownRule());
-        physicalRewritesAllLevels.add(new InsertProjectBeforeUnionRule());
-        physicalRewritesAllLevels.add(new InlineSingleReferenceVariablesRule());
-        physicalRewritesAllLevels.add(new RemoveUnusedAssignAndAggregateRule());
-        physicalRewritesAllLevels.add(new ConsolidateAssignsRule());
-        // After adding projects, we may need need to set physical operators again.
-        physicalRewritesAllLevels.add(new SetAlgebricksPhysicalOperatorsRule());
-        return physicalRewritesAllLevels;
-    }
-
-    public final static List<IAlgebraicRewriteRule> buildPhysicalRewritesTopLevelRuleCollection() {
-        List<IAlgebraicRewriteRule> physicalRewritesTopLevel = new LinkedList<IAlgebraicRewriteRule>();
-        physicalRewritesTopLevel.add(new PushNestedOrderByUnderPreSortedGroupByRule());
-        physicalRewritesTopLevel.add(new PushLimitDownRule());
-        physicalRewritesTopLevel.add(new IntroduceProjectsRule());
-        physicalRewritesTopLevel.add(new SetAlgebricksPhysicalOperatorsRule());
-        physicalRewritesTopLevel.add(new SetExecutionModeRule());
-        return physicalRewritesTopLevel;
-    }
-
-    public final static List<IAlgebraicRewriteRule> prepareForJobGenRuleCollection() {
-        List<IAlgebraicRewriteRule> prepareForJobGenRewrites = new LinkedList<IAlgebraicRewriteRule>();
-        prepareForJobGenRewrites.add(new IsolateHyracksOperatorsRule(
-                HeuristicOptimizer.hyraxOperatorsBelowWhichJobGenIsDisabled));
-        prepareForJobGenRewrites.add(new ExtractCommonOperatorsRule());
-        // Re-infer all types, so that, e.g., the effect of not-is-null is
-        // propagated.
-        prepareForJobGenRewrites.add(new ReinferAllTypesRule());
-        return prepareForJobGenRewrites;
-    }
-
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
deleted file mode 100644
index 2dce5f6..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.optimizer.rules;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.aql.util.FunctionUtils;
-import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
-
-/**
- * Dynamically cast a variable from its type to a specified required type, in a
- * recursive way. It enables: 1. bag-based fields in a record, 2. bidirectional
- * cast of a open field and a matched closed field, and 3. put in null fields
- * when necessary.
- * Here is an example: A record { "hobby": {{"music", "coding"}}, "id": "001",
- * "name": "Person Three"} which confirms to closed type ( id: string, name:
- * string, hobby: {{string}}? ) can be cast to an open type (id: string ), or
- * vice versa.
- * However, if the input record is a variable, then we don't know its exact
- * field layout at compile time. For example, records conforming to the same
- * type can have different field orderings and different open parts. That's why
- * we need dynamic type casting.
- * Note that as we can see in the example, the ordering of fields of a record is
- * not required. Since the open/closed part of a record has completely different
- * underlying memory/storage layout, a cast-record function will change the
- * layout as specified at runtime.
- * Implementation wise, this rule checks the target dataset type and the input
- * record type, and if the types are different, then it plugs in an assign with
- * a cast-record function, and projects away the original (uncast) field.
- */
-public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
-
-    @Override
-    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
-        return false;
-    }
-
-    @Override
-    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
-            throws AlgebricksException {
-        /**
-         * pattern match: sink insert assign
-         * resulting plan: sink-insert-project-assign
-         */
-        AbstractLogicalOperator op1 = (AbstractLogicalOperator) opRef.getValue();
-        if (op1.getOperatorTag() != LogicalOperatorTag.SINK)
-            return false;
-        AbstractLogicalOperator op2 = (AbstractLogicalOperator) op1.getInputs().get(0).getValue();
-        if (op2.getOperatorTag() != LogicalOperatorTag.INSERT_DELETE)
-            return false;
-        InsertDeleteOperator insertDeleteOp = (InsertDeleteOperator) op2;
-        if (insertDeleteOp.getOperation() == InsertDeleteOperator.Kind.DELETE)
-            return false;
-        AbstractLogicalOperator op3 = (AbstractLogicalOperator) op2.getInputs().get(0).getValue();
-        if (op3.getOperatorTag() != LogicalOperatorTag.ASSIGN)
-            return false;
-
-        InsertDeleteOperator insertDeleteOperator = (InsertDeleteOperator) op2;
-        AssignOperator oldAssignOperator = (AssignOperator) op3;
-
-        AqlDataSource dataSource = (AqlDataSource) insertDeleteOperator.getDataSource();
-        IAType[] schemaTypes = (IAType[]) dataSource.getSchemaTypes();
-        ARecordType requiredRecordType = (ARecordType) schemaTypes[schemaTypes.length - 1];
-
-        List<LogicalVariable> usedVariables = new ArrayList<LogicalVariable>();
-        VariableUtilities.getUsedVariables(oldAssignOperator, usedVariables);
-        LogicalVariable inputRecordVar;
-        if (usedVariables.size() > 0) {
-            inputRecordVar = usedVariables.get(0);
-        } else {
-            VariableUtilities.getLiveVariables(oldAssignOperator, usedVariables);
-            inputRecordVar = usedVariables.get(0);
-        }
-        IVariableTypeEnvironment env = oldAssignOperator.computeInputTypeEnvironment(context);
-        ARecordType inputRecordType = (ARecordType) env.getVarType(inputRecordVar);
-
-        boolean needCast = !requiredRecordType.equals(inputRecordType);
-        if (!needCast)
-            return false;
-
-        // insert
-        // project
-        // assign
-        // assign
-        AbstractFunctionCallExpression cast = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CAST_RECORD));
-        ARecordType[] types = new ARecordType[2];
-        types[0] = requiredRecordType;
-        types[1] = inputRecordType;
-        cast.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(inputRecordVar)));
-        cast.setOpaqueParameters(types);
-        LogicalVariable newAssignVar = context.newVar();
-        AssignOperator newAssignOperator = new AssignOperator(newAssignVar, new MutableObject<ILogicalExpression>(cast));
-        newAssignOperator.getInputs().add(new MutableObject<ILogicalOperator>(op3));
-
-        List<LogicalVariable> projectVariables = new ArrayList<LogicalVariable>();
-        VariableUtilities.getProducedVariables(oldAssignOperator, projectVariables);
-        projectVariables.add(newAssignVar);
-        ProjectOperator projectOperator = new ProjectOperator(projectVariables);
-        projectOperator.getInputs().add(new MutableObject<ILogicalOperator>(newAssignOperator));
-
-        ILogicalExpression payloadExpr = new VariableReferenceExpression(newAssignVar);
-        MutableObject<ILogicalExpression> payloadRef = new MutableObject<ILogicalExpression>(payloadExpr);
-        InsertDeleteOperator newInserDeleteOperator = new InsertDeleteOperator(insertDeleteOperator.getDataSource(),
-                payloadRef, insertDeleteOperator.getPrimaryKeyExpressions(), insertDeleteOperator.getOperation());
-        newInserDeleteOperator.getInputs().add(new MutableObject<ILogicalOperator>(projectOperator));
-        insertDeleteOperator.getInputs().clear();
-        op1.getInputs().get(0).setValue(newInserDeleteOperator);
-        return true;
-    }
-
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
deleted file mode 100644
index c99e4bc..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
+++ /dev/null
@@ -1,264 +0,0 @@
-package edu.uci.ics.asterix.optimizer.rules;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.aql.util.FunctionUtils;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
-import edu.uci.ics.asterix.metadata.declared.AqlIndex;
-import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.IndexInsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
-
-public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewriteRule {
-
-    @Override
-    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
-        return false;
-    }
-
-    @Override
-    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
-            throws AlgebricksException {
-        AbstractLogicalOperator op0 = (AbstractLogicalOperator) opRef.getValue();
-        if (op0.getOperatorTag() != LogicalOperatorTag.SINK) {
-            return false;
-        }
-        AbstractLogicalOperator op1 = (AbstractLogicalOperator) op0.getInputs().get(0).getValue();
-        if (op1.getOperatorTag() != LogicalOperatorTag.INSERT_DELETE) {
-            return false;
-        }
-
-        FunctionIdentifier fid = null;
-        /** op2 is the assign operator which extract primary keys from the record variable */
-        AbstractLogicalOperator op2 = (AbstractLogicalOperator) op1.getInputs().get(0).getValue();
-        List<LogicalVariable> recordVar = new ArrayList<LogicalVariable>();
-        VariableUtilities.getUsedVariables(op2, recordVar);
-        if (recordVar.size() == 0) {
-            /**
-             * For the case primary key-assignment expressions are constant expressions,
-             * find assign op that creates record to be inserted/deleted.
-             */
-            while (fid != AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR) {
-                if (op2.getInputs().size() == 0) {
-                    return false;
-                }
-                op2 = (AbstractLogicalOperator) op2.getInputs().get(0).getValue();
-                if (op2.getOperatorTag() != LogicalOperatorTag.ASSIGN) {
-                    continue;
-                }
-                AssignOperator assignOp = (AssignOperator) op2;
-                ILogicalExpression assignExpr = assignOp.getExpressions().get(0).getValue();
-                if (assignExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                    ScalarFunctionCallExpression funcExpr = (ScalarFunctionCallExpression) assignOp.getExpressions()
-                            .get(0).getValue();
-                    fid = funcExpr.getFunctionIdentifier();
-                }
-            }
-            AssignOperator assignOp2 = (AssignOperator) op2;
-            recordVar.addAll(assignOp2.getVariables());
-        }
-        InsertDeleteOperator insertOp = (InsertDeleteOperator) op1;
-        AqlDataSource datasetSource = (AqlDataSource) insertOp.getDataSource();
-        AqlMetadataProvider mp = (AqlMetadataProvider) context.getMetadataProvider();
-        String dataverseName = datasetSource.getId().getDataverseName();
-        String datasetName = datasetSource.getId().getDatasetName();
-        Dataset dataset = mp.findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
-            return false;
-        }
-
-        List<LogicalVariable> projectVars = new ArrayList<LogicalVariable>();
-        VariableUtilities.getUsedVariables(op1, projectVars);
-        // Create operators for secondary index insert/delete.
-        String itemTypeName = dataset.getItemTypeName();
-        IAType itemType = mp.findType(dataset.getDataverseName(), itemTypeName);
-        if (itemType.getTypeTag() != ATypeTag.RECORD) {
-            throw new AlgebricksException("Only record types can be indexed.");
-        }
-        ARecordType recType = (ARecordType) itemType;
-        List<Index> indexes = mp.getDatasetIndexes(dataset.getDataverseName(), dataset.getDatasetName());
-        ILogicalOperator currentTop = op1;
-        boolean hasSecondaryIndex = false;
-        for (Index index : indexes) {
-            if (!index.isSecondaryIndex()) {
-                continue;
-            }
-            hasSecondaryIndex = true;
-            List<String> secondaryKeyFields = index.getKeyFieldNames();
-            List<LogicalVariable> secondaryKeyVars = new ArrayList<LogicalVariable>();
-            List<Mutable<ILogicalExpression>> expressions = new ArrayList<Mutable<ILogicalExpression>>();
-            List<Mutable<ILogicalExpression>> secondaryExpressions = new ArrayList<Mutable<ILogicalExpression>>();
-            for (String secondaryKey : secondaryKeyFields) {
-                Mutable<ILogicalExpression> varRef = new MutableObject<ILogicalExpression>(
-                        new VariableReferenceExpression(recordVar.get(0)));
-                String[] fieldNames = recType.getFieldNames();
-                int pos = -1;
-                for (int j = 0; j < fieldNames.length; j++) {
-                    if (fieldNames[j].equals(secondaryKey)) {
-                        pos = j;
-                        break;
-                    }
-                }
-                // Assumes the indexed field is in the closed portion of the type.
-                Mutable<ILogicalExpression> indexRef = new MutableObject<ILogicalExpression>(new ConstantExpression(
-                        new AsterixConstantValue(new AInt32(pos))));
-                AbstractFunctionCallExpression func = new ScalarFunctionCallExpression(
-                        FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX), varRef, indexRef);
-                expressions.add(new MutableObject<ILogicalExpression>(func));
-                LogicalVariable newVar = context.newVar();
-                secondaryKeyVars.add(newVar);
-            }
-
-            AssignOperator assign = new AssignOperator(secondaryKeyVars, expressions);
-            ProjectOperator project = new ProjectOperator(projectVars);
-            assign.getInputs().add(new MutableObject<ILogicalOperator>(project));
-            project.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
-            context.computeAndSetTypeEnvironmentForOperator(project);
-            context.computeAndSetTypeEnvironmentForOperator(assign);
-            if (index.getIndexType() == IndexType.BTREE || index.getIndexType() == IndexType.WORD_INVIX
-                    || index.getIndexType() == IndexType.NGRAM_INVIX
-                    || index.getIndexType() == IndexType.FUZZY_WORD_INVIX
-                    || index.getIndexType() == IndexType.FUZZY_NGRAM_INVIX) {
-                for (LogicalVariable secondaryKeyVar : secondaryKeyVars) {
-                    secondaryExpressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
-                            secondaryKeyVar)));
-                }
-                Mutable<ILogicalExpression> filterExpression = createFilterExpression(secondaryKeyVars,
-                        context.getOutputTypeEnvironment(assign), false);
-                AqlIndex dataSourceIndex = new AqlIndex(index, dataverseName, datasetName, mp);
-                IndexInsertDeleteOperator indexUpdate = new IndexInsertDeleteOperator(dataSourceIndex,
-                        insertOp.getPrimaryKeyExpressions(), secondaryExpressions, filterExpression,
-                        insertOp.getOperation());
-                indexUpdate.getInputs().add(new MutableObject<ILogicalOperator>(assign));
-                currentTop = indexUpdate;
-                context.computeAndSetTypeEnvironmentForOperator(indexUpdate);
-            } else if (index.getIndexType() == IndexType.RTREE) {
-                Pair<IAType, Boolean> keyPairType = Index
-                        .getNonNullableKeyFieldType(secondaryKeyFields.get(0), recType);
-                IAType spatialType = keyPairType.first;
-                int dimension = NonTaggedFormatUtil.getNumDimensions(spatialType.getTypeTag());
-                int numKeys = dimension * 2;
-                List<LogicalVariable> keyVarList = new ArrayList<LogicalVariable>();
-                List<Mutable<ILogicalExpression>> keyExprList = new ArrayList<Mutable<ILogicalExpression>>();
-                for (int i = 0; i < numKeys; i++) {
-                    LogicalVariable keyVar = context.newVar();
-                    keyVarList.add(keyVar);
-                    AbstractFunctionCallExpression createMBR = new ScalarFunctionCallExpression(
-                            FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CREATE_MBR));
-                    createMBR.getArguments().add(
-                            new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVars
-                                    .get(0))));
-                    createMBR.getArguments().add(
-                            new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                                    new AInt32(dimension)))));
-                    createMBR.getArguments().add(
-                            new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                                    new AInt32(i)))));
-                    keyExprList.add(new MutableObject<ILogicalExpression>(createMBR));
-                }
-                for (LogicalVariable secondaryKeyVar : keyVarList) {
-                    secondaryExpressions.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
-                            secondaryKeyVar)));
-                }
-                AssignOperator assignCoordinates = new AssignOperator(keyVarList, keyExprList);
-                assignCoordinates.getInputs().add(new MutableObject<ILogicalOperator>(assign));
-                context.computeAndSetTypeEnvironmentForOperator(assignCoordinates);
-                // We must enforce the filter if the originating spatial type is nullable.
-                boolean forceFilter = keyPairType.second;
-                Mutable<ILogicalExpression> filterExpression = createFilterExpression(keyVarList,
-                        context.getOutputTypeEnvironment(assignCoordinates), forceFilter);
-                AqlIndex dataSourceIndex = new AqlIndex(index, dataverseName, datasetName, mp);
-                IndexInsertDeleteOperator indexUpdate = new IndexInsertDeleteOperator(dataSourceIndex,
-                        insertOp.getPrimaryKeyExpressions(), secondaryExpressions, filterExpression,
-                        insertOp.getOperation());
-                indexUpdate.getInputs().add(new MutableObject<ILogicalOperator>(assignCoordinates));
-                currentTop = indexUpdate;
-                context.computeAndSetTypeEnvironmentForOperator(indexUpdate);
-            }
-        }
-        if (!hasSecondaryIndex) {
-            return false;
-        }
-        op0.getInputs().clear();
-        op0.getInputs().add(new MutableObject<ILogicalOperator>(currentTop));
-        return true;
-    }
-
-    @SuppressWarnings("unchecked")
-    private Mutable<ILogicalExpression> createFilterExpression(List<LogicalVariable> secondaryKeyVars,
-            IVariableTypeEnvironment typeEnv, boolean forceFilter) throws AlgebricksException {
-        List<Mutable<ILogicalExpression>> filterExpressions = new ArrayList<Mutable<ILogicalExpression>>();
-        // Add 'is not null' to all nullable secondary index keys as a filtering condition.
-        for (LogicalVariable secondaryKeyVar : secondaryKeyVars) {
-            IAType secondaryKeyType = (IAType) typeEnv.getVarType(secondaryKeyVar);
-            if (!isNullableType(secondaryKeyType) && !forceFilter) {
-                continue;
-            }
-            ScalarFunctionCallExpression isNullFuncExpr = new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.IS_NULL),
-                    new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVar)));
-            ScalarFunctionCallExpression notFuncExpr = new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.NOT), new MutableObject<ILogicalExpression>(
-                            isNullFuncExpr));
-            filterExpressions.add(new MutableObject<ILogicalExpression>(notFuncExpr));
-        }
-        // No nullable secondary keys.
-        if (filterExpressions.isEmpty()) {
-            return null;
-        }
-        Mutable<ILogicalExpression> filterExpression = null;
-        if (filterExpressions.size() > 1) {
-            // Create a conjunctive condition.
-            filterExpression = new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.AND), filterExpressions));
-        } else {
-            filterExpression = filterExpressions.get(0);
-        }
-        return filterExpression;
-    }
-
-    private boolean isNullableType(IAType type) {
-        if (type.getTypeTag() == ATypeTag.UNION) {
-            return ((AUnionType) type).isNullableType();
-        }
-        return false;
-    }
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
deleted file mode 100644
index 3aae2dd..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.optimizer.rules;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.lang3.mutable.Mutable;
-
-import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
-import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.optimizer.rules.typecast.StaticTypeCastUtil;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
-
-/**
- * Statically cast a constant from its type to a specified required type, in a
- * recursive way. It enables: 1. bag-based fields in a record, 2. bidirectional
- * cast of a open field and a matched closed field, and 3. put in null fields
- * when necessary. It should be fired before the constant folding rule.
- * This rule is not responsible for type casting between primitive types.
- * Here is an example: A record { "hobby": {{"music", "coding"}}, "id": "001",
- * "name": "Person Three"} which confirms to closed type ( id: string, name:
- * string, hobby: {{string}}? ) can be cast to an open type (id: string ), or
- * vice versa.
- * Implementation wise: first, we match the record's type and its target dataset
- * type to see if it is "cast-able"; second, if the types are cast-able, we
- * embed the required type into the original producer expression. If the types
- * are not cast-able, we throw a compile time exception.
- * Then, at runtime (not in this rule), the corresponding record/list
- * constructors know what to do by checking the required output type.
- * TODO: right now record/list constructor of the cast result is not done in the
- * ConstantFoldingRule and has to go to the runtime, because the
- * ConstantFoldingRule uses ARecordSerializerDeserializer which seems to have
- * some problem.
- */
-public class IntroduceStaticTypeCastRule implements IAlgebraicRewriteRule {
-
-    @Override
-    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
-        return false;
-    }
-
-    @Override
-    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
-            throws AlgebricksException {
-        /**
-         * pattern match: sink/insert/assign record type is propagated from
-         * insert data source to the record-constructor expression
-         */
-        if (context.checkIfInDontApplySet(this, opRef.getValue()))
-            return false;
-        context.addToDontApplySet(this, opRef.getValue());
-
-        AbstractLogicalOperator op1 = (AbstractLogicalOperator) opRef.getValue();
-        List<LogicalVariable> producedVariables = new ArrayList<LogicalVariable>();
-        LogicalVariable oldRecordVariable;
-
-        if (op1.getOperatorTag() != LogicalOperatorTag.SINK)
-            return false;
-        AbstractLogicalOperator op2 = (AbstractLogicalOperator) op1.getInputs().get(0).getValue();
-        if (op2.getOperatorTag() != LogicalOperatorTag.INSERT_DELETE)
-            return false;
-        InsertDeleteOperator insertDeleteOp = (InsertDeleteOperator) op2;
-        if (insertDeleteOp.getOperation() == InsertDeleteOperator.Kind.DELETE)
-            return false;
-        AbstractLogicalOperator assignOp = (AbstractLogicalOperator) op2.getInputs().get(0).getValue();
-        if (assignOp.getOperatorTag() != LogicalOperatorTag.ASSIGN)
-            return false;
-        /**
-         * get required record type
-         */
-        InsertDeleteOperator insertDeleteOperator = (InsertDeleteOperator) op2;
-        AqlDataSource dataSource = (AqlDataSource) insertDeleteOperator.getDataSource();
-        IAType[] schemaTypes = (IAType[]) dataSource.getSchemaTypes();
-        IAType requiredRecordType = schemaTypes[schemaTypes.length - 1];
-
-        AssignOperator topAssignOperator = (AssignOperator) assignOp;
-        List<LogicalVariable> usedVariables = new ArrayList<LogicalVariable>();
-        VariableUtilities.getUsedVariables(topAssignOperator, usedVariables);
-
-        // the used variable should contain the record that will be inserted
-        // but it will not fail in many cases even if the used variable set is
-        // empty
-        if (usedVariables.size() == 0)
-            return false;
-        oldRecordVariable = usedVariables.get(0);
-        LogicalVariable inputRecordVar = usedVariables.get(0);
-        IVariableTypeEnvironment env = topAssignOperator.computeOutputTypeEnvironment(context);
-        IAType inputRecordType = (IAType) env.getVarType(inputRecordVar);
-
-        AbstractLogicalOperator currentOperator = assignOp;
-        /**
-         * find the assign operator for the "input record" to the insert_delete
-         * operator
-         */
-        do {
-            context.addToDontApplySet(this, currentOperator);
-            if (currentOperator.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
-                producedVariables.clear();
-                VariableUtilities.getProducedVariables(currentOperator, producedVariables);
-                int position = producedVariables.indexOf(oldRecordVariable);
-
-                /**
-                 * set the top-down propagated type
-                 */
-                if (position >= 0) {
-                    AssignOperator originalAssign = (AssignOperator) currentOperator;
-                    List<Mutable<ILogicalExpression>> expressionRefs = originalAssign.getExpressions();
-                    ILogicalExpression expr = expressionRefs.get(position).getValue();
-                    if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                        AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
-                        // that expression has been rewritten, and it will not
-                        // fail but just return false
-                        if (TypeComputerUtilities.getRequiredType(funcExpr) != null) {
-                            context.computeAndSetTypeEnvironmentForOperator(assignOp);
-                            return false;
-                        }
-                        IVariableTypeEnvironment assignEnv = assignOp.computeOutputTypeEnvironment(context);
-                        StaticTypeCastUtil.rewriteFuncExpr(funcExpr, requiredRecordType, inputRecordType, assignEnv);
-                    }
-                    context.computeAndSetTypeEnvironmentForOperator(originalAssign);
-                }
-            }
-            if (currentOperator.getInputs().size() > 0)
-                currentOperator = (AbstractLogicalOperator) currentOperator.getInputs().get(0).getValue();
-            else
-                break;
-        } while (currentOperator != null);
-        return true;
-    }
-
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
deleted file mode 100644
index c5a1cb0..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/PushAggFuncIntoStandaloneAggregateRule.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.optimizer.rules;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.IOptimizationContext;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
-
-/**
- * Pushes aggregate functions into a stand alone aggregate operator (no group by). 
- */
-public class PushAggFuncIntoStandaloneAggregateRule implements IAlgebraicRewriteRule {
-
-    @Override
-    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
-        return false;
-    }
-
-    @Override
-    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
-            throws AlgebricksException {
-        // Pattern to match: assign <-- aggregate <-- !(group-by)
-        AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
-        if (op.getOperatorTag() != LogicalOperatorTag.ASSIGN) {
-            return false;
-        }
-        Mutable<ILogicalOperator> opRef2 = op.getInputs().get(0);
-        AbstractLogicalOperator op2 = (AbstractLogicalOperator) opRef2.getValue();
-        if (op2.getOperatorTag() != LogicalOperatorTag.AGGREGATE) {
-            return false;
-        }
-        // If there's a group by below the agg, then we want to have the agg pushed into the group by.
-        Mutable<ILogicalOperator> opRef3 = op2.getInputs().get(0);
-        AbstractLogicalOperator op3 = (AbstractLogicalOperator) opRef3.getValue();
-        if (op3.getOperatorTag() == LogicalOperatorTag.GROUP) {
-            return false;
-        }
-        
-        AssignOperator assignOp = (AssignOperator) op;
-        AggregateOperator aggOp = (AggregateOperator) op2;
-        if (aggOp.getVariables().size() != 1) {
-            return false;
-        }
-
-        // Make sure the agg expr is a listify.
-        ILogicalExpression aggExpr = aggOp.getExpressions().get(0).getValue();
-        if (aggExpr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
-            return false;
-        }
-        AbstractFunctionCallExpression origAggFuncExpr = (AbstractFunctionCallExpression) aggExpr;
-        if (origAggFuncExpr.getFunctionIdentifier() != AsterixBuiltinFunctions.LISTIFY) {
-            return false;
-        }
-        
-        LogicalVariable aggVar = aggOp.getVariables().get(0);
-        List<LogicalVariable> used = new LinkedList<LogicalVariable>();
-        VariableUtilities.getUsedVariables(assignOp, used);
-        if (!used.contains(aggVar)) {
-            return false;
-        }
-        
-        Mutable<ILogicalExpression> srcAssignExprRef = fingAggFuncExprRef(assignOp.getExpressions(), aggVar);
-        if (srcAssignExprRef == null) {
-        	return false;
-        }
-        AbstractFunctionCallExpression assignFuncExpr = (AbstractFunctionCallExpression) srcAssignExprRef.getValue();
-        FunctionIdentifier aggFuncIdent = AsterixBuiltinFunctions.getAggregateFunction(assignFuncExpr.getFunctionIdentifier());
-        
-        // Push the agg func into the agg op.                
-        AbstractFunctionCallExpression aggOpExpr = (AbstractFunctionCallExpression) aggOp.getExpressions().get(0).getValue();
-        List<Mutable<ILogicalExpression>> aggArgs = new ArrayList<Mutable<ILogicalExpression>>();
-        aggArgs.add(aggOpExpr.getArguments().get(0));
-        AggregateFunctionCallExpression aggFuncExpr = AsterixBuiltinFunctions.makeAggregateFunctionExpression(aggFuncIdent, aggArgs);
-        aggOp.getExpressions().get(0).setValue(aggFuncExpr);
-        
-        // The assign now just "renames" the variable to make sure the upstream plan still works.
-        srcAssignExprRef.setValue(new VariableReferenceExpression(aggVar));
-
-        // Create a new assign for a TRUE variable.
-        LogicalVariable trueVar = context.newVar();
-        AssignOperator trueAssignOp = new AssignOperator(trueVar, new MutableObject<ILogicalExpression>(ConstantExpression.TRUE));
-        
-        ILogicalOperator aggInput = aggOp.getInputs().get(0).getValue();
-        aggOp.getInputs().get(0).setValue(trueAssignOp);
-        trueAssignOp.getInputs().add(new MutableObject<ILogicalOperator>(aggInput));
-        
-        // Set partitioning variable.
-        aggOp.setPartitioningVariable(trueVar);
-        
-        context.computeAndSetTypeEnvironmentForOperator(trueAssignOp);
-        context.computeAndSetTypeEnvironmentForOperator(aggOp);
-        context.computeAndSetTypeEnvironmentForOperator(assignOp);
-        
-        return true;
-    }
-    
-    private Mutable<ILogicalExpression> fingAggFuncExprRef(List<Mutable<ILogicalExpression>> exprRefs, LogicalVariable aggVar) {
-    	for (Mutable<ILogicalExpression> exprRef : exprRefs) {
-            ILogicalExpression expr = exprRef.getValue();
-            if (expr.getExpressionTag() != LogicalExpressionTag.FUNCTION_CALL) {
-                continue;
-            }
-            AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
-            FunctionIdentifier funcIdent = AsterixBuiltinFunctions.getAggregateFunction(funcExpr.getFunctionIdentifier());
-            if (funcIdent == null) {
-            	// Recursively look in func args.
-            	return fingAggFuncExprRef(funcExpr.getArguments(), aggVar);
-            }
-            // Check if this is the expr that uses aggVar.
-            Collection<LogicalVariable> usedVars = new HashSet<LogicalVariable>();
-            funcExpr.getUsedVariables(usedVars);
-            if (usedVars.contains(aggVar)) {
-            	return exprRef;
-            }
-    	}
-    	return null;
-    }
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
deleted file mode 100644
index 3ba3e96..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/typecast/StaticTypeCastUtil.java
+++ /dev/null
@@ -1,430 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.optimizer.rules.typecast;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.AString;
-import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.functions.AsterixFunctionInfo;
-import edu.uci.ics.asterix.om.pointables.base.DefaultOpenFieldType;
-import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.AbstractCollectionType;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-
-/**
- * This class is utility to do type cast.
- * It offers two public methods:
- * 1. public static boolean rewriteListExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
- * IVariableTypeEnvironment env) throws AlgebricksException, which only enforces the list type recursively.
- * 2. public static boolean rewriteFuncExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
- * IVariableTypeEnvironment env) throws AlgebricksException, which enforces the list type and the record type recursively.
- * 
- * @author yingyib
- */
-public class StaticTypeCastUtil {
-
-    /**
-     * This method is only called when funcExpr contains list constructor function calls.
-     * The List constructor is very special because a nested list is of type List<ANY>.
-     * However, the bottom-up type inference (InferTypeRule in algebricks) did not infer that so we need this method to enforce the type.
-     * We do not want to break the generality of algebricks so this method is called in an ASTERIX rule: @ IntroduceEnforcedListTypeRule} .
-     * 
-     * @param funcExpr
-     *            record constructor function expression
-     * @param requiredListType
-     *            required record type
-     * @param inputRecordType
-     * @param env
-     *            type environment
-     * @throws AlgebricksException
-     */
-    public static boolean rewriteListExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
-            IVariableTypeEnvironment env) throws AlgebricksException {
-        if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR) {
-            if (reqType.equals(BuiltinType.ANY)) {
-                reqType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
-            }
-            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
-                    env);
-        } else if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR) {
-            if (reqType.equals(BuiltinType.ANY)) {
-                reqType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
-            }
-            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
-                    env);
-        } else {
-            List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
-            boolean changed = false;
-            for (Mutable<ILogicalExpression> arg : args) {
-                ILogicalExpression argExpr = arg.getValue();
-                if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                    AbstractFunctionCallExpression argFuncExpr = (AbstractFunctionCallExpression) argExpr;
-                    IAType exprType = (IAType) env.getType(argFuncExpr);
-                    changed = changed || rewriteListExpr(argFuncExpr, exprType, exprType, env);
-                }
-            }
-            return changed;
-        }
-    }
-
-    /**
-     * This method is to recursively enforce required types, for the list type and the record type.
-     * The List constructor is very special because
-     * 1. a nested list in a list is of type List<ANY>;
-     * 2. a nested record in a list is of type Open_Record{}.
-     * The open record constructor is very special because
-     * 1. a nested list in the open part is of type List<ANY>;
-     * 2. a nested record in the open part is of type Open_Record{}.
-     * However, the bottom-up type inference (InferTypeRule in algebricks) did not infer that so we need this method to enforce the type.
-     * We do not want to break the generality of algebricks so this method is called in an ASTERIX rule: @ IntroduceStaticTypeCastRule} .
-     * 
-     * @param funcExpr
-     *            the function expression whose type needs to be top-down enforced
-     * @param reqType
-     *            the required type inferred from parent operators/expressions
-     * @param inputType
-     *            the current inferred
-     * @param env
-     *            the type environment
-     * @return true if the type is casted; otherwise, false.
-     * @throws AlgebricksException
-     */
-    public static boolean rewriteFuncExpr(AbstractFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
-            IVariableTypeEnvironment env) throws AlgebricksException {
-        if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR) {
-            if (reqType.equals(BuiltinType.ANY)) {
-                reqType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
-            }
-            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
-                    env);
-        } else if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR) {
-            if (reqType.equals(BuiltinType.ANY)) {
-                reqType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
-            }
-            return rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType,
-                    env);
-        } else if (inputType.getTypeTag().equals(ATypeTag.RECORD)) {
-            if (reqType.equals(BuiltinType.ANY)) {
-                reqType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
-            }
-            return rewriteRecordFuncExpr(funcExpr, (ARecordType) reqType, (ARecordType) inputType, env);
-        } else {
-            List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
-            boolean changed = false;
-            for (Mutable<ILogicalExpression> arg : args) {
-                ILogicalExpression argExpr = arg.getValue();
-                if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                    AbstractFunctionCallExpression argFuncExpr = (AbstractFunctionCallExpression) argExpr;
-                    IAType exprType = (IAType) env.getType(argFuncExpr);
-                    changed = changed || rewriteFuncExpr(argFuncExpr, exprType, exprType, env);
-                }
-            }
-            return changed;
-        }
-    }
-
-    /**
-     * only called when funcExpr is record constructor
-     * 
-     * @param funcExpr
-     *            record constructor function expression
-     * @param requiredListType
-     *            required record type
-     * @param inputRecordType
-     * @param env
-     *            type environment
-     * @throws AlgebricksException
-     */
-    private static boolean rewriteRecordFuncExpr(AbstractFunctionCallExpression funcExpr,
-            ARecordType requiredRecordType, ARecordType inputRecordType, IVariableTypeEnvironment env)
-            throws AlgebricksException {
-        // if already rewritten, the required type is not null
-        if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
-            return false;
-        TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredRecordType, inputRecordType);
-        staticRecordTypeCast(funcExpr, requiredRecordType, inputRecordType, env);
-        return true;
-    }
-
-    /**
-     * only called when funcExpr is list constructor
-     * 
-     * @param funcExpr
-     *            list constructor function expression
-     * @param requiredListType
-     *            required list type
-     * @param inputListType
-     * @param env
-     *            type environment
-     * @throws AlgebricksException
-     */
-    private static boolean rewriteListFuncExpr(AbstractFunctionCallExpression funcExpr,
-            AbstractCollectionType requiredListType, AbstractCollectionType inputListType, IVariableTypeEnvironment env)
-            throws AlgebricksException {
-        if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
-            return false;
-
-        TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredListType, inputListType);
-        List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
-
-        IAType itemType = requiredListType.getItemType();
-        IAType inputItemType = inputListType.getItemType();
-        for (int j = 0; j < args.size(); j++) {
-            ILogicalExpression arg = args.get(j).getValue();
-            if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) arg;
-                IAType currentItemType = (IAType) env.getType(argFunc);
-                if (inputItemType == null || inputItemType == BuiltinType.ANY) {
-                    currentItemType = (IAType) env.getType(argFunc);
-                    rewriteFuncExpr(argFunc, itemType, currentItemType, env);
-                } else {
-                    rewriteFuncExpr(argFunc, itemType, inputItemType, env);
-                }
-            }
-        }
-        return true;
-    }
-
-    /**
-     * This method statically cast the type of records from their current type to the required type.
-     * 
-     * @param func
-     *            The record constructor expression.
-     * @param reqType
-     *            The required type.
-     * @param inputType
-     *            The current type.
-     * @param env
-     *            The type environment.
-     * @throws AlgebricksException
-     */
-    private static void staticRecordTypeCast(AbstractFunctionCallExpression func, ARecordType reqType,
-            ARecordType inputType, IVariableTypeEnvironment env) throws AlgebricksException {
-        IAType[] reqFieldTypes = reqType.getFieldTypes();
-        String[] reqFieldNames = reqType.getFieldNames();
-        IAType[] inputFieldTypes = inputType.getFieldTypes();
-        String[] inputFieldNames = inputType.getFieldNames();
-
-        int[] fieldPermutation = new int[reqFieldTypes.length];
-        boolean[] nullFields = new boolean[reqFieldTypes.length];
-        boolean[] openFields = new boolean[inputFieldTypes.length];
-
-        Arrays.fill(nullFields, false);
-        Arrays.fill(openFields, true);
-        Arrays.fill(fieldPermutation, -1);
-
-        // forward match: match from actual to required
-        boolean matched = false;
-        for (int i = 0; i < inputFieldNames.length; i++) {
-            String fieldName = inputFieldNames[i];
-            IAType fieldType = inputFieldTypes[i];
-
-            if (2 * i + 1 > func.getArguments().size())
-                throw new AlgebricksException("expression index out of bound");
-
-            // 2*i+1 is the index of field value expression
-            ILogicalExpression arg = func.getArguments().get(2 * i + 1).getValue();
-            matched = false;
-            for (int j = 0; j < reqFieldNames.length; j++) {
-                String reqFieldName = reqFieldNames[j];
-                IAType reqFieldType = reqFieldTypes[j];
-                if (fieldName.equals(reqFieldName)) {
-                    //type matched
-                    if (fieldType.equals(reqFieldType)) {
-                        fieldPermutation[j] = i;
-                        openFields[i] = false;
-                        matched = true;
-
-                        if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                            ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
-                            rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
-                        }
-                        break;
-                    }
-
-                    // match the optional field
-                    if (reqFieldType.getTypeTag() == ATypeTag.UNION
-                            && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
-                        IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
-                                NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
-                        reqFieldType = itemType;
-                        if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
-                            fieldPermutation[j] = i;
-                            openFields[i] = false;
-                            matched = true;
-
-                            // rewrite record expr
-                            if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                                ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
-                                rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
-                            }
-                            break;
-                        }
-                    }
-
-                    // match the optional type input for a non-optional field
-                    // delay that to runtime by calling the not-null function
-                    if (fieldType.getTypeTag() == ATypeTag.UNION
-                            && NonTaggedFormatUtil.isOptionalField((AUnionType) fieldType)) {
-                        IAType itemType = ((AUnionType) fieldType).getUnionList().get(
-                                NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
-                        if (reqFieldType.equals(itemType)) {
-                            fieldPermutation[j] = i;
-                            openFields[i] = false;
-                            matched = true;
-
-                            ScalarFunctionCallExpression notNullFunc = new ScalarFunctionCallExpression(
-                                    new AsterixFunctionInfo(AsterixBuiltinFunctions.NOT_NULL));
-                            notNullFunc.getArguments().add(new MutableObject<ILogicalExpression>(arg));
-                            //wrap the not null function to the original function
-                            func.getArguments().get(2 * i + 1).setValue(notNullFunc);
-                            break;
-                        }
-                    }
-
-                    // match the record field: need cast
-                    if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                        ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
-                        rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
-                        fieldPermutation[j] = i;
-                        openFields[i] = false;
-                        matched = true;
-                        break;
-                    }
-                }
-            }
-            // the input has extra fields
-            if (!matched && !reqType.isOpen())
-                throw new AlgebricksException("static type mismatch: including an extra closed field " + fieldName);
-        }
-
-        // backward match: match from required to actual
-        for (int i = 0; i < reqFieldNames.length; i++) {
-            String reqFieldName = reqFieldNames[i];
-            IAType reqFieldType = reqFieldTypes[i];
-            matched = false;
-            for (int j = 0; j < inputFieldNames.length; j++) {
-                String fieldName = inputFieldNames[j];
-                IAType fieldType = inputFieldTypes[j];
-                if (!fieldName.equals(reqFieldName))
-                    continue;
-                // should check open field here
-                // because number of entries in fieldPermuations is the
-                // number of required schema fields
-                // here we want to check if an input field is matched
-                // the entry index of fieldPermuatons is req field index
-                if (!openFields[j]) {
-                    matched = true;
-                    break;
-                }
-
-                // match the optional field
-                if (reqFieldType.getTypeTag() == ATypeTag.UNION
-                        && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
-                    IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
-                            NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
-                    if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
-                        matched = true;
-                        break;
-                    }
-                }
-            }
-            if (matched)
-                continue;
-
-            if (reqFieldType.getTypeTag() == ATypeTag.UNION
-                    && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
-                // add a null field
-                nullFields[i] = true;
-            } else {
-                // no matched field in the input for a required closed field
-                throw new AlgebricksException("static type mismatch: miss a required closed field " + reqFieldName);
-            }
-        }
-
-        List<Mutable<ILogicalExpression>> arguments = func.getArguments();
-        List<Mutable<ILogicalExpression>> originalArguments = new ArrayList<Mutable<ILogicalExpression>>();
-        originalArguments.addAll(arguments);
-        arguments.clear();
-        // re-order the closed part and fill in null fields
-        for (int i = 0; i < fieldPermutation.length; i++) {
-            int pos = fieldPermutation[i];
-            if (pos >= 0) {
-                arguments.add(originalArguments.get(2 * pos));
-                arguments.add(originalArguments.get(2 * pos + 1));
-            }
-            if (nullFields[i]) {
-                // add a null field
-                arguments.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                        new AString(reqFieldNames[i])))));
-                arguments.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                        ANull.NULL))));
-            }
-        }
-
-        // add the open part
-        for (int i = 0; i < openFields.length; i++) {
-            if (openFields[i]) {
-                arguments.add(originalArguments.get(2 * i));
-                Mutable<ILogicalExpression> fExprRef = originalArguments.get(2 * i + 1);
-                ILogicalExpression argExpr = fExprRef.getValue();
-
-                // we need to handle open fields recursively by their default
-                // types
-                // for list, their item type is any
-                // for record, their
-                if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
-                    IAType reqFieldType = inputFieldTypes[i];
-                    if (inputFieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
-                        reqFieldType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
-                    }
-                    if (inputFieldTypes[i].getTypeTag() == ATypeTag.ORDEREDLIST) {
-                        reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
-                    }
-                    if (inputFieldTypes[i].getTypeTag() == ATypeTag.UNORDEREDLIST) {
-                        reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
-                    }
-                    if (TypeComputerUtilities.getRequiredType((AbstractFunctionCallExpression) argExpr) == null) {
-                        ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) argExpr;
-                        rewriteFuncExpr(argFunc, reqFieldType, inputFieldTypes[i], env);
-                    }
-                }
-                arguments.add(fExprRef);
-            }
-        }
-    }
-
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
deleted file mode 100644
index caa16d4..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
+++ /dev/null
@@ -1,1442 +0,0 @@
-package edu.uci.ics.asterix.translator;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.concurrent.atomic.AtomicLong;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Expression.Kind;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.ListConstructor.Type;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OperatorType;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause.OrderModifier;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression.Quantifier;
-import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr.Sign;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.aql.util.FunctionUtils;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.bootstrap.AsterixProperties;
-import edu.uci.ics.asterix.metadata.declared.AqlDataSource;
-import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
-import edu.uci.ics.asterix.metadata.declared.AqlSourceId;
-import edu.uci.ics.asterix.metadata.declared.ResultSetDataSink;
-import edu.uci.ics.asterix.metadata.declared.ResultSetSinkId;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AString;
-import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.functions.AsterixFunctionInfo;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.runtime.formats.FormatUtils;
-import edu.uci.ics.asterix.translator.CompiledStatements.ICompiledDmlStatement;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.Counter;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation.BroadcastSide;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DieOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistributeResultOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InsertDeleteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SinkOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteResultOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
-
-/**
- * Each visit returns a pair of an operator and a variable. The variable
- * corresponds to the new column, if any, added to the tuple flow. E.g., for
- * Unnest, the column is the variable bound to the elements in the list, for
- * Subplan it is null. The first argument of a visit method is the expression
- * which is translated. The second argument of a visit method is the tuple
- * source for the current subtree.
- */
-
-public class AqlExpressionToPlanTranslator extends AbstractAqlTranslator implements
-        IAqlExpressionVisitor<Pair<ILogicalOperator, LogicalVariable>, Mutable<ILogicalOperator>> {
-
-    private final AqlMetadataProvider metadataProvider;
-    private final TranslationContext context;
-    private final String outputDatasetName;
-    private final ICompiledDmlStatement stmt;
-    private static AtomicLong outputFileID = new AtomicLong(0);
-    private static final String OUTPUT_FILE_PREFIX = "OUTPUT_";
-    private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1);
-
-    public AqlExpressionToPlanTranslator(AqlMetadataProvider metadataProvider, int currentVarCounter,
-            String outputDatasetName, ICompiledDmlStatement stmt) {
-        this.context = new TranslationContext(new Counter(currentVarCounter));
-        this.outputDatasetName = outputDatasetName;
-        this.stmt = stmt;
-        this.metadataProvider = metadataProvider;
-    }
-
-    public int getVarCounter() {
-        return context.getVarCounter();
-    }
-
-    public ILogicalPlan translate(Query expr) throws AlgebricksException, AsterixException {
-        IDataFormat format = FormatUtils.getDefaultFormat();
-        format.registerRuntimeFunctions();
-
-        Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, new MutableObject<ILogicalOperator>(
-                new EmptyTupleSourceOperator()));
-
-        ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<Mutable<ILogicalOperator>>();
-        boolean isTransactionalWrite = false;
-        ILogicalOperator topOp = p.first;
-        ProjectOperator project = (ProjectOperator) topOp;
-        LogicalVariable resVar = project.getVariables().get(0);
-        if (outputDatasetName == null) {
-            FileSplit outputFileSplit = metadataProvider.getOutputFile();
-            if (outputFileSplit == null) {
-                outputFileSplit = getDefaultOutputFileLocation();
-            }
-            metadataProvider.setOutputFile(outputFileSplit);
-            String resultNodeName = outputFileSplit.getNodeName();
-
-            List<Mutable<ILogicalExpression>> writeExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
-            writeExprList.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(resVar)));
-            ResultSetSinkId rssId = new ResultSetSinkId(metadataProvider.getResultSetId(), resultNodeName);
-            ResultSetDataSink sink = new ResultSetDataSink(rssId, null);
-            topOp = new DistributeResultOperator(writeExprList, sink);
-            topOp.getInputs().add(new MutableObject<ILogicalOperator>(project));
-        } else {
-
-            AqlDataSource targetDatasource = validateDatasetInfo(metadataProvider, stmt.getDataverseName(),
-                    stmt.getDatasetName());
-            ArrayList<LogicalVariable> vars = new ArrayList<LogicalVariable>();
-            ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
-            List<Mutable<ILogicalExpression>> varRefsForLoading = new ArrayList<Mutable<ILogicalExpression>>();
-            List<String> partitionKeys = DatasetUtils.getPartitioningKeys(targetDatasource.getDataset());
-            for (String keyFieldName : partitionKeys) {
-                IFunctionInfo finfoAccess = AsterixBuiltinFunctions
-                        .getAsterixFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME);
-                @SuppressWarnings("unchecked")
-                ScalarFunctionCallExpression f = new ScalarFunctionCallExpression(finfoAccess,
-                        new MutableObject<ILogicalExpression>(new VariableReferenceExpression(METADATA_DUMMY_VAR)),
-                        new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                                new AString(keyFieldName)))));
-                f.substituteVar(METADATA_DUMMY_VAR, resVar);
-                exprs.add(new MutableObject<ILogicalExpression>(f));
-                LogicalVariable v = context.newVar();
-                vars.add(v);
-                varRefsForLoading.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
-            }
-            AssignOperator assign = new AssignOperator(vars, exprs);
-            assign.getInputs().add(new MutableObject<ILogicalOperator>(project));
-
-            Mutable<ILogicalExpression> varRef = new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
-                    resVar));
-            ILogicalOperator leafOperator = null;
-
-            switch (stmt.getKind()) {
-                case WRITE_FROM_QUERY_RESULT: {
-                    leafOperator = new WriteResultOperator(targetDatasource, varRef, varRefsForLoading);
-                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(assign));
-                    break;
-                }
-                case INSERT: {
-                    ILogicalOperator insertOp = new InsertDeleteOperator(targetDatasource, varRef, varRefsForLoading,
-                            InsertDeleteOperator.Kind.INSERT);
-                    insertOp.getInputs().add(new MutableObject<ILogicalOperator>(assign));
-                    leafOperator = new SinkOperator();
-                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(insertOp));
-                    isTransactionalWrite = true;
-                    break;
-                }
-                case DELETE: {
-                    ILogicalOperator deleteOp = new InsertDeleteOperator(targetDatasource, varRef, varRefsForLoading,
-                            InsertDeleteOperator.Kind.DELETE);
-                    deleteOp.getInputs().add(new MutableObject<ILogicalOperator>(assign));
-                    leafOperator = new SinkOperator();
-                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(deleteOp));
-                    isTransactionalWrite = true;
-                    break;
-                }
-                case BEGIN_FEED: {
-                    ILogicalOperator insertOp = new InsertDeleteOperator(targetDatasource, varRef, varRefsForLoading,
-                            InsertDeleteOperator.Kind.INSERT);
-                    insertOp.getInputs().add(new MutableObject<ILogicalOperator>(assign));
-                    leafOperator = new SinkOperator();
-                    leafOperator.getInputs().add(new MutableObject<ILogicalOperator>(insertOp));
-                    isTransactionalWrite = false;
-                    break;
-                }
-            }
-            topOp = leafOperator;
-        }
-        globalPlanRoots.add(new MutableObject<ILogicalOperator>(topOp));
-        ILogicalPlan plan = new ALogicalPlanImpl(globalPlanRoots);
-        return plan;
-    }
-
-    private AqlDataSource validateDatasetInfo(AqlMetadataProvider metadataProvider, String dataverseName,
-            String datasetName) throws AlgebricksException {
-        Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Cannot find dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-
-        AqlSourceId sourceId = new AqlSourceId(dataverseName, datasetName);
-        String itemTypeName = dataset.getItemTypeName();
-        IAType itemType = metadataProvider.findType(dataverseName, itemTypeName);
-        AqlDataSource dataSource = new AqlDataSource(sourceId, dataset, itemType);
-        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
-            throw new AlgebricksException("Cannot write output to an external dataset.");
-        }
-        return dataSource;
-    }
-
-    private FileSplit getDefaultOutputFileLocation() throws MetadataException {
-        if (AsterixProperties.INSTANCE.getOutputDir() == null) {
-            throw new MetadataException(
-                    "Output location for query result not specified at the time of deployment, must specify explicitly using 'write output to ..' statement");
-        }
-        String filePath = AsterixProperties.INSTANCE.getOutputDir() + System.getProperty("file.separator")
-                + OUTPUT_FILE_PREFIX + outputFileID.incrementAndGet();
-        return new FileSplit(AsterixProperties.INSTANCE.getMetadataNodeName(), new FileReference(new File(filePath)));
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitForClause(ForClause fc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        LogicalVariable v = context.newVar(fc.getVarExpr());
-        Expression inExpr = fc.getInExpr();
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(inExpr, tupSource);
-        ILogicalOperator returnedOp;
-
-        if (fc.getPosVarExpr() == null) {
-            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)));
-        } else {
-            LogicalVariable pVar = context.newVar(fc.getPosVarExpr());
-            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
-                    pVar, BuiltinType.AINT32);
-        }
-        returnedOp.getInputs().add(eo.second);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLetClause(LetClause lc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        LogicalVariable v;
-        ILogicalOperator returnedOp;
-
-        switch (lc.getBindingExpr().getKind()) {
-            case VARIABLE_EXPRESSION: {
-                v = context.newVar(lc.getVarExpr());
-                LogicalVariable prev = context.getVar(((VariableExpr) lc.getBindingExpr()).getVar().getId());
-                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(
-                        new VariableReferenceExpression(prev)));
-                returnedOp.getInputs().add(tupSource);
-                break;
-            }
-            default: {
-                v = context.newVar(lc.getVarExpr());
-                Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(lc.getBindingExpr(),
-                        tupSource);
-                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(eo.first));
-                returnedOp.getInputs().add(eo.second);
-                break;
-            }
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFlworExpression(FLWOGRExpression flwor,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Mutable<ILogicalOperator> flworPlan = tupSource;
-        boolean isTop = context.isTopFlwor();
-        if (isTop) {
-            context.setTopFlwor(false);
-        }
-        for (Clause c : flwor.getClauseList()) {
-            Pair<ILogicalOperator, LogicalVariable> pC = c.accept(this, flworPlan);
-            flworPlan = new MutableObject<ILogicalOperator>(pC.first);
-        }
-
-        Expression r = flwor.getReturnExpr();
-        boolean noFlworClause = flwor.noForClause();
-
-        if (r.getKind() == Kind.VARIABLE_EXPRESSION) {
-            VariableExpr v = (VariableExpr) r;
-            LogicalVariable var = context.getVar(v.getVar().getId());
-
-            return produceFlwrResult(noFlworClause, isTop, flworPlan, var);
-
-        } else {
-            Mutable<ILogicalOperator> baseOp = new MutableObject<ILogicalOperator>(flworPlan.getValue());
-            Pair<ILogicalOperator, LogicalVariable> rRes = r.accept(this, baseOp);
-            ILogicalOperator rOp = rRes.first;
-            ILogicalOperator resOp;
-            if (expressionNeedsNoNesting(r)) {
-                baseOp.setValue(flworPlan.getValue());
-                resOp = rOp;
-            } else {
-                SubplanOperator s = new SubplanOperator(rOp);
-                s.getInputs().add(flworPlan);
-                resOp = s;
-                baseOp.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
-            }
-            Mutable<ILogicalOperator> resOpRef = new MutableObject<ILogicalOperator>(resOp);
-            return produceFlwrResult(noFlworClause, isTop, resOpRef, rRes.second);
-        }
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFieldAccessor(FieldAccessor fa,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(fa.getExpr(), tupSource);
-        LogicalVariable v = context.newVar();
-        AbstractFunctionCallExpression fldAccess = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME));
-        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-        ILogicalExpression faExpr = new ConstantExpression(new AsterixConstantValue(new AString(fa.getIdent()
-                .getValue())));
-        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(faExpr));
-        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(fldAccess));
-        a.getInputs().add(p.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitIndexAccessor(IndexAccessor ia,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(ia.getExpr(), tupSource);
-        LogicalVariable v = context.newVar();
-        AbstractFunctionCallExpression f;
-        int i = ia.getIndex();
-        if (i == IndexAccessor.ANY) {
-            f = new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.ANY_COLLECTION_MEMBER));
-            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-        } else {
-            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.GET_ITEM));
-            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-            f.getArguments().add(
-                    new MutableObject<ILogicalExpression>(new ConstantExpression(
-                            new AsterixConstantValue(new AInt32(i)))));
-        }
-        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
-        a.getInputs().add(p.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitCallExpr(CallExpr fcall, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        LogicalVariable v = context.newVar();
-        FunctionSignature signature = fcall.getFunctionSignature();
-        List<Mutable<ILogicalExpression>> args = new ArrayList<Mutable<ILogicalExpression>>();
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        for (Expression expr : fcall.getExprList()) {
-            switch (expr.getKind()) {
-                case VARIABLE_EXPRESSION: {
-                    LogicalVariable var = context.getVar(((VariableExpr) expr).getVar().getId());
-                    args.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
-                    break;
-                }
-                case LITERAL_EXPRESSION: {
-                    LiteralExpr val = (LiteralExpr) expr;
-                    args.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                            ConstantHelper.objectFromLiteral(val.getValue())))));
-                    break;
-                }
-                default: {
-                    Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
-                    AbstractLogicalOperator o1 = (AbstractLogicalOperator) eo.second.getValue();
-                    args.add(new MutableObject<ILogicalExpression>(eo.first));
-                    if (o1 != null && !(o1.getOperatorTag() == LogicalOperatorTag.ASSIGN && hasOnlyChild(o1, topOp))) {
-                        topOp = eo.second;
-                    }
-                    break;
-                }
-            }
-        }
-
-        AbstractFunctionCallExpression f;
-        if ((f = lookupUserDefinedFunction(signature, args)) == null) {
-            f = lookupBuiltinFunction(signature.getName(), signature.getArity(), args);
-        }
-
-        if (f == null) {
-            throw new AsterixException(" Unknown function " + signature.getName() + "@" + signature.getArity());
-        }
-
-        // Put hints into function call expr.
-        if (fcall.hasHints()) {
-            for (IExpressionAnnotation hint : fcall.getHints()) {
-                f.getAnnotations().put(hint, hint);
-            }
-        }
-
-        AssignOperator op = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
-        if (topOp != null) {
-            op.getInputs().add(topOp);
-        }
-
-        return new Pair<ILogicalOperator, LogicalVariable>(op, v);
-    }
-
-    private AbstractFunctionCallExpression lookupUserDefinedFunction(FunctionSignature signature,
-            List<Mutable<ILogicalExpression>> args) throws MetadataException {
-        if (signature.getNamespace() == null) {
-            return null;
-        }
-        Function function = MetadataManager.INSTANCE.getFunction(metadataProvider.getMetadataTxnContext(), signature);
-        if (function == null) {
-            return null;
-        }
-        AbstractFunctionCallExpression f = null;
-        if (function.getLanguage().equalsIgnoreCase(Function.LANGUAGE_AQL)) {
-            IFunctionInfo finfo = new AsterixFunctionInfo(signature);
-            return new ScalarFunctionCallExpression(finfo, args);
-        } else {
-            throw new MetadataException(" User defined functions written in " + function.getLanguage()
-                    + " are not supported");
-        }
-    }
-
-    private AbstractFunctionCallExpression lookupBuiltinFunction(String functionName, int arity,
-            List<Mutable<ILogicalExpression>> args) {
-        AbstractFunctionCallExpression f = null;
-        FunctionIdentifier fi = new FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionName, arity);
-        AsterixFunctionInfo afi = AsterixBuiltinFunctions.lookupFunction(fi);
-        FunctionIdentifier builtinAquafi = afi == null ? null : afi.getFunctionIdentifier();
-
-        if (builtinAquafi != null) {
-            fi = builtinAquafi;
-        } else {
-            fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, functionName, arity);
-            afi = AsterixBuiltinFunctions.lookupFunction(fi);
-            if (afi == null) {
-                return null;
-            }
-        }
-        if (AsterixBuiltinFunctions.isBuiltinAggregateFunction(fi)) {
-            f = AsterixBuiltinFunctions.makeAggregateFunctionExpression(fi, args);
-        } else if (AsterixBuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
-            UnnestingFunctionCallExpression ufce = new UnnestingFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(fi), args);
-            ufce.setReturnsUniqueValues(AsterixBuiltinFunctions.returnsUniqueValues(fi));
-            f = ufce;
-        } else {
-            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fi), args);
-        }
-        return f;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDecl(FunctionDecl fd,
-            Mutable<ILogicalOperator> tupSource) {
-        // TODO Auto-generated method stub
-        throw new NotImplementedException();
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitGroupbyClause(GroupbyClause gc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        GroupByOperator gOp = new GroupByOperator();
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (GbyVariableExpressionPair ve : gc.getGbyPairList()) {
-            LogicalVariable v;
-            VariableExpr vexpr = ve.getVar();
-            if (vexpr != null) {
-                v = context.newVar(vexpr);
-            } else {
-                v = context.newVar();
-            }
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
-            gOp.addGbyExpression(v, eo.first);
-            topOp = eo.second;
-        }
-        for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
-            LogicalVariable v;
-            VariableExpr vexpr = ve.getVar();
-            if (vexpr != null) {
-                v = context.newVar(vexpr);
-            } else {
-                v = context.newVar();
-            }
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
-            gOp.addDecorExpression(v, eo.first);
-            topOp = eo.second;
-        }
-        gOp.getInputs().add(topOp);
-
-        for (VariableExpr var : gc.getWithVarList()) {
-            LogicalVariable aggVar = context.newVar();
-            LogicalVariable oldVar = context.getVar(var);
-            List<Mutable<ILogicalExpression>> flArgs = new ArrayList<Mutable<ILogicalExpression>>(1);
-            flArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oldVar)));
-            AggregateFunctionCallExpression fListify = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
-                    AsterixBuiltinFunctions.LISTIFY, flArgs);
-            AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar),
-                    (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fListify)));
-
-            agg.getInputs().add(
-                    new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
-                            new MutableObject<ILogicalOperator>(gOp))));
-            ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(agg));
-            gOp.getNestedPlans().add(plan);
-            // Hide the variable that was part of the "with", replacing it with
-            // the one bound by the aggregation op.
-            context.setVar(var, aggVar);
-        }
-
-        gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
-        return new Pair<ILogicalOperator, LogicalVariable>(gOp, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitIfExpr(IfExpr ifexpr, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        // In the most general case, IfThenElse is translated in the following
-        // way.
-        //
-        // We assign the result of the condition to one variable varCond.
-        // We create one subplan which contains the plan for the "then" branch,
-        // on top of which there is a selection whose condition is varCond.
-        // Similarly, we create one subplan for the "else" branch, in which the
-        // selection is not(varCond).
-        // Finally, we concatenate the results. (??)
-
-        Pair<ILogicalOperator, LogicalVariable> pCond = ifexpr.getCondExpr().accept(this, tupSource);
-        ILogicalOperator opCond = pCond.first;
-        LogicalVariable varCond = pCond.second;
-
-        SubplanOperator sp = new SubplanOperator();
-        Mutable<ILogicalOperator> nestedSource = new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
-                new MutableObject<ILogicalOperator>(sp)));
-
-        Pair<ILogicalOperator, LogicalVariable> pThen = ifexpr.getThenExpr().accept(this, nestedSource);
-        SelectOperator sel1 = new SelectOperator(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
-                varCond)));
-        sel1.getInputs().add(new MutableObject<ILogicalOperator>(pThen.first));
-
-        Pair<ILogicalOperator, LogicalVariable> pElse = ifexpr.getElseExpr().accept(this, nestedSource);
-        AbstractFunctionCallExpression notVarCond = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), new MutableObject<ILogicalExpression>(
-                        new VariableReferenceExpression(varCond)));
-        SelectOperator sel2 = new SelectOperator(new MutableObject<ILogicalExpression>(notVarCond));
-        sel2.getInputs().add(new MutableObject<ILogicalOperator>(pElse.first));
-
-        ILogicalPlan p1 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel1));
-        sp.getNestedPlans().add(p1);
-        ILogicalPlan p2 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel2));
-        sp.getNestedPlans().add(p2);
-
-        Mutable<ILogicalOperator> opCondRef = new MutableObject<ILogicalOperator>(opCond);
-        sp.getInputs().add(opCondRef);
-
-        LogicalVariable resV = context.newVar();
-        AbstractFunctionCallExpression concatNonNull = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CONCAT_NON_NULL),
-                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pThen.second)),
-                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pElse.second)));
-        AssignOperator a = new AssignOperator(resV, new MutableObject<ILogicalExpression>(concatNonNull));
-        a.getInputs().add(new MutableObject<ILogicalOperator>(sp));
-
-        return new Pair<ILogicalOperator, LogicalVariable>(a, resV);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLiteralExpr(LiteralExpr l, Mutable<ILogicalOperator> tupSource) {
-        LogicalVariable var = context.newVar();
-        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(new ConstantExpression(
-                new AsterixConstantValue(ConstantHelper.objectFromLiteral(l.getValue())))));
-        if (tupSource != null) {
-            a.getInputs().add(tupSource);
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitOperatorExpr(OperatorExpr op,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        ArrayList<OperatorType> ops = op.getOpList();
-        int nOps = ops.size();
-
-        if (nOps > 0 && (ops.get(0) == OperatorType.AND || ops.get(0) == OperatorType.OR)) {
-            return visitAndOrOperator(op, tupSource);
-        }
-
-        ArrayList<Expression> exprs = op.getExprList();
-
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        ILogicalExpression currExpr = null;
-        for (int i = 0; i <= nOps; i++) {
-
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
-            topOp = p.second;
-            ILogicalExpression e = p.first;
-            // now look at the operator
-            if (i < nOps) {
-                if (OperatorExpr.opIsComparison(ops.get(i))) {
-                    AbstractFunctionCallExpression c = createComparisonExpression(ops.get(i));
-
-                    // chain the operators
-                    if (i == 0) {
-                        c.getArguments().add(new MutableObject<ILogicalExpression>(e));
-                        currExpr = c;
-                        if (op.isBroadcastOperand(i)) {
-                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
-                            bcast.setObject(BroadcastSide.LEFT);
-                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
-                        }
-                    } else {
-                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
-                                new MutableObject<ILogicalExpression>(e));
-                        c.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
-                        currExpr = c;
-                        if (i == 1 && op.isBroadcastOperand(i)) {
-                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
-                            bcast.setObject(BroadcastSide.RIGHT);
-                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
-                        }
-                    }
-                } else {
-                    AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(ops.get(i));
-
-                    if (i == 0) {
-                        f.getArguments().add(new MutableObject<ILogicalExpression>(e));
-                        currExpr = f;
-                    } else {
-                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
-                                new MutableObject<ILogicalExpression>(e));
-                        f.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
-                        currExpr = f;
-                    }
-                }
-            } else { // don't forget the last expression...
-                ((AbstractFunctionCallExpression) currExpr).getArguments()
-                        .add(new MutableObject<ILogicalExpression>(e));
-                if (i == 1 && op.isBroadcastOperand(i)) {
-                    BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
-                    bcast.setObject(BroadcastSide.RIGHT);
-                    ((AbstractFunctionCallExpression) currExpr).getAnnotations().put(
-                            BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
-                }
-            }
-        }
-
-        // Add hints as annotations.
-        if (op.hasHints() && currExpr instanceof AbstractFunctionCallExpression) {
-            AbstractFunctionCallExpression currFuncExpr = (AbstractFunctionCallExpression) currExpr;
-            for (IExpressionAnnotation hint : op.getHints()) {
-                currFuncExpr.getAnnotations().put(hint, hint);
-            }
-        }
-
-        LogicalVariable assignedVar = context.newVar();
-        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(currExpr));
-
-        a.getInputs().add(topOp);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitOrderbyClause(OrderbyClause oc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-
-        OrderOperator ord = new OrderOperator();
-        Iterator<OrderModifier> modifIter = oc.getModifierList().iterator();
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (Expression e : oc.getOrderbyList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(e, topOp);
-            OrderModifier m = modifIter.next();
-            OrderOperator.IOrder comp = (m == OrderModifier.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
-            ord.getOrderExpressions()
-                    .add(new Pair<IOrder, Mutable<ILogicalExpression>>(comp, new MutableObject<ILogicalExpression>(
-                            p.first)));
-            topOp = p.second;
-        }
-        ord.getInputs().add(topOp);
-        if (oc.getNumTuples() > 0) {
-            ord.getAnnotations().put(OperatorAnnotations.CARDINALITY, oc.getNumTuples());
-        }
-        if (oc.getNumFrames() > 0) {
-            ord.getAnnotations().put(OperatorAnnotations.MAX_NUMBER_FRAMES, oc.getNumFrames());
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(ord, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitQuantifiedExpression(QuantifiedExpression qe,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        ILogicalOperator firstOp = null;
-        Mutable<ILogicalOperator> lastOp = null;
-
-        for (QuantifiedPair qt : qe.getQuantifiedList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(qt.getExpr(), topOp);
-            topOp = eo1.second;
-            LogicalVariable uVar = context.newVar(qt.getVarExpr());
-            ILogicalOperator u = new UnnestOperator(uVar, new MutableObject<ILogicalExpression>(
-                    makeUnnestExpression(eo1.first)));
-
-            if (firstOp == null) {
-                firstOp = u;
-            }
-            if (lastOp != null) {
-                u.getInputs().add(lastOp);
-            }
-            lastOp = new MutableObject<ILogicalOperator>(u);
-        }
-
-        // We make all the unnest correspond. to quantif. vars. sit on top
-        // in the hope of enabling joins & other optimiz.
-        firstOp.getInputs().add(topOp);
-        topOp = lastOp;
-
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(qe.getSatisfiesExpr(), topOp);
-
-        AggregateFunctionCallExpression fAgg;
-        SelectOperator s;
-        if (qe.getQuantifier() == Quantifier.SOME) {
-            s = new SelectOperator(new MutableObject<ILogicalExpression>(eo2.first));
-            s.getInputs().add(eo2.second);
-            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.NON_EMPTY_STREAM,
-                    new ArrayList<Mutable<ILogicalExpression>>());
-        } else { // EVERY
-            List<Mutable<ILogicalExpression>> satExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
-            satExprList.add(new MutableObject<ILogicalExpression>(eo2.first));
-            s = new SelectOperator(new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), satExprList)));
-            s.getInputs().add(eo2.second);
-            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.EMPTY_STREAM,
-                    new ArrayList<Mutable<ILogicalExpression>>());
-        }
-        LogicalVariable qeVar = context.newVar();
-        AggregateOperator a = new AggregateOperator(mkSingletonArrayList(qeVar),
-                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fAgg)));
-        a.getInputs().add(new MutableObject<ILogicalOperator>(s));
-        return new Pair<ILogicalOperator, LogicalVariable>(a, qeVar);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitQuery(Query q, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        return q.getBody().accept(this, tupSource);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitRecordConstructor(RecordConstructor rc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR));
-        LogicalVariable v1 = context.newVar();
-        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (FieldBinding fb : rc.getFbList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(fb.getLeftExpr(), topOp);
-            f.getArguments().add(new MutableObject<ILogicalExpression>(eo1.first));
-            topOp = eo1.second;
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(fb.getRightExpr(), topOp);
-            f.getArguments().add(new MutableObject<ILogicalExpression>(eo2.first));
-            topOp = eo2.second;
-        }
-        a.getInputs().add(topOp);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitListConstructor(ListConstructor lc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        FunctionIdentifier fid = (lc.getType() == Type.ORDERED_LIST_CONSTRUCTOR) ? AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR
-                : AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR;
-        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
-        LogicalVariable v1 = context.newVar();
-        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (Expression expr : lc.getExprList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
-            f.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
-            topOp = eo.second;
-        }
-        a.getInputs().add(topOp);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUnaryExpr(UnaryExpr u, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Expression expr = u.getExpr();
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, tupSource);
-        LogicalVariable v1 = context.newVar();
-        AssignOperator a;
-        if (u.getSign() == Sign.POSITIVE) {
-            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(eo.first));
-        } else {
-            AbstractFunctionCallExpression m = new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.NUMERIC_UNARY_MINUS));
-            m.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
-            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(m));
-        }
-        a.getInputs().add(eo.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitVariableExpr(VariableExpr v, Mutable<ILogicalOperator> tupSource) {
-        // Should we ever get to this method?
-        LogicalVariable var = context.newVar();
-        LogicalVariable oldV = context.getVar(v.getVar().getId());
-        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(
-                new VariableReferenceExpression(oldV)));
-        a.getInputs().add(tupSource);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitWhereClause(WhereClause w, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(w.getWhereExpr(), tupSource);
-        SelectOperator s = new SelectOperator(new MutableObject<ILogicalExpression>(p.first));
-        s.getInputs().add(p.second);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(s, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLimitClause(LimitClause lc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = aqlExprToAlgExpression(lc.getLimitExpr(), tupSource);
-        LimitOperator opLim;
-        Expression offset = lc.getOffset();
-        if (offset != null) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p2 = aqlExprToAlgExpression(offset, p1.second);
-            opLim = new LimitOperator(p1.first, p2.first);
-            opLim.getInputs().add(p2.second);
-        } else {
-            opLim = new LimitOperator(p1.first);
-            opLim.getInputs().add(p1.second);
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(opLim, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDieClause(DieClause lc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = aqlExprToAlgExpression(lc.getDieExpr(), tupSource);
-        DieOperator opDie = new DieOperator(p1.first);
-        opDie.getInputs().add(p1.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(opDie, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDistinctClause(DistinctClause dc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        List<Mutable<ILogicalExpression>> exprList = new ArrayList<Mutable<ILogicalExpression>>();
-        Mutable<ILogicalOperator> input = null;
-        for (Expression expr : dc.getDistinctByExpr()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(expr, tupSource);
-            exprList.add(new MutableObject<ILogicalExpression>(p.first));
-            input = p.second;
-        }
-        DistinctOperator opDistinct = new DistinctOperator(exprList);
-        opDistinct.getInputs().add(input);
-        return new Pair<ILogicalOperator, LogicalVariable>(opDistinct, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUnionExpr(UnionExpr unionExpr,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Mutable<ILogicalOperator> ts = tupSource;
-        ILogicalOperator lastOp = null;
-        LogicalVariable lastVar = null;
-        boolean first = true;
-        for (Expression e : unionExpr.getExprs()) {
-            if (first) {
-                first = false;
-            } else {
-                ts = new MutableObject<ILogicalOperator>(new EmptyTupleSourceOperator());
-            }
-            Pair<ILogicalOperator, LogicalVariable> p1 = e.accept(this, ts);
-            if (lastOp == null) {
-                lastOp = p1.first;
-                lastVar = p1.second;
-            } else {
-                LogicalVariable unnestVar1 = context.newVar();
-                UnnestOperator unnest1 = new UnnestOperator(unnestVar1, new MutableObject<ILogicalExpression>(
-                        makeUnnestExpression(new VariableReferenceExpression(lastVar))));
-                unnest1.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
-                LogicalVariable unnestVar2 = context.newVar();
-                UnnestOperator unnest2 = new UnnestOperator(unnestVar2, new MutableObject<ILogicalExpression>(
-                        makeUnnestExpression(new VariableReferenceExpression(p1.second))));
-                unnest2.getInputs().add(new MutableObject<ILogicalOperator>(p1.first));
-                List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> varMap = new ArrayList<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>(
-                        1);
-                LogicalVariable resultVar = context.newVar();
-                Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple = new Triple<LogicalVariable, LogicalVariable, LogicalVariable>(
-                        unnestVar1, unnestVar2, resultVar);
-                varMap.add(triple);
-                UnionAllOperator unionOp = new UnionAllOperator(varMap);
-                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest1));
-                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest2));
-                lastVar = resultVar;
-                lastOp = unionOp;
-            }
-        }
-        LogicalVariable aggVar = context.newVar();
-        ArrayList<LogicalVariable> aggregVars = new ArrayList<LogicalVariable>(1);
-        aggregVars.add(aggVar);
-        List<Mutable<ILogicalExpression>> afcExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
-        afcExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(lastVar)));
-        AggregateFunctionCallExpression afc = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
-                AsterixBuiltinFunctions.LISTIFY, afcExprs);
-        ArrayList<Mutable<ILogicalExpression>> aggregExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
-        aggregExprs.add(new MutableObject<ILogicalExpression>(afc));
-        AggregateOperator agg = new AggregateOperator(aggregVars, aggregExprs);
-        agg.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
-        return new Pair<ILogicalOperator, LogicalVariable>(agg, aggVar);
-    }
-
-    private AbstractFunctionCallExpression createComparisonExpression(OperatorType t) {
-        FunctionIdentifier fi = operatorTypeToFunctionIdentifier(t);
-        IFunctionInfo finfo = FunctionUtils.getFunctionInfo(fi);
-        return new ScalarFunctionCallExpression(finfo);
-    }
-
-    private FunctionIdentifier operatorTypeToFunctionIdentifier(OperatorType t) {
-        switch (t) {
-            case EQ: {
-                return AlgebricksBuiltinFunctions.EQ;
-            }
-            case NEQ: {
-                return AlgebricksBuiltinFunctions.NEQ;
-            }
-            case GT: {
-                return AlgebricksBuiltinFunctions.GT;
-            }
-            case GE: {
-                return AlgebricksBuiltinFunctions.GE;
-            }
-            case LT: {
-                return AlgebricksBuiltinFunctions.LT;
-            }
-            case LE: {
-                return AlgebricksBuiltinFunctions.LE;
-            }
-            default: {
-                throw new IllegalStateException();
-            }
-        }
-    }
-
-    private AbstractFunctionCallExpression createFunctionCallExpressionForBuiltinOperator(OperatorType t)
-            throws AsterixException {
-
-        FunctionIdentifier fid = null;
-        switch (t) {
-            case PLUS: {
-                fid = AlgebricksBuiltinFunctions.NUMERIC_ADD;
-                break;
-            }
-            case MINUS: {
-                fid = AsterixBuiltinFunctions.NUMERIC_SUBTRACT;
-                break;
-            }
-            case MUL: {
-                fid = AsterixBuiltinFunctions.NUMERIC_MULTIPLY;
-                break;
-            }
-            case DIV: {
-                fid = AsterixBuiltinFunctions.NUMERIC_DIVIDE;
-                break;
-            }
-            case MOD: {
-                fid = AsterixBuiltinFunctions.NUMERIC_MOD;
-                break;
-            }
-            case IDIV: {
-                fid = AsterixBuiltinFunctions.NUMERIC_IDIV;
-                break;
-            }
-            case CARET: {
-                fid = AsterixBuiltinFunctions.CARET;
-                break;
-            }
-            case AND: {
-                fid = AlgebricksBuiltinFunctions.AND;
-                break;
-            }
-            case OR: {
-                fid = AlgebricksBuiltinFunctions.OR;
-                break;
-            }
-            case FUZZY_EQ: {
-                fid = AsterixBuiltinFunctions.FUZZY_EQ;
-                break;
-            }
-
-            default: {
-                throw new NotImplementedException("Operator " + t + " is not yet implemented");
-            }
-        }
-        return new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
-    }
-
-    private static boolean hasOnlyChild(ILogicalOperator parent, Mutable<ILogicalOperator> childCandidate) {
-        List<Mutable<ILogicalOperator>> inp = parent.getInputs();
-        if (inp == null || inp.size() != 1) {
-            return false;
-        }
-        return inp.get(0) == childCandidate;
-    }
-
-    private Pair<ILogicalExpression, Mutable<ILogicalOperator>> aqlExprToAlgExpression(Expression expr,
-            Mutable<ILogicalOperator> topOp) throws AsterixException {
-        switch (expr.getKind()) {
-            case VARIABLE_EXPRESSION: {
-                VariableReferenceExpression ve = new VariableReferenceExpression(context.getVar(((VariableExpr) expr)
-                        .getVar().getId()));
-                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(ve, topOp);
-            }
-            case LITERAL_EXPRESSION: {
-                LiteralExpr val = (LiteralExpr) expr;
-                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new ConstantExpression(
-                        new AsterixConstantValue(ConstantHelper.objectFromLiteral(val.getValue()))), topOp);
-            }
-            default: {
-                // Mutable<ILogicalOperator> src = new
-                // Mutable<ILogicalOperator>();
-                // Mutable<ILogicalOperator> src = topOp;
-                if (expressionNeedsNoNesting(expr)) {
-                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, topOp);
-                    ILogicalExpression exp = ((AssignOperator) p.first).getExpressions().get(0).getValue();
-                    return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(exp, p.first.getInputs().get(0));
-                } else {
-                    Mutable<ILogicalOperator> src = new MutableObject<ILogicalOperator>();
-
-                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, src);
-
-                    if (((AbstractLogicalOperator) p.first).getOperatorTag() == LogicalOperatorTag.SUBPLAN) {
-                        // src.setOperator(topOp.getOperator());
-                        Mutable<ILogicalOperator> top2 = new MutableObject<ILogicalOperator>(p.first);
-                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
-                                p.second), top2);
-                    } else {
-                        SubplanOperator s = new SubplanOperator();
-                        s.getInputs().add(topOp);
-                        src.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
-                        Mutable<ILogicalOperator> planRoot = new MutableObject<ILogicalOperator>(p.first);
-                        s.setRootOp(planRoot);
-                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
-                                p.second), new MutableObject<ILogicalOperator>(s));
-                    }
-                }
-            }
-        }
-
-    }
-
-    private Pair<ILogicalOperator, LogicalVariable> produceFlwrResult(boolean noForClause, boolean isTop,
-            Mutable<ILogicalOperator> resOpRef, LogicalVariable resVar) {
-        if (isTop) {
-            ProjectOperator pr = new ProjectOperator(resVar);
-            pr.getInputs().add(resOpRef);
-            return new Pair<ILogicalOperator, LogicalVariable>(pr, resVar);
-
-        } else if (noForClause) {
-            return new Pair<ILogicalOperator, LogicalVariable>(resOpRef.getValue(), resVar);
-        } else {
-            return aggListify(resVar, resOpRef, false);
-        }
-    }
-
-    private Pair<ILogicalOperator, LogicalVariable> aggListify(LogicalVariable var, Mutable<ILogicalOperator> opRef,
-            boolean bProject) {
-        AggregateFunctionCallExpression funAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
-                AsterixBuiltinFunctions.LISTIFY, new ArrayList<Mutable<ILogicalExpression>>());
-        funAgg.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
-        LogicalVariable varListified = context.newVar();
-        AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(varListified),
-                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(funAgg)));
-        agg.getInputs().add(opRef);
-        ILogicalOperator res;
-        if (bProject) {
-            ProjectOperator pr = new ProjectOperator(varListified);
-            pr.getInputs().add(new MutableObject<ILogicalOperator>(agg));
-            res = pr;
-        } else {
-            res = agg;
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(res, varListified);
-    }
-
-    private Pair<ILogicalOperator, LogicalVariable> visitAndOrOperator(OperatorExpr op,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        ArrayList<OperatorType> ops = op.getOpList();
-        int nOps = ops.size();
-
-        ArrayList<Expression> exprs = op.getExprList();
-
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        OperatorType opLogical = ops.get(0);
-        AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(opLogical);
-
-        for (int i = 0; i <= nOps; i++) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
-            topOp = p.second;
-            // now look at the operator
-            if (i < nOps) {
-                if (ops.get(i) != opLogical) {
-                    throw new TranslationException("Unexpected operator " + ops.get(i)
-                            + " in an OperatorExpr starting with " + opLogical);
-                }
-            }
-            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-        }
-
-        LogicalVariable assignedVar = context.newVar();
-        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(f));
-        a.getInputs().add(topOp);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
-
-    }
-
-    private static boolean expressionNeedsNoNesting(Expression expr) {
-        Kind k = expr.getKind();
-        return k == Kind.LITERAL_EXPRESSION || k == Kind.LIST_CONSTRUCTOR_EXPRESSION
-                || k == Kind.RECORD_CONSTRUCTOR_EXPRESSION || k == Kind.VARIABLE_EXPRESSION
-                || k == Kind.CALL_EXPRESSION || k == Kind.OP_EXPRESSION || k == Kind.FIELD_ACCESSOR_EXPRESSION
-                || k == Kind.INDEX_ACCESSOR_EXPRESSION || k == Kind.UNARY_EXPRESSION;
-    }
-
-    private <T> ArrayList<T> mkSingletonArrayList(T item) {
-        ArrayList<T> array = new ArrayList<T>(1);
-        array.add(item);
-        return array;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitTypeDecl(TypeDecl td, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitRecordTypeDefiniton(RecordTypeDefinition tre,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitTypeReferenceExpression(TypeReferenceExpression tre,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitNodegroupDecl(NodegroupDecl ngd, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromFileStatement(LoadFromFileStatement stmtLoad,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitWriteFromQueryResultStatement(
-            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDropStatement(DropStatement del, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitControlFeedStatement(ControlFeedStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitCreateIndexStatement(CreateIndexStatement cis,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    private ILogicalExpression makeUnnestExpression(ILogicalExpression expr) {
-        switch (expr.getExpressionTag()) {
-            case VARIABLE: {
-                return new UnnestingFunctionCallExpression(
-                        FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
-                        new MutableObject<ILogicalExpression>(expr));
-            }
-            case FUNCTION_CALL: {
-                AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
-                if (fce.getKind() == FunctionKind.UNNEST) {
-                    return expr;
-                } else {
-                    return new UnnestingFunctionCallExpression(
-                            FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
-                            new MutableObject<ILogicalExpression>(expr));
-                }
-            }
-            default: {
-                return expr;
-            }
-        }
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitInsertStatement(InsertStatement insert,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDeleteStatement(DeleteStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUpdateStatement(UpdateStatement update,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUpdateClause(UpdateClause del, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDecl(DataverseDecl dv, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDatasetDecl(DatasetDecl dd, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitSetStatement(SetStatement ss, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitWriteStatement(WriteStatement ws, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromQueryResultStatement(
-            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitCreateDataverseStatement(CreateDataverseStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitIndexDropStatement(IndexDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitNodeGroupDropStatement(NodeGroupDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDropStatement(DataverseDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitTypeDropStatement(TypeDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visit(CreateFunctionStatement cfs, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDropStatement(FunctionDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitBeginFeedStatement(BeginFeedStatement bf,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
deleted file mode 100644
index 3440ce8..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
+++ /dev/null
@@ -1,1465 +0,0 @@
-package edu.uci.ics.asterix.translator;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Logger;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Expression.Kind;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.Identifier;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.JoinClause;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.ListConstructor.Type;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.MetaVariableClause;
-import edu.uci.ics.asterix.aql.expression.MetaVariableExpr;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OperatorType;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause.OrderModifier;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression.Quantifier;
-import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr.Sign;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlPlusExpressionVisitor;
-import edu.uci.ics.asterix.aql.util.FunctionUtils;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
-import edu.uci.ics.asterix.metadata.declared.FileSplitDataSink;
-import edu.uci.ics.asterix.metadata.declared.FileSplitSinkId;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AString;
-import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.functions.AsterixFunctionInfo;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-import edu.uci.ics.asterix.translator.CompiledStatements.ICompiledDmlStatement;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.Counter;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalPlan;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation.BroadcastSide;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DieOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.EmptyTupleSourceOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.InnerJoinOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LeftOuterJoinOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteOperator;
-import edu.uci.ics.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-
-/**
- * Each visit returns a pair of an operator and a variable. The variable
- * corresponds to the new column, if any, added to the tuple flow. E.g., for
- * Unnest, the column is the variable bound to the elements in the list, for
- * Subplan it is null. The first argument of a visit method is the expression
- * which is translated. The second argument of a visit method is the tuple
- * source for the current subtree.
- */
-
-public class AqlPlusExpressionToPlanTranslator extends AbstractAqlTranslator implements
-        IAqlPlusExpressionVisitor<Pair<ILogicalOperator, LogicalVariable>, Mutable<ILogicalOperator>> {
-
-    private static final Logger LOGGER = Logger.getLogger(AqlPlusExpressionToPlanTranslator.class.getName());
-
-    private class MetaScopeLogicalVariable {
-        private HashMap<Identifier, LogicalVariable> map = new HashMap<Identifier, LogicalVariable>();
-
-        public VariableReferenceExpression getVariableReferenceExpression(Identifier id) throws AsterixException {
-            LogicalVariable var = map.get(id);
-            LOGGER.fine("get:" + id + ":" + var);
-            if (var == null) {
-                throw new AsterixException("Identifier " + id + " not found in AQL+ meta-scope.");
-            }
-            return new VariableReferenceExpression(var);
-        }
-
-        public void put(Identifier id, LogicalVariable var) {
-            LOGGER.fine("put:" + id + ":" + var);
-            map.put(id, var);
-        }
-    }
-
-    private class MetaScopeILogicalOperator {
-        private HashMap<Identifier, ILogicalOperator> map = new HashMap<Identifier, ILogicalOperator>();
-
-        public ILogicalOperator get(Identifier id) throws AsterixException {
-            ILogicalOperator op = map.get(id);
-            if (op == null) {
-                throw new AsterixException("Identifier " + id + " not found in AQL+ meta-scope.");
-            }
-            return op;
-        }
-
-        public void put(Identifier id, ILogicalOperator op) {
-            LOGGER.fine("put:" + id + ":" + op);
-            map.put(id, op);
-        }
-    }
-
-    private final JobId jobId;
-   private TranslationContext context;
-    private String outputDatasetName;
-    private ICompiledDmlStatement stmt;
-    private AqlMetadataProvider metadataProvider;
-
-    private MetaScopeLogicalVariable metaScopeExp = new MetaScopeLogicalVariable();
-    private MetaScopeILogicalOperator metaScopeOp = new MetaScopeILogicalOperator();
-    private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1);
-
-    
-    
-    public AqlPlusExpressionToPlanTranslator(JobId jobId, AqlMetadataProvider metadataProvider,
-            Counter currentVarCounter, String outputDatasetName, ICompiledDmlStatement stmt) {
-        this.jobId = jobId;
-        this.metadataProvider = metadataProvider;
-        this.context = new TranslationContext(currentVarCounter);
-        this.outputDatasetName = outputDatasetName;
-        this.stmt = stmt;
-        this.context.setTopFlwor(false);
-    }
-
-    public int getVarCounter() {
-        return context.getVarCounter();
-    }
-
-    public ILogicalPlan translate(Query expr) throws AlgebricksException, AsterixException {
-        return translate(expr, null);
-    }
-
-    public ILogicalPlan translate(Query expr, AqlMetadataProvider metadata)
-            throws AlgebricksException, AsterixException {
-        IDataFormat format = metadata.getFormat();
-        if (format == null) {
-            throw new AlgebricksException("Data format has not been set.");
-        }
-        format.registerRuntimeFunctions();
-        Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, new MutableObject<ILogicalOperator>(
-                new EmptyTupleSourceOperator()));
-
-        ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<Mutable<ILogicalOperator>>();
-
-        boolean isTransactionalWrite = false;
-        ILogicalOperator topOp = p.first;
-        ProjectOperator project = (ProjectOperator) topOp;
-        LogicalVariable resVar = project.getVariables().get(0);
-        if (outputDatasetName == null) {
-            List<Mutable<ILogicalExpression>> writeExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
-            writeExprList.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(resVar)));
-            FileSplitSinkId fssi = new FileSplitSinkId(metadata.getOutputFile());
-            FileSplitDataSink sink = new FileSplitDataSink(fssi, null);
-            topOp = new WriteOperator(writeExprList, sink);
-            topOp.getInputs().add(new MutableObject<ILogicalOperator>(project));
-        } else {
-            Dataset dataset = metadata.findDataset(stmt.getDataverseName(), outputDatasetName);
-            if (dataset == null) {
-                throw new AlgebricksException("Cannot find dataset " + outputDatasetName);
-            }
-            if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
-                throw new AlgebricksException("Cannot write output to an external dataset.");
-            }
-            ARecordType itemType = (ARecordType) metadata.findType(dataset.getDataverseName(),
-                    dataset.getItemTypeName());
-            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
-            ArrayList<LogicalVariable> vars = new ArrayList<LogicalVariable>();
-            ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
-            List<Mutable<ILogicalExpression>> varRefsForLoading = new ArrayList<Mutable<ILogicalExpression>>();
-            for (String partitioningKey : partitioningKeys) {
-                Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioner = format
-                        .partitioningEvaluatorFactory(itemType, partitioningKey);
-                AbstractFunctionCallExpression f = partitioner.second.cloneExpression();
-                f.substituteVar(METADATA_DUMMY_VAR, resVar);
-                exprs.add(new MutableObject<ILogicalExpression>(f));
-                LogicalVariable v = context.newVar();
-                vars.add(v);
-                varRefsForLoading.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(v)));
-            }
-            AssignOperator assign = new AssignOperator(vars, exprs);
-            assign.getInputs().add(new MutableObject<ILogicalOperator>(project));
-        }
-
-        globalPlanRoots.add(new MutableObject<ILogicalOperator>(topOp));
-        ILogicalPlan plan = new ALogicalPlanImpl(globalPlanRoots);
-        return plan;
-    }
-
-    public ILogicalPlan translate(List<Clause> clauses) throws AlgebricksException, AsterixException {
-
-        if (clauses == null) {
-            return null;
-        }
-
-        Mutable<ILogicalOperator> opRef = new MutableObject<ILogicalOperator>(new EmptyTupleSourceOperator());
-        Pair<ILogicalOperator, LogicalVariable> p = null;
-        for (Clause c : clauses) {
-            p = c.accept(this, opRef);
-            opRef = new MutableObject<ILogicalOperator>(p.first);
-        }
-
-        ArrayList<Mutable<ILogicalOperator>> globalPlanRoots = new ArrayList<Mutable<ILogicalOperator>>();
-
-        ILogicalOperator topOp = p.first;
-
-        globalPlanRoots.add(new MutableObject<ILogicalOperator>(topOp));
-        ILogicalPlan plan = new ALogicalPlanImpl(globalPlanRoots);
-        return plan;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitForClause(ForClause fc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        LogicalVariable v = context.newVar(fc.getVarExpr());
-
-        Expression inExpr = fc.getInExpr();
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(inExpr, tupSource);
-        ILogicalOperator returnedOp;
-
-        if (fc.getPosVarExpr() == null) {
-            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)));
-        } else {
-            LogicalVariable pVar = context.newVar(fc.getPosVarExpr());
-            returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
-                    pVar, BuiltinType.AINT32);
-        }
-        returnedOp.getInputs().add(eo.second);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLetClause(LetClause lc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        LogicalVariable v;
-        ILogicalOperator returnedOp;
-
-        switch (lc.getBindingExpr().getKind()) {
-            case VARIABLE_EXPRESSION: {
-                v = context.newVar(lc.getVarExpr());
-                LogicalVariable prev = context.getVar(((VariableExpr) lc.getBindingExpr()).getVar().getId());
-                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(
-                        new VariableReferenceExpression(prev)));
-                returnedOp.getInputs().add(tupSource);
-                break;
-            }
-            default: {
-                Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(lc.getBindingExpr(),
-                        tupSource);
-                v = context.newVar(lc.getVarExpr());
-                returnedOp = new AssignOperator(v, new MutableObject<ILogicalExpression>(eo.first));
-                returnedOp.getInputs().add(eo.second);
-                break;
-            }
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(returnedOp, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFlworExpression(FLWOGRExpression flwor,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Mutable<ILogicalOperator> flworPlan = tupSource;
-        boolean isTop = context.isTopFlwor();
-        if (isTop) {
-            context.setTopFlwor(false);
-        }
-        for (Clause c : flwor.getClauseList()) {
-            Pair<ILogicalOperator, LogicalVariable> pC = c.accept(this, flworPlan);
-            flworPlan = new MutableObject<ILogicalOperator>(pC.first);
-        }
-
-        Expression r = flwor.getReturnExpr();
-        boolean noFlworClause = flwor.noForClause();
-
-        if (r.getKind() == Kind.VARIABLE_EXPRESSION) {
-            VariableExpr v = (VariableExpr) r;
-            LogicalVariable var = context.getVar(v.getVar().getId());
-
-            return produceFlwrResult(noFlworClause, isTop, flworPlan, var);
-
-        } else {
-            Mutable<ILogicalOperator> baseOp = new MutableObject<ILogicalOperator>(flworPlan.getValue());
-            Pair<ILogicalOperator, LogicalVariable> rRes = r.accept(this, baseOp);
-            ILogicalOperator rOp = rRes.first;
-            ILogicalOperator resOp;
-            if (expressionNeedsNoNesting(r)) {
-                baseOp.setValue(flworPlan.getValue());
-                resOp = rOp;
-            } else {
-                SubplanOperator s = new SubplanOperator(rOp);
-                s.getInputs().add(flworPlan);
-                resOp = s;
-                baseOp.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
-            }
-            Mutable<ILogicalOperator> resOpRef = new MutableObject<ILogicalOperator>(resOp);
-            return produceFlwrResult(noFlworClause, isTop, resOpRef, rRes.second);
-        }
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFieldAccessor(FieldAccessor fa,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(fa.getExpr(), tupSource);
-        LogicalVariable v = context.newVar();
-        AbstractFunctionCallExpression fldAccess = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME));
-        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-        ILogicalExpression faExpr = new ConstantExpression(new AsterixConstantValue(new AString(fa.getIdent()
-                .getValue())));
-        fldAccess.getArguments().add(new MutableObject<ILogicalExpression>(faExpr));
-        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(fldAccess));
-        a.getInputs().add(p.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
-
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitIndexAccessor(IndexAccessor ia,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(ia.getExpr(), tupSource);
-        LogicalVariable v = context.newVar();
-        AbstractFunctionCallExpression f;
-        int i = ia.getIndex();
-        if (i == IndexAccessor.ANY) {
-            f = new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.ANY_COLLECTION_MEMBER));
-            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-        } else {
-            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.GET_ITEM));
-            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-            f.getArguments().add(
-                    new MutableObject<ILogicalExpression>(new ConstantExpression(
-                            new AsterixConstantValue(new AInt32(i)))));
-        }
-        AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
-        a.getInputs().add(p.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitCallExpr(CallExpr fcall, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        LogicalVariable v = context.newVar();
-        FunctionSignature signature = fcall.getFunctionSignature();
-        List<Mutable<ILogicalExpression>> args = new ArrayList<Mutable<ILogicalExpression>>();
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        for (Expression expr : fcall.getExprList()) {
-            switch (expr.getKind()) {
-                case VARIABLE_EXPRESSION: {
-                    LogicalVariable var = context.getVar(((VariableExpr) expr).getVar().getId());
-                    args.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
-                    break;
-                }
-                case LITERAL_EXPRESSION: {
-                    LiteralExpr val = (LiteralExpr) expr;
-                    args.add(new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                            ConstantHelper.objectFromLiteral(val.getValue())))));
-                    break;
-                }
-                default: {
-                    Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
-                    AbstractLogicalOperator o1 = (AbstractLogicalOperator) eo.second.getValue();
-                    args.add(new MutableObject<ILogicalExpression>(eo.first));
-                    if (o1 != null && !(o1.getOperatorTag() == LogicalOperatorTag.ASSIGN && hasOnlyChild(o1, topOp))) {
-                        topOp = eo.second;
-                    }
-                    break;
-                }
-            }
-        }
-
-        FunctionIdentifier fi = new FunctionIdentifier(AlgebricksBuiltinFunctions.ALGEBRICKS_NS, signature.getName());
-        AsterixFunctionInfo afi = AsterixBuiltinFunctions.lookupFunction(fi);
-        FunctionIdentifier builtinAquafi = afi == null ? null : afi.getFunctionIdentifier();
-
-        if (builtinAquafi != null) {
-            fi = builtinAquafi;
-        } else {
-            fi = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, signature.getName());
-            FunctionIdentifier builtinAsterixFi = AsterixBuiltinFunctions.getBuiltinFunctionIdentifier(fi);
-            if (builtinAsterixFi != null) {
-                fi = builtinAsterixFi;
-            }
-        }
-        AbstractFunctionCallExpression f;
-        if (AsterixBuiltinFunctions.isBuiltinAggregateFunction(fi)) {
-            f = AsterixBuiltinFunctions.makeAggregateFunctionExpression(fi, args);
-        } else if (AsterixBuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
-            UnnestingFunctionCallExpression ufce = new UnnestingFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(fi), args);
-            ufce.setReturnsUniqueValues(AsterixBuiltinFunctions.returnsUniqueValues(fi));
-            f = ufce;
-        } else {
-            f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fi), args);
-        }
-        AssignOperator op = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
-        if (topOp != null) {
-            op.getInputs().add(topOp);
-        }
-
-        return new Pair<ILogicalOperator, LogicalVariable>(op, v);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDecl(FunctionDecl fd,
-            Mutable<ILogicalOperator> tupSource) {
-        // TODO Auto-generated method stub
-        throw new NotImplementedException();
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitGroupbyClause(GroupbyClause gc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        GroupByOperator gOp = new GroupByOperator();
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (GbyVariableExpressionPair ve : gc.getGbyPairList()) {
-            LogicalVariable v;
-            VariableExpr vexpr = ve.getVar();
-            if (vexpr != null) {
-                v = context.newVar(vexpr);
-            } else {
-                v = context.newVar();
-            }
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
-            gOp.addGbyExpression(v, eo.first);
-            topOp = eo.second;
-        }
-        for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
-            LogicalVariable v;
-            VariableExpr vexpr = ve.getVar();
-            if (vexpr != null) {
-                v = context.newVar(vexpr);
-            } else {
-                v = context.newVar();
-            }
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(ve.getExpr(), topOp);
-            gOp.addDecorExpression(v, eo.first);
-            topOp = eo.second;
-        }
-        gOp.getInputs().add(topOp);
-
-        for (VariableExpr var : gc.getWithVarList()) {
-            LogicalVariable aggVar = context.newVar();
-            LogicalVariable oldVar = context.getVar(var);
-            List<Mutable<ILogicalExpression>> flArgs = new ArrayList<Mutable<ILogicalExpression>>(1);
-            flArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oldVar)));
-            AggregateFunctionCallExpression fListify = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
-                    AsterixBuiltinFunctions.LISTIFY, flArgs);
-            AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar),
-                    (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fListify)));
-            agg.getInputs().add(
-                    new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
-                            new MutableObject<ILogicalOperator>(gOp))));
-            ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(agg));
-            gOp.getNestedPlans().add(plan);
-            // Hide the variable that was part of the "with", replacing it with
-            // the one bound by the aggregation op.
-            context.setVar(var, aggVar);
-        }
-
-        gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
-        return new Pair<ILogicalOperator, LogicalVariable>(gOp, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitIfExpr(IfExpr ifexpr, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        // In the most general case, IfThenElse is translated in the following
-        // way.
-        //
-        // We assign the result of the condition to one variable varCond.
-        // We create one subplan which contains the plan for the "then" branch,
-        // on top of which there is a selection whose condition is varCond.
-        // Similarly, we create one subplan for the "else" branch, in which the
-        // selection is not(varCond).
-        // Finally, we concatenate the results. (??)
-
-        Pair<ILogicalOperator, LogicalVariable> pCond = ifexpr.getCondExpr().accept(this, tupSource);
-        ILogicalOperator opCond = pCond.first;
-        LogicalVariable varCond = pCond.second;
-
-        SubplanOperator sp = new SubplanOperator();
-        Mutable<ILogicalOperator> nestedSource = new MutableObject<ILogicalOperator>(new NestedTupleSourceOperator(
-                new MutableObject<ILogicalOperator>(sp)));
-
-        Pair<ILogicalOperator, LogicalVariable> pThen = ifexpr.getThenExpr().accept(this, nestedSource);
-        SelectOperator sel1 = new SelectOperator(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(
-                varCond)));
-        sel1.getInputs().add(new MutableObject<ILogicalOperator>(pThen.first));
-
-        Pair<ILogicalOperator, LogicalVariable> pElse = ifexpr.getElseExpr().accept(this, nestedSource);
-        AbstractFunctionCallExpression notVarCond = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), new MutableObject<ILogicalExpression>(
-                        new VariableReferenceExpression(varCond)));
-        SelectOperator sel2 = new SelectOperator(new MutableObject<ILogicalExpression>(notVarCond));
-        sel2.getInputs().add(new MutableObject<ILogicalOperator>(pElse.first));
-
-        ILogicalPlan p1 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel1));
-        sp.getNestedPlans().add(p1);
-        ILogicalPlan p2 = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(sel2));
-        sp.getNestedPlans().add(p2);
-
-        Mutable<ILogicalOperator> opCondRef = new MutableObject<ILogicalOperator>(opCond);
-        sp.getInputs().add(opCondRef);
-
-        LogicalVariable resV = context.newVar();
-        AbstractFunctionCallExpression concatNonNull = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.CONCAT_NON_NULL),
-                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pThen.second)),
-                new MutableObject<ILogicalExpression>(new VariableReferenceExpression(pElse.second)));
-        AssignOperator a = new AssignOperator(resV, new MutableObject<ILogicalExpression>(concatNonNull));
-        a.getInputs().add(new MutableObject<ILogicalOperator>(sp));
-
-        return new Pair<ILogicalOperator, LogicalVariable>(a, resV);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLiteralExpr(LiteralExpr l, Mutable<ILogicalOperator> tupSource) {
-        LogicalVariable var = context.newVar();
-        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(new ConstantExpression(
-                new AsterixConstantValue(ConstantHelper.objectFromLiteral(l.getValue())))));
-        if (tupSource != null) {
-            a.getInputs().add(tupSource);
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitOperatorExpr(OperatorExpr op,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        ArrayList<OperatorType> ops = op.getOpList();
-        int nOps = ops.size();
-
-        if (nOps > 0 && (ops.get(0) == OperatorType.AND || ops.get(0) == OperatorType.OR)) {
-            return visitAndOrOperator(op, tupSource);
-        }
-
-        ArrayList<Expression> exprs = op.getExprList();
-
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        ILogicalExpression currExpr = null;
-        for (int i = 0; i <= nOps; i++) {
-
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
-            topOp = p.second;
-            ILogicalExpression e = p.first;
-            // now look at the operator
-            if (i < nOps) {
-                if (OperatorExpr.opIsComparison(ops.get(i))) {
-                    AbstractFunctionCallExpression c = createComparisonExpression(ops.get(i));
-
-                    // chain the operators
-                    if (i == 0) {
-                        c.getArguments().add(new MutableObject<ILogicalExpression>(e));
-                        currExpr = c;
-                        if (op.isBroadcastOperand(i)) {
-                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
-                            bcast.setObject(BroadcastSide.LEFT);
-                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
-                        }
-                    } else {
-                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
-                                new MutableObject<ILogicalExpression>(e));
-                        c.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
-                        currExpr = c;
-                        if (i == 1 && op.isBroadcastOperand(i)) {
-                            BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
-                            bcast.setObject(BroadcastSide.RIGHT);
-                            c.getAnnotations().put(BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
-                        }
-                    }
-                } else {
-                    AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(ops.get(i));
-
-                    if (i == 0) {
-                        f.getArguments().add(new MutableObject<ILogicalExpression>(e));
-                        currExpr = f;
-                    } else {
-                        ((AbstractFunctionCallExpression) currExpr).getArguments().add(
-                                new MutableObject<ILogicalExpression>(e));
-                        f.getArguments().add(new MutableObject<ILogicalExpression>(currExpr));
-                        currExpr = f;
-                    }
-                }
-            } else { // don't forget the last expression...
-                ((AbstractFunctionCallExpression) currExpr).getArguments()
-                        .add(new MutableObject<ILogicalExpression>(e));
-                if (i == 1 && op.isBroadcastOperand(i)) {
-                    BroadcastExpressionAnnotation bcast = new BroadcastExpressionAnnotation();
-                    bcast.setObject(BroadcastSide.RIGHT);
-                    ((AbstractFunctionCallExpression) currExpr).getAnnotations().put(
-                            BroadcastExpressionAnnotation.BROADCAST_ANNOTATION_KEY, bcast);
-                }
-            }
-        }
-
-        LogicalVariable assignedVar = context.newVar();
-        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(currExpr));
-
-        a.getInputs().add(topOp);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitOrderbyClause(OrderbyClause oc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-
-        OrderOperator ord = new OrderOperator();
-        Iterator<OrderModifier> modifIter = oc.getModifierList().iterator();
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (Expression e : oc.getOrderbyList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(e, topOp);
-            OrderModifier m = modifIter.next();
-            OrderOperator.IOrder comp = (m == OrderModifier.ASC) ? OrderOperator.ASC_ORDER : OrderOperator.DESC_ORDER;
-            ord.getOrderExpressions()
-                    .add(new Pair<IOrder, Mutable<ILogicalExpression>>(comp, new MutableObject<ILogicalExpression>(
-                            p.first)));
-            topOp = p.second;
-        }
-        ord.getInputs().add(topOp);
-        if (oc.getNumTuples() > 0) {
-            ord.getAnnotations().put(OperatorAnnotations.CARDINALITY, oc.getNumTuples());
-        }
-        if (oc.getNumFrames() > 0) {
-            ord.getAnnotations().put(OperatorAnnotations.MAX_NUMBER_FRAMES, oc.getNumFrames());
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(ord, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitQuantifiedExpression(QuantifiedExpression qe,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        ILogicalOperator firstOp = null;
-        Mutable<ILogicalOperator> lastOp = null;
-
-        for (QuantifiedPair qt : qe.getQuantifiedList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(qt.getExpr(), topOp);
-            topOp = eo1.second;
-            LogicalVariable uVar = context.newVar(qt.getVarExpr());
-            ILogicalOperator u = new UnnestOperator(uVar, new MutableObject<ILogicalExpression>(
-                    makeUnnestExpression(eo1.first)));
-
-            if (firstOp == null) {
-                firstOp = u;
-            }
-            if (lastOp != null) {
-                u.getInputs().add(lastOp);
-            }
-            lastOp = new MutableObject<ILogicalOperator>(u);
-        }
-
-        // We make all the unnest correspond. to quantif. vars. sit on top
-        // in the hope of enabling joins & other optimiz.
-        firstOp.getInputs().add(topOp);
-        topOp = lastOp;
-
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(qe.getSatisfiesExpr(), topOp);
-
-        AggregateFunctionCallExpression fAgg;
-        SelectOperator s;
-        if (qe.getQuantifier() == Quantifier.SOME) {
-            s = new SelectOperator(new MutableObject<ILogicalExpression>(eo2.first));
-            s.getInputs().add(eo2.second);
-            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.NON_EMPTY_STREAM,
-                    new ArrayList<Mutable<ILogicalExpression>>());
-        } else { // EVERY
-            List<Mutable<ILogicalExpression>> satExprList = new ArrayList<Mutable<ILogicalExpression>>(1);
-            satExprList.add(new MutableObject<ILogicalExpression>(eo2.first));
-            s = new SelectOperator(new MutableObject<ILogicalExpression>(new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), satExprList)));
-            s.getInputs().add(eo2.second);
-            fAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.EMPTY_STREAM,
-                    new ArrayList<Mutable<ILogicalExpression>>());
-        }
-        LogicalVariable qeVar = context.newVar();
-        AggregateOperator a = new AggregateOperator(mkSingletonArrayList(qeVar),
-                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fAgg)));
-        a.getInputs().add(new MutableObject<ILogicalOperator>(s));
-        return new Pair<ILogicalOperator, LogicalVariable>(a, qeVar);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitQuery(Query q, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        return q.getBody().accept(this, tupSource);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitRecordConstructor(RecordConstructor rc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(
-                FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR));
-        LogicalVariable v1 = context.newVar();
-        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (FieldBinding fb : rc.getFbList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = aqlExprToAlgExpression(fb.getLeftExpr(), topOp);
-            f.getArguments().add(new MutableObject<ILogicalExpression>(eo1.first));
-            topOp = eo1.second;
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = aqlExprToAlgExpression(fb.getRightExpr(), topOp);
-            f.getArguments().add(new MutableObject<ILogicalExpression>(eo2.first));
-            topOp = eo2.second;
-        }
-        a.getInputs().add(topOp);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitListConstructor(ListConstructor lc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        FunctionIdentifier fid = (lc.getType() == Type.ORDERED_LIST_CONSTRUCTOR) ? AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR
-                : AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR;
-        AbstractFunctionCallExpression f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
-        LogicalVariable v1 = context.newVar();
-        AssignOperator a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(f));
-        Mutable<ILogicalOperator> topOp = tupSource;
-        for (Expression expr : lc.getExprList()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, topOp);
-            f.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
-            topOp = eo.second;
-        }
-        a.getInputs().add(topOp);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUnaryExpr(UnaryExpr u, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Expression expr = u.getExpr();
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = aqlExprToAlgExpression(expr, tupSource);
-        LogicalVariable v1 = context.newVar();
-        AssignOperator a;
-        if (u.getSign() == Sign.POSITIVE) {
-            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(eo.first));
-        } else {
-            AbstractFunctionCallExpression m = new ScalarFunctionCallExpression(
-                    FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.NUMERIC_UNARY_MINUS));
-            m.getArguments().add(new MutableObject<ILogicalExpression>(eo.first));
-            a = new AssignOperator(v1, new MutableObject<ILogicalExpression>(m));
-        }
-        a.getInputs().add(eo.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, v1);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitVariableExpr(VariableExpr v, Mutable<ILogicalOperator> tupSource) {
-        // Should we ever get to this method?
-        LogicalVariable var = context.newVar();
-        LogicalVariable oldV = context.getVar(v.getVar().getId());
-        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(
-                new VariableReferenceExpression(oldV)));
-        a.getInputs().add(tupSource);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitWhereClause(WhereClause w, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(w.getWhereExpr(), tupSource);
-        SelectOperator s = new SelectOperator(new MutableObject<ILogicalExpression>(p.first));
-        s.getInputs().add(p.second);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(s, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLimitClause(LimitClause lc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = aqlExprToAlgExpression(lc.getLimitExpr(), tupSource);
-        LimitOperator opLim;
-        Expression offset = lc.getOffset();
-        if (offset != null) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p2 = aqlExprToAlgExpression(offset, p1.second);
-            opLim = new LimitOperator(p1.first, p2.first);
-            opLim.getInputs().add(p2.second);
-        } else {
-            opLim = new LimitOperator(p1.first);
-            opLim.getInputs().add(p1.second);
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(opLim, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDieClause(DieClause lc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p1 = aqlExprToAlgExpression(lc.getDieExpr(), tupSource);
-        DieOperator opDie = new DieOperator(p1.first);
-        opDie.getInputs().add(p1.second);
-        return new Pair<ILogicalOperator, LogicalVariable>(opDie, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDistinctClause(DistinctClause dc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        List<Mutable<ILogicalExpression>> exprList = new ArrayList<Mutable<ILogicalExpression>>();
-        Mutable<ILogicalOperator> input = null;
-        for (Expression expr : dc.getDistinctByExpr()) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(expr, tupSource);
-            exprList.add(new MutableObject<ILogicalExpression>(p.first));
-            input = p.second;
-        }
-        DistinctOperator opDistinct = new DistinctOperator(exprList);
-        opDistinct.getInputs().add(input);
-        return new Pair<ILogicalOperator, LogicalVariable>(opDistinct, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUnionExpr(UnionExpr unionExpr,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        Mutable<ILogicalOperator> ts = tupSource;
-        ILogicalOperator lastOp = null;
-        LogicalVariable lastVar = null;
-        boolean first = true;
-        for (Expression e : unionExpr.getExprs()) {
-            if (first) {
-                first = false;
-            } else {
-                ts = new MutableObject<ILogicalOperator>(new EmptyTupleSourceOperator());
-            }
-            Pair<ILogicalOperator, LogicalVariable> p1 = e.accept(this, ts);
-            if (lastOp == null) {
-                lastOp = p1.first;
-                lastVar = p1.second;
-            } else {
-                LogicalVariable unnestVar1 = context.newVar();
-                UnnestOperator unnest1 = new UnnestOperator(unnestVar1, new MutableObject<ILogicalExpression>(
-                        makeUnnestExpression(new VariableReferenceExpression(lastVar))));
-                unnest1.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
-                LogicalVariable unnestVar2 = context.newVar();
-                UnnestOperator unnest2 = new UnnestOperator(unnestVar2, new MutableObject<ILogicalExpression>(
-                        makeUnnestExpression(new VariableReferenceExpression(p1.second))));
-                unnest2.getInputs().add(new MutableObject<ILogicalOperator>(p1.first));
-                List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> varMap = new ArrayList<Triple<LogicalVariable, LogicalVariable, LogicalVariable>>(
-                        1);
-                LogicalVariable resultVar = context.newVar();
-                Triple<LogicalVariable, LogicalVariable, LogicalVariable> triple = new Triple<LogicalVariable, LogicalVariable, LogicalVariable>(
-                        unnestVar1, unnestVar2, resultVar);
-                varMap.add(triple);
-                UnionAllOperator unionOp = new UnionAllOperator(varMap);
-                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest1));
-                unionOp.getInputs().add(new MutableObject<ILogicalOperator>(unnest2));
-                lastVar = resultVar;
-                lastOp = unionOp;
-            }
-        }
-        LogicalVariable aggVar = context.newVar();
-        ArrayList<LogicalVariable> aggregVars = new ArrayList<LogicalVariable>(1);
-        aggregVars.add(aggVar);
-        List<Mutable<ILogicalExpression>> afcExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
-        afcExprs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(lastVar)));
-        AggregateFunctionCallExpression afc = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
-                AsterixBuiltinFunctions.LISTIFY, afcExprs);
-        ArrayList<Mutable<ILogicalExpression>> aggregExprs = new ArrayList<Mutable<ILogicalExpression>>(1);
-        aggregExprs.add(new MutableObject<ILogicalExpression>(afc));
-        AggregateOperator agg = new AggregateOperator(aggregVars, aggregExprs);
-        agg.getInputs().add(new MutableObject<ILogicalOperator>(lastOp));
-        return new Pair<ILogicalOperator, LogicalVariable>(agg, aggVar);
-    }
-
-    private AbstractFunctionCallExpression createComparisonExpression(OperatorType t) {
-        FunctionIdentifier fi = operatorTypeToFunctionIdentifier(t);
-        IFunctionInfo finfo = FunctionUtils.getFunctionInfo(fi);
-        return new ScalarFunctionCallExpression(finfo);
-    }
-
-    private FunctionIdentifier operatorTypeToFunctionIdentifier(OperatorType t) {
-        switch (t) {
-            case EQ: {
-                return AlgebricksBuiltinFunctions.EQ;
-            }
-            case NEQ: {
-                return AlgebricksBuiltinFunctions.NEQ;
-            }
-            case GT: {
-                return AlgebricksBuiltinFunctions.GT;
-            }
-            case GE: {
-                return AlgebricksBuiltinFunctions.GE;
-            }
-            case LT: {
-                return AlgebricksBuiltinFunctions.LT;
-            }
-            case LE: {
-                return AlgebricksBuiltinFunctions.LE;
-            }
-            default: {
-                throw new IllegalStateException();
-            }
-        }
-    }
-
-    private AbstractFunctionCallExpression createFunctionCallExpressionForBuiltinOperator(OperatorType t)
-            throws AsterixException {
-
-        FunctionIdentifier fid = null;
-        switch (t) {
-            case PLUS: {
-                fid = AlgebricksBuiltinFunctions.NUMERIC_ADD;
-                break;
-            }
-            case MINUS: {
-                fid = AsterixBuiltinFunctions.NUMERIC_SUBTRACT;
-                break;
-            }
-            case MUL: {
-                fid = AsterixBuiltinFunctions.NUMERIC_MULTIPLY;
-                break;
-            }
-            case DIV: {
-                fid = AsterixBuiltinFunctions.NUMERIC_DIVIDE;
-                break;
-            }
-            case MOD: {
-                fid = AsterixBuiltinFunctions.NUMERIC_MOD;
-                break;
-            }
-            case IDIV: {
-                fid = AsterixBuiltinFunctions.NUMERIC_IDIV;
-                break;
-            }
-            case CARET: {
-                fid = AsterixBuiltinFunctions.CARET;
-                break;
-            }
-            case AND: {
-                fid = AlgebricksBuiltinFunctions.AND;
-                break;
-            }
-            case OR: {
-                fid = AlgebricksBuiltinFunctions.OR;
-                break;
-            }
-            case FUZZY_EQ: {
-                fid = AsterixBuiltinFunctions.FUZZY_EQ;
-                break;
-            }
-
-            default: {
-                throw new NotImplementedException("Operator " + t + " is not yet implemented");
-            }
-        }
-        return new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(fid));
-    }
-
-    private static boolean hasOnlyChild(ILogicalOperator parent, Mutable<ILogicalOperator> childCandidate) {
-        List<Mutable<ILogicalOperator>> inp = parent.getInputs();
-        if (inp == null || inp.size() != 1) {
-            return false;
-        }
-        return inp.get(0) == childCandidate;
-    }
-
-    private Pair<ILogicalExpression, Mutable<ILogicalOperator>> aqlExprToAlgExpression(Expression expr,
-            Mutable<ILogicalOperator> topOp) throws AsterixException {
-        switch (expr.getKind()) {
-            case VARIABLE_EXPRESSION: {
-                VariableReferenceExpression ve = new VariableReferenceExpression(context.getVar(((VariableExpr) expr)
-                        .getVar().getId()));
-                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(ve, topOp);
-            }
-            case METAVARIABLE_EXPRESSION: {
-                ILogicalExpression le = metaScopeExp.getVariableReferenceExpression(((VariableExpr) expr).getVar());
-                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(le, topOp);
-            }
-            case LITERAL_EXPRESSION: {
-                LiteralExpr val = (LiteralExpr) expr;
-                return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new ConstantExpression(
-                        new AsterixConstantValue(ConstantHelper.objectFromLiteral(val.getValue()))), topOp);
-            }
-            default: {
-                // Mutable<ILogicalExpression> src = new
-                // Mutable<ILogicalExpression>();
-                // Mutable<ILogicalExpression> src = topOp;
-                if (expressionNeedsNoNesting(expr)) {
-                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, topOp);
-                    ILogicalExpression exp = ((AssignOperator) p.first).getExpressions().get(0).getValue();
-                    return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(exp, p.first.getInputs().get(0));
-                } else {
-                    Mutable<ILogicalOperator> src = new MutableObject<ILogicalOperator>();
-
-                    Pair<ILogicalOperator, LogicalVariable> p = expr.accept(this, src);
-
-                    if (((AbstractLogicalOperator) p.first).getOperatorTag() == LogicalOperatorTag.SUBPLAN) {
-                        // src.setOperator(topOp.getOperator());
-                        Mutable<ILogicalOperator> top2 = new MutableObject<ILogicalOperator>(p.first);
-                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
-                                p.second), top2);
-                    } else {
-                        SubplanOperator s = new SubplanOperator();
-                        s.getInputs().add(topOp);
-                        src.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
-                        Mutable<ILogicalOperator> planRoot = new MutableObject<ILogicalOperator>(p.first);
-                        s.setRootOp(planRoot);
-                        return new Pair<ILogicalExpression, Mutable<ILogicalOperator>>(new VariableReferenceExpression(
-                                p.second), new MutableObject<ILogicalOperator>(s));
-                    }
-                }
-            }
-        }
-
-    }
-
-    private Pair<ILogicalOperator, LogicalVariable> produceFlwrResult(boolean noForClause, boolean isTop,
-            Mutable<ILogicalOperator> resOpRef, LogicalVariable resVar) {
-        if (isTop) {
-            ProjectOperator pr = new ProjectOperator(resVar);
-            pr.getInputs().add(resOpRef);
-            return new Pair<ILogicalOperator, LogicalVariable>(pr, resVar);
-
-        } else if (noForClause) {
-            return new Pair<ILogicalOperator, LogicalVariable>(resOpRef.getValue(), resVar);
-        } else {
-            return aggListify(resVar, resOpRef, false);
-        }
-    }
-
-    private Pair<ILogicalOperator, LogicalVariable> aggListify(LogicalVariable var, Mutable<ILogicalOperator> opRef,
-            boolean bProject) {
-        AggregateFunctionCallExpression funAgg = AsterixBuiltinFunctions.makeAggregateFunctionExpression(
-                AsterixBuiltinFunctions.LISTIFY, new ArrayList<Mutable<ILogicalExpression>>());
-        funAgg.getArguments().add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
-        LogicalVariable varListified = context.newVar();
-        AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(varListified),
-                (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(funAgg)));
-        agg.getInputs().add(opRef);
-        ILogicalOperator res;
-        if (bProject) {
-            ProjectOperator pr = new ProjectOperator(varListified);
-            pr.getInputs().add(new MutableObject<ILogicalOperator>(agg));
-            res = pr;
-        } else {
-            res = agg;
-        }
-        return new Pair<ILogicalOperator, LogicalVariable>(res, varListified);
-    }
-
-    private Pair<ILogicalOperator, LogicalVariable> visitAndOrOperator(OperatorExpr op,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        ArrayList<OperatorType> ops = op.getOpList();
-        int nOps = ops.size();
-
-        ArrayList<Expression> exprs = op.getExprList();
-
-        Mutable<ILogicalOperator> topOp = tupSource;
-
-        OperatorType opLogical = ops.get(0);
-        AbstractFunctionCallExpression f = createFunctionCallExpressionForBuiltinOperator(opLogical);
-
-        for (int i = 0; i <= nOps; i++) {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = aqlExprToAlgExpression(exprs.get(i), topOp);
-            topOp = p.second;
-            // now look at the operator
-            if (i < nOps) {
-                if (ops.get(i) != opLogical) {
-                    throw new TranslationException("Unexpected operator " + ops.get(i)
-                            + " in an OperatorExpr starting with " + opLogical);
-                }
-            }
-            f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
-        }
-
-        LogicalVariable assignedVar = context.newVar();
-        AssignOperator a = new AssignOperator(assignedVar, new MutableObject<ILogicalExpression>(f));
-        a.getInputs().add(topOp);
-
-        return new Pair<ILogicalOperator, LogicalVariable>(a, assignedVar);
-
-    }
-
-    private static boolean expressionNeedsNoNesting(Expression expr) {
-        Kind k = expr.getKind();
-        return k == Kind.LITERAL_EXPRESSION || k == Kind.LIST_CONSTRUCTOR_EXPRESSION
-                || k == Kind.RECORD_CONSTRUCTOR_EXPRESSION || k == Kind.VARIABLE_EXPRESSION
-                || k == Kind.CALL_EXPRESSION || k == Kind.OP_EXPRESSION || k == Kind.FIELD_ACCESSOR_EXPRESSION
-                || k == Kind.INDEX_ACCESSOR_EXPRESSION || k == Kind.UNARY_EXPRESSION;
-    }
-
-    private <T> ArrayList<T> mkSingletonArrayList(T item) {
-        ArrayList<T> array = new ArrayList<T>(1);
-        array.add(item);
-        return array;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitTypeDecl(TypeDecl td, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitRecordTypeDefiniton(RecordTypeDefinition tre,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitTypeReferenceExpression(TypeReferenceExpression tre,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitNodegroupDecl(NodegroupDecl ngd, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromFileStatement(LoadFromFileStatement stmtLoad,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitWriteFromQueryResultStatement(
-            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDropStatement(DropStatement del, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitCreateIndexStatement(CreateIndexStatement cis,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitMetaVariableClause(MetaVariableClause mc,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        return new Pair<ILogicalOperator, LogicalVariable>(metaScopeOp.get(mc.getVar()), null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitJoinClause(JoinClause jc, Mutable<ILogicalOperator> tupSource)
-            throws AsterixException {
-        // Pair<ILogicalOperator, LogicalVariable> leftSide =
-        // jc.getLeftExpr().accept(this, tupSource);
-        Mutable<ILogicalOperator> opRef = tupSource;
-        Pair<ILogicalOperator, LogicalVariable> leftSide = null;
-        for (Clause c : jc.getLeftClauses()) {
-            leftSide = c.accept(this, opRef);
-            opRef = new MutableObject<ILogicalOperator>(leftSide.first);
-        }
-
-        // Pair<ILogicalOperator, LogicalVariable> rightSide =
-        // jc.getRightExpr().accept(this, tupSource);
-        opRef = tupSource;
-        Pair<ILogicalOperator, LogicalVariable> rightSide = null;
-        for (Clause c : jc.getRightClauses()) {
-            rightSide = c.accept(this, opRef);
-            opRef = new MutableObject<ILogicalOperator>(rightSide.first);
-        }
-
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> whereCond = aqlExprToAlgExpression(jc.getWhereExpr(),
-                tupSource);
-
-        AbstractBinaryJoinOperator join;
-        switch (jc.getKind()) {
-            case INNER: {
-                join = new InnerJoinOperator(new MutableObject<ILogicalExpression>(whereCond.first));
-                break;
-            }
-            case LEFT_OUTER: {
-                join = new LeftOuterJoinOperator(new MutableObject<ILogicalExpression>(whereCond.first));
-                break;
-            }
-            default: {
-                throw new IllegalStateException();
-            }
-        }
-        join.getInputs().add(new MutableObject<ILogicalOperator>(leftSide.first));
-        join.getInputs().add(new MutableObject<ILogicalOperator>(rightSide.first));
-        return new Pair<ILogicalOperator, LogicalVariable>(join, null);
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitMetaVariableExpr(MetaVariableExpr me,
-            Mutable<ILogicalOperator> tupSource) throws AsterixException {
-        LogicalVariable var = context.newVar();
-        AssignOperator a = new AssignOperator(var, new MutableObject<ILogicalExpression>(
-                metaScopeExp.getVariableReferenceExpression(me.getVar())));
-        a.getInputs().add(tupSource);
-        return new Pair<ILogicalOperator, LogicalVariable>(a, var);
-    }
-
-    public void addOperatorToMetaScope(Identifier id, ILogicalOperator op) {
-        metaScopeOp.put(id, op);
-    }
-
-    public void addVariableToMetaScope(Identifier id, LogicalVariable var) {
-        metaScopeExp.put(id, var);
-    }
-
-    private ILogicalExpression makeUnnestExpression(ILogicalExpression expr) {
-        switch (expr.getExpressionTag()) {
-            case VARIABLE: {
-                return new UnnestingFunctionCallExpression(
-                        FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
-                        new MutableObject<ILogicalExpression>(expr));
-            }
-            case FUNCTION_CALL: {
-                AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
-                if (fce.getKind() == FunctionKind.UNNEST) {
-                    return expr;
-                } else {
-                    return new UnnestingFunctionCallExpression(
-                            FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.SCAN_COLLECTION),
-                            new MutableObject<ILogicalExpression>(expr));
-                }
-            }
-            default: {
-                return expr;
-            }
-        }
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitInsertStatement(InsertStatement insert,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDeleteStatement(DeleteStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUpdateStatement(UpdateStatement update,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitUpdateClause(UpdateClause del, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDecl(DataverseDecl dv, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDatasetDecl(DatasetDecl dd, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitSetStatement(SetStatement ss, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitWriteStatement(WriteStatement ws, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitLoadFromQueryResultStatement(
-            WriteFromQueryResultStatement stmtLoad, Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitCreateDataverseStatement(CreateDataverseStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitIndexDropStatement(IndexDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitNodeGroupDropStatement(NodeGroupDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitDataverseDropStatement(DataverseDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitTypeDropStatement(TypeDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitControlFeedStatement(ControlFeedStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visit(CreateFunctionStatement cfs, Mutable<ILogicalOperator> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitFunctionDropStatement(FunctionDropStatement del,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<ILogicalOperator, LogicalVariable> visitBeginFeedStatement(BeginFeedStatement bf,
-            Mutable<ILogicalOperator> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-}
diff --git a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java b/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
deleted file mode 100644
index 625fed1..0000000
--- a/asterix/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/CompiledStatements.java
+++ /dev/null
@@ -1,575 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.translator;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Statement.Kind;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement.OperationType;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.Identifier;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.literal.StringLiteral;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-
-/**
- * An AQL statement instance is translated into an instance of type CompileX
- * that has additional fields for use by the AqlTranslator.
- */
-public class CompiledStatements {
-
-	public static interface ICompiledStatement {
-
-		public Kind getKind();
-	}
-
-	public static class CompiledWriteFromQueryResultStatement implements
-			ICompiledDmlStatement {
-
-		private String dataverseName;
-		private String datasetName;
-		private Query query;
-		private int varCounter;
-
-		public CompiledWriteFromQueryResultStatement(String dataverseName,
-				String datasetName, Query query, int varCounter) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.query = query;
-			this.varCounter = varCounter;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public int getVarCounter() {
-			return varCounter;
-		}
-
-		public Query getQuery() {
-			return query;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.WRITE_FROM_QUERY_RESULT;
-		}
-
-	}
-
-	public static class CompiledDatasetDropStatement implements
-			ICompiledStatement {
-		private final String dataverseName;
-		private final String datasetName;
-
-		public CompiledDatasetDropStatement(String dataverseName,
-				String datasetName) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.DATASET_DROP;
-		}
-	}
-
-	// added by yasser
-	public static class CompiledCreateDataverseStatement implements
-			ICompiledStatement {
-		private String dataverseName;
-		private String format;
-
-		public CompiledCreateDataverseStatement(String dataverseName,
-				String format) {
-			this.dataverseName = dataverseName;
-			this.format = format;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getFormat() {
-			return format;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.CREATE_DATAVERSE;
-		}
-	}
-
-	public static class CompiledNodeGroupDropStatement implements
-			ICompiledStatement {
-		private String nodeGroupName;
-
-		public CompiledNodeGroupDropStatement(String nodeGroupName) {
-			this.nodeGroupName = nodeGroupName;
-		}
-
-		public String getNodeGroupName() {
-			return nodeGroupName;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.NODEGROUP_DROP;
-		}
-	}
-
-	public static class CompiledIndexDropStatement implements
-			ICompiledStatement {
-		private String dataverseName;
-		private String datasetName;
-		private String indexName;
-
-		public CompiledIndexDropStatement(String dataverseName,
-				String datasetName, String indexName) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.indexName = indexName;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public String getIndexName() {
-			return indexName;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.INDEX_DROP;
-		}
-	}
-
-	public static class CompiledDataverseDropStatement implements
-			ICompiledStatement {
-		private String dataverseName;
-		private boolean ifExists;
-
-		public CompiledDataverseDropStatement(String dataverseName,
-				boolean ifExists) {
-			this.dataverseName = dataverseName;
-			this.ifExists = ifExists;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public boolean getIfExists() {
-			return ifExists;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.DATAVERSE_DROP;
-		}
-	}
-
-	public static class CompiledTypeDropStatement implements ICompiledStatement {
-		private String typeName;
-
-		public CompiledTypeDropStatement(String nodeGroupName) {
-			this.typeName = nodeGroupName;
-		}
-
-		public String getTypeName() {
-			return typeName;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.TYPE_DROP;
-		}
-	}
-
-	public static interface ICompiledDmlStatement extends ICompiledStatement {
-
-		public String getDataverseName();
-
-		public String getDatasetName();
-	}
-
-	public static class CompiledCreateIndexStatement implements
-			ICompiledDmlStatement {
-		private final String indexName;
-		private final String dataverseName;
-		private final String datasetName;
-		private final List<String> keyFields;
-		private final IndexType indexType;
-
-		// Specific to NGram index.
-		private final int gramLength;
-
-		public CompiledCreateIndexStatement(String indexName,
-				String dataverseName, String datasetName,
-				List<String> keyFields, int gramLength, IndexType indexType) {
-			this.indexName = indexName;
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.keyFields = keyFields;
-			this.gramLength = gramLength;
-			this.indexType = indexType;
-		}
-
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getIndexName() {
-			return indexName;
-		}
-
-		public List<String> getKeyFields() {
-			return keyFields;
-		}
-
-		public IndexType getIndexType() {
-			return indexType;
-		}
-
-		public int getGramLength() {
-			return gramLength;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.CREATE_INDEX;
-		}
-	}
-
-	public static class CompiledLoadFromFileStatement implements
-			ICompiledDmlStatement {
-		private String dataverseName;
-		private String datasetName;
-		private boolean alreadySorted;
-		private String adapter;
-		private Map<String, String> properties;
-
-		public CompiledLoadFromFileStatement(String dataverseName,
-				String datasetName, String adapter,
-				Map<String, String> properties, boolean alreadySorted) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.alreadySorted = alreadySorted;
-			this.adapter = adapter;
-			this.properties = properties;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public boolean alreadySorted() {
-			return alreadySorted;
-		}
-
-		public String getAdapter() {
-			return adapter;
-		}
-
-		public Map<String, String> getProperties() {
-			return properties;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.LOAD_FROM_FILE;
-		}
-	}
-
-	public static class CompiledInsertStatement implements
-			ICompiledDmlStatement {
-		private final String dataverseName;
-		private final String datasetName;
-		private final Query query;
-		private final int varCounter;
-
-		public CompiledInsertStatement(String dataverseName,
-				String datasetName, Query query, int varCounter) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.query = query;
-			this.varCounter = varCounter;
-		}
-
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public int getVarCounter() {
-			return varCounter;
-		}
-
-		public Query getQuery() {
-			return query;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.INSERT;
-		}
-	}
-
-	public static class CompiledBeginFeedStatement implements
-			ICompiledDmlStatement {
-		private String dataverseName;
-		private String datasetName;
-		private Query query;
-		private int varCounter;
-
-		public CompiledBeginFeedStatement(String dataverseName,
-				String datasetName, Query query, int varCounter) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.query = query;
-			this.varCounter = varCounter;
-		}
-
-		@Override
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		@Override
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public int getVarCounter() {
-			return varCounter;
-		}
-
-		public Query getQuery() {
-			return query;
-		}
-
-		public void setQuery(Query query) {
-			this.query = query;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.BEGIN_FEED;
-		}
-	}
-
-	public static class CompiledControlFeedStatement implements
-			ICompiledDmlStatement {
-		private String dataverseName;
-		private String datasetName;
-		private OperationType operationType;
-		private Query query;
-		private int varCounter;
-		private Map<String, String> alteredParams;
-
-		public CompiledControlFeedStatement(OperationType operationType,
-				String dataverseName, String datasetName,
-				Map<String, String> alteredParams) {
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.operationType = operationType;
-			this.alteredParams = alteredParams;
-		}
-
-		@Override
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		@Override
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		public OperationType getOperationType() {
-			return operationType;
-		}
-
-		public int getVarCounter() {
-			return varCounter;
-		}
-
-		public Query getQuery() {
-			return query;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.CONTROL_FEED;
-		}
-
-		public Map<String, String> getProperties() {
-			return alteredParams;
-		}
-
-		public void setProperties(Map<String, String> properties) {
-			this.alteredParams = properties;
-		}
-	}
-
-	public static class CompiledDeleteStatement implements
-			ICompiledDmlStatement {
-		private VariableExpr var;
-		private String dataverseName;
-		private String datasetName;
-		private Expression condition;
-		private Clause dieClause;
-		private int varCounter;
-		private AqlMetadataProvider metadataProvider;
-
-		public CompiledDeleteStatement(VariableExpr var, String dataverseName,
-				String datasetName, Expression condition, Clause dieClause,
-				int varCounter, AqlMetadataProvider metadataProvider) {
-			this.var = var;
-			this.dataverseName = dataverseName;
-			this.datasetName = datasetName;
-			this.condition = condition;
-			this.dieClause = dieClause;
-			this.varCounter = varCounter;
-			this.metadataProvider = metadataProvider;
-		}
-
-		@Override
-		public String getDatasetName() {
-			return datasetName;
-		}
-
-		@Override
-		public String getDataverseName() {
-			return dataverseName;
-		}
-
-		public int getVarCounter() {
-			return varCounter;
-		}
-
-		public Expression getCondition() {
-			return condition;
-		}
-
-		public Clause getDieClause() {
-			return dieClause;
-		}
-
-		public Query getQuery() throws AlgebricksException {
-
-			List<Expression> arguments = new ArrayList<Expression>();
-			String arg = dataverseName == null ? datasetName : dataverseName
-					+ "." + datasetName;
-			LiteralExpr argumentLiteral = new LiteralExpr(
-					new StringLiteral(arg));
-			arguments.add(argumentLiteral);
-
-			CallExpr callExpression = new CallExpr(new FunctionSignature(
-					FunctionConstants.ASTERIX_NS, "dataset", 1), arguments);
-			List<Clause> clauseList = new ArrayList<Clause>();
-			Clause forClause = new ForClause(var, callExpression);
-			clauseList.add(forClause);
-			Clause whereClause = null;
-			if (condition != null) {
-				whereClause = new WhereClause(condition);
-				clauseList.add(whereClause);
-			}
-			if (dieClause != null) {
-				clauseList.add(dieClause);
-			}
-
-			Dataset dataset = metadataProvider.findDataset(dataverseName,
-					datasetName);
-			if (dataset == null) {
-				throw new AlgebricksException("Unknown dataset " + datasetName);
-			}
-			String itemTypeName = dataset.getItemTypeName();
-			IAType itemType = metadataProvider.findType(
-					dataset.getDataverseName(), itemTypeName);
-			ARecordType recType = (ARecordType) itemType;
-			String[] fieldNames = recType.getFieldNames();
-			List<FieldBinding> fieldBindings = new ArrayList<FieldBinding>();
-			for (int i = 0; i < fieldNames.length; i++) {
-				FieldAccessor fa = new FieldAccessor(var, new Identifier(
-						fieldNames[i]));
-				FieldBinding fb = new FieldBinding(new LiteralExpr(
-						new StringLiteral(fieldNames[i])), fa);
-				fieldBindings.add(fb);
-			}
-			RecordConstructor rc = new RecordConstructor(fieldBindings);
-
-			FLWOGRExpression flowgr = new FLWOGRExpression(clauseList, rc);
-			Query query = new Query();
-			query.setBody(flowgr);
-			return query;
-		}
-
-		@Override
-		public Kind getKind() {
-			return Kind.DELETE;
-		}
-
-	}
-
-}
diff --git a/asterix/asterix-app/pom.xml b/asterix/asterix-app/pom.xml
deleted file mode 100644
index 48c4ee5..0000000
--- a/asterix/asterix-app/pom.xml
+++ /dev/null
@@ -1,224 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-app</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>appassembler-maven-plugin</artifactId>
-				<version>1.0</version>
-				<executions>
-					<execution>
-						<configuration>
-							<programs>
-								<program>
-									<mainClass>edu.uci.ics.asterix.drivers.AsterixWebServer</mainClass>
-									<name>asterix-web</name>
-								</program>
-								<program>
-									<mainClass>edu.uci.ics.asterix.drivers.AsterixClientDriver</mainClass>
-									<name>asterix-cmd</name>
-								</program>
-								<program>
-									<mainClass>edu.uci.ics.asterix.drivers.AsterixCLI</mainClass>
-									<name>asterix-cli</name>
-								</program>
-							</programs>
-							<repositoryLayout>flat</repositoryLayout>
-							<repositoryName>lib</repositoryName>
-						</configuration>
-						<phase>package</phase>
-						<goals>
-							<goal>assemble</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<version>2.2-beta-5</version>
-				<executions>
-					<execution>
-						<configuration>
-							<descriptors>
-								<descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-							</descriptors>
-						</configuration>
-						<phase>package</phase>
-						<goals>
-							<goal>attached</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.8</version>
-				<configuration>
-					<!-- doesn't work from m2eclipse, currently <additionalClasspathElements> 
-						<additionalClasspathElement>${basedir}/src/main/resources</additionalClasspathElement> 
-						</additionalClasspathElements> -->
-					<forkMode>pertest</forkMode>
-					<argLine>-enableassertions -Xmx${test.heap.size}m 
-						-Dfile.encoding=UTF-8
-						-Djava.util.logging.config.file=src/test/resources/logging.properties
-						-Xdebug
-						-Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=n</argLine>
-					<includes>
-						<include>**/*TestSuite.java</include>
-						<include>**/*Test.java</include>
-					</includes>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-algebra</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-			<version>2.5</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jetty</groupId>
-			<artifactId>jetty-server</artifactId>
-			<version>8.0.0.M2</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.eclipse.jetty</groupId>
-			<artifactId>jetty-servlet</artifactId>
-			<version>8.0.0.M2</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-control-cc</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-control-nc</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>algebricks-compiler</artifactId>
-		</dependency>
-		<dependency>
-            <groupId>edu.uci.ics.hyracks</groupId>
-            <artifactId>hyracks-client</artifactId>
-        </dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-aql</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-om</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-metadata</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-tools</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-common</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>com.kenai.nbpwr</groupId>
-			<artifactId>org-apache-commons-io</artifactId>
-			<version>1.3.1-201002241208</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-core</artifactId>
-			<version>0.20.2</version>
-			<type>jar</type>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-test</artifactId>
-			<version>0.20.2</version>
-			<type>jar</type>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>xerces</groupId>
-			<artifactId>xercesImpl</artifactId>
-			<version>2.9.1</version>
-			<type>jar</type>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>xalan</groupId>
-			<artifactId>xalan</artifactId>
-			<version>2.7.1</version>
-			<type>jar</type>
-			<scope>test</scope>
-		</dependency>
-                <dependency>
-                    <groupId>net.sourceforge.cobertura</groupId>
-                    <artifactId>cobertura</artifactId>
-                    <version>1.9.4</version>
-                </dependency>
-                <dependency>
-                	<groupId>edu.uci.ics.asterix</groupId>
-                	<artifactId>asterix-test-framework</artifactId>
-                	<version>0.0.5-SNAPSHOT</version>
-                	<scope>test</scope>
-                </dependency>
-	</dependencies>
-
-</project>
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
deleted file mode 100644
index d207acb..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/common/AsterixHyracksIntegrationUtil.java
+++ /dev/null
@@ -1,87 +0,0 @@
-package edu.uci.ics.asterix.api.common;
-
-import java.util.EnumSet;
-
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.hyracks.bootstrap.CCApplicationEntryPoint;
-import edu.uci.ics.asterix.hyracks.bootstrap.NCApplicationEntryPoint;
-import edu.uci.ics.hyracks.api.client.HyracksConnection;
-import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
-import edu.uci.ics.hyracks.api.job.JobFlag;
-import edu.uci.ics.hyracks.api.job.JobId;
-import edu.uci.ics.hyracks.api.job.JobSpecification;
-import edu.uci.ics.hyracks.control.cc.ClusterControllerService;
-import edu.uci.ics.hyracks.control.common.controllers.CCConfig;
-import edu.uci.ics.hyracks.control.common.controllers.NCConfig;
-import edu.uci.ics.hyracks.control.nc.NodeControllerService;
-
-public class AsterixHyracksIntegrationUtil {
-
-    public static final String NC1_ID = "nc1";
-    public static final String NC2_ID = "nc2";
-    public static final String[] ASTERIX_DATA_DIRS = new String[] { "nc1data", "nc2data" };
-
-    public static final int DEFAULT_HYRACKS_CC_CLIENT_PORT = 1098;
-
-    public static final int DEFAULT_HYRACKS_CC_CLUSTER_PORT = 1099;
-
-    private static ClusterControllerService cc;
-    private static NodeControllerService nc1;
-    private static NodeControllerService nc2;
-    private static IHyracksClientConnection hcc;
-
-    public static void init() throws Exception {
-        CCConfig ccConfig = new CCConfig();
-        ccConfig.clusterNetIpAddress = "127.0.0.1";
-        ccConfig.clientNetIpAddress = "127.0.0.1";
-        ccConfig.clientNetPort = DEFAULT_HYRACKS_CC_CLIENT_PORT;
-        ccConfig.clusterNetPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
-        ccConfig.defaultMaxJobAttempts = 0;
-        ccConfig.appCCMainClass = CCApplicationEntryPoint.class.getName();
-        // ccConfig.useJOL = true;
-        cc = new ClusterControllerService(ccConfig);
-        cc.start();
-
-        NCConfig ncConfig1 = new NCConfig();
-        ncConfig1.ccHost = "localhost";
-        ncConfig1.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
-        ncConfig1.clusterNetIPAddress = "127.0.0.1";
-        ncConfig1.dataIPAddress = "127.0.0.1";
-        ncConfig1.datasetIPAddress = "127.0.0.1";
-        ncConfig1.nodeId = NC1_ID;
-        ncConfig1.appNCMainClass = NCApplicationEntryPoint.class.getName();
-        nc1 = new NodeControllerService(ncConfig1);
-        nc1.start();
-
-        NCConfig ncConfig2 = new NCConfig();
-        ncConfig2.ccHost = "localhost";
-        ncConfig2.ccPort = DEFAULT_HYRACKS_CC_CLUSTER_PORT;
-        ncConfig2.clusterNetIPAddress = "127.0.0.1";
-        ncConfig2.dataIPAddress = "127.0.0.1";
-        ncConfig2.datasetIPAddress = "127.0.0.1";
-        ncConfig2.nodeId = NC2_ID;
-        ncConfig2.appNCMainClass = NCApplicationEntryPoint.class.getName();
-        nc2 = new NodeControllerService(ncConfig2);
-        nc2.start();
-
-        hcc = new HyracksConnection(cc.getConfig().clientNetIpAddress, cc.getConfig().clientNetPort);
-    }
-
-    public static IHyracksClientConnection getHyracksClientConnection() {
-        return hcc;
-    }
-
-    public static void deinit() throws Exception {
-        nc2.stop();
-        nc1.stop();
-        cc.stop();
-    }
-
-    public static void runJob(JobSpecification spec) throws Exception {
-        GlobalConfig.ASTERIX_LOGGER.info(spec.toJSON().toString());
-        JobId jobId = hcc.startJob(spec, EnumSet.of(JobFlag.PROFILE_RUNTIME));
-        GlobalConfig.ASTERIX_LOGGER.info(jobId.toString());
-        hcc.waitForCompletion(jobId);
-    }
-
-}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
deleted file mode 100644
index 29feb5e..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/api/http/servlet/RESTAPIServlet.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.api.http.servlet;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.util.List;
-
-import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.json.JSONObject;
-
-import edu.uci.ics.asterix.api.common.APIFramework.DisplayFormat;
-import edu.uci.ics.asterix.api.common.SessionConfig;
-import edu.uci.ics.asterix.aql.base.Statement;
-import edu.uci.ics.asterix.aql.base.Statement.Kind;
-import edu.uci.ics.asterix.aql.parser.AQLParser;
-import edu.uci.ics.asterix.aql.parser.ParseException;
-import edu.uci.ics.asterix.aql.translator.AqlTranslator;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.result.ResultReader;
-import edu.uci.ics.asterix.result.ResultUtils;
-import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
-import edu.uci.ics.hyracks.api.dataset.IHyracksDataset;
-import edu.uci.ics.hyracks.client.dataset.HyracksDataset;
-
-abstract class RESTAPIServlet extends HttpServlet {
-    private static final long serialVersionUID = 1L;
-
-    private static final String HYRACKS_CONNECTION_ATTR = "edu.uci.ics.asterix.HYRACKS_CONNECTION";
-
-    private static final String HYRACKS_DATASET_ATTR = "edu.uci.ics.asterix.HYRACKS_DATASET";
-
-    @Override
-    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
-        response.setContentType("application/json");
-        response.setCharacterEncoding("utf-8");
-
-        PrintWriter out = response.getWriter();
-
-        DisplayFormat format = DisplayFormat.HTML;
-
-        String contentType = request.getContentType();
-
-        if ((contentType == null) || (contentType.equals("text/plain"))) {
-            format = DisplayFormat.TEXT;
-        } else if (contentType.equals("application/json")) {
-            format = DisplayFormat.JSON;
-        }
-
-        String query = getQueryParameter(request);
-        boolean asyncResults = isAsync(request);
-
-        ServletContext context = getServletContext();
-        IHyracksClientConnection hcc;
-        IHyracksDataset hds;
-
-        try {
-            synchronized (context) {
-                hcc = (IHyracksClientConnection) context.getAttribute(HYRACKS_CONNECTION_ATTR);
-
-                hds = (IHyracksDataset) context.getAttribute(HYRACKS_DATASET_ATTR);
-                if (hds == null) {
-                    hds = new HyracksDataset(hcc, ResultReader.FRAME_SIZE, ResultReader.NUM_READERS);
-                    context.setAttribute(HYRACKS_DATASET_ATTR, hds);
-                }
-            }
-
-            AQLParser parser = new AQLParser(query);
-            List<Statement> aqlStatements = parser.Statement();
-            if (checkForbiddenStatements(aqlStatements, out)) {
-                return;
-            }
-            SessionConfig sessionConfig = new SessionConfig(true, false, false, false, false, false, true, false);
-
-            MetadataManager.INSTANCE.init();
-
-            AqlTranslator aqlTranslator = new AqlTranslator(aqlStatements, out, sessionConfig, format);
-
-            aqlTranslator.compileAndExecute(hcc, hds, asyncResults);
-
-        } catch (ParseException pe) {
-            StringBuilder errorMessage = new StringBuilder();
-            String message = pe.getMessage();
-            message = message.replace("<", "&lt");
-            message = message.replace(">", "&gt");
-            errorMessage.append("SyntaxError:" + message + "\n");
-            int pos = message.indexOf("line");
-            if (pos > 0) {
-                int columnPos = message.indexOf(",", pos + 1 + "line".length());
-                int lineNo = Integer.parseInt(message.substring(pos + "line".length() + 1, columnPos));
-                String line = query.split("\n")[lineNo - 1];
-                errorMessage.append("==> " + line + "\n");
-            }
-            JSONObject errorResp = ResultUtils.getErrorResponse(2, errorMessage.toString());
-            out.write(errorResp.toString());
-        } catch (Exception e) {
-            StringBuilder errorMessage = new StringBuilder();
-            errorMessage.append(e.getMessage());
-            JSONObject errorResp = ResultUtils.getErrorResponse(99, errorMessage.toString());
-            out.write(errorResp.toString());
-        }
-    }
-
-    private boolean checkForbiddenStatements(List<Statement> aqlStatements, PrintWriter out) {
-        for (Statement st : aqlStatements) {
-            if (!getAllowedStatements().contains(st.getKind())) {
-                JSONObject errorResp = ResultUtils.getErrorResponse(1, String.format(getErrorMessage(), st.getKind()));
-                out.write(errorResp.toString());
-                return true;
-            }
-        }
-        return false;
-    }
-
-    protected boolean isAsync(HttpServletRequest request) {
-        String mode = request.getParameter("mode");
-        boolean asyncResults = false;
-        if (mode != null && mode.equals("asynchronous")) {
-            asyncResults = true;
-        }
-        return asyncResults;
-    }
-
-    protected abstract String getQueryParameter(HttpServletRequest request);
-
-    protected abstract List<Kind> getAllowedStatements();
-
-    protected abstract String getErrorMessage();
-}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
deleted file mode 100644
index 976ec7c..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/aql/translator/AqlTranslator.java
+++ /dev/null
@@ -1,1475 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.aql.translator;
-
-import java.io.File;
-import java.io.PrintWriter;
-import java.nio.ByteBuffer;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import edu.uci.ics.asterix.api.common.APIFramework;
-import edu.uci.ics.asterix.api.common.APIFramework.DisplayFormat;
-import edu.uci.ics.asterix.api.common.Job;
-import edu.uci.ics.asterix.api.common.SessionConfig;
-import edu.uci.ics.asterix.aql.base.Statement;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.ExternalDetailsDecl;
-import edu.uci.ics.asterix.aql.expression.FeedDetailsDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.Identifier;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.InternalDetailsDecl;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.file.DatasetOperations;
-import edu.uci.ics.asterix.file.FeedOperations;
-import edu.uci.ics.asterix.file.IndexOperations;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.metadata.IDatasetDetails;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
-import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.ExternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.FeedDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.types.TypeSignature;
-import edu.uci.ics.asterix.result.ResultReader;
-import edu.uci.ics.asterix.result.ResultUtils;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetIdFactory;
-import edu.uci.ics.asterix.translator.AbstractAqlTranslator;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledBeginFeedStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledControlFeedStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledCreateIndexStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledDatasetDropStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledDeleteStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledIndexDropStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledInsertStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledWriteFromQueryResultStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.ICompiledDmlStatement;
-import edu.uci.ics.asterix.translator.TypeTranslator;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
-import edu.uci.ics.hyracks.algebricks.data.IAWriterFactory;
-import edu.uci.ics.hyracks.algebricks.data.IResultSerializerFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.runtime.serializer.ResultSerializerFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.runtime.writers.PrinterBasedWriterFactory;
-import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
-import edu.uci.ics.hyracks.api.dataset.IHyracksDataset;
-import edu.uci.ics.hyracks.api.dataset.ResultSetId;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.api.job.JobId;
-import edu.uci.ics.hyracks.api.job.JobSpecification;
-import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
-
-/*
- * Provides functionality for executing a batch of AQL statements (queries included)
- * sequentially.
- */
-public class AqlTranslator extends AbstractAqlTranslator {
-
-    private final List<Statement> aqlStatements;
-    private final PrintWriter out;
-    private final SessionConfig sessionConfig;
-    private final DisplayFormat pdf;
-    private Dataverse activeDefaultDataverse;
-    private List<FunctionDecl> declaredFunctions;
-
-    public AqlTranslator(List<Statement> aqlStatements, PrintWriter out, SessionConfig pc, DisplayFormat pdf)
-            throws MetadataException, AsterixException {
-        this.aqlStatements = aqlStatements;
-        this.out = out;
-        this.sessionConfig = pc;
-        this.pdf = pdf;
-        declaredFunctions = getDeclaredFunctions(aqlStatements);
-    }
-
-    private List<FunctionDecl> getDeclaredFunctions(List<Statement> statements) {
-        List<FunctionDecl> functionDecls = new ArrayList<FunctionDecl>();
-        for (Statement st : statements) {
-            if (st.getKind().equals(Statement.Kind.FUNCTION_DECL)) {
-                functionDecls.add((FunctionDecl) st);
-            }
-        }
-        return functionDecls;
-    }
-
-    /**
-     * Compiles and submits for execution a list of AQL statements.
-     * 
-     * @param hcc
-     *            A Hyracks client connection that is used to submit a jobspec to Hyracks.
-     * @param hdc
-     *            A Hyracks dataset client object that is used to read the results.
-     * @param asyncResults
-     *            True if the results should be read asynchronously or false if we should wait for results to be read.
-     * @return A List<QueryResult> containing a QueryResult instance corresponding to each submitted query.
-     * @throws Exception
-     */
-    public List<QueryResult> compileAndExecute(IHyracksClientConnection hcc, IHyracksDataset hdc, boolean asyncResults)
-            throws Exception {
-        int resultSetIdCounter = 0;
-        List<QueryResult> executionResult = new ArrayList<QueryResult>();
-        FileSplit outputFile = null;
-        IAWriterFactory writerFactory = PrinterBasedWriterFactory.INSTANCE;
-        IResultSerializerFactoryProvider resultSerializerFactoryProvider = ResultSerializerFactoryProvider.INSTANCE;
-        Map<String, String> config = new HashMap<String, String>();
-        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
-
-        for (Statement stmt : aqlStatements) {
-            validateOperation(activeDefaultDataverse, stmt);
-            AqlMetadataProvider metadataProvider = new AqlMetadataProvider(activeDefaultDataverse);
-            metadataProvider.setWriterFactory(writerFactory);
-            metadataProvider.setResultSerializerFactoryProvider(resultSerializerFactoryProvider);
-            metadataProvider.setOutputFile(outputFile);
-            metadataProvider.setConfig(config);
-            jobsToExecute.clear();
-            try {
-                switch (stmt.getKind()) {
-                    case SET: {
-                        handleSetStatement(metadataProvider, stmt, config);
-                        break;
-                    }
-                    case DATAVERSE_DECL: {
-                        activeDefaultDataverse = handleUseDataverseStatement(metadataProvider, stmt);
-                        break;
-                    }
-                    case CREATE_DATAVERSE: {
-                        handleCreateDataverseStatement(metadataProvider, stmt);
-                        break;
-                    }
-                    case DATASET_DECL: {
-                        handleCreateDatasetStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case CREATE_INDEX: {
-                        handleCreateIndexStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case TYPE_DECL: {
-                        handleCreateTypeStatement(metadataProvider, stmt);
-                        break;
-                    }
-                    case NODEGROUP_DECL: {
-                        handleCreateNodeGroupStatement(metadataProvider, stmt);
-                        break;
-                    }
-                    case DATAVERSE_DROP: {
-                        handleDataverseDropStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case DATASET_DROP: {
-                        handleDatasetDropStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case INDEX_DROP: {
-                        handleIndexDropStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case TYPE_DROP: {
-                        handleTypeDropStatement(metadataProvider, stmt);
-                        break;
-                    }
-                    case NODEGROUP_DROP: {
-                        handleNodegroupDropStatement(metadataProvider, stmt);
-                        break;
-                    }
-
-                    case CREATE_FUNCTION: {
-                        handleCreateFunctionStatement(metadataProvider, stmt);
-                        break;
-                    }
-
-                    case FUNCTION_DROP: {
-                        handleFunctionDropStatement(metadataProvider, stmt);
-                        break;
-                    }
-
-                    case LOAD_FROM_FILE: {
-                        handleLoadFromFileStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case WRITE_FROM_QUERY_RESULT: {
-                        handleWriteFromQueryResultStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case INSERT: {
-                        handleInsertStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-                    case DELETE: {
-                        handleDeleteStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-
-                    case BEGIN_FEED: {
-                        handleBeginFeedStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-
-                    case CONTROL_FEED: {
-                        handleControlFeedStatement(metadataProvider, stmt, hcc);
-                        break;
-                    }
-
-                    case QUERY: {
-                        metadataProvider.setResultSetId(new ResultSetId(resultSetIdCounter++));
-                        executionResult.add(handleQuery(metadataProvider, (Query) stmt, hcc, hdc, asyncResults));
-                        break;
-                    }
-
-                    case WRITE: {
-                        Pair<IAWriterFactory, FileSplit> result = handleWriteStatement(metadataProvider, stmt);
-                        if (result.first != null) {
-                            writerFactory = result.first;
-                        }
-                        outputFile = result.second;
-                        break;
-                    }
-
-                }
-            } catch (Exception e) {
-                throw new AlgebricksException(e);
-            }
-        }
-        return executionResult;
-    }
-
-    private void handleSetStatement(AqlMetadataProvider metadataProvider, Statement stmt, Map<String, String> config)
-            throws RemoteException, ACIDException {
-        SetStatement ss = (SetStatement) stmt;
-        String pname = ss.getPropName();
-        String pvalue = ss.getPropValue();
-        config.put(pname, pvalue);
-    }
-
-    private Pair<IAWriterFactory, FileSplit> handleWriteStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws InstantiationException, IllegalAccessException, ClassNotFoundException {
-        WriteStatement ws = (WriteStatement) stmt;
-        File f = new File(ws.getFileName());
-        FileSplit outputFile = new FileSplit(ws.getNcName().getValue(), new FileReference(f));
-        IAWriterFactory writerFactory = null;
-        if (ws.getWriterClassName() != null) {
-            writerFactory = (IAWriterFactory) Class.forName(ws.getWriterClassName()).newInstance();
-        }
-        return new Pair<IAWriterFactory, FileSplit>(writerFactory, outputFile);
-    }
-
-    private Dataverse handleUseDataverseStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws MetadataException, RemoteException, ACIDException {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            DataverseDecl dvd = (DataverseDecl) stmt;
-            String dvName = dvd.getDataverseName().getValue();
-            Dataverse dv = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), dvName);
-            if (dv == null) {
-                throw new MetadataException("Unknown dataverse " + dvName);
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            return dv;
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new MetadataException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private void handleCreateDataverseStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws MetadataException, AlgebricksException, RemoteException, ACIDException {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            CreateDataverseStatement stmtCreateDataverse = (CreateDataverseStatement) stmt;
-            String dvName = stmtCreateDataverse.getDataverseName().getValue();
-            Dataverse dv = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(), dvName);
-            if (dv != null && !stmtCreateDataverse.getIfNotExists()) {
-                throw new AlgebricksException("A dataverse with this name " + dvName + " already exists.");
-            }
-            MetadataManager.INSTANCE.addDataverse(metadataProvider.getMetadataTxnContext(), new Dataverse(dvName,
-                    stmtCreateDataverse.getFormat(), IMetadataEntity.PENDING_NO_OP));
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleCreateDatasetStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws AsterixException, Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        String dataverseName = null;
-        String datasetName = null;
-        try {
-            DatasetDecl dd = (DatasetDecl) stmt;
-            dataverseName = dd.getDataverse() != null ? dd.getDataverse().getValue()
-                    : activeDefaultDataverse != null ? activeDefaultDataverse.getDataverseName() : null;
-            if (dataverseName == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-            datasetName = dd.getName().getValue();
-
-            DatasetType dsType = dd.getDatasetType();
-            String itemTypeName = dd.getItemTypeName().getValue();
-
-            IDatasetDetails datasetDetails = null;
-            Dataset ds = MetadataManager.INSTANCE.getDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
-                    datasetName);
-            if (ds != null) {
-                if (dd.getIfNotExists()) {
-                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                    return;
-                } else {
-                    throw new AlgebricksException("A dataset with this name " + datasetName + " already exists.");
-                }
-            }
-            Datatype dt = MetadataManager.INSTANCE.getDatatype(metadataProvider.getMetadataTxnContext(), dataverseName,
-                    itemTypeName);
-            if (dt == null) {
-                throw new AlgebricksException(": type " + itemTypeName + " could not be found.");
-            }
-            switch (dd.getDatasetType()) {
-                case INTERNAL: {
-                    IAType itemType = dt.getDatatype();
-                    if (itemType.getTypeTag() != ATypeTag.RECORD) {
-                        throw new AlgebricksException("Can only partition ARecord's.");
-                    }
-                    List<String> partitioningExprs = ((InternalDetailsDecl) dd.getDatasetDetailsDecl())
-                            .getPartitioningExprs();
-                    String ngName = ((InternalDetailsDecl) dd.getDatasetDetailsDecl()).getNodegroupName().getValue();
-                    datasetDetails = new InternalDatasetDetails(InternalDatasetDetails.FileStructure.BTREE,
-                            InternalDatasetDetails.PartitioningStrategy.HASH, partitioningExprs, partitioningExprs,
-                            ngName);
-                    break;
-                }
-                case EXTERNAL: {
-                    String adapter = ((ExternalDetailsDecl) dd.getDatasetDetailsDecl()).getAdapter();
-                    Map<String, String> properties = ((ExternalDetailsDecl) dd.getDatasetDetailsDecl()).getProperties();
-                    datasetDetails = new ExternalDatasetDetails(adapter, properties);
-                    break;
-                }
-                case FEED: {
-                    IAType itemType = dt.getDatatype();
-                    if (itemType.getTypeTag() != ATypeTag.RECORD) {
-                        throw new AlgebricksException("Can only partition ARecord's.");
-                    }
-                    List<String> partitioningExprs = ((FeedDetailsDecl) dd.getDatasetDetailsDecl())
-                            .getPartitioningExprs();
-                    String ngName = ((FeedDetailsDecl) dd.getDatasetDetailsDecl()).getNodegroupName().getValue();
-                    String adapter = ((FeedDetailsDecl) dd.getDatasetDetailsDecl()).getAdapterFactoryClassname();
-                    Map<String, String> configuration = ((FeedDetailsDecl) dd.getDatasetDetailsDecl())
-                            .getConfiguration();
-                    FunctionSignature signature = ((FeedDetailsDecl) dd.getDatasetDetailsDecl()).getFunctionSignature();
-                    datasetDetails = new FeedDatasetDetails(InternalDatasetDetails.FileStructure.BTREE,
-                            InternalDatasetDetails.PartitioningStrategy.HASH, partitioningExprs, partitioningExprs,
-                            ngName, adapter, configuration, signature, FeedDatasetDetails.FeedState.INACTIVE.toString());
-                    break;
-                }
-            }
-
-            //#. add a new dataset with PendingAddOp
-            Dataset dataset = new Dataset(dataverseName, datasetName, itemTypeName, datasetDetails, dd.getHints(),
-                    dsType, DatasetIdFactory.generateDatasetId(), IMetadataEntity.PENDING_ADD_OP);
-            MetadataManager.INSTANCE.addDataset(metadataProvider.getMetadataTxnContext(), dataset);
-
-            if (dd.getDatasetType() == DatasetType.INTERNAL || dd.getDatasetType() == DatasetType.FEED) {
-                Dataverse dataverse = MetadataManager.INSTANCE.getDataverse(metadataProvider.getMetadataTxnContext(),
-                        dataverseName);
-                JobSpecification jobSpec = DatasetOperations.createDatasetJobSpec(dataverse, datasetName,
-                        metadataProvider);
-
-                //#. make metadataTxn commit before calling runJob.
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                bActiveTxn = false;
-
-                //#. runJob
-                runJob(hcc, jobSpec, true);
-
-                //#. begin new metadataTxn
-                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-                bActiveTxn = true;
-                metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            }
-
-            //#. add a new dataset with PendingNoOp after deleting the dataset with PendingAddOp
-            MetadataManager.INSTANCE.dropDataset(metadataProvider.getMetadataTxnContext(), dataverseName, datasetName);
-            MetadataManager.INSTANCE.addDataset(metadataProvider.getMetadataTxnContext(), new Dataset(dataverseName,
-                    datasetName, itemTypeName, datasetDetails, dd.getHints(), dsType, dataset.getDatasetId(),
-                    IMetadataEntity.PENDING_NO_OP));
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-
-            //#. execute compensation operations
-            //   remove the index in NC
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            bActiveTxn = true;
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            CompiledDatasetDropStatement cds = new CompiledDatasetDropStatement(dataverseName, datasetName);
-            try {
-                JobSpecification jobSpec = DatasetOperations.createDropDatasetJobSpec(cds, metadataProvider);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                bActiveTxn = false;
-
-                runJob(hcc, jobSpec, true);
-            } catch (Exception e3) {
-                if (bActiveTxn) {
-                    MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                }
-                //do no throw exception since still the metadata needs to be compensated. 
-            }
-
-            //   remove the record from the metadata.
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            try {
-                MetadataManager.INSTANCE.dropDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
-                        datasetName);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            } catch (Exception e2) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                throw new AlgebricksException(e2);
-            }
-
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleCreateIndexStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        String dataverseName = null;
-        String datasetName = null;
-        String indexName = null;
-        try {
-            CreateIndexStatement stmtCreateIndex = (CreateIndexStatement) stmt;
-            dataverseName = stmtCreateIndex.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : stmtCreateIndex.getDataverseName().getValue();
-            if (dataverseName == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-            datasetName = stmtCreateIndex.getDatasetName().getValue();
-
-            Dataset ds = MetadataManager.INSTANCE.getDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
-                    datasetName);
-            if (ds == null) {
-                throw new AlgebricksException("There is no dataset with this name " + datasetName + " in dataverse "
-                        + dataverseName);
-            }
-
-            indexName = stmtCreateIndex.getIndexName().getValue();
-            Index idx = MetadataManager.INSTANCE.getIndex(metadataProvider.getMetadataTxnContext(), dataverseName,
-                    datasetName, indexName);
-
-            if (idx != null) {
-                if (!stmtCreateIndex.getIfNotExists()) {
-                    throw new AlgebricksException("An index with this name " + indexName + " already exists.");
-                } else {
-                    stmtCreateIndex.setNeedToCreate(false);
-                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                    return;
-                }
-            }
-
-            //#. add a new index with PendingAddOp
-            Index index = new Index(dataverseName, datasetName, indexName, stmtCreateIndex.getIndexType(),
-                    stmtCreateIndex.getFieldExprs(), stmtCreateIndex.getGramLength(), false,
-                    IMetadataEntity.PENDING_ADD_OP);
-            MetadataManager.INSTANCE.addIndex(metadataProvider.getMetadataTxnContext(), index);
-
-            //#. create the index artifact in NC.
-            CompiledCreateIndexStatement cis = new CompiledCreateIndexStatement(index.getIndexName(), dataverseName,
-                    index.getDatasetName(), index.getKeyFieldNames(), index.getGramLength(), index.getIndexType());
-            JobSpecification spec = IndexOperations.buildSecondaryIndexCreationJobSpec(cis, metadataProvider);
-            if (spec == null) {
-                throw new AsterixException("Failed to create job spec for creating index '"
-                        + stmtCreateIndex.getDatasetName() + "." + stmtCreateIndex.getIndexName() + "'");
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            runJob(hcc, spec, true);
-
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            bActiveTxn = true;
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-
-            //#. load data into the index in NC.
-            cis = new CompiledCreateIndexStatement(index.getIndexName(), dataverseName, index.getDatasetName(),
-                    index.getKeyFieldNames(), index.getGramLength(), index.getIndexType());
-            spec = IndexOperations.buildSecondaryIndexLoadingJobSpec(cis, metadataProvider);
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            runJob(hcc, spec, true);
-
-            //#. begin new metadataTxn
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            bActiveTxn = true;
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-
-            //#. add another new index with PendingNoOp after deleting the index with PendingAddOp
-            MetadataManager.INSTANCE.dropIndex(metadataProvider.getMetadataTxnContext(), dataverseName, datasetName,
-                    indexName);
-            index = new Index(dataverseName, datasetName, indexName, stmtCreateIndex.getIndexType(),
-                    stmtCreateIndex.getFieldExprs(), stmtCreateIndex.getGramLength(), false,
-                    IMetadataEntity.PENDING_NO_OP);
-            MetadataManager.INSTANCE.addIndex(metadataProvider.getMetadataTxnContext(), index);
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-
-            //#. execute compensation operations
-            //   remove the index in NC
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            bActiveTxn = true;
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName, indexName);
-            try {
-                JobSpecification jobSpec = IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                bActiveTxn = false;
-
-                runJob(hcc, jobSpec, true);
-            } catch (Exception e3) {
-                if (bActiveTxn) {
-                    MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                }
-                //do no throw exception since still the metadata needs to be compensated. 
-            }
-
-            //   remove the record from the metadata.
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            try {
-                MetadataManager.INSTANCE.dropIndex(metadataProvider.getMetadataTxnContext(), dataverseName,
-                        datasetName, indexName);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            } catch (Exception e2) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                throw new AlgebricksException(e2);
-            }
-
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleCreateTypeStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws AlgebricksException, RemoteException, ACIDException, MetadataException {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            TypeDecl stmtCreateType = (TypeDecl) stmt;
-            String dataverseName = stmtCreateType.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : stmtCreateType.getDataverseName().getValue();
-            if (dataverseName == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-            String typeName = stmtCreateType.getIdent().getValue();
-            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverseName);
-            if (dv == null) {
-                throw new AlgebricksException("Unknonw dataverse " + dataverseName);
-            }
-            Datatype dt = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, typeName);
-            if (dt != null) {
-                if (!stmtCreateType.getIfNotExists()) {
-                    throw new AlgebricksException("A datatype with this name " + typeName + " already exists.");
-                }
-            } else {
-                if (builtinTypeMap.get(typeName) != null) {
-                    throw new AlgebricksException("Cannot redefine builtin type " + typeName + ".");
-                } else {
-                    Map<TypeSignature, IAType> typeMap = TypeTranslator.computeTypes(mdTxnCtx, (TypeDecl) stmt,
-                            dataverseName);
-                    TypeSignature typeSignature = new TypeSignature(dataverseName, typeName);
-                    IAType type = typeMap.get(typeSignature);
-                    MetadataManager.INSTANCE.addDatatype(mdTxnCtx, new Datatype(dataverseName, typeName, type, false));
-                }
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleDataverseDropStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        String dvName = null;
-        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
-        try {
-            DataverseDropStatement stmtDelete = (DataverseDropStatement) stmt;
-            dvName = stmtDelete.getDataverseName().getValue();
-
-            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dvName);
-            if (dv == null) {
-                if (!stmtDelete.getIfExists()) {
-                    throw new AlgebricksException("There is no dataverse with this name " + dvName + ".");
-                }
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                return;
-            }
-
-            //#. prepare jobs which will drop corresponding datasets with indexes. 
-            List<Dataset> datasets = MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dvName);
-            for (int j = 0; j < datasets.size(); j++) {
-                String datasetName = datasets.get(j).getDatasetName();
-                DatasetType dsType = datasets.get(j).getDatasetType();
-                if (dsType == DatasetType.INTERNAL || dsType == DatasetType.FEED) {
-
-                    List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dvName, datasetName);
-                    for (int k = 0; k < indexes.size(); k++) {
-                        if (indexes.get(k).isSecondaryIndex()) {
-                            CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dvName, datasetName,
-                                    indexes.get(k).getIndexName());
-                            jobsToExecute.add(IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider));
-                        }
-                    }
-
-                    CompiledDatasetDropStatement cds = new CompiledDatasetDropStatement(dvName, datasetName);
-                    jobsToExecute.add(DatasetOperations.createDropDatasetJobSpec(cds, metadataProvider));
-                }
-            }
-
-            //#. mark PendingDropOp on the dataverse record by 
-            //   first, deleting the dataverse record from the DATAVERSE_DATASET
-            //   second, inserting the dataverse record with the PendingDropOp value into the DATAVERSE_DATASET
-            MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dvName);
-            MetadataManager.INSTANCE.addDataverse(mdTxnCtx, new Dataverse(dvName, dv.getDataFormat(),
-                    IMetadataEntity.PENDING_DROP_OP));
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            for (JobSpecification jobSpec : jobsToExecute) {
-                runJob(hcc, jobSpec, true);
-            }
-
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            bActiveTxn = true;
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-
-            //#. finally, delete the dataverse.
-            MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dvName);
-            if (activeDefaultDataverse != null && activeDefaultDataverse.getDataverseName() == dvName) {
-                activeDefaultDataverse = null;
-            }
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-
-            //#. execute compensation operations
-            //   remove the all indexes in NC
-            for (JobSpecification jobSpec : jobsToExecute) {
-                runJob(hcc, jobSpec, true);
-            }
-
-            //   remove the record from the metadata.
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            try {
-                MetadataManager.INSTANCE.dropDataverse(metadataProvider.getMetadataTxnContext(), dvName);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            } catch (Exception e2) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                throw new AlgebricksException(e2);
-            }
-
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleDatasetDropStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        String dataverseName = null;
-        String datasetName = null;
-        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
-        try {
-            DropStatement stmtDelete = (DropStatement) stmt;
-            dataverseName = stmtDelete.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : stmtDelete.getDataverseName().getValue();
-            if (dataverseName == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-            datasetName = stmtDelete.getDatasetName().getValue();
-
-            Dataset ds = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
-            if (ds == null) {
-                if (!stmtDelete.getIfExists()) {
-                    throw new AlgebricksException("There is no dataset with this name " + datasetName
-                            + " in dataverse " + dataverseName + ".");
-                }
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                return;
-            }
-
-            if (ds.getDatasetType() == DatasetType.INTERNAL || ds.getDatasetType() == DatasetType.FEED) {
-
-                //#. prepare jobs to drop the datatset and the indexes in NC
-                List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
-                for (int j = 0; j < indexes.size(); j++) {
-                    if (indexes.get(j).isSecondaryIndex()) {
-                        CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName,
-                                indexes.get(j).getIndexName());
-                        jobsToExecute.add(IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider));
-                    }
-                }
-                CompiledDatasetDropStatement cds = new CompiledDatasetDropStatement(dataverseName, datasetName);
-                jobsToExecute.add(DatasetOperations.createDropDatasetJobSpec(cds, metadataProvider));
-
-                //#. mark the existing dataset as PendingDropOp
-                MetadataManager.INSTANCE.dropDataset(mdTxnCtx, dataverseName, datasetName);
-                MetadataManager.INSTANCE.addDataset(
-                        mdTxnCtx,
-                        new Dataset(dataverseName, datasetName, ds.getItemTypeName(), ds.getDatasetDetails(), ds
-                                .getHints(), ds.getDatasetType(), ds.getDatasetId(), IMetadataEntity.PENDING_DROP_OP));
-
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                bActiveTxn = false;
-
-                //#. run the jobs
-                for (JobSpecification jobSpec : jobsToExecute) {
-                    runJob(hcc, jobSpec, true);
-                }
-
-                mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-                bActiveTxn = true;
-                metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            }
-
-            //#. finally, delete the dataset.
-            MetadataManager.INSTANCE.dropDataset(mdTxnCtx, dataverseName, datasetName);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-
-            //#. execute compensation operations
-            //   remove the all indexes in NC
-            for (JobSpecification jobSpec : jobsToExecute) {
-                runJob(hcc, jobSpec, true);
-            }
-
-            //   remove the record from the metadata.
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            try {
-                MetadataManager.INSTANCE.dropDataset(metadataProvider.getMetadataTxnContext(), dataverseName,
-                        datasetName);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            } catch (Exception e2) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                throw new AlgebricksException(e2);
-            }
-
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleIndexDropStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        String dataverseName = null;
-        String datasetName = null;
-        String indexName = null;
-        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
-        try {
-            IndexDropStatement stmtIndexDrop = (IndexDropStatement) stmt;
-            datasetName = stmtIndexDrop.getDatasetName().getValue();
-            dataverseName = stmtIndexDrop.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : stmtIndexDrop.getDataverseName().getValue();
-            if (dataverseName == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-
-            Dataset ds = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
-            if (ds == null) {
-                throw new AlgebricksException("There is no dataset with this name " + datasetName + " in dataverse "
-                        + dataverseName);
-            }
-
-            if (ds.getDatasetType() == DatasetType.INTERNAL || ds.getDatasetType() == DatasetType.FEED) {
-                indexName = stmtIndexDrop.getIndexName().getValue();
-                Index index = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataverseName, datasetName, indexName);
-                if (index == null) {
-                    if (!stmtIndexDrop.getIfExists()) {
-                        throw new AlgebricksException("There is no index with this name " + indexName + ".");
-                    }
-                } else {
-                    //#. prepare a job to drop the index in NC.
-                    CompiledIndexDropStatement cds = new CompiledIndexDropStatement(dataverseName, datasetName,
-                            indexName);
-                    jobsToExecute.add(IndexOperations.buildDropSecondaryIndexJobSpec(cds, metadataProvider));
-
-                    //#. mark PendingDropOp on the existing index
-                    MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
-                    MetadataManager.INSTANCE.addIndex(
-                            mdTxnCtx,
-                            new Index(dataverseName, datasetName, indexName, index.getIndexType(), index
-                                    .getKeyFieldNames(), index.isPrimaryIndex(), IMetadataEntity.PENDING_DROP_OP));
-
-                    //#. commit the existing transaction before calling runJob. 
-                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-                    bActiveTxn = false;
-
-                    for (JobSpecification jobSpec : jobsToExecute) {
-                        runJob(hcc, jobSpec, true);
-                    }
-
-                    //#. begin a new transaction
-                    mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-                    bActiveTxn = true;
-                    metadataProvider.setMetadataTxnContext(mdTxnCtx);
-
-                    //#. finally, delete the existing index
-                    MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
-                }
-            } else {
-                throw new AlgebricksException(datasetName
-                        + " is an external dataset. Indexes are not maintained for external datasets.");
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-
-            //#. execute compensation operations
-            //   remove the all indexes in NC
-            for (JobSpecification jobSpec : jobsToExecute) {
-                runJob(hcc, jobSpec, true);
-            }
-
-            //   remove the record from the metadata.
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            metadataProvider.setMetadataTxnContext(mdTxnCtx);
-            try {
-                MetadataManager.INSTANCE.dropIndex(metadataProvider.getMetadataTxnContext(), dataverseName,
-                        datasetName, indexName);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            } catch (Exception e2) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                throw new AlgebricksException(e2);
-            }
-
-            throw new AlgebricksException(e);
-
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleTypeDropStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws AlgebricksException, MetadataException, RemoteException, ACIDException {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            TypeDropStatement stmtTypeDrop = (TypeDropStatement) stmt;
-            String dataverseName = stmtTypeDrop.getDataverseName() == null ? (activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName()) : stmtTypeDrop.getDataverseName().getValue();
-            if (dataverseName == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-            String typeName = stmtTypeDrop.getTypeName().getValue();
-            Datatype dt = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, typeName);
-            if (dt == null) {
-                if (!stmtTypeDrop.getIfExists())
-                    throw new AlgebricksException("There is no datatype with this name " + typeName + ".");
-            } else {
-                MetadataManager.INSTANCE.dropDatatype(mdTxnCtx, dataverseName, typeName);
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleNodegroupDropStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws MetadataException, AlgebricksException, RemoteException, ACIDException {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            NodeGroupDropStatement stmtDelete = (NodeGroupDropStatement) stmt;
-            String nodegroupName = stmtDelete.getNodeGroupName().getValue();
-            NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, nodegroupName);
-            if (ng == null) {
-                if (!stmtDelete.getIfExists())
-                    throw new AlgebricksException("There is no nodegroup with this name " + nodegroupName + ".");
-            } else {
-                MetadataManager.INSTANCE.dropNodegroup(mdTxnCtx, nodegroupName);
-            }
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleCreateFunctionStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws AlgebricksException, MetadataException, RemoteException, ACIDException {
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            CreateFunctionStatement cfs = (CreateFunctionStatement) stmt;
-            String dataverse = cfs.getSignature().getNamespace() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : cfs.getSignature().getNamespace();
-            if (dataverse == null) {
-                throw new AlgebricksException(" dataverse not specified ");
-            }
-            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverse);
-            if (dv == null) {
-                throw new AlgebricksException("There is no dataverse with this name " + dataverse + ".");
-            }
-            Function function = new Function(dataverse, cfs.getaAterixFunction().getName(), cfs.getaAterixFunction()
-                    .getArity(), cfs.getParamList(), Function.RETURNTYPE_VOID, cfs.getFunctionBody(),
-                    Function.LANGUAGE_AQL, FunctionKind.SCALAR.toString());
-            MetadataManager.INSTANCE.addFunction(mdTxnCtx, function);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleFunctionDropStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws MetadataException, RemoteException, ACIDException, AlgebricksException {
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            FunctionDropStatement stmtDropFunction = (FunctionDropStatement) stmt;
-            FunctionSignature signature = stmtDropFunction.getFunctionSignature();
-            Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
-            if (function == null) {
-                if (!stmtDropFunction.getIfExists())
-                    throw new AlgebricksException("Unknonw function " + signature);
-            } else {
-                MetadataManager.INSTANCE.dropFunction(mdTxnCtx, signature);
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private void handleLoadFromFileStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-        List<JobSpecification> jobsToExecute = new ArrayList<JobSpecification>();
-        try {
-            LoadFromFileStatement loadStmt = (LoadFromFileStatement) stmt;
-            String dataverseName = loadStmt.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : loadStmt.getDataverseName().getValue();
-            CompiledLoadFromFileStatement cls = new CompiledLoadFromFileStatement(dataverseName, loadStmt
-                    .getDatasetName().getValue(), loadStmt.getAdapter(), loadStmt.getProperties(),
-                    loadStmt.dataIsAlreadySorted());
-
-            IDataFormat format = getDataFormat(metadataProvider.getMetadataTxnContext(), dataverseName);
-            Job job = DatasetOperations.createLoadDatasetJobSpec(metadataProvider, cls, format);
-            jobsToExecute.add(job.getJobSpec());
-            // Also load the dataset's secondary indexes.
-            List<Index> datasetIndexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, loadStmt
-                    .getDatasetName().getValue());
-            for (Index index : datasetIndexes) {
-                if (!index.isSecondaryIndex()) {
-                    continue;
-                }
-                // Create CompiledCreateIndexStatement from metadata entity 'index'.
-                CompiledCreateIndexStatement cis = new CompiledCreateIndexStatement(index.getIndexName(),
-                        dataverseName, index.getDatasetName(), index.getKeyFieldNames(), index.getGramLength(),
-                        index.getIndexType());
-                jobsToExecute.add(IndexOperations.buildSecondaryIndexLoadingJobSpec(cis, metadataProvider));
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            for (JobSpecification jobspec : jobsToExecute) {
-                runJob(hcc, jobspec, true);
-            }
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private void handleWriteFromQueryResultStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            metadataProvider.setWriteTransaction(true);
-            WriteFromQueryResultStatement st1 = (WriteFromQueryResultStatement) stmt;
-            String dataverseName = st1.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : st1.getDataverseName().getValue();
-            CompiledWriteFromQueryResultStatement clfrqs = new CompiledWriteFromQueryResultStatement(dataverseName, st1
-                    .getDatasetName().getValue(), st1.getQuery(), st1.getVarCounter());
-
-            JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-            if (compiled != null) {
-                runJob(hcc, compiled, true);
-            }
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private void handleInsertStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            metadataProvider.setWriteTransaction(true);
-            InsertStatement stmtInsert = (InsertStatement) stmt;
-            String dataverseName = stmtInsert.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : stmtInsert.getDataverseName().getValue();
-            CompiledInsertStatement clfrqs = new CompiledInsertStatement(dataverseName, stmtInsert.getDatasetName()
-                    .getValue(), stmtInsert.getQuery(), stmtInsert.getVarCounter());
-            JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            if (compiled != null) {
-                runJob(hcc, compiled, true);
-            }
-
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private void handleDeleteStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            metadataProvider.setWriteTransaction(true);
-            DeleteStatement stmtDelete = (DeleteStatement) stmt;
-            String dataverseName = stmtDelete.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : stmtDelete.getDataverseName().getValue();
-            CompiledDeleteStatement clfrqs = new CompiledDeleteStatement(stmtDelete.getVariableExpr(), dataverseName,
-                    stmtDelete.getDatasetName().getValue(), stmtDelete.getCondition(), stmtDelete.getDieClause(),
-                    stmtDelete.getVarCounter(), metadataProvider);
-            JobSpecification compiled = rewriteCompileQuery(metadataProvider, clfrqs.getQuery(), clfrqs);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            if (compiled != null) {
-                runJob(hcc, compiled, true);
-            }
-
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private JobSpecification rewriteCompileQuery(AqlMetadataProvider metadataProvider, Query query,
-            ICompiledDmlStatement stmt) throws AsterixException, RemoteException, AlgebricksException, JSONException,
-            ACIDException {
-
-        // Query Rewriting (happens under the same ongoing metadata transaction)
-        Pair<Query, Integer> reWrittenQuery = APIFramework.reWriteQuery(declaredFunctions, metadataProvider, query,
-                sessionConfig, out, pdf);
-
-        // Query Compilation (happens under the same ongoing metadata
-        // transaction)
-        JobSpecification spec = APIFramework.compileQuery(declaredFunctions, metadataProvider, query,
-                reWrittenQuery.second, stmt == null ? null : stmt.getDatasetName(), sessionConfig, out, pdf, stmt);
-
-        return spec;
-
-    }
-
-    private void handleBeginFeedStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            BeginFeedStatement bfs = (BeginFeedStatement) stmt;
-            String dataverseName = bfs.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : bfs.getDataverseName().getValue();
-
-            CompiledBeginFeedStatement cbfs = new CompiledBeginFeedStatement(dataverseName, bfs.getDatasetName()
-                    .getValue(), bfs.getQuery(), bfs.getVarCounter());
-
-            Dataset dataset;
-            dataset = MetadataManager.INSTANCE.getDataset(metadataProvider.getMetadataTxnContext(), dataverseName, bfs
-                    .getDatasetName().getValue());
-            if (dataset == null) {
-                throw new AsterixException("Unknown dataset :" + bfs.getDatasetName().getValue());
-            }
-            IDatasetDetails datasetDetails = dataset.getDatasetDetails();
-            if (datasetDetails.getDatasetType() != DatasetType.FEED) {
-                throw new IllegalArgumentException("Dataset " + bfs.getDatasetName().getValue()
-                        + " is not a feed dataset");
-            }
-            bfs.initialize(metadataProvider.getMetadataTxnContext(), dataset);
-            cbfs.setQuery(bfs.getQuery());
-            JobSpecification compiled = rewriteCompileQuery(metadataProvider, bfs.getQuery(), cbfs);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            if (compiled != null) {
-                runJob(hcc, compiled, true);
-            }
-
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private void handleControlFeedStatement(AqlMetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            ControlFeedStatement cfs = (ControlFeedStatement) stmt;
-            String dataverseName = cfs.getDataverseName() == null ? activeDefaultDataverse == null ? null
-                    : activeDefaultDataverse.getDataverseName() : cfs.getDatasetName().getValue();
-            CompiledControlFeedStatement clcfs = new CompiledControlFeedStatement(cfs.getOperationType(),
-                    dataverseName, cfs.getDatasetName().getValue(), cfs.getAlterAdapterConfParams());
-            JobSpecification jobSpec = FeedOperations.buildControlFeedJobSpec(clcfs, metadataProvider);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            runJob(hcc, jobSpec, true);
-
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private QueryResult handleQuery(AqlMetadataProvider metadataProvider, Query query, IHyracksClientConnection hcc,
-            IHyracksDataset hdc, boolean asyncResults) throws Exception {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        boolean bActiveTxn = true;
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireReadLatch();
-
-        try {
-            JobSpecification compiled = rewriteCompileQuery(metadataProvider, query, null);
-
-            QueryResult queryResult = new QueryResult(query, metadataProvider.getResultSetId());
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-
-            if (compiled != null) {
-                GlobalConfig.ASTERIX_LOGGER.info(compiled.toJSON().toString(1));
-                JobId jobId = runJob(hcc, compiled, false);
-
-                JSONObject response = new JSONObject();
-                if (asyncResults) {
-                    JSONArray handle = new JSONArray();
-                    handle.put(jobId.getId());
-                    handle.put(metadataProvider.getResultSetId().getId());
-                    response.put("handle", handle);
-                } else {
-                    ByteBuffer buffer = ByteBuffer.allocate(ResultReader.FRAME_SIZE);
-                    ResultReader resultReader = new ResultReader(hcc, hdc);
-                    resultReader.open(jobId, metadataProvider.getResultSetId());
-                    buffer.clear();
-                    JSONArray results = new JSONArray();
-                    while (resultReader.read(buffer) > 0) {
-                        results.put(ResultUtils.getJSONFromBuffer(buffer, resultReader.getFrameTupleAccessor()));
-                        buffer.clear();
-                    }
-                    response.put("results", results);
-                }
-                switch (pdf) {
-                    case HTML:
-                        out.println("<pre>");
-                        ResultUtils.prettyPrintHTML(out, response);
-                        out.println("</pre>");
-                        break;
-                    case TEXT:
-                    case JSON:
-                        out.print(response);
-                        break;
-                }
-                hcc.waitForCompletion(jobId);
-            }
-
-            return queryResult;
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            }
-            throw new AlgebricksException(e);
-        } finally {
-            releaseReadLatch();
-        }
-    }
-
-    private void handleCreateNodeGroupStatement(AqlMetadataProvider metadataProvider, Statement stmt)
-            throws MetadataException, AlgebricksException, RemoteException, ACIDException {
-
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        acquireWriteLatch();
-
-        try {
-            NodegroupDecl stmtCreateNodegroup = (NodegroupDecl) stmt;
-            String ngName = stmtCreateNodegroup.getNodegroupName().getValue();
-            NodeGroup ng = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, ngName);
-            if (ng != null) {
-                if (!stmtCreateNodegroup.getIfNotExists())
-                    throw new AlgebricksException("A nodegroup with this name " + ngName + " already exists.");
-            } else {
-                List<Identifier> ncIdentifiers = stmtCreateNodegroup.getNodeControllerNames();
-                List<String> ncNames = new ArrayList<String>(ncIdentifiers.size());
-                for (Identifier id : ncIdentifiers) {
-                    ncNames.add(id.getValue());
-                }
-                MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, new NodeGroup(ngName, ncNames));
-            }
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new AlgebricksException(e);
-        } finally {
-            releaseWriteLatch();
-        }
-    }
-
-    private JobId runJob(IHyracksClientConnection hcc, JobSpecification spec, boolean waitForCompletion)
-            throws Exception {
-        JobId[] jobIds = executeJobArray(hcc, new Job[] { new Job(spec) }, out, pdf, waitForCompletion);
-        return jobIds[0];
-    }
-
-    public JobId[] executeJobArray(IHyracksClientConnection hcc, Job[] jobs, PrintWriter out, DisplayFormat pdf,
-            boolean waitForCompletion) throws Exception {
-        JobId[] startedJobIds = new JobId[jobs.length];
-        for (int i = 0; i < jobs.length; i++) {
-            JobSpecification spec = jobs[i].getJobSpec();
-            spec.setMaxReattempts(0);
-            JobId jobId = hcc.startJob(spec);
-            startedJobIds[i] = jobId;
-            if (waitForCompletion) {
-                hcc.waitForCompletion(jobId);
-            }
-        }
-        return startedJobIds;
-    }
-
-    private static IDataFormat getDataFormat(MetadataTransactionContext mdTxnCtx, String dataverseName)
-            throws AsterixException {
-        Dataverse dataverse = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, dataverseName);
-        IDataFormat format;
-        try {
-            format = (IDataFormat) Class.forName(dataverse.getDataFormat()).newInstance();
-        } catch (Exception e) {
-            throw new AsterixException(e);
-        }
-        return format;
-    }
-
-    private void acquireWriteLatch() {
-        MetadataManager.INSTANCE.acquireWriteLatch();
-    }
-
-    private void releaseWriteLatch() {
-        MetadataManager.INSTANCE.releaseWriteLatch();
-    }
-
-    private void acquireReadLatch() {
-        MetadataManager.INSTANCE.acquireReadLatch();
-    }
-
-    private void releaseReadLatch() {
-        MetadataManager.INSTANCE.releaseReadLatch();
-    }
-}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/DatasetOperations.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/DatasetOperations.java
deleted file mode 100644
index d4c8c34..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/file/DatasetOperations.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Copyright 2009-2013 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.file;
-
-import java.io.File;
-import java.io.IOException;
-import java.rmi.RemoteException;
-import java.util.List;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.api.common.Job;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.common.config.OptimizationConfUtil;
-import edu.uci.ics.asterix.common.context.AsterixRuntimeComponentsProvider;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.dataset.hints.DatasetHints.DatasetCardinalityHint;
-import edu.uci.ics.asterix.metadata.declared.AqlMetadataProvider;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.ExternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.resource.ILocalResourceMetadata;
-import edu.uci.ics.asterix.transaction.management.resource.LSMBTreeLocalResourceMetadata;
-import edu.uci.ics.asterix.transaction.management.resource.PersistentLocalResourceFactoryProvider;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledDatasetDropStatement;
-import edu.uci.ics.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
-import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
-import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraintHelper;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.LogicalExpressionJobGenToExpressionRuntimeProviderAdapter;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.jobgen.impl.ConnectorPolicyAssignmentPolicy;
-import edu.uci.ics.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.operators.meta.AlgebricksMetaOperatorDescriptor;
-import edu.uci.ics.hyracks.algebricks.runtime.operators.std.AssignRuntimeFactory;
-import edu.uci.ics.hyracks.api.dataflow.IConnectorDescriptor;
-import edu.uci.ics.hyracks.api.dataflow.IOperatorDescriptor;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunctionFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.api.job.JobSpecification;
-import edu.uci.ics.hyracks.dataflow.common.data.partition.FieldHashPartitionComputerFactory;
-import edu.uci.ics.hyracks.dataflow.std.connectors.MToNPartitioningConnectorDescriptor;
-import edu.uci.ics.hyracks.dataflow.std.connectors.MToNPartitioningMergingConnectorDescriptor;
-import edu.uci.ics.hyracks.dataflow.std.connectors.OneToOneConnectorDescriptor;
-import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
-import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
-import edu.uci.ics.hyracks.dataflow.std.sort.ExternalSortOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.common.dataflow.IndexDropOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.common.dataflow.TreeIndexCreateOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallbackFactory;
-import edu.uci.ics.hyracks.storage.am.lsm.btree.dataflow.LSMBTreeDataflowHelperFactory;
-import edu.uci.ics.hyracks.storage.common.file.ILocalResourceFactoryProvider;
-import edu.uci.ics.hyracks.storage.common.file.LocalResource;
-
-public class DatasetOperations {
-
-    private static final PhysicalOptimizationConfig physicalOptimizationConfig = OptimizationConfUtil
-            .getPhysicalOptimizationConfig();
-
-    private static Logger LOGGER = Logger.getLogger(DatasetOperations.class.getName());
-
-    public static JobSpecification createDropDatasetJobSpec(CompiledDatasetDropStatement datasetDropStmt,
-            AqlMetadataProvider metadataProvider) throws AlgebricksException, HyracksDataException, RemoteException,
-            ACIDException, AsterixException {
-
-        String dataverseName = null;
-        if (datasetDropStmt.getDataverseName() != null) {
-            dataverseName = datasetDropStmt.getDataverseName();
-        } else if (metadataProvider.getDefaultDataverse() != null) {
-            dataverseName = metadataProvider.getDefaultDataverse().getDataverseName();
-        }
-
-        String datasetName = datasetDropStmt.getDatasetName();
-        String datasetPath = dataverseName + File.separator + datasetName;
-
-        LOGGER.info("DROP DATASETPATH: " + datasetPath);
-
-        Dataset dataset = metadataProvider.findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("DROP DATASET: No metadata for dataset " + datasetName);
-        }
-        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
-            return new JobSpecification();
-        }
-
-        JobSpecification specPrimary = new JobSpecification();
-
-        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = metadataProvider
-                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataset.getDataverseName(), datasetName,
-                        datasetName);
-        IndexDropOperatorDescriptor primaryBtreeDrop = new IndexDropOperatorDescriptor(specPrimary,
-                AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER, AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER,
-                splitsAndConstraint.first, new LSMBTreeDataflowHelperFactory(
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
-                        GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES));
-        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(specPrimary, primaryBtreeDrop,
-                splitsAndConstraint.second);
-
-        specPrimary.addRoot(primaryBtreeDrop);
-
-        return specPrimary;
-    }
-
-    public static JobSpecification createDatasetJobSpec(Dataverse dataverse, String datasetName,
-            AqlMetadataProvider metadata) throws AsterixException, AlgebricksException {
-        String dataverseName = dataverse.getDataverseName();
-        IDataFormat format;
-        try {
-            format = (IDataFormat) Class.forName(dataverse.getDataFormat()).newInstance();
-        } catch (Exception e) {
-            throw new AsterixException(e);
-        }
-        Dataset dataset = metadata.findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AsterixException("Could not find dataset " + datasetName + " in datavetse " + dataverseName);
-        }
-        ARecordType itemType = (ARecordType) metadata.findType(dataverseName, dataset.getItemTypeName());
-        for (String keyField : DatasetUtils.getPartitioningKeys(dataset)) {
-            try {
-                if (!itemType.isClosedField(keyField)) {
-                    throw new AsterixException("Cannot partition dataset \"" + dataset.getDatasetName()
-                            + "\" by key \"" + keyField + "\" since it is not a valid field of \""
-                            + itemType.getTypeName() + "\"");
-                }
-            } catch (IOException e) {
-                throw new AsterixException(e);
-            }
-        }
-        JobSpecification spec = new JobSpecification();
-        IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
-                itemType, format.getBinaryComparatorFactoryProvider());
-        ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
-        int[] blooFilterKeyFields = DatasetUtils.createBloomFilterKeyFields(dataset);
-
-        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = metadata
-                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataverseName, datasetName, datasetName);
-        FileSplit[] fs = splitsAndConstraint.first.getFileSplits();
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < fs.length; i++) {
-            sb.append(stringOf(fs[i]) + " ");
-        }
-        LOGGER.info("CREATING File Splits: " + sb.toString());
-
-        //prepare a LocalResourceMetadata which will be stored in NC's local resource repository
-        ILocalResourceMetadata localResourceMetadata = new LSMBTreeLocalResourceMetadata(typeTraits,
-                comparatorFactories, blooFilterKeyFields, true, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
-                GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES);
-        ILocalResourceFactoryProvider localResourceFactoryProvider = new PersistentLocalResourceFactoryProvider(
-                localResourceMetadata, LocalResource.LSMBTreeResource);
-
-        TreeIndexCreateOperatorDescriptor indexCreateOp = new TreeIndexCreateOperatorDescriptor(spec,
-                AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER, AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER,
-                splitsAndConstraint.first, typeTraits, comparatorFactories, blooFilterKeyFields,
-                new LSMBTreeDataflowHelperFactory(AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
-                        GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES), localResourceFactoryProvider,
-                NoOpOperationCallbackFactory.INSTANCE);
-        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, indexCreateOp,
-                splitsAndConstraint.second);
-        spec.addRoot(indexCreateOp);
-        return spec;
-    }
-
-    @SuppressWarnings("rawtypes")
-    public static Job createLoadDatasetJobSpec(AqlMetadataProvider metadataProvider,
-            CompiledLoadFromFileStatement loadStmt, IDataFormat format) throws AsterixException, AlgebricksException {
-        MetadataTransactionContext mdTxnCtx = metadataProvider.getMetadataTxnContext();
-        String dataverseName = loadStmt.getDataverseName();
-        String datasetName = loadStmt.getDatasetName();
-        Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AsterixException("Could not find dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-        if (dataset.getDatasetType() != DatasetType.INTERNAL && dataset.getDatasetType() != DatasetType.FEED) {
-            throw new AsterixException("Cannot load data into dataset  (" + datasetName + ")" + "of type "
-                    + dataset.getDatasetType());
-        }
-        JobSpecification spec = new JobSpecification();
-
-        ARecordType itemType = (ARecordType) MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName,
-                dataset.getItemTypeName()).getDatatype();
-        ISerializerDeserializer payloadSerde = format.getSerdeProvider().getSerializerDeserializer(itemType);
-
-        IBinaryHashFunctionFactory[] hashFactories = DatasetUtils.computeKeysBinaryHashFunFactories(dataset, itemType,
-                format.getBinaryHashFunctionFactoryProvider());
-        IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
-                itemType, format.getBinaryComparatorFactoryProvider());
-        ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
-        int[] blooFilterKeyFields = DatasetUtils.createBloomFilterKeyFields(dataset);
-
-        ExternalDatasetDetails externalDatasetDetails = new ExternalDatasetDetails(loadStmt.getAdapter(),
-                loadStmt.getProperties());
-
-        Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> p = metadataProvider.buildExternalDataScannerRuntime(
-                spec, itemType, externalDatasetDetails, format);
-        IOperatorDescriptor scanner = p.first;
-        AlgebricksPartitionConstraint scannerPc = p.second;
-        RecordDescriptor recDesc = computePayloadKeyRecordDescriptor(dataset, itemType, payloadSerde, format);
-        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, scanner, scannerPc);
-
-        AssignRuntimeFactory assign = makeAssignRuntimeFactory(dataset, itemType, format);
-        AlgebricksMetaOperatorDescriptor asterixOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
-                new IPushRuntimeFactory[] { assign }, new RecordDescriptor[] { recDesc });
-
-        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, asterixOp, scannerPc);
-
-        int numKeys = DatasetUtils.getPartitioningKeys(dataset).size();
-        int[] keys = new int[numKeys];
-        for (int i = 0; i < numKeys; i++) {
-            keys[i] = i + 1;
-        }
-        // Move key fields to front.
-        int[] fieldPermutation = new int[numKeys + 1];
-        for (int i = 0; i < numKeys; i++) {
-            fieldPermutation[i] = i + 1;
-        }
-        fieldPermutation[numKeys] = 0;
-
-        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = metadataProvider
-                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataverseName, datasetName, datasetName);
-
-        FileSplit[] fs = splitsAndConstraint.first.getFileSplits();
-        StringBuilder sb = new StringBuilder();
-        for (int i = 0; i < fs.length; i++) {
-            sb.append(stringOf(fs[i]) + " ");
-        }
-        LOGGER.info("LOAD into File Splits: " + sb.toString());
-
-        String numElementsHintString = dataset.getHints().get("CARDINALITY");
-        long numElementsHint;
-        if (numElementsHintString == null) {
-            numElementsHint = DatasetCardinalityHint.DEFAULT;
-        } else {
-            numElementsHint = Long.parseLong(dataset.getHints().get("CARDINALITY"));
-        }
-
-        TreeIndexBulkLoadOperatorDescriptor btreeBulkLoad = new TreeIndexBulkLoadOperatorDescriptor(spec,
-                AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER, AsterixRuntimeComponentsProvider.NOINDEX_PROVIDER,
-                splitsAndConstraint.first, typeTraits, comparatorFactories, blooFilterKeyFields, fieldPermutation,
-                GlobalConfig.DEFAULT_BTREE_FILL_FACTOR, false, numElementsHint, new LSMBTreeDataflowHelperFactory(
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                        AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER, GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE,
-                        GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES), NoOpOperationCallbackFactory.INSTANCE);
-        AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, btreeBulkLoad,
-                splitsAndConstraint.second);
-
-        spec.connect(new OneToOneConnectorDescriptor(spec), scanner, 0, asterixOp, 0);
-
-        if (!loadStmt.alreadySorted()) {
-            int framesLimit = physicalOptimizationConfig.getMaxFramesExternalSort();
-            ExternalSortOperatorDescriptor sorter = new ExternalSortOperatorDescriptor(spec, framesLimit, keys,
-                    comparatorFactories, recDesc);
-            AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, sorter,
-                    splitsAndConstraint.second);
-            IConnectorDescriptor hashConn = new MToNPartitioningConnectorDescriptor(spec,
-                    new FieldHashPartitionComputerFactory(keys, hashFactories));
-            spec.connect(hashConn, asterixOp, 0, sorter, 0);
-            spec.connect(new OneToOneConnectorDescriptor(spec), sorter, 0, btreeBulkLoad, 0);
-        } else {
-            IConnectorDescriptor sortMergeConn = new MToNPartitioningMergingConnectorDescriptor(spec,
-                    new FieldHashPartitionComputerFactory(keys, hashFactories), keys, comparatorFactories);
-            spec.connect(sortMergeConn, asterixOp, 0, btreeBulkLoad, 0);
-        }
-        spec.addRoot(btreeBulkLoad);
-        spec.setConnectorPolicyAssignmentPolicy(new ConnectorPolicyAssignmentPolicy());
-
-        return new Job(spec);
-    }
-
-    private static String stringOf(FileSplit fs) {
-        return fs.getNodeName() + ":" + fs.getLocalFile().toString();
-    }
-
-    private static AssignRuntimeFactory makeAssignRuntimeFactory(Dataset dataset, ARecordType itemType,
-            IDataFormat format) throws AlgebricksException {
-        List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
-        int numKeys = partitioningKeys.size();
-        ICopyEvaluatorFactory[] evalFactories = new ICopyEvaluatorFactory[numKeys];
-        for (int i = 0; i < numKeys; i++) {
-            Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> evalFactoryAndType = format
-                    .partitioningEvaluatorFactory(itemType, partitioningKeys.get(i));
-            evalFactories[i] = evalFactoryAndType.first;
-        }
-        int[] outColumns = new int[numKeys];
-        int[] projectionList = new int[numKeys + 1];
-        projectionList[0] = 0;
-
-        for (int i = 0; i < numKeys; i++) {
-            outColumns[i] = i + 1;
-            projectionList[i + 1] = i + 1;
-        }
-        IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[evalFactories.length];
-        for (int i = 0; i < evalFactories.length; ++i) {
-            sefs[i] = new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter.ScalarEvaluatorFactoryAdapter(
-                    evalFactories[i]);
-        }
-        return new AssignRuntimeFactory(outColumns, sefs, projectionList);
-    }
-
-    @SuppressWarnings("rawtypes")
-    private static RecordDescriptor computePayloadKeyRecordDescriptor(Dataset dataset, ARecordType itemType,
-            ISerializerDeserializer payloadSerde, IDataFormat dataFormat) throws AlgebricksException {
-        List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
-        int numKeys = partitioningKeys.size();
-        ISerializerDeserializer[] recordFields = new ISerializerDeserializer[1 + numKeys];
-        recordFields[0] = payloadSerde;
-        for (int i = 0; i < numKeys; i++) {
-            IAType keyType;
-            try {
-                keyType = itemType.getFieldType(partitioningKeys.get(i));
-            } catch (IOException e) {
-                throw new AlgebricksException(e);
-            }
-            ISerializerDeserializer keySerde = dataFormat.getSerdeProvider().getSerializerDeserializer(keyType);
-            recordFields[i + 1] = keySerde;
-        }
-        return new RecordDescriptor(recordFields);
-    }
-}
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
deleted file mode 100644
index 5ab94f3..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/CCApplicationEntryPoint.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package edu.uci.ics.asterix.hyracks.bootstrap;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
-
-import edu.uci.ics.asterix.api.http.servlet.APIServlet;
-import edu.uci.ics.asterix.api.http.servlet.DDLAPIServlet;
-import edu.uci.ics.asterix.api.http.servlet.QueryAPIServlet;
-import edu.uci.ics.asterix.api.http.servlet.QueryResultAPIServlet;
-import edu.uci.ics.asterix.api.http.servlet.QueryStatusAPIServlet;
-import edu.uci.ics.asterix.api.http.servlet.UpdateAPIServlet;
-import edu.uci.ics.asterix.common.api.AsterixAppContextInfoImpl;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
-import edu.uci.ics.asterix.metadata.bootstrap.AsterixProperties;
-import edu.uci.ics.asterix.metadata.bootstrap.AsterixStateProxy;
-import edu.uci.ics.hyracks.api.application.ICCApplicationContext;
-import edu.uci.ics.hyracks.api.application.ICCApplicationEntryPoint;
-import edu.uci.ics.hyracks.api.client.HyracksConnection;
-import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
-
-public class CCApplicationEntryPoint implements ICCApplicationEntryPoint {
-    private static final Logger LOGGER = Logger.getLogger(CCApplicationEntryPoint.class.getName());
-
-    private static final String HYRACKS_CONNECTION_ATTR = "edu.uci.ics.asterix.HYRACKS_CONNECTION";
-
-    private static final int DEFAULT_WEB_SERVER_PORT = 19001;
-
-    private static final int DEFAULT_JSON_API_SERVER_PORT = 19101;
-
-    private Server webServer;
-    private Server jsonAPIServer;
-    private static IAsterixStateProxy proxy;
-    private ICCApplicationContext appCtx;
-
-    @Override
-    public void start(ICCApplicationContext ccAppCtx, String[] args) throws Exception {
-        this.appCtx = ccAppCtx;
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info("Starting Asterix cluster controller");
-        }
-
-        proxy = AsterixStateProxy.registerRemoteObject();
-        proxy.setAsterixProperties(AsterixProperties.INSTANCE);
-        appCtx.setDistributedState(proxy);
-
-        MetadataManager.INSTANCE = new MetadataManager(proxy);
-
-        setupWebServer();
-        webServer.start();
-
-        // Setup and start the web interface
-        setupJSONAPIServer();
-        jsonAPIServer.start();
-
-        AsterixAppContextInfoImpl.initialize(appCtx);
-    }
-
-    @Override
-    public void stop() throws Exception {
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info("Stopping Asterix cluster controller");
-        }
-        AsterixStateProxy.unregisterRemoteObject();
-
-        webServer.stop();
-        jsonAPIServer.stop();
-    }
-
-    private IHyracksClientConnection getNewHyracksClientConnection() throws Exception {
-        String strIP = appCtx.getCCContext().getClusterControllerInfo().getClientNetAddress();
-        int port = appCtx.getCCContext().getClusterControllerInfo().getClientNetPort();
-        return new HyracksConnection(strIP, port);
-    }
-
-    private void setupWebServer() throws Exception {
-        String portStr = System.getProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY);
-        int port = DEFAULT_WEB_SERVER_PORT;
-        if (portStr != null) {
-            port = Integer.parseInt(portStr);
-        }
-        webServer = new Server(port);
-
-        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
-        context.setContextPath("/");
-
-        IHyracksClientConnection hcc = getNewHyracksClientConnection();
-        context.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
-
-        webServer.setHandler(context);
-        context.addServlet(new ServletHolder(new APIServlet()), "/*");
-    }
-
-    private void setupJSONAPIServer() throws Exception {
-        String portStr = System.getProperty(GlobalConfig.JSON_API_SERVER_PORT_PROPERTY);
-        int port = DEFAULT_JSON_API_SERVER_PORT;
-        if (portStr != null) {
-            port = Integer.parseInt(portStr);
-        }
-        jsonAPIServer = new Server(port);
-
-        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
-        context.setContextPath("/");
-
-        IHyracksClientConnection hcc = getNewHyracksClientConnection();
-        context.setAttribute(HYRACKS_CONNECTION_ATTR, hcc);
-
-        jsonAPIServer.setHandler(context);
-        context.addServlet(new ServletHolder(new QueryAPIServlet()), "/query");
-        context.addServlet(new ServletHolder(new QueryStatusAPIServlet()), "/query/status");
-        context.addServlet(new ServletHolder(new QueryResultAPIServlet()), "/query/result");
-        context.addServlet(new ServletHolder(new UpdateAPIServlet()), "/update");
-        context.addServlet(new ServletHolder(new DDLAPIServlet()), "/ddl");
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
deleted file mode 100644
index f332155..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/hyracks/bootstrap/NCApplicationEntryPoint.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package edu.uci.ics.asterix.hyracks.bootstrap;
-
-import java.rmi.RemoteException;
-import java.rmi.server.UnicastRemoteObject;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.common.context.AsterixAppRuntimeContext;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataNode;
-import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
-import edu.uci.ics.asterix.metadata.api.IMetadataNode;
-import edu.uci.ics.asterix.metadata.bootstrap.MetadataBootstrap;
-import edu.uci.ics.asterix.transaction.management.resource.PersistentLocalResourceRepository;
-import edu.uci.ics.asterix.transaction.management.service.recovery.IRecoveryManager;
-import edu.uci.ics.asterix.transaction.management.service.recovery.IRecoveryManager.SystemState;
-import edu.uci.ics.hyracks.api.application.INCApplicationContext;
-import edu.uci.ics.hyracks.api.application.INCApplicationEntryPoint;
-
-public class NCApplicationEntryPoint implements INCApplicationEntryPoint {
-	private static final Logger LOGGER = Logger
-			.getLogger(NCApplicationEntryPoint.class.getName());
-
-	private INCApplicationContext ncApplicationContext = null;
-	private AsterixAppRuntimeContext runtimeContext;
-	private String nodeId;
-	private boolean isMetadataNode = false;
-	private boolean stopInitiated = false;
-	private SystemState systemState = SystemState.NEW_UNIVERSE;
-
-	@Override
-	public void start(INCApplicationContext ncAppCtx, String[] args)
-			throws Exception {
-		ncApplicationContext = ncAppCtx;
-		nodeId = ncApplicationContext.getNodeId();
-		if (LOGGER.isLoggable(Level.INFO)) {
-			LOGGER.info("Starting Asterix node controller: " + nodeId);
-		}
-
-		runtimeContext = new AsterixAppRuntimeContext(ncApplicationContext);
-		runtimeContext.initialize();
-		ncApplicationContext.setApplicationObject(runtimeContext);
-		JVMShutdownHook sHook = new JVMShutdownHook(this);
-		Runtime.getRuntime().addShutdownHook(sHook);
-
-		// #. recover if the system is corrupted by checking system state.
-		IRecoveryManager recoveryMgr = runtimeContext.getTransactionSubsystem()
-				.getRecoveryManager();
-		systemState = recoveryMgr.getSystemState();
-		if (systemState != SystemState.NEW_UNIVERSE) {
-			PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) runtimeContext
-					.getLocalResourceRepository();
-			localResourceRepository.initialize(nodeId, null, false,
-					runtimeContext.getResourceIdFactory());
-		}
-		if (systemState == SystemState.CORRUPTED) {
-			recoveryMgr.startRecovery(true);
-		} else if (systemState == SystemState.NEW_UNIVERSE) {
-			recoveryMgr.checkpoint(true);
-		}
-	}
-
-	@Override
-	public void stop() throws Exception {
-		if (!stopInitiated) {
-		    runtimeContext.setShuttingdown(true);
-			stopInitiated = true;
-			if (LOGGER.isLoggable(Level.INFO)) {
-				LOGGER.info("Stopping Asterix node controller: " + nodeId);
-			}
-
-			IRecoveryManager recoveryMgr = runtimeContext
-					.getTransactionSubsystem().getRecoveryManager();
-			recoveryMgr.checkpoint(true);
-
-			if (isMetadataNode) {
-				MetadataBootstrap.stopUniverse();
-			}
-			runtimeContext.deinitialize();
-		} else {
-			if (LOGGER.isLoggable(Level.INFO)) {
-				LOGGER.info("Duplicate attempt to stop ignored: " + nodeId);
-			}
-		}
-	}
-
-	@Override
-	public void notifyStartupComplete() throws Exception {
-		IAsterixStateProxy proxy = (IAsterixStateProxy) ncApplicationContext
-				.getDistributedState();
-
-		if (systemState == SystemState.NEW_UNIVERSE) {
-			PersistentLocalResourceRepository localResourceRepository = (PersistentLocalResourceRepository) runtimeContext
-					.getLocalResourceRepository();
-			System.out.println("nodeid" + nodeId);
-			System.out.println("proxy" + proxy);
-			System.out.println("stores"
-					+ proxy.getAsterixProperties().getStores());
-			System.out.println("store"
-					+ proxy.getAsterixProperties().getStores().get(nodeId)[0]);
-
-			localResourceRepository.initialize(nodeId, proxy
-					.getAsterixProperties().getStores().get(nodeId)[0], true,
-					null);
-		}
-
-		isMetadataNode = nodeId.equals(proxy.getAsterixProperties()
-				.getMetadataNodeName());
-		if (isMetadataNode) {
-			registerRemoteMetadataNode(proxy);
-
-			if (LOGGER.isLoggable(Level.INFO)) {
-				LOGGER.info("Bootstrapping metadata");
-			}
-			MetadataManager.INSTANCE = new MetadataManager(proxy);
-			MetadataManager.INSTANCE.init();
-			MetadataBootstrap.startUniverse(proxy.getAsterixProperties(),
-					ncApplicationContext,
-					systemState == SystemState.NEW_UNIVERSE);
-			MetadataBootstrap.startDDLRecovery();
-		}
-
-		IRecoveryManager recoveryMgr = runtimeContext.getTransactionSubsystem()
-				.getRecoveryManager();
-		recoveryMgr.checkpoint(true);
-
-		// TODO
-		// reclaim storage for orphaned index artifacts in NCs.
-	}
-
-	public void registerRemoteMetadataNode(IAsterixStateProxy proxy)
-			throws RemoteException {
-		IMetadataNode stub = null;
-		MetadataNode.INSTANCE.initialize(runtimeContext);
-		stub = (IMetadataNode) UnicastRemoteObject.exportObject(
-				MetadataNode.INSTANCE, 0);
-		proxy.setMetadataNode(stub);
-
-		if (LOGGER.isLoggable(Level.INFO)) {
-			LOGGER.info("Metadata node bound");
-		}
-	}
-
-	/**
-	 * Shutdown hook that invokes {@link NCApplicationEntryPoint#stop() stop}
-	 * method.
-	 */
-	private static class JVMShutdownHook extends Thread {
-
-		private final NCApplicationEntryPoint ncAppEntryPoint;
-
-		public JVMShutdownHook(NCApplicationEntryPoint ncAppEntryPoint) {
-			this.ncAppEntryPoint = ncAppEntryPoint;
-		}
-
-		public void run() {
-			if (LOGGER.isLoggable(Level.INFO)) {
-				LOGGER.info("Shutdown hook in progress");
-			}
-			try {
-				ncAppEntryPoint.stop();
-			} catch (Exception e) {
-				if (LOGGER.isLoggable(Level.WARNING)) {
-					LOGGER.warning("Exception in executing shutdown hook" + e);
-				}
-			}
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultReader.java b/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultReader.java
deleted file mode 100644
index 48bde1c..0000000
--- a/asterix/asterix-app/src/main/java/edu/uci/ics/asterix/result/ResultReader.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.result;
-
-import java.nio.ByteBuffer;
-
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.hyracks.api.client.IHyracksClientConnection;
-import edu.uci.ics.hyracks.api.comm.IFrameTupleAccessor;
-import edu.uci.ics.hyracks.api.dataset.DatasetDirectoryRecord.Status;
-import edu.uci.ics.hyracks.api.dataset.IHyracksDataset;
-import edu.uci.ics.hyracks.api.dataset.IHyracksDatasetReader;
-import edu.uci.ics.hyracks.api.dataset.ResultSetId;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.api.job.JobId;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ResultFrameTupleAccessor;
-
-public class ResultReader {
-    private final IHyracksDataset hyracksDataset;
-
-    private IHyracksDatasetReader reader;
-
-    private IFrameTupleAccessor frameTupleAccessor;
-
-    // Number of parallel result reader buffers
-    public static final int NUM_READERS = 1;
-
-    public static final int FRAME_SIZE = GlobalConfig.getFrameSize();
-
-    public ResultReader(IHyracksClientConnection hcc, IHyracksDataset hdc) throws Exception {
-        hyracksDataset = hdc;
-    }
-
-    public void open(JobId jobId, ResultSetId resultSetId) throws HyracksDataException {
-        reader = hyracksDataset.createReader(jobId, resultSetId);
-
-        frameTupleAccessor = new ResultFrameTupleAccessor(FRAME_SIZE);
-    }
-
-    public Status getStatus() {
-        return reader.getResultStatus();
-    }
-
-    public int read(ByteBuffer buffer) throws HyracksDataException {
-        return reader.read(buffer);
-    }
-
-    public IFrameTupleAccessor getFrameTupleAccessor() {
-        return frameTupleAccessor;
-    }
-}
diff --git a/asterix/asterix-app/src/main/resources/asterix-metadata.properties b/asterix/asterix-app/src/main/resources/asterix-metadata.properties
deleted file mode 100644
index e9ccc63..0000000
--- a/asterix/asterix-app/src/main/resources/asterix-metadata.properties
+++ /dev/null
@@ -1,4 +0,0 @@
-MetadataNode=nc1
-NewUniverse=true
-nc1.stores=/tmp/nc1data/
-nc2.stores=/tmp/nc2data/, /tmp/nc2data1/
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
deleted file mode 100644
index 04f1aae..0000000
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/aql/TestsUtils.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package edu.uci.ics.asterix.test.aql;
-
-import static org.junit.Assert.fail;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
-
-public class TestsUtils {
-
-    private static final String EXTENSION_AQL_RESULT = "adm";
-
-    /**
-     * Probably does not work well with symlinks.
-     */
-    public static boolean deleteRec(File path) {
-        if (path.isDirectory()) {
-            for (File f : path.listFiles()) {
-                if (!deleteRec(f)) {
-                    return false;
-                }
-            }
-        }
-        return path.delete();
-    }
-
-    public static void runScriptAndCompareWithResult(File scriptFile, PrintWriter print, File expectedFile,
-            File actualFile) throws Exception {
-        BufferedReader readerExpected = new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile),
-                "UTF-8"));
-        BufferedReader readerActual = new BufferedReader(
-                new InputStreamReader(new FileInputStream(actualFile), "UTF-8"));
-        String lineExpected, lineActual;
-        int num = 1;
-        try {
-            while ((lineExpected = readerExpected.readLine()) != null) {
-                lineActual = readerActual.readLine();
-                // Assert.assertEquals(lineExpected, lineActual);
-                if (lineActual == null) {
-                    if (lineExpected.isEmpty()) {
-                        continue;
-                    }
-                    throw new Exception("Result for " + scriptFile + " changed at line " + num + ":\n< " + lineExpected
-                            + "\n> ");
-                }
-
-                if (!equalStrings(lineExpected.split("Timestamp")[0], lineActual.split("Timestamp")[0])) {
-                    fail("Result for " + scriptFile + " changed at line " + num + ":\n< " + lineExpected + "\n> "
-                            + lineActual);
-                }
-
-                ++num;
-            }
-            lineActual = readerActual.readLine();
-            // Assert.assertEquals(null, lineActual);
-            if (lineActual != null) {
-                throw new Exception("Result for " + scriptFile + " changed at line " + num + ":\n< \n> " + lineActual);
-            }
-            // actualFile.delete();
-        } finally {
-            readerExpected.close();
-            readerActual.close();
-        }
-
-    }
-
-    private static boolean equalStrings(String s1, String s2) {
-        String[] rowsOne = s1.split("\n");
-        String[] rowsTwo = s2.split("\n");
-
-        for (int i = 0; i < rowsOne.length; i++) {
-            String row1 = rowsOne[i];
-            String row2 = rowsTwo[i];
-
-            if (row1.equals(row2))
-                continue;
-
-            String[] fields1 = row1.split(" ");
-            String[] fields2 = row2.split(" ");
-
-            for (int j = 0; j < fields1.length; j++) {
-                if (fields1[j].equals(fields2[j])) {
-                    continue;
-                } else if (fields1[j].indexOf('.') < 0) {
-                    return false;
-                } else {
-                    fields1[j] = fields1[j].split(",")[0];
-                    fields2[j] = fields2[j].split(",")[0];
-                    Double double1 = Double.parseDouble(fields1[j]);
-                    Double double2 = Double.parseDouble(fields2[j]);
-                    float float1 = (float) double1.doubleValue();
-                    float float2 = (float) double2.doubleValue();
-
-                    if (Math.abs(float1 - float2) == 0)
-                        continue;
-                    else {
-                        return false;
-                    }
-                }
-            }
-        }
-        return true;
-    }
-
-    public static String aqlExtToResExt(String fname) {
-        int dot = fname.lastIndexOf('.');
-        return fname.substring(0, dot + 1) + EXTENSION_AQL_RESULT;
-    }
-
-    public static void writeResultsToFile(File actualFile, JSONObject result) throws IOException, JSONException {
-        BufferedWriter writer = new BufferedWriter(new FileWriter(actualFile));
-        Results res = new Results(result);
-        for (String line : res) {
-            writer.write(line);
-            writer.newLine();
-        }
-        writer.close();
-    }
-
-    public static class Results implements Iterable<String> {
-        private final JSONArray chunks;
-
-        public Results(JSONObject result) throws JSONException {
-            chunks = result.getJSONArray("results");
-        }
-
-        public Iterator<String> iterator() {
-            return new ResultIterator(chunks);
-        }
-    }
-
-    public static class ResultIterator implements Iterator<String> {
-        private final JSONArray chunks;
-
-        private int chunkCounter = 0;
-        private int recordCounter = 0;
-
-        public ResultIterator(JSONArray chunks) {
-            this.chunks = chunks;
-        }
-
-        @Override
-        public boolean hasNext() {
-            JSONArray resultArray;
-            try {
-                resultArray = chunks.getJSONArray(chunkCounter);
-                if (resultArray.getString(recordCounter) != null) {
-                    return true;
-                }
-            } catch (JSONException e) {
-                return false;
-            }
-            return false;
-        }
-
-        @Override
-        public String next() throws NoSuchElementException {
-            JSONArray resultArray;
-            String item = "";
-
-            try {
-                resultArray = chunks.getJSONArray(chunkCounter);
-                item = resultArray.getString(recordCounter);
-                if (item == null) {
-                    throw new NoSuchElementException();
-                }
-                item = item.trim();
-
-                recordCounter++;
-                if (recordCounter >= resultArray.length()) {
-                    chunkCounter++;
-                    recordCounter = 0;
-                }
-            } catch (JSONException e) {
-                throw new NoSuchElementException(e.getMessage());
-            }
-            return item;
-        }
-
-        @Override
-        public void remove() {
-            throw new NotImplementedException();
-        }
-    }
-}
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
deleted file mode 100644
index 56259fa..0000000
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/metadata/MetadataTest.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.test.metadata;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.params.HttpMethodParams;
-import org.apache.commons.io.FileUtils;
-import org.json.JSONObject;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.test.aql.TestsUtils;
-import edu.uci.ics.asterix.testframework.context.TestCaseContext;
-import edu.uci.ics.asterix.testframework.context.TestFileContext;
-import edu.uci.ics.asterix.testframework.xml.TestCase.CompilationUnit;
-
-/**
- * Executes the Metadata tests.
- */
-@RunWith(Parameterized.class)
-public class MetadataTest {
-
-    private TestCaseContext tcCtx;
-
-    private static final Logger LOGGER = Logger.getLogger(MetadataTest.class.getName());
-    private static final String PATH_ACTUAL = "mdtest/";
-    private static final String PATH_BASE = "src/test/resources/metadata/";
-    private static final String TEST_CONFIG_FILE_NAME = "test.properties";
-    private static final String WEB_SERVER_PORT = "19002";
-
-    @BeforeClass
-    public static void setUp() throws Exception {
-        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
-        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, WEB_SERVER_PORT);
-        File outdir = new File(PATH_ACTUAL);
-        outdir.mkdirs();
-
-        File log = new File("asterix_logs");
-        if (log.exists()) {
-            FileUtils.deleteDirectory(log);
-        }
-
-        AsterixHyracksIntegrationUtil.init();
-
-    }
-
-    @AfterClass
-    public static void tearDown() throws Exception {
-        AsterixHyracksIntegrationUtil.deinit();
-        File outdir = new File(PATH_ACTUAL);
-        File[] files = outdir.listFiles();
-        if (files == null || files.length == 0) {
-            outdir.delete();
-        }
-
-        // clean up the files written by the ASTERIX storage manager
-        for (String d : AsterixHyracksIntegrationUtil.ASTERIX_DATA_DIRS) {
-            TestsUtils.deleteRec(new File(d));
-        }
-
-        File log = new File("asterix_logs");
-        if (log.exists()) {
-            FileUtils.deleteDirectory(log);
-        }
-    }
-
-    @Parameters
-    public static Collection<Object[]> tests() throws Exception {
-        Collection<Object[]> testArgs = new ArrayList<Object[]>();
-        TestCaseContext.Builder b = new TestCaseContext.Builder();
-        for (TestCaseContext ctx : b.build(new File(PATH_BASE))) {
-            testArgs.add(new Object[] { ctx });
-        }
-        return testArgs;
-    }
-
-    public MetadataTest(TestCaseContext tcCtx) {
-        this.tcCtx = tcCtx;
-    }
-
-    // Method that reads a DDL/Update/Query File
-    // and returns the contents as a string
-    // This string is later passed to REST API for execution.
-    public String readTestFile(File testFile) throws Exception {
-        BufferedReader reader = new BufferedReader(new FileReader(testFile));
-        String line = null;
-        StringBuilder stringBuilder = new StringBuilder();
-        String ls = System.getProperty("line.separator");
-
-        while ((line = reader.readLine()) != null) {
-            stringBuilder.append(line);
-            stringBuilder.append(ls);
-        }
-
-        return stringBuilder.toString();
-    }
-
-    // To execute DDL and Update statements
-    // create type statement
-    // create dataset statement
-    // create index statement
-    // create dataverse statement
-    // create function statement
-    public void executeDDL(String str) throws Exception {
-        final String url = "http://localhost:19101/ddl";
-
-        // Create an instance of HttpClient.
-        HttpClient client = new HttpClient();
-
-        // Create a method instance.
-        GetMethod method = new GetMethod(url);
-
-        method.setQueryString(new NameValuePair[] { new NameValuePair("ddl", str) });
-
-        // Provide custom retry handler is necessary
-        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
-
-        // Execute the method.
-        int statusCode = client.executeMethod(method);
-
-        // Read the response body as String.
-        String responseBody = method.getResponseBodyAsString();
-
-        // Check if the method was executed successfully.
-        if (statusCode != HttpStatus.SC_OK) {
-            System.err.println("Method failed: " + method.getStatusLine());
-        }
-    }
-
-    // To execute Update statements
-    // Insert and Delete statements are executed here
-    public void executeUpdate(String str) throws Exception {
-        final String url = "http://localhost:19101/update";
-
-        // Create an instance of HttpClient.
-        HttpClient client = new HttpClient();
-
-        // Create a method instance.
-        GetMethod method = new GetMethod(url);
-
-        method.setQueryString(new NameValuePair[] { new NameValuePair("statements", str) });
-
-        // Provide custom retry handler is necessary
-        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
-
-        // Execute the method.
-        int statusCode = client.executeMethod(method);
-
-        // Read the response body as String.
-        String responseBody = method.getResponseBodyAsString();
-
-        // Check if the method was executed successfully.
-        if (statusCode != HttpStatus.SC_OK) {
-            System.err.println("Method failed: " + method.getStatusLine());
-        }
-    }
-
-    // Executes Query and returns results as JSONArray
-    public JSONObject executeQuery(String str) throws Exception {
-
-        final String url = "http://localhost:19101/query";
-
-        // Create an instance of HttpClient.
-        HttpClient client = new HttpClient();
-
-        // Create a method instance.
-        GetMethod method = new GetMethod(url);
-
-        method.setQueryString(new NameValuePair[] { new NameValuePair("query", str) });
-
-        // Provide custom retry handler is necessary
-        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
-
-        JSONObject result = null;
-
-        try {
-            // Execute the method.
-            int statusCode = client.executeMethod(method);
-
-            // Check if the method was executed successfully.
-            if (statusCode != HttpStatus.SC_OK) {
-                System.err.println("Method failed: " + method.getStatusLine());
-            }
-
-            // Read the response body as String.
-            String responseBody = method.getResponseBodyAsString();
-
-            result = new JSONObject(responseBody);
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-            e.printStackTrace();
-        }
-        return result;
-    }
-
-    @Test
-    public void test() throws Exception {
-        List<TestFileContext> testFileCtxs;
-        List<TestFileContext> expectedResultFileCtxs;
-
-        File testFile;
-        File expectedResultFile;
-        String statement;
-
-        int queryCount = 0;
-        JSONObject result;
-
-        List<CompilationUnit> cUnits = tcCtx.getTestCase().getCompilationUnit();
-        for (CompilationUnit cUnit : cUnits) {
-            testFileCtxs = tcCtx.getTestFiles(cUnit);
-            expectedResultFileCtxs = tcCtx.getExpectedResultFiles(cUnit);
-
-            for (TestFileContext ctx : testFileCtxs) {
-                testFile = ctx.getFile();
-                statement = readTestFile(testFile);
-                try {
-                    switch (ctx.getType()) {
-                        case "ddl":
-                            executeDDL(statement);
-                            break;
-                        case "update":
-                            executeUpdate(statement);
-                            break;
-                        case "query":
-                            result = executeQuery(statement);
-                            if (!cUnit.getExpectedError().isEmpty()) {
-                                if (!result.has("error")) {
-                                    throw new Exception("Test \"" + testFile + "\" FAILED!");
-                                }
-                            } else {
-                                expectedResultFile = expectedResultFileCtxs.get(queryCount).getFile();
-
-                                File actualFile = new File(PATH_ACTUAL + File.separator
-                                        + tcCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
-                                        + cUnit.getName() + ".adm");
-
-                                File actualResultFile = tcCtx.getActualResultFile(cUnit, new File(PATH_ACTUAL));
-                                actualResultFile.getParentFile().mkdirs();
-
-                                TestsUtils.writeResultsToFile(actualFile, result);
-
-                                TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
-                                        expectedResultFile, actualFile);
-                            }
-                            queryCount++;
-                            break;
-                        default:
-                            throw new IllegalArgumentException("No statements of type " + ctx.getType());
-                    }
-                } catch (Exception e) {
-                    LOGGER.severe("Test \"" + testFile + "\" FAILED!");
-                    e.printStackTrace();
-                    if (cUnit.getExpectedError().isEmpty()) {
-                        throw new Exception("Test \"" + testFile + "\" FAILED!", e);
-                    }
-                }
-            }
-        }
-    }
-
-}
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
deleted file mode 100644
index 8530ba1..0000000
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/optimizer/OptimizerTest.java
+++ /dev/null
@@ -1,198 +0,0 @@
-package edu.uci.ics.asterix.test.optimizer;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStreamReader;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.logging.Logger;
-
-import org.apache.commons.io.FileUtils;
-import org.junit.AfterClass;
-import org.junit.Assume;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.internal.AssumptionViolatedException;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
-import edu.uci.ics.asterix.api.java.AsterixJavaClient;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.external.dataset.adapter.FileSystemBasedAdapter;
-import edu.uci.ics.asterix.external.util.IdentitiyResolverFactory;
-import edu.uci.ics.asterix.test.base.AsterixTestHelper;
-import edu.uci.ics.asterix.test.common.TestHelper;
-
-@RunWith(Parameterized.class)
-public class OptimizerTest {
-
-    private static final Logger LOGGER = Logger.getLogger(OptimizerTest.class.getName());
-
-    private static final String SEPARATOR = File.separator;
-    private static final String EXTENSION_QUERY = "aql";
-    private static final String EXTENSION_RESULT = "plan";
-    private static final String FILENAME_IGNORE = "ignore.txt";
-    private static final String FILENAME_ONLY = "only.txt";
-    private static final String PATH_BASE = "src" + SEPARATOR + "test" + SEPARATOR + "resources" + SEPARATOR
-            + "optimizerts" + SEPARATOR;
-    private static final String PATH_QUERIES = PATH_BASE + "queries" + SEPARATOR;
-    private static final String PATH_EXPECTED = PATH_BASE + "results" + SEPARATOR;
-    private static final String PATH_ACTUAL = "opttest" + SEPARATOR;
-
-    private static final ArrayList<String> ignore = AsterixTestHelper.readFile(FILENAME_IGNORE, PATH_BASE);
-    private static final ArrayList<String> only = AsterixTestHelper.readFile(FILENAME_ONLY, PATH_BASE);
-    private static final String TEST_CONFIG_FILE_NAME = "asterix-metadata.properties";
-
-    @BeforeClass
-    public static void setUp() throws Exception {
-        // File outdir = new File(PATH_ACTUAL);
-        // outdir.mkdirs();
-
-        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
-        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, "19002");
-        File outdir = new File(PATH_ACTUAL);
-        outdir.mkdirs();
-        
-        File log = new File("asterix_logs");
-        if (log.exists()) {
-            FileUtils.deleteDirectory(log); 
-        }
-        
-        AsterixHyracksIntegrationUtil.init();
-        // Set the node resolver to be the identity resolver that expects node names 
-        // to be node controller ids; a valid assumption in test environment. 
-        System.setProperty(FileSystemBasedAdapter.NODE_RESOLVER_FACTORY_PROPERTY,
-                IdentitiyResolverFactory.class.getName());
-    }
-
-    @AfterClass
-    public static void tearDown() throws Exception {
-        // _bootstrap.stop();
-        File outdir = new File(PATH_ACTUAL);
-        File[] files = outdir.listFiles();
-        if (files == null || files.length == 0) {
-            outdir.delete();
-        }
-        
-        File log = new File("asterix_logs");
-        if (log.exists()) {
-            FileUtils.deleteDirectory(log); 
-        }
-    }
-
-    private static void suiteBuild(File dir, Collection<Object[]> testArgs, String path) {
-        for (File file : dir.listFiles()) {
-            if (file.isDirectory() && !file.getName().startsWith(".")) {
-                suiteBuild(file, testArgs, path + file.getName() + SEPARATOR);
-            }
-            if (file.isFile() && file.getName().endsWith(EXTENSION_QUERY)
-            // && !ignore.contains(path + file.getName())
-            ) {
-                String resultFileName = AsterixTestHelper.extToResExt(file.getName(), EXTENSION_RESULT);
-                File expectedFile = new File(PATH_EXPECTED + path + resultFileName);
-                File actualFile = new File(PATH_ACTUAL + SEPARATOR + path.replace(SEPARATOR, "_") + resultFileName);
-                testArgs.add(new Object[] { file, expectedFile, actualFile });
-            }
-        }
-    }
-
-    @Parameters
-    public static Collection<Object[]> tests() {
-        Collection<Object[]> testArgs = new ArrayList<Object[]>();
-        suiteBuild(new File(PATH_QUERIES), testArgs, "");
-        return testArgs;
-    }
-
-    private File actualFile;
-    private File expectedFile;
-    private File queryFile;
-
-    public OptimizerTest(File queryFile, File expectedFile, File actualFile) {
-        this.queryFile = queryFile;
-        this.expectedFile = expectedFile;
-        this.actualFile = actualFile;
-    }
-
-    @Test
-    public void test() throws Exception {
-        try {
-            String queryFileShort = queryFile.getPath().substring(PATH_QUERIES.length())
-                    .replace(SEPARATOR.charAt(0), '/');
-            if (!only.isEmpty()) {
-                boolean toRun = TestHelper.isInPrefixList(only, queryFileShort);
-                if (!toRun) {
-                    LOGGER.info("SKIP TEST: \"" + queryFile.getPath()
-                            + "\" \"only.txt\" not empty and not in \"only.txt\".");
-                }
-                Assume.assumeTrue(toRun);
-            }
-            boolean skipped = TestHelper.isInPrefixList(ignore, queryFileShort);
-            if (skipped) {
-                LOGGER.info("SKIP TEST: \"" + queryFile.getPath() + "\" in \"ignore.txt\".");
-            }
-            Assume.assumeTrue(!skipped);
-
-            LOGGER.severe("RUN TEST: \"" + queryFile.getPath() + "\"");
-            Reader query = new BufferedReader(new InputStreamReader(new FileInputStream(queryFile), "UTF-8"));
-            PrintWriter plan = new PrintWriter(actualFile);
-            AsterixJavaClient asterix = new AsterixJavaClient(
-                    AsterixHyracksIntegrationUtil.getHyracksClientConnection(), query, plan);
-            try {
-                asterix.compile(true, false, false, true, true, false, false);
-            } catch (AsterixException e) {
-                plan.close();
-                query.close();
-                throw new Exception("Compile ERROR for " + queryFile + ": " + e.getMessage(), e);
-            }
-            plan.close();
-            query.close();
-
-            BufferedReader readerExpected = new BufferedReader(new InputStreamReader(new FileInputStream(expectedFile),
-                    "UTF-8"));
-            BufferedReader readerActual = new BufferedReader(new InputStreamReader(new FileInputStream(actualFile),
-                    "UTF-8"));
-
-            String lineExpected, lineActual;
-            int num = 1;
-            try {
-                while ((lineExpected = readerExpected.readLine()) != null) {
-                    lineActual = readerActual.readLine();
-                    // Assert.assertEquals(lineExpected, lineActual);
-                    if (lineActual == null) {
-                        throw new Exception("Result for " + queryFile + " changed at line " + num + ":\n< "
-                                + lineExpected + "\n> ");
-                    }
-                    if (!lineExpected.equals(lineActual)) {
-                        throw new Exception("Result for " + queryFile + " changed at line " + num + ":\n< "
-                                + lineExpected + "\n> " + lineActual);
-                    }
-                    ++num;
-                }
-                lineActual = readerActual.readLine();
-                // Assert.assertEquals(null, lineActual);
-                if (lineActual != null) {
-                    throw new Exception("Result for " + queryFile + " changed at line " + num + ":\n< \n> "
-                            + lineActual);
-                }
-                LOGGER.severe("Test \"" + queryFile.getPath() + "\" PASSED!");
-                actualFile.delete();
-            } finally {
-                readerExpected.close();
-                readerActual.close();
-            }
-        } catch (Exception e) {
-            if (!(e instanceof AssumptionViolatedException)) {
-                LOGGER.severe("Test \"" + queryFile.getPath() + "\" FAILED!");
-                throw new Exception("Test \"" + queryFile.getPath() + "\" FAILED!", e);
-            } else {
-                throw e;
-            }
-        }
-    }
-}
diff --git a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/ExecutionTest.java b/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/ExecutionTest.java
deleted file mode 100644
index 0dbf6d4..0000000
--- a/asterix/asterix-app/src/test/java/edu/uci/ics/asterix/test/runtime/ExecutionTest.java
+++ /dev/null
@@ -1,284 +0,0 @@
-package edu.uci.ics.asterix.test.runtime;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.logging.Logger;
-
-import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
-import org.apache.commons.httpclient.HttpClient;
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.httpclient.NameValuePair;
-import org.apache.commons.httpclient.methods.GetMethod;
-import org.apache.commons.httpclient.params.HttpMethodParams;
-import org.apache.commons.io.FileUtils;
-import org.json.JSONObject;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
-import edu.uci.ics.asterix.api.common.AsterixHyracksIntegrationUtil;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.external.dataset.adapter.FileSystemBasedAdapter;
-import edu.uci.ics.asterix.external.util.IdentitiyResolverFactory;
-import edu.uci.ics.asterix.test.aql.TestsUtils;
-import edu.uci.ics.asterix.testframework.context.TestCaseContext;
-import edu.uci.ics.asterix.testframework.context.TestFileContext;
-import edu.uci.ics.asterix.testframework.xml.TestCase.CompilationUnit;
-
-/**
- * Runs the runtime test cases under 'asterix-app/src/test/resources/runtimets'.
- */
-@RunWith(Parameterized.class)
-public class ExecutionTest {
-    private static final String PATH_ACTUAL = "rttest/";
-    private static final String PATH_BASE = "src/test/resources/runtimets/";
-
-    private static final String TEST_CONFIG_FILE_NAME = "test.properties";
-    private static final String[] ASTERIX_DATA_DIRS = new String[] { "nc1data", "nc2data" };
-
-    private static final Logger LOGGER = Logger.getLogger(ExecutionTest.class.getName());
-
-    // private static NCBootstrapImpl _bootstrap = new NCBootstrapImpl();
-
-    @BeforeClass
-    public static void setUp() throws Exception {
-        System.setProperty(GlobalConfig.CONFIG_FILE_PROPERTY, TEST_CONFIG_FILE_NAME);
-        System.setProperty(GlobalConfig.WEB_SERVER_PORT_PROPERTY, "19002");
-        File outdir = new File(PATH_ACTUAL);
-        outdir.mkdirs();
-
-        File log = new File("asterix_logs");
-        if (log.exists()) {
-            FileUtils.deleteDirectory(log);
-        }
-
-        AsterixHyracksIntegrationUtil.init();
-
-        // TODO: Uncomment when hadoop version is upgraded and adapters are
-        // ported. 
-        HDFSCluster.getInstance().setup();
-
-        // Set the node resolver to be the identity resolver that expects node names 
-        // to be node controller ids; a valid assumption in test environment. 
-        System.setProperty(FileSystemBasedAdapter.NODE_RESOLVER_FACTORY_PROPERTY,
-                IdentitiyResolverFactory.class.getName());
-    }
-
-    @AfterClass
-    public static void tearDown() throws Exception {
-        AsterixHyracksIntegrationUtil.deinit();
-        File outdir = new File(PATH_ACTUAL);
-        File[] files = outdir.listFiles();
-        if (files == null || files.length == 0) {
-            outdir.delete();
-        }
-        // clean up the files written by the ASTERIX storage manager
-        for (String d : ASTERIX_DATA_DIRS) {
-            TestsUtils.deleteRec(new File(d));
-        }
-
-        File log = new File("asterix_logs");
-        if (log.exists()) {
-            FileUtils.deleteDirectory(log);
-        }
-        HDFSCluster.getInstance().cleanup();
-    }
-
-    @Parameters
-    public static Collection<Object[]> tests() throws Exception {
-        Collection<Object[]> testArgs = new ArrayList<Object[]>();
-        TestCaseContext.Builder b = new TestCaseContext.Builder();
-        for (TestCaseContext ctx : b.build(new File(PATH_BASE))) {
-            testArgs.add(new Object[] { ctx });
-        }
-        return testArgs;
-    }
-
-    private TestCaseContext tcCtx;
-
-    public ExecutionTest(TestCaseContext tcCtx) {
-        this.tcCtx = tcCtx;
-    }
-
-    // Method that reads a DDL/Update/Query File
-    // and returns the contents as a string
-    // This string is later passed to REST API for execution.
-    public String readTestFile(File testFile) throws Exception {
-        BufferedReader reader = new BufferedReader(new FileReader(testFile));
-        String line = null;
-        StringBuilder stringBuilder = new StringBuilder();
-        String ls = System.getProperty("line.separator");
-
-        while ((line = reader.readLine()) != null) {
-            stringBuilder.append(line);
-            stringBuilder.append(ls);
-        }
-
-        return stringBuilder.toString();
-    }
-
-    // To execute DDL and Update statements
-    // create type statement
-    // create dataset statement
-    // create index statement
-    // create dataverse statement
-    // create function statement
-    public void executeDDL(String str) throws Exception {
-        final String url = "http://localhost:19101/ddl";
-
-        // Create an instance of HttpClient.
-        HttpClient client = new HttpClient();
-
-        // Create a method instance.
-        GetMethod method = new GetMethod(url);
-
-        method.setQueryString(new NameValuePair[] { new NameValuePair("ddl", str) });
-
-        // Provide custom retry handler is necessary
-        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
-
-        // Execute the method.
-        int statusCode = client.executeMethod(method);
-
-        // Check if the method was executed successfully.
-        if (statusCode != HttpStatus.SC_OK) {
-            System.err.println("Method failed: " + method.getStatusLine());
-        }
-    }
-
-    // To execute Update statements
-    // Insert and Delete statements are executed here
-    public void executeUpdate(String str) throws Exception {
-        final String url = "http://localhost:19101/update";
-
-        // Create an instance of HttpClient.
-        HttpClient client = new HttpClient();
-
-        // Create a method instance.
-        GetMethod method = new GetMethod(url);
-
-        method.setQueryString(new NameValuePair[] { new NameValuePair("statements", str) });
-
-        // Provide custom retry handler is necessary
-        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
-
-        // Execute the method.
-        int statusCode = client.executeMethod(method);
-
-        // Check if the method was executed successfully.
-        if (statusCode != HttpStatus.SC_OK) {
-            System.err.println("Method failed: " + method.getStatusLine());
-        }
-    }
-
-    // Executes Query and returns results as JSONArray
-    public JSONObject executeQuery(String str) throws Exception {
-
-        final String url = "http://localhost:19101/query";
-
-        // Create an instance of HttpClient.
-        HttpClient client = new HttpClient();
-
-        // Create a method instance.
-        GetMethod method = new GetMethod(url);
-
-        method.setQueryString(new NameValuePair[] { new NameValuePair("query", str) });
-
-        // Provide custom retry handler is necessary
-        method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(3, false));
-
-        JSONObject result = null;
-
-        try {
-            // Execute the method.
-            int statusCode = client.executeMethod(method);
-
-            // Check if the method was executed successfully.
-            if (statusCode != HttpStatus.SC_OK) {
-                System.err.println("Method failed: " + method.getStatusLine());
-            }
-
-            // Read the response body as String.
-            String responseBody = method.getResponseBodyAsString();
-
-            result = new JSONObject(responseBody);
-        } catch (Exception e) {
-            System.out.println(e.getMessage());
-            e.printStackTrace();
-        }
-        return result;
-    }
-
-    @Test
-    public void test() throws Exception {
-        List<TestFileContext> testFileCtxs;
-        List<TestFileContext> expectedResultFileCtxs;
-
-        File testFile;
-        File expectedResultFile;
-        String statement;
-
-        int queryCount = 0;
-        JSONObject result;
-
-        List<CompilationUnit> cUnits = tcCtx.getTestCase().getCompilationUnit();
-        for (CompilationUnit cUnit : cUnits) {
-            LOGGER.info("[TEST]: " + tcCtx.getTestCase().getFilePath() + "/" + cUnit.getName());
-
-            testFileCtxs = tcCtx.getTestFiles(cUnit);
-            expectedResultFileCtxs = tcCtx.getExpectedResultFiles(cUnit);
-
-            for (TestFileContext ctx : testFileCtxs) {
-                testFile = ctx.getFile();
-                statement = readTestFile(testFile);
-                try {
-                    switch (ctx.getType()) {
-                        case "ddl":
-                            executeDDL(statement);
-                            break;
-                        case "update":
-                            executeUpdate(statement);
-                            break;
-                        case "query":
-                            result = executeQuery(statement);
-                            if (!cUnit.getExpectedError().isEmpty()) {
-                                if (!result.has("error")) {
-                                    throw new Exception("Test \"" + testFile + "\" FAILED!");
-                                }
-                            } else {
-                                expectedResultFile = expectedResultFileCtxs.get(queryCount).getFile();
-
-                                File actualFile = new File(PATH_ACTUAL + File.separator
-                                        + tcCtx.getTestCase().getFilePath().replace(File.separator, "_") + "_"
-                                        + cUnit.getName() + ".adm");
-
-                                File actualResultFile = tcCtx.getActualResultFile(cUnit, new File(PATH_ACTUAL));
-                                actualResultFile.getParentFile().mkdirs();
-
-                                TestsUtils.writeResultsToFile(actualFile, result);
-
-                                TestsUtils.runScriptAndCompareWithResult(testFile, new PrintWriter(System.err),
-                                        expectedResultFile, actualFile);
-                            }
-                            queryCount++;
-                            break;
-                        default:
-                            throw new IllegalArgumentException("No statements of type " + ctx.getType());
-                    }
-                } catch (Exception e) {
-                    if (cUnit.getExpectedError().isEmpty()) {
-                        throw new Exception("Test \"" + testFile + "\" FAILED!", e);
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/asterix/asterix-app/src/test/resources/logging.properties b/asterix/asterix-app/src/test/resources/logging.properties
deleted file mode 100644
index deb88307..0000000
--- a/asterix/asterix-app/src/test/resources/logging.properties
+++ /dev/null
@@ -1,65 +0,0 @@
-############################################################
-#  	Default Logging Configuration File
-#
-# You can use a different file by specifying a filename
-# with the java.util.logging.config.file system property.  
-# For example java -Djava.util.logging.config.file=myfile
-############################################################
-
-############################################################
-#  	Global properties
-############################################################
-
-# "handlers" specifies a comma separated list of log Handler 
-# classes.  These handlers will be installed during VM startup.
-# Note that these classes must be on the system classpath.
-# By default we only configure a ConsoleHandler, which will only
-# show messages at the INFO and above levels.
-
-handlers= java.util.logging.ConsoleHandler
-
-# To also add the FileHandler, use the following line instead.
-
-# handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
-
-# Default global logging level.
-# This specifies which kinds of events are logged across
-# all loggers.  For any given facility this global level
-# can be overriden by a facility specific level
-# Note that the ConsoleHandler also has a separate level
-# setting to limit messages printed to the console.
-
-.level= WARNING
-# .level= INFO
-# .level= FINE
-# .level = FINEST
-
-############################################################
-# Handler specific properties.
-# Describes specific configuration info for Handlers.
-############################################################
-
-# default file output is in user's home directory.
-
-# java.util.logging.FileHandler.pattern = %h/java%u.log
-# java.util.logging.FileHandler.limit = 50000
-# java.util.logging.FileHandler.count = 1
-# java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
-
-# Limit the message that are printed on the console to FINE and above.
-
-java.util.logging.ConsoleHandler.level = FINE
-java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
-
-
-############################################################
-# Facility specific properties.
-# Provides extra control for each logger.
-############################################################
-
-# For example, set the com.xyz.foo logger to only log SEVERE
-# messages:
-
-#edu.uci.ics.asterix.level = FINE
-#edu.uci.ics.algebricks.level = FINE
-#edu.uci.ics.hyracks.level = INFO
diff --git a/asterix/asterix-app/src/test/resources/metadata/testsuite.xml b/asterix/asterix-app/src/test/resources/metadata/testsuite.xml
deleted file mode 100644
index d4fb915..0000000
--- a/asterix/asterix-app/src/test/resources/metadata/testsuite.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-<test-suite xmlns="urn:xml.testframework.asterix.ics.uci.edu" ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql">
-  <test-group name="basic">
-    <test-case FilePath="basic">
-      <compilation-unit name="meta01">
-        <output-dir compare="Text">meta01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta02">
-        <output-dir compare="Text">meta02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta03">
-        <output-dir compare="Text">meta03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta04">
-        <output-dir compare="Text">meta04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta05">
-        <output-dir compare="Text">meta05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta06">
-        <output-dir compare="Text">meta06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta07">
-        <output-dir compare="Text">meta07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta08">
-        <output-dir compare="Text">meta08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta09">
-        <output-dir compare="Text">meta09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta10">
-        <output-dir compare="Text">meta10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta11">
-        <output-dir compare="Text">meta11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta12">
-        <output-dir compare="Text">meta12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta13">
-        <output-dir compare="Text">meta13</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta14">
-        <output-dir compare="Text">meta14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta15">
-        <output-dir compare="Text">meta15</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta16">
-        <output-dir compare="Text">meta16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta17">
-        <output-dir compare="Text">meta17</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta18">
-        <output-dir compare="Text">meta18</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta19">
-        <output-dir compare="Text">meta19</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta20">
-        <output-dir compare="Text">meta20</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="meta21">
-        <output-dir compare="Text">meta21</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="metadata_dataset">
-        <output-dir compare="Text">metadata_dataset</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="metadata_dataverse">
-        <output-dir compare="Text">metadata_dataverse</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="metadata_datatype">
-        <output-dir compare="Text">metadata_datatype</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="metadata_index">
-        <output-dir compare="Text">metadata_index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="metadata_node">
-        <output-dir compare="Text">metadata_node</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="metadata_nodegroup">
-        <output-dir compare="Text">metadata_nodegroup</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="issue_251_dataset_hint_2">
-        <output-dir compare="Text">issue_251_dataset_hint_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="issue_251_dataset_hint_3">
-        <output-dir compare="Text">issue_251_dataset_hint_3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="basic">
-      <compilation-unit name="issue_251_dataset_hint_4">
-        <output-dir compare="Text">issue_251_dataset_hint_4</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="exception">
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_1">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_2">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_3">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_4">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_5">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_6">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_7">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_239_drop_system_dataset_8">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_251_dataset_hint_error_1">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="exception">
-      <compilation-unit name="issue_251_dataset_hint_error_2">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="transaction">
-    <test-case FilePath="transaction">
-      <compilation-unit name="failure_previous_success">
-        <output-dir compare="Text">failure_previous_success</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-      <compilation-unit name="verify_failure_previous_success">
-        <output-dir compare="Text">verify_failure_previous_success</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="transaction">
-      <compilation-unit name="failure_subsequent_no_execution">
-        <output-dir compare="Text">failure_subsequent_no_execution</output-dir>
-        <expected-error>MetadataException</expected-error>
-      </compilation-unit>
-      <compilation-unit name="verify_failure_subsequent_no_execution">
-        <output-dir compare="Text">verify_failure_subsequent_no_execution</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-</test-suite>
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-multipred.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-multipred.plan
deleted file mode 100644
index 5a5b715..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-multipred.plan
+++ /dev/null
@@ -1,18 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$15(ASC)]  |PARTITIONED|
-                      -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                        -- ASSIGN  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_01.plan
deleted file mode 100644
index c81244a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_01.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- HYBRID_HASH_JOIN [$$7][$$10]  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-          -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- DATASOURCE_SCAN  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_02.plan
deleted file mode 100644
index abbed4a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join-neg_02.plan
+++ /dev/null
@@ -1,18 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- HYBRID_HASH_JOIN [$$9][$$8]  |PARTITIONED|
-          -- HASH_PARTITION_EXCHANGE [$$9]  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_01.plan
deleted file mode 100644
index 0f3828c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_01.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- DATASOURCE_SCAN  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_02.plan
deleted file mode 100644
index c1c1f33..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_02.plan
+++ /dev/null
@@ -1,14 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$9]  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_03.plan
deleted file mode 100644
index 2ecd027..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_03.plan
+++ /dev/null
@@ -1,16 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$11]  |PARTITIONED|
-                    -- ASSIGN  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
deleted file mode 100644
index 2bc4b23..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_04.plan
+++ /dev/null
@@ -1,16 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
-                    -- ASSIGN  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_05.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_05.plan
deleted file mode 100644
index fa60146..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-equi-join_05.plan
+++ /dev/null
@@ -1,11 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_01.plan
deleted file mode 100644
index 0f0c06b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_01.plan
+++ /dev/null
@@ -1,13 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- DATASOURCE_SCAN  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_02.plan
deleted file mode 100644
index 5cb2903..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-ge-join_02.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_01.plan
deleted file mode 100644
index 0f0c06b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_01.plan
+++ /dev/null
@@ -1,13 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- DATASOURCE_SCAN  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_02.plan
deleted file mode 100644
index 5cb2903..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-gt-join_02.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_01.plan
deleted file mode 100644
index 0f0c06b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_01.plan
+++ /dev/null
@@ -1,13 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- DATASOURCE_SCAN  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_02.plan
deleted file mode 100644
index 5cb2903..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-le-join_02.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_01.plan
deleted file mode 100644
index 0f0c06b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_01.plan
+++ /dev/null
@@ -1,13 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- DATASOURCE_SCAN  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_02.plan
deleted file mode 100644
index 5cb2903..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/primary-lt-join_02.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- BROADCAST_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
deleted file mode 100644
index be64ee5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multiindex.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$29(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- BROADCAST_EXCHANGE  |PARTITIONED|
-                              -- STREAM_PROJECT  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- BTREE_SEARCH  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multipred.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multipred.plan
deleted file mode 100644
index 96632a5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join-multipred.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_01.plan
deleted file mode 100644
index fac45f2..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_01.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
deleted file mode 100644
index fac45f2..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_02.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
deleted file mode 100644
index fac45f2..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index-join/secondary-equi-join_03.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-01.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-01.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-02.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-02.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-03.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-03.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-04.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-04.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-05.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-05.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-05.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-06.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-06.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-06.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-07.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-07.plan
deleted file mode 100644
index 426a99d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-07.plan
+++ /dev/null
@@ -1,9 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- DATASOURCE_SCAN  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-08.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-08.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-08.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-09.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-09.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-09.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-10.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-10.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-10.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-11.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-11.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-11.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-12.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-12.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-12.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-13.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-13.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-13.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-14.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-14.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-14.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-15.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-15.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-15.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-16.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-16.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-16.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-17.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-17.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-17.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-18.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-18.plan
deleted file mode 100644
index a78e43f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-18.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-19.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-19.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-19.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-20.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-20.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-20.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-21.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-21.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-21.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-22.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-22.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-22.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-23.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-23.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-23.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-24.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-24.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-24.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-25.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-25.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-25.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-26.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-26.plan
deleted file mode 100644
index 50b1c04..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-26.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- BTREE_SEARCH  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-27.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-27.plan
deleted file mode 100644
index 40853fa..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-27.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-28.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-28.plan
deleted file mode 100644
index 5021595..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-28.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-29.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-29.plan
deleted file mode 100644
index 5021595..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-29.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-30.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-30.plan
deleted file mode 100644
index 5021595..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-primary-30.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-31.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-31.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-31.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-32.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-32.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-32.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-33.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-34.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-35.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-36.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-37.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-37.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-37.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-38.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-38.plan
deleted file mode 100644
index 2110116..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-38.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-39.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-39.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-39.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-40.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-41.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-41.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-41.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-42.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-43.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-44.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
deleted file mode 100644
index 7087a22..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-45.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
deleted file mode 100644
index 7087a22..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-46.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-47.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-48.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
deleted file mode 100644
index 7087a22..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-49.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-50.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-50.plan
deleted file mode 100644
index 7087a22..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-50.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
deleted file mode 100644
index 7087a22..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-51.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
deleted file mode 100644
index a48d23a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-52.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
deleted file mode 100644
index a48d23a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-53.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
deleted file mode 100644
index a48d23a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-54.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
deleted file mode 100644
index a48d23a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-55.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
deleted file mode 100644
index f18d0ad..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-56.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$12(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
deleted file mode 100644
index f18d0ad..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-57.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$12(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
deleted file mode 100644
index 5b0ae2a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-58.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
deleted file mode 100644
index 7087a22..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/btree-index/btree-secondary-59.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-complex.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-complex.plan
deleted file mode 100644
index 8d2b4d8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-complex.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-simple.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-simple.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/consolidate-selects-simple.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/count-tweets.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/count-tweets.plan
deleted file mode 100644
index f24833e..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/count-tweets.plan
+++ /dev/null
@@ -1,27 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$14]  |PARTITIONED|
-                  {
-                    -- AGGREGATE  |LOCAL|
-                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                  }
-            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$14(ASC)] HASH:[$$14]  |PARTITIONED|
-              -- PRE_CLUSTERED_GROUP_BY[$$4]  |PARTITIONED|
-                      {
-                        -- AGGREGATE  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                      }
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$4(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- UNNEST  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
deleted file mode 100644
index a1242ff..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/cust_group_no_agg.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- SORT_MERGE_EXCHANGE [$$1(ASC) ]  |PARTITIONED|
-    -- PRE_CLUSTERED_GROUP_BY[$$6]  |PARTITIONED|
-            {
-              -- AGGREGATE  |LOCAL|
-                -- NESTED_TUPLE_SOURCE  |LOCAL|
-            }
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STABLE_SORT [$$6(ASC)]  |PARTITIONED|
-          -- HASH_PARTITION_EXCHANGE [$$6]  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- DATASOURCE_SCAN  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
deleted file mode 100644
index 80f0a9d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/denorm-cust-order.plan
+++ /dev/null
@@ -1,27 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$16]  |PARTITIONED|
-                  {
-                    -- AGGREGATE  |LOCAL|
-                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                  }
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- HYBRID_HASH_JOIN [$$16][$$19]  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$19]  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/fj-phase1.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/fj-phase1.plan
deleted file mode 100644
index 0b44c4d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/fj-phase1.plan
+++ /dev/null
@@ -1,56 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- PRE_CLUSTERED_GROUP_BY[$$23]  |PARTITIONED|
-                    {
-                      -- AGGREGATE  |LOCAL|
-                        -- STREAM_SELECT  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                    }
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$23(ASC), $$6(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$23]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$1][$$6]  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$1]  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- UNNEST  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$6]  |PARTITIONED|
-                            -- RUNNING_AGGREGATE  |PARTITIONED|
-                              -- STREAM_PROJECT  |PARTITIONED|
-                                -- SORT_MERGE_EXCHANGE [$$24(DESC) ]  |PARTITIONED|
-                                  -- STABLE_SORT [$$24(DESC)]  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- PRE_CLUSTERED_GROUP_BY[$$30]  |PARTITIONED|
-                                              {
-                                                -- AGGREGATE  |LOCAL|
-                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                              }
-                                        -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$30(ASC)] HASH:[$$30]  |PARTITIONED|
-                                          -- PRE_CLUSTERED_GROUP_BY[$$5]  |PARTITIONED|
-                                                  {
-                                                    -- AGGREGATE  |LOCAL|
-                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                  }
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- STABLE_SORT [$$5(ASC)]  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- STREAM_PROJECT  |PARTITIONED|
-                                                    -- UNNEST  |PARTITIONED|
-                                                      -- STREAM_PROJECT  |PARTITIONED|
-                                                        -- ASSIGN  |PARTITIONED|
-                                                          -- STREAM_PROJECT  |PARTITIONED|
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check-panic.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check-panic.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check-panic.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
deleted file mode 100644
index 7aa19a6..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-check.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-panic.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-panic.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance-panic.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
deleted file mode 100644
index 7aa19a6..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-edit-distance.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
deleted file mode 100644
index b5ea9d7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-edit-distance.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$7(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
deleted file mode 100644
index f0adce8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard-check.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
deleted file mode 100644
index f0adce8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ngram-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
deleted file mode 100644
index 7aa19a6..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard-check.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/olist-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
deleted file mode 100644
index 7aa19a6..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$8(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard-check.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/ulist-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
deleted file mode 100644
index f0adce8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard-check.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
deleted file mode 100644
index f0adce8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-basic/word-jaccard.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
deleted file mode 100644
index 96697b6..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_01.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$14(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
deleted file mode 100644
index 96697b6..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic-nopanic_02.plan
+++ /dev/null
@@ -1,17 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- STREAM_SELECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- BTREE_SEARCH  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$14(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let-panic.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
deleted file mode 100644
index 504d5bf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-edit-distance-check-let.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$9(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
deleted file mode 100644
index 7ae3ecd..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-let.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
deleted file mode 100644
index db4c5c5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ngram-jaccard-check-multi-let.plan
+++ /dev/null
@@ -1,19 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- BTREE_SEARCH  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
deleted file mode 100644
index f0adce8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/olist-jaccard-check-let.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
deleted file mode 100644
index f0adce8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/ulist-jaccard-check-let.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$10(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
deleted file mode 100644
index 7ae3ecd..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-let.plan
+++ /dev/null
@@ -1,15 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- BTREE_SEARCH  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$11(ASC)]  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
deleted file mode 100644
index db4c5c5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-complex/word-jaccard-check-multi-let.plan
+++ /dev/null
@@ -1,19 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- BTREE_SEARCH  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
deleted file mode 100644
index 73ba563..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance-inline.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- UNION_ALL  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- STREAM_SELECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ASSIGN  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                    -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                      -- STREAM_SELECT  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- SPLIT  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                -- ASSIGN  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_SELECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- NESTED_LOOP  |PARTITIONED|
-                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_SELECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- SPLIT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance.plan
deleted file mode 100644
index 37d4f2c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-edit-distance.plan
+++ /dev/null
@@ -1,52 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- UNION_ALL  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- STREAM_SELECT  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- NESTED_LOOP  |PARTITIONED|
-                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_SELECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- SPLIT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
deleted file mode 100644
index 22cb67b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-edit-distance.plan
+++ /dev/null
@@ -1,52 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- UNION_ALL  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- STREAM_SELECT  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- NESTED_LOOP  |PARTITIONED|
-                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_SELECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- SPLIT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.plan
deleted file mode 100644
index df958f7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
deleted file mode 100644
index 50966d0..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard-inline.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ASSIGN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard.plan
deleted file mode 100644
index 0bb698c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ngram-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
deleted file mode 100644
index 73ba563..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance-inline.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- UNION_ALL  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- STREAM_SELECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ASSIGN  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- BTREE_SEARCH  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                    -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                      -- STREAM_SELECT  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- SPLIT  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- STREAM_PROJECT  |PARTITIONED|
-                                                -- ASSIGN  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_SELECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- NESTED_LOOP  |PARTITIONED|
-                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_SELECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- SPLIT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance.plan
deleted file mode 100644
index 37d4f2c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-edit-distance.plan
+++ /dev/null
@@ -1,52 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- UNION_ALL  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- STREAM_SELECT  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- NESTED_LOOP  |PARTITIONED|
-                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_SELECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- SPLIT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.plan
deleted file mode 100644
index 22cb67b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-edit-distance.plan
+++ /dev/null
@@ -1,52 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- UNION_ALL  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- STREAM_SELECT  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ASSIGN  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- NESTED_LOOP  |PARTITIONED|
-                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_SELECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- SPLIT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.plan
deleted file mode 100644
index 294d740..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
deleted file mode 100644
index 141fd9d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard-inline.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ASSIGN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard.plan
deleted file mode 100644
index a70fe23..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/olist-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.plan
deleted file mode 100644
index 294d740..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
deleted file mode 100644
index 141fd9d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard-inline.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ASSIGN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard.plan
deleted file mode 100644
index a70fe23..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/ulist-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.plan
deleted file mode 100644
index df958f7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-fuzzyeq-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
deleted file mode 100644
index 50966d0..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard-inline.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- BTREE_SEARCH  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                  -- STREAM_PROJECT  |PARTITIONED|
-                                    -- ASSIGN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard.plan
deleted file mode 100644
index 0bb698c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join-noeqjoin/word-jaccard.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ASSIGN  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- BTREE_SEARCH  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$27(ASC)]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_01.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_01.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
deleted file mode 100644
index 2181d95..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_02.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_03.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
deleted file mode 100644
index dc42118..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance-check_04.plan
+++ /dev/null
@@ -1,59 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- BTREE_SEARCH  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_SELECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- SPLIT  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                      -- ASSIGN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- NESTED_LOOP  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_01.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_01.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
deleted file mode 100644
index 2181d95..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_02.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_03.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
deleted file mode 100644
index 43dbff9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-edit-distance_04.plan
+++ /dev/null
@@ -1,59 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- BTREE_SEARCH  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_SELECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- SPLIT  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                      -- ASSIGN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- NESTED_LOOP  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
deleted file mode 100644
index 25c87b0..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_01.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_02.plan
deleted file mode 100644
index 98aa0ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_02.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
deleted file mode 100644
index 98aa0ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-edit-distance_03.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
deleted file mode 100644
index 700ebb7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
deleted file mode 100644
index 69948aa..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$22][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
deleted file mode 100644
index 700ebb7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-fuzzyeq-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_01.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
deleted file mode 100644
index d23a6f5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
deleted file mode 100644
index 1d1cd5f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard-check_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$28][$$18]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_01.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
deleted file mode 100644
index d23a6f5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
deleted file mode 100644
index d1b8f79..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ngram-jaccard_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$28][$$17]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_01.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_01.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
deleted file mode 100644
index 2181d95..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_02.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_03.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
deleted file mode 100644
index dc42118..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance-check_04.plan
+++ /dev/null
@@ -1,59 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- BTREE_SEARCH  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_SELECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- SPLIT  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                      -- ASSIGN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- NESTED_LOOP  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_01.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_01.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
deleted file mode 100644
index 2181d95..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_02.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
deleted file mode 100644
index 63c5436..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_03.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
deleted file mode 100644
index 43dbff9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-edit-distance_04.plan
+++ /dev/null
@@ -1,59 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- BTREE_SEARCH  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_SELECT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- SPLIT  |PARTITIONED|
-                                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                    -- STREAM_PROJECT  |PARTITIONED|
-                                                      -- ASSIGN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ASSIGN  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- NESTED_LOOP  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_SELECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- SPLIT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STREAM_PROJECT  |PARTITIONED|
-                                              -- ASSIGN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_01.plan
deleted file mode 100644
index 98aa0ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_01.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
deleted file mode 100644
index 25c87b0..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_02.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
deleted file mode 100644
index 98aa0ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-edit-distance_03.plan
+++ /dev/null
@@ -1,55 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- UNION_ALL  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- STREAM_SELECT  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_SELECT  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- SPLIT  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STREAM_PROJECT  |PARTITIONED|
-                                                  -- ASSIGN  |PARTITIONED|
-                                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                      -- DATASOURCE_SCAN  |PARTITIONED|
-                                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- NESTED_LOOP  |PARTITIONED|
-                          -- BROADCAST_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_SELECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- SPLIT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_01.plan
deleted file mode 100644
index 4cef1ae..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
deleted file mode 100644
index a21a7b5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
deleted file mode 100644
index 4cef1ae..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-fuzzyeq-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_01.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
deleted file mode 100644
index 6d8460a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
deleted file mode 100644
index 4a4430c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard-check_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_01.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
deleted file mode 100644
index 6d8460a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
deleted file mode 100644
index b6a694e..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/olist-jaccard_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_01.plan
deleted file mode 100644
index 4cef1ae..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
deleted file mode 100644
index a21a7b5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$12]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$12]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
deleted file mode 100644
index 4cef1ae..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-fuzzyeq-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$20][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_01.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
deleted file mode 100644
index 6d8460a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
deleted file mode 100644
index 4a4430c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard-check_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_01.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
deleted file mode 100644
index 6d8460a..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$13]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$13]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
deleted file mode 100644
index 44328ef..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$21][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$23(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
deleted file mode 100644
index b6a694e..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/ulist-jaccard_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$26][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$28(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_01.plan
deleted file mode 100644
index 700ebb7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
deleted file mode 100644
index 69948aa..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$22][$$14]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$14]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
deleted file mode 100644
index 700ebb7..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-fuzzyeq-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$22][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$24(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_01.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
deleted file mode 100644
index b77169d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
deleted file mode 100644
index 1d1cd5f..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard-check_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$28][$$18]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_01.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_01.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
deleted file mode 100644
index d23a6f5..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_02.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$15]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
deleted file mode 100644
index 901e0f4..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_03.plan
+++ /dev/null
@@ -1,28 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$23][$$16]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- BTREE_SEARCH  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$25(ASC)]  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                  -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ASSIGN  |PARTITIONED|
-                                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                          -- DATASOURCE_SCAN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
deleted file mode 100644
index d1b8f79..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/inverted-index-join/word-jaccard_04.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$28][$$17]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- DATASOURCE_SCAN  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- STREAM_SELECT  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- BTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$30(ASC)]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- INVERTED_INDEX_SEARCH  |PARTITIONED|
-                                      -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                        -- STREAM_PROJECT  |PARTITIONED|
-                                          -- ASSIGN  |PARTITIONED|
-                                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
deleted file mode 100644
index 011f8be..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/join-super-key_01.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$17, $$22, $$24][$$19, $$23, $$20]  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$17, $$22, $$24]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- DATASOURCE_SCAN  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$19, $$23, $$20]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
deleted file mode 100644
index 591ddbf..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/join-super-key_02.plan
+++ /dev/null
@@ -1,22 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$17, $$23, $$18][$$19, $$22, $$24]  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$19, $$24]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- DATASOURCE_SCAN  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
deleted file mode 100644
index 7dac263..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/loj-super-key_01.plan
+++ /dev/null
@@ -1,30 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- PRE_CLUSTERED_GROUP_BY[$$22, $$23]  |PARTITIONED|
-                    {
-                      -- AGGREGATE  |LOCAL|
-                        -- STREAM_SELECT  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                    }
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$22(ASC), $$23(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$22, $$23]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$24, $$22, $$28][$$25, $$19, $$20]  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$24, $$22, $$28]  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$25, $$19, $$20]  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
deleted file mode 100644
index 63a3b4e..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/loj-super-key_02.plan
+++ /dev/null
@@ -1,31 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- PRE_CLUSTERED_GROUP_BY[$$22, $$23]  |PARTITIONED|
-                    {
-                      -- AGGREGATE  |LOCAL|
-                        -- STREAM_SELECT  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                    }
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$22(ASC), $$23(ASC)]  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$25, $$22, $$23][$$24, $$19, $$28]  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$19, $$28]  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- STREAM_PROJECT  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
deleted file mode 100644
index f0e1d55..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/nested_loj2.plan
+++ /dev/null
@@ -1,45 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- PRE_CLUSTERED_GROUP_BY[$$25]  |PARTITIONED|
-                    {
-                      -- AGGREGATE  |LOCAL|
-                        -- MICRO_PRE_CLUSTERED_GROUP_BY[$$23]  |LOCAL|
-                                {
-                                  -- AGGREGATE  |LOCAL|
-                                    -- STREAM_SELECT  |LOCAL|
-                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                }
-                          -- STREAM_SELECT  |LOCAL|
-                            -- NESTED_TUPLE_SOURCE  |LOCAL|
-                    }
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$25(ASC), $$23(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$25]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$23][$$20]  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$23]  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- HYBRID_HASH_JOIN [$$25][$$26]  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                  -- HASH_PARTITION_EXCHANGE [$$26]  |PARTITIONED|
-                                    -- ASSIGN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$20]  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- STREAM_PROJECT  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/nested_loj3.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/nested_loj3.plan
deleted file mode 100644
index b68ef76..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/nested_loj3.plan
+++ /dev/null
@@ -1,60 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- PRE_CLUSTERED_GROUP_BY[$$42]  |PARTITIONED|
-                    {
-                      -- AGGREGATE  |LOCAL|
-                        -- MICRO_PRE_CLUSTERED_GROUP_BY[$$40]  |LOCAL|
-                                {
-                                  -- AGGREGATE  |LOCAL|
-                                    -- MICRO_PRE_CLUSTERED_GROUP_BY[$$37, $$38]  |LOCAL|
-                                            {
-                                              -- AGGREGATE  |LOCAL|
-                                                -- STREAM_SELECT  |LOCAL|
-                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                            }
-                                      -- IN_MEMORY_STABLE_SORT [$$37(ASC), $$38(ASC)]  |LOCAL|
-                                        -- STREAM_SELECT  |LOCAL|
-                                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                }
-                          -- IN_MEMORY_STABLE_SORT [$$40(ASC), $$38(ASC)]  |LOCAL|
-                            -- STREAM_SELECT  |LOCAL|
-                              -- NESTED_TUPLE_SOURCE  |LOCAL|
-                    }
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$42(ASC), $$40(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$42]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$48, $$50][$$34, $$35]  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$48, $$50]  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$40][$$37]  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$40]  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- HYBRID_HASH_JOIN [$$42][$$43]  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                      -- HASH_PARTITION_EXCHANGE [$$43]  |PARTITIONED|
-                                        -- ASSIGN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- DATASOURCE_SCAN  |PARTITIONED|
-                                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$37]  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/noncollocated.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/noncollocated.plan
deleted file mode 100644
index f1e1f5d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/noncollocated.plan
+++ /dev/null
@@ -1,21 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$10][$$11]  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$11]  |PARTITIONED|
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-aggreg.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/orders-aggreg.plan
deleted file mode 100644
index f32df8e..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-aggreg.plan
+++ /dev/null
@@ -1,25 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$24]  |PARTITIONED|
-                  {
-                    -- AGGREGATE  |LOCAL|
-                      -- NESTED_TUPLE_SOURCE  |LOCAL|
-                  }
-            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$24(ASC)] HASH:[$$24]  |PARTITIONED|
-              -- PRE_CLUSTERED_GROUP_BY[$$16]  |PARTITIONED|
-                      {
-                        -- AGGREGATE  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                      }
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$16(ASC)]  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- DATASOURCE_SCAN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-composite-index-search.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/orders-composite-index-search.plan
deleted file mode 100644
index 089064b..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-composite-index-search.plan
+++ /dev/null
@@ -1,19 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- BTREE_SEARCH  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STABLE_SORT [$$21(ASC)]  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- BTREE_SEARCH  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-open.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-open.plan
deleted file mode 100644
index 66b693c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search-open.plan
+++ /dev/null
@@ -1,19 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- BTREE_SEARCH  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- BTREE_SEARCH  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search.plan
deleted file mode 100644
index 66b693c..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/orders-index-search.plan
+++ /dev/null
@@ -1,19 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- BTREE_SEARCH  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- STABLE_SORT [$$13(ASC)]  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- BTREE_SEARCH  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/prim-idx-search-open.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/prim-idx-search-open.plan
deleted file mode 100644
index e8b196d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/prim-idx-search-open.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/prim-idx-search.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/prim-idx-search.plan
deleted file mode 100644
index e8b196d..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/prim-idx-search.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- BTREE_SEARCH  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- ASSIGN  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
deleted file mode 100644
index d50a885..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/pull_select_above_eq_join.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- HYBRID_HASH_JOIN [$$18][$$19]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$19]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ASSIGN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- DATASOURCE_SCAN  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
deleted file mode 100644
index 94273ad..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/push-project-through-group.plan
+++ /dev/null
@@ -1,33 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- PRE_CLUSTERED_GROUP_BY[$$15]  |PARTITIONED|
-                    {
-                      -- AGGREGATE  |LOCAL|
-                        -- STREAM_SELECT  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                    }
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- STABLE_SORT [$$15(ASC)]  |PARTITIONED|
-                  -- HASH_PARTITION_EXCHANGE [$$15]  |PARTITIONED|
-                    -- STREAM_PROJECT  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$17][$$16]  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- DATASOURCE_SCAN  |PARTITIONED|
-                                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$16]  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- ASSIGN  |PARTITIONED|
-                                -- STREAM_PROJECT  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/q1.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/q1.plan
deleted file mode 100644
index 2695827..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/q1.plan
+++ /dev/null
@@ -1,20 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- SUBPLAN  |PARTITIONED|
-                      {
-                        -- AGGREGATE  |LOCAL|
-                          -- STREAM_SELECT  |LOCAL|
-                            -- UNNEST  |LOCAL|
-                              -- NESTED_TUPLE_SOURCE  |LOCAL|
-                      }
-                -- STREAM_PROJECT  |PARTITIONED|
-                  -- ASSIGN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- DATASOURCE_SCAN  |PARTITIONED|
-                        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                          -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_01.plan
deleted file mode 100644
index 2f98801..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_01.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- RTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
deleted file mode 100644
index 2f98801..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_02.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- RTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
deleted file mode 100644
index 2f98801..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-index-join/spatial-intersect-point_03.plan
+++ /dev/null
@@ -1,23 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$20(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- RTREE_SEARCH  |PARTITIONED|
-                              -- BROADCAST_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- ASSIGN  |PARTITIONED|
-                                    -- STREAM_PROJECT  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- DATASOURCE_SCAN  |PARTITIONED|
-                                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index-open.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index-open.plan
deleted file mode 100644
index f7382d8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index-open.plan
+++ /dev/null
@@ -1,18 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- RTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index.plan
deleted file mode 100644
index f7382d8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/rtree-secondary-index.plan
+++ /dev/null
@@ -1,18 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_PROJECT  |PARTITIONED|
-          -- STREAM_SELECT  |PARTITIONED|
-            -- STREAM_PROJECT  |PARTITIONED|
-              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                -- BTREE_SEARCH  |PARTITIONED|
-                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- STABLE_SORT [$$22(ASC)]  |PARTITIONED|
-                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STREAM_PROJECT  |PARTITIONED|
-                          -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- RTREE_SEARCH  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_01.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_01.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_02.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_02.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_03.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_03.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_04.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_04.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_05.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_05.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_05.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_06.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_06.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_06.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_07.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_07.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_07.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_08.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_08.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-let-to-edit-distance-check_08.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_01.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_01.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_02.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_02.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_03.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_03.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_04.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_04.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_05.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_05.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_05.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_06.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_06.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_06.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_07.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_07.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_07.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_08.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_08.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/edit-distance-to-edit-distance-check_08.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-edit-distance-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-edit-distance-check.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-edit-distance-check.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-jaccard-check.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-jaccard-check.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/fuzzyeq-to-jaccard-check.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_01.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_01.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_02.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_02.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_03.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_03.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_04.plan
deleted file mode 100644
index c0e93c8..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_04.plan
+++ /dev/null
@@ -1,12 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- STREAM_SELECT  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ASSIGN  |PARTITIONED|
-              -- STREAM_PROJECT  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- DATASOURCE_SCAN  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_05.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_05.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_05.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_06.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_06.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_06.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_07.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_07.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_07.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_08.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_08.plan
deleted file mode 100644
index 4d9d3f9..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-let-to-jaccard-check_08.plan
+++ /dev/null
@@ -1,10 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ASSIGN  |PARTITIONED|
-          -- STREAM_PROJECT  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- DATASOURCE_SCAN  |PARTITIONED|
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_01.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_01.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_01.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_02.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_02.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_02.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_03.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_03.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_03.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_04.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_04.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_04.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_05.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_05.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_05.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_06.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_06.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_06.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_07.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_07.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_07.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_08.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_08.plan
deleted file mode 100644
index ae0d5bb..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/similarity/jaccard-to-jaccard-check_08.plan
+++ /dev/null
@@ -1,8 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_SELECT  |PARTITIONED|
-      -- STREAM_PROJECT  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- DATASOURCE_SCAN  |PARTITIONED|
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterix/asterix-app/src/test/resources/optimizerts/results/unnest_list_in_subplan.plan b/asterix/asterix-app/src/test/resources/optimizerts/results/unnest_list_in_subplan.plan
deleted file mode 100644
index 30a53b3..0000000
--- a/asterix/asterix-app/src/test/resources/optimizerts/results/unnest_list_in_subplan.plan
+++ /dev/null
@@ -1,33 +0,0 @@
--- DISTRIBUTE_RESULT  |PARTITIONED|
-  -- RANDOM_MERGE_EXCHANGE  |PARTITIONED|
-    -- STREAM_PROJECT  |PARTITIONED|
-      -- ASSIGN  |PARTITIONED|
-        -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$20]  |PARTITIONED|
-                  {
-                    -- AGGREGATE  |LOCAL|
-                      -- STREAM_SELECT  |LOCAL|
-                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                  }
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- STABLE_SORT [$$20(ASC), $$18(ASC)]  |PARTITIONED|
-                -- HASH_PARTITION_EXCHANGE [$$20]  |PARTITIONED|
-                  -- STREAM_PROJECT  |PARTITIONED|
-                    -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- HYBRID_HASH_JOIN [$$3][$$22]  |PARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$3]  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- UNNEST  |PARTITIONED|
-                              -- STREAM_PROJECT  |PARTITIONED|
-                                -- ASSIGN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- DATASOURCE_SCAN  |PARTITIONED|
-                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$22]  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ASSIGN  |PARTITIONED|
-                              -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- DATASOURCE_SCAN  |PARTITIONED|
-                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                    -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
deleted file mode 100644
index ebb3d2d..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/constructor/interval/interval.3.query.aql
+++ /dev/null
@@ -1,11 +0,0 @@
-use dataverse test;
-
-let $itv1 := interval-from-date("2010-10-30", "2012-10-21")
-let $itv2 := interval-from-time("03:04:05.678-11:00", "232425267+0200")
-let $itv3 := interval-from-datetime("-1987-11-19T02:43:57.938+08:00", "19991112T124935948-0700")
-let $itv4 := interval-start-from-date("0001-12-27", "P3Y394DT48H398.483S")
-let $itv5 := interval-start-from-time("20:03:20.948", "P60DT48M389.938S")
-let $itv6 := interval-start-from-datetime("-2043-11-19T15:32:39.293", "P439Y3M20DT20H39M58.949S")
-
-return {"interval1": $itv1, "interval2": $itv2, "interval3": $itv3, "interval4": $itv4, "interval5": $itv5, "interval6": $itv6}
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree.aql
deleted file mode 100644
index 85616e4..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree.aql
+++ /dev/null
@@ -1,30 +0,0 @@
-drop dataverse test if exists;
-  
-create dataverse test;
-use dataverse test;
-
-create type MyRecord as closed {
-	id: int32,
-	tweetid: int64,
-	loc: point,
-	time: datetime,
-	text: string
-}
-
-create dataset MyData(MyRecord)
-  primary key id;
-
-create index rtree_index on MyData(loc) type rtree;
-
-load dataset MyData 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/twitter/smalltweets.txt"),("format"="adm")) pre-sorted;
-
-delete $l from dataset MyData where spatial-intersect($l.loc, create-rectangle(create-point(0.0,-100.0), create-point(55.5,50.0))) die after 1000;
-
-write output to nc1:"rttest/failure_delete-rtree.adm";      
-
-for $o in dataset('MyData')
-where spatial-intersect($o.loc, create-rectangle(create-point(0.0,-100.0), create-point(55.5,50.0)))
-order by $o.id
-return {"id":$o.id}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.1.ddl.aql
deleted file mode 100644
index d8ab247..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.1.ddl.aql
+++ /dev/null
@@ -1,17 +0,0 @@
-drop dataverse test if exists;
-  
-create dataverse test;
-
-use dataverse test;
-
-create type MyRecord as closed {
-	id: int32,
-	tweetid: int64,
-	loc: point,
-	time: datetime,
-	text: string
-}
-
-create dataset MyData(MyRecord)
-  primary key id;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.2.update.aql
deleted file mode 100644
index 3556905..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.2.update.aql
+++ /dev/null
@@ -1,8 +0,0 @@
-use dataverse test;
-
-load dataset MyData 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/twitter/smalltweets.txt"),("format"="adm")) pre-sorted;
-
-delete $l from dataset MyData where $l.id>=50 die after 1500;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.3.query.aql
deleted file mode 100644
index b33019b..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete-rtree/delete-rtree.3.query.aql
+++ /dev/null
@@ -1,5 +0,0 @@
-use dataverse test;
-
-for $o in dataset('MyData')
-order by $o.id
-return {"id":$o.id}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete.aql
deleted file mode 100644
index 125fd99..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete.aql
+++ /dev/null
@@ -1,38 +0,0 @@
-drop dataverse test if exists;
-  
-create dataverse test;
-use dataverse test;
-
-create type LineItemType as closed {
-  l_orderkey: int32, 
-  l_partkey: int32, 
-  l_suppkey: int32, 
-  l_linenumber: int32, 
-  l_quantity: int32, 
-  l_extendedprice: double,
-  l_discount: double, 
-  l_tax: double,
-  l_returnflag: string, 
-  l_linestatus: string, 
-  l_shipdate: string,
-  l_commitdate: string, 
-  l_receiptdate: string, 
-  l_shipinstruct: string, 
-  l_shipmode: string, 
-  l_comment: string
-}
-
-create dataset LineItem(LineItemType)
-  primary key l_orderkey, l_linenumber;
-
-load dataset LineItem 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
-
-delete $l from dataset LineItem where $l.l_orderkey>=10 die after 1000;
-
-write output to nc1:"rttest/failure_delete.adm";      
-for $c in dataset('LineItem')
-where $c.l_orderkey>=10
-order by $c.l_orderkey, $c.l_linenumber
-return $c 
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.1.ddl.aql
deleted file mode 100644
index ea29045..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.1.ddl.aql
+++ /dev/null
@@ -1,28 +0,0 @@
-drop dataverse test if exists;
-  
-create dataverse test;
-
-use dataverse test;
-
-create type LineItemType as closed {
-  l_orderkey: int32, 
-  l_partkey: int32, 
-  l_suppkey: int32, 
-  l_linenumber: int32, 
-  l_quantity: int32, 
-  l_extendedprice: double,
-  l_discount: double, 
-  l_tax: double,
-  l_returnflag: string, 
-  l_linestatus: string, 
-  l_shipdate: string,
-  l_commitdate: string, 
-  l_receiptdate: string, 
-  l_shipinstruct: string, 
-  l_shipmode: string, 
-  l_comment: string
-}
-
-create dataset LineItem(LineItemType)
-  primary key l_orderkey, l_linenumber;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.2.update.aql
deleted file mode 100644
index ac2bd60..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.2.update.aql
+++ /dev/null
@@ -1,8 +0,0 @@
-use dataverse test;
-
-load dataset LineItem 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
-
-delete $l from dataset LineItem where $l.l_orderkey>=10 die after 1500;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.3.query.aql
deleted file mode 100644
index 9375d30..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/delete/delete.3.query.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-use dataverse test;
-    
-for $c in dataset('LineItem')
-where $c.l_orderkey>=10
-order by $c.l_orderkey, $c.l_linenumber
-return $c 
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.1.ddl.aql
deleted file mode 100644
index 0cb052d..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.1.ddl.aql
+++ /dev/null
@@ -1,25 +0,0 @@
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type MyRecord as closed {
-	id: int32,
-	tweetid: int64,
-	loc: point,
-	time: datetime,
-	text: string
-}
-
-create type MyMiniRecord as closed {
-  id: int32,
-  loc: point
-}
-
-create dataset MyData(MyRecord)
-  primary key id;
-
-create dataset MyMiniData(MyMiniRecord)
-  primary key id;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.2.update.aql
deleted file mode 100644
index bffd599..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.2.update.aql
+++ /dev/null
@@ -1,11 +0,0 @@
-use dataverse test;
-
-load dataset MyData 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/twitter/smalltweets.txt"),("format"="adm")) pre-sorted;
-
-
-load dataset MyMiniData 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/spatial/spatialData0.json"),("format"="adm")) pre-sorted;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.3.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.3.ddl.aql
deleted file mode 100644
index 3626933..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.3.ddl.aql
+++ /dev/null
@@ -1,5 +0,0 @@
-use dataverse test;
-
-create index rtree_index_loc_0 on MyData(loc) type rtree;
-create index rtree_index_loc on MyMiniData(loc) type rtree;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.4.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.4.update.aql
deleted file mode 100644
index 5874119..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.4.update.aql
+++ /dev/null
@@ -1,23 +0,0 @@
-use dataverse test;
-
-insert into dataset MyMiniData
-(
-	for $m in dataset('MyData')
-	where $m.id<1000
-	return {
-		"id": $m.id,
-		"loc": $m.loc
-	}
-);
-
-insert into dataset MyMiniData
-(
-	for $m in dataset('MyData')
-	where $m.id>=1000
-	die after 1000
-	return {
-		"id": $m.id,
-		"loc": $m.loc
-	}
-);
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.5.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.5.query.aql
deleted file mode 100644
index 6c75ca2..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert-rtree/insert-rtree.5.query.aql
+++ /dev/null
@@ -1,5 +0,0 @@
-use dataverse test;
-
-for $o in dataset('MyMiniData')
-order by $o.id
-return {"id":$o.id}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.1.ddl.aql
deleted file mode 100644
index 7f5844e..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.1.ddl.aql
+++ /dev/null
@@ -1,37 +0,0 @@
-drop dataverse test if exists;
-  
-create dataverse test;
-
-use dataverse test;
-
-create type LineItemType as closed {
-  l_orderkey: int32, 
-  l_partkey: int32, 
-  l_suppkey: int32, 
-  l_linenumber: int32, 
-  l_quantity: double, 
-  l_extendedprice: double,
-  l_discount: double, 
-  l_tax: double,
-  l_returnflag: string, 
-  l_linestatus: string, 
-  l_shipdate: string,
-  l_commitdate: string, 
-  l_receiptdate: string, 
-  l_shipinstruct: string, 
-  l_shipmode: string, 
-  l_comment: string
-}
-
-create type LineIDType as closed {
-  l_orderkey: int32, 
-  l_linenumber: int32, 
-  l_suppkey: int32
-}
-
-create dataset LineItem(LineItemType)
-  primary key l_orderkey, l_linenumber;
-
-create dataset LineID(LineIDType)
-  primary key l_orderkey, l_linenumber;
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.2.update.aql
deleted file mode 100644
index a1bfc0d..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.2.update.aql
+++ /dev/null
@@ -1,32 +0,0 @@
-use dataverse test;
-
-load dataset LineItem 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/tpch0.001/lineitem.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
-
-load dataset LineID 
-using "edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter"
-(("path"="nc1://data/tpch0.001/lineitem_0.tbl"),("format"="delimited-text"),("delimiter"="|")) pre-sorted;
-
-insert into dataset LineID (
-for $l in dataset('LineItem')
-	where $l.l_orderkey<1000
-	return {
-		"l_orderkey": $l.l_orderkey,
-		"l_linenumber": $l.l_linenumber,
-		"l_suppkey": $l.l_partkey
-	}
-);
-
-insert into dataset LineID (
-for $l in dataset('LineItem')
-	where $l.l_orderkey>=1000
-	die after 1000
-	return {
-		"l_orderkey": $l.l_orderkey,
-		"l_linenumber": $l.l_linenumber,
-		"l_suppkey": $l.l_partkey
-	}
-);
-
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.3.query.aql
deleted file mode 100644
index 4a3e056..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/insert/insert.3.query.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-use dataverse test;
-
-for $c in dataset('LineID')
-order by $c.l_orderkey, $c.l_linenumber
-return $c 
-
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree.aql
deleted file mode 100644
index a8d7d37..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree.aql
+++ /dev/null
@@ -1,8 +0,0 @@
-use dataverse test;
-
-write output to nc1:"rttest/failure_verify_delete-rtree.adm";
-
-for $o in dataset('MyData')
-where spatial-intersect($o.loc, create-rectangle(create-point(0.0,-100.0), create-point(55.5,50.0)))
-order by $o.id
-return {"id":$o.id}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.1.ddl.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.1.ddl.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.2.update.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.2.update.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.3.query.aql
deleted file mode 100644
index b33019b..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete-rtree/verify_delete-rtree.3.query.aql
+++ /dev/null
@@ -1,5 +0,0 @@
-use dataverse test;
-
-for $o in dataset('MyData')
-order by $o.id
-return {"id":$o.id}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.1.ddl.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.1.ddl.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.2.update.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.2.update.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.3.query.aql
deleted file mode 100644
index 2a0f3e4..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_delete/verify_delete.3.query.aql
+++ /dev/null
@@ -1,6 +0,0 @@
-use dataverse test;
-
-for $c in dataset('LineItem')
-where $c.l_orderkey>=10
-order by $c.l_orderkey, $c.l_linenumber
-return $c
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.1.ddl.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.1.ddl.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.2.update.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.2.update.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.3.query.aql
deleted file mode 100644
index 6c75ca2..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert-rtree/verify_insert-rtree.3.query.aql
+++ /dev/null
@@ -1,5 +0,0 @@
-use dataverse test;
-
-for $o in dataset('MyMiniData')
-order by $o.id
-return {"id":$o.id}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.1.ddl.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.1.ddl.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.2.update.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.2.update.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.2.update.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.3.query.aql
deleted file mode 100644
index 4cb52c5..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/failure/verify_insert/verify_insert.3.query.aql
+++ /dev/null
@@ -1,5 +0,0 @@
-use dataverse test;
-
-for $c in dataset('LineID')
-order by $c.l_orderkey, $c.l_linenumber
-return $c
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.1.ddl.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.1.ddl.aql
deleted file mode 100644
index e69de29..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/misc/ifthenelse_01/ifthenelse_01.1.ddl.aql
+++ /dev/null
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.3.query.aql
deleted file mode 100644
index 2586d2a..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/accessors/accessors.3.query.aql
+++ /dev/null
@@ -1,12 +0,0 @@
-use dataverse test;
-
-let $c1 := date("2010-10-30")
-let $c2 := datetime("1987-11-19T23:49:23.938")
-let $c3 := date("-1987-11-19")
-let $c4 := date("09280329")
-let $c5 := datetime("19371229T20030628")
-let $c6 := time("12:23:34.930+07:00")
-let $c7 := string("-0003-01-09T23:12:12.39-07:00")
-let $c8 := duration("P3Y73M632DT49H743M3948.94S")
-
-return {"year1": year($c1), "year2": year($c2), "year3": year($c3), "year4": year($c4), "year5": year($c5), "year6": year($c7), "year7": year($c8), "month1": month($c1), "month2": month($c2), "month3": month($c3), "month4": month($c4), "month5": month($c5), "month6": month($c8), "day1": day($c1), "day2": day($c2), "day3": day($c3), "day4": day($c4), "day5": day($c5), "day6": day($c8), "hour1": hour($c2), "hour2": hour($c5), "hour3": hour($c6), "hour4": hour($c8), "min1": minute($c2), "min2": minute($c5), "min3": minute($c6), "min4": minute($c8), "second1": second($c2), "second2": second($c5), "second3": second($c6), "second4": second($c8), "ms1": millisecond($c2), "ms2": millisecond($c5), "ms3": millisecond($c6), "ms4": millisecond($c8)}
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.3.query.aql
deleted file mode 100644
index a3959b0..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/adjust_timezone/adjust_timezone.3.query.aql
+++ /dev/null
@@ -1,7 +0,0 @@
-use dataverse test;
-
-let $t1 := time("20:15:10.327")
-let $dt1 := datetime("2010-10-23T01:12:13.329Z")
-let $s1 := adjust-time-for-timezone($t1, "+0800")
-let $s2 := adjust-datetime-for-timezone($dt1, "-0615")
-return { "string1" : $s1, "string2" : $s2 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.3.query.aql
deleted file mode 100644
index cbf4b7f..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/calendar_duration/calendar_duration.3.query.aql
+++ /dev/null
@@ -1,42 +0,0 @@
-use dataverse test;
-
-let $t1 := datetime("1987-11-19T23:49:23.938")
-let $t2 := date("-1328-10-23")
-let $dr1 := duration("P7382DT39283M3921.329S")
-let $dr2 := duration("-PT63H398212M3219.328S")
-let $dr3 := duration("P1Y90M")
-let $dr4 := duration("-P3Y89M4089DT47382.983S")
-let $cdr1 := calendar-duration-from-datetime($t1, $dr1)
-let $dt1 := add-datetime-duration($t1, $dr1)
-let $dtt1 := add-datetime-duration($t1, $cdr1)
-let $c1 := $dt1 = $dtt1
-let $cdr2 := calendar-duration-from-datetime($t1, $dr2)
-let $dt2 := add-datetime-duration($t1, $dr2)
-let $dtt2 := add-datetime-duration($t1, $cdr2)
-let $c2 := $dt2 = $dtt2
-let $cdr3 := calendar-duration-from-datetime($t1, $dr3)
-let $dt3 := add-datetime-duration($t1, $dr3)
-let $dtt3 := add-datetime-duration($t1, $cdr3)
-let $c3 := $dt3 = $dtt3
-let $cdr4 := calendar-duration-from-datetime($t1, $dr4)
-let $dt4 := add-datetime-duration($t1, $dr4)
-let $dtt4 := add-datetime-duration($t1, $cdr4)
-let $c4 := $dt4 = $dtt4
-let $cdr5 := calendar-duration-from-date($t2, $dr1)
-let $dt5 := add-date-duration($t2, $dr1)
-let $dtt5 := add-date-duration($t2, $cdr5)
-let $c5 := $dt5 = $dtt5
-let $cdr6 := calendar-duration-from-date($t2, $dr2)
-let $dt6 := add-date-duration($t2, $dr2)
-let $dtt6 := add-date-duration($t2, $cdr6)
-let $c6 := $dt6 = $dtt6
-let $cdr7 := calendar-duration-from-date($t2, $dr3)
-let $dt7 := add-date-duration($t2, $dr3)
-let $dtt7 := add-date-duration($t2, $cdr7)
-let $c7 := $dt7 = $dtt7
-let $cdr8 := calendar-duration-from-date($t2, $dr4)
-let $dt8 := add-date-duration($t2, $dr4)
-let $dtt8 := add-date-duration($t2, $cdr8)
-let $c8 := $dt8 = $dtt8
-
-return { "cduration1":$cdr1, "c1":$c1, "cduration2":$cdr2, "c2":$c2, "cduration3":$cdr3, "c3":$c3, "cduration4":$cdr4, "c4":$c4, "cduration5":$cdr5, "c5":$c5, "cduration6":$cdr6, "c6":$c6, "cduration7":$cdr7, "c7":$c7, "cduration8":$cdr8, "c8":$c8 }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.3.query.aql
deleted file mode 100644
index 93e1366..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/date_functions/date_functions.3.query.aql
+++ /dev/null
@@ -1,17 +0,0 @@
-use dataverse test;
-
-let $d1 := date-from-unix-time-in-days(15600)
-let $dt1 := datetime("1327-12-02T23:35:49.938Z")
-let $d2 := date-from-datetime($dt1)
-let $dt2 := datetime("2012-10-11T02:30:23+03:00")
-let $d3 := date-from-datetime($dt2)
-let $dr1 := duration("-P2Y1M90DT30H")
-let $d4 := add-date-duration($d1, $dr1)
-let $c1 := $d1 = add-date-duration($d4, subtract-date($d1, $d4))
-let $dr2 := duration("P300Y900MT360000M")
-let $d5 := add-date-duration($d2, $dr2)
-let $c2 := $d2 = add-date-duration($d5, subtract-date($d2, $d5))
-let $dr3 := subtract-date($d5, $d2)
-let $dr4 := subtract-date($d4, $d1)
-
-return { "date1" : $d1, "date2" : $d2, "date3" : $d3, "date4" : $d4, "date5" : $d5, "duration1" : $dr3, "duration2" : $dr4, "c1" : $c1, "c2" : $c2  }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.3.query.aql
deleted file mode 100644
index 6f3dde3..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/datetime_functions/datetime_functions.3.query.aql
+++ /dev/null
@@ -1,11 +0,0 @@
-use dataverse test;
-
-let $dt1 := datetime-from-unix-time-in-ms(956007429)
-let $d1 := date("1327-12-02")
-let $t1 := time("15:35:49.938-0800")
-let $dt2 := datetime-from-date-time($d1, $t1)
-let $dr1 := subtract-datetime($dt2, $dt1)
-let $dt3 := add-datetime-duration($dt1, $dr1)
-let $c1 := $dt1 = add-datetime-duration($dt3, subtract-datetime($dt1, $dt3))
-
-return { "datetime1" : $dt1, "datetime2" : $dt2, "datetime3" : $dt3, "duration1" : $dr1, "c1" : $c1 }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
deleted file mode 100644
index 1c773bc..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/interval_functions/interval_functions.3.query.aql
+++ /dev/null
@@ -1,49 +0,0 @@
-use dataverse test;
-
-let $itv1 := interval-from-date("2010-10-30", "2010-12-21")
-let $itv2 := interval-from-date("2011-10-30", "2012-10-21")
-let $itv3 := interval-from-date("2010-12-21", "2013-01-01")
-let $blnBefore1 := interval-before($itv1, $itv2)
-let $blnAfter1 := interval-after($itv2, $itv1)
-let $blnBefore2 := interval-before($itv1, $itv3)
-let $blnAfter2 := interval-after($itv3, $itv1)
-
-let $itv4 := interval-from-datetime("2012-06-26T01:01:01.111", "2012-07-27T02:02:02.222")
-let $itv5 := interval-from-datetime("20120727T020202222", "2013-08-08T03:03:03.333")
-let $itv6 := interval-from-datetime("19000707T020202222", "2013-08-07T03:03:03.333")
-let $blnMeet1 := interval-meets($itv4, $itv5)
-let $blnMetBy1 := interval-met-by($itv5, $itv4)
-let $blnMeet2 := interval-meets($itv6, $itv4)
-let $blnMetBy2 := interval-met-by($itv6, $itv4)
-
-let $itv7 := interval-from-time("12:32:38", "20:29:20")
-let $itv8 := interval-from-time("17:48:19", "22:19:49")
-let $itv9 := interval-from-time("01:32:49", "17:48:19")
-let $blnOverlaps1 := interval-overlaps($itv7, $itv8)
-let $blnOverlapped1 := interval-overlapped-by($itv8, $itv7)
-let $blnOverlaps2 := interval-overlaps($itv9, $itv8)
-let $blnOverlapped2 := interval-overlapped-by($itv8, $itv9)
-let $blnOverlap1 := overlap($itv9, $itv7)
-let $blnOverlap2 := overlap($itv9, $itv8)
-
-let $itv10 := interval-from-date("2010-10-30", "2010-11-30")
-let $blnStarts1 := interval-starts($itv10, $itv1)
-let $blnStarts2 := interval-starts($itv10, $itv2)
-let $blnStartedBy1 := interval-started-by($itv1, $itv10)
-let $blnStartedBy2 := interval-started-by($itv10, $itv2)
-
-let $itv10 := interval-from-datetime("19000707T020202222", "2013-08-07T03:03:03.333")
-let $itv11 := interval-from-datetime("19990707T020202222", "2013-08-07T03:03:03.333")
-let $itv12 := interval-from-datetime("-19990707T020202222", "2013-08-07T03:03:03.333")
-let $blnCovers1 := interval-covers($itv10, $itv11)
-let $blnCovers2 := interval-covers($itv10, $itv12)
-let $blnCoveredBy1 := interval-covered-by($itv11, $itv10)
-let $blnCoveredBy2 := interval-covered-by($itv12, $itv10)
-
-let $itv11 := interval-from-time("19:00:00.009", "20:29:20.000")
-let $blnEnds1 := interval-ends($itv11, $itv7)
-let $blnEnds2 := interval-ends($itv11, $itv8)
-let $blnEndedBy1 := interval-ended-by($itv7, $itv11)
-let $blnEndedBy2 := interval-ended-by($itv8, $itv11)
-
-return { "before1" : $blnBefore1, "before2" : $blnBefore2, "after1" : $blnAfter1, "after2" : $blnAfter2, "meet1" : $blnMeet1, "meet2" : $blnMeet2, "metby1" : $blnMetBy1, "metby2" : $blnMetBy2, "overlaps1" : $blnOverlaps1, "overlaps2" : $blnOverlaps2, "overlapped1" : $blnOverlapped1, "overlapped2" : $blnOverlapped2, "overlap1" : $blnOverlap1, "overlap2" : $blnOverlap2, "starts1" : $blnStarts1, "starts2" : $blnStarts2, "startedby1" : $blnStartedBy1, "startedby2" : $blnStartedBy2, "covers1" : $blnCovers1, "covers2" : $blnCovers2, "coveredby1" : $blnCoveredBy1, "coveredby2" : $blnCoveredBy2, "ends1" : $blnEnds1, "ends2" : $blnEnds2, "endedby1" : $blnEndedBy1, "endedby2" : $blnEndedBy2 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.3.query.aql b/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.3.query.aql
deleted file mode 100644
index ca25b8b..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/queries/temporal/time_functions/time_functions.3.query.aql
+++ /dev/null
@@ -1,20 +0,0 @@
-use dataverse test;
-
-let $t1 := time-from-unix-time-in-ms(1560074)
-let $dt1 := datetime("1327-12-02T23:35:49.938Z")
-let $t2 := time-from-datetime($dt1)
-let $dt2 := datetime("2012-10-11T02:30:23+03:00")
-let $t3 := time-from-datetime($dt2)
-let $dr1 := duration("-PT30H")
-let $t4 := add-time-duration($t1, $dr1)
-let $c1 := $t1 = add-time-duration($t4, subtract-time($t1, $t4))
-let $dr2 := duration("PT36M")
-let $t5 := add-time-duration($t2, $dr2)
-let $c2 := $t2 = add-time-duration($t5, subtract-time($t2, $t5))
-let $dr3 := subtract-time($t5, $t2)
-let $dr4 := subtract-time($t4, $t1)
-let $ct := current-time()
-let $cd := current-date()
-let $cdt := current-datetime()
-
-return { "time1" : $t1, "time2" : $t2, "time3" : $t3, "time4" : $t4, "time5" : $t5, "duration1" : $dr3, "duration2" : $dr4, "c1" : $c1, "c2" : $c2  }
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_null/count_null.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_null/count_null.1.adm
deleted file mode 100644
index 51d5f4f..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/count_null/count_null.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "count": null }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_null/scalar_count_null.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_null/scalar_count_null.1.adm
deleted file mode 100644
index 1abbc3f..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/aggregate/scalar_count_null/scalar_count_null.1.adm
+++ /dev/null
@@ -1,7 +0,0 @@
-null
-null
-null
-null
-null
-null
-null
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
deleted file mode 100644
index 893c3ff..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/constructor/interval/interval.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "interval1": interval-date("2010-10-30, 2012-10-21"), "interval2": interval-time("14:04:05.678Z, 21:24:25.267Z"), "interval3": interval-datetime("-1987-11-18T18:43:57.938Z, 1999-11-12T19:49:35.948Z"), "interval4": interval-date("0001-12-27, 0006-01-27"), "interval5": interval-time("20:03:20.948Z, 20:57:50.886Z"), "interval6": interval-datetime("-2043-11-19T15:32:39.293Z, -1603-03-12T12:12:38.242Z") }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.adm
deleted file mode 100644
index e95bac0..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.1.adm
+++ /dev/null
@@ -1,2 +0,0 @@
-{ "cell": rectangle("33.5,-101.5 | 36.5,-98.5"), "count": 1 }
-{ "cell": rectangle("33.5,-98.5 | 36.5,-95.5"), "count": 2 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation/cell-aggregation.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation/cell-aggregation.1.adm
deleted file mode 100644
index 137ed1c..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/cell-aggregation/cell-aggregation.1.adm
+++ /dev/null
@@ -1,3 +0,0 @@
-{ "cell": rectangle("5.0,5.0 | 10.0,10.0"), "count": 1 }
-{ "cell": rectangle("5.0,0.0 | 10.0,5.0"), "count": 3 }
-{ "cell": rectangle("0.0,0.0 | 5.0,5.0"), "count": 12 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/create-rtree-index/create-rtree-index.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/spatial/create-rtree-index/create-rtree-index.1.adm
deleted file mode 100644
index 6a2a2c6..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/spatial/create-rtree-index/create-rtree-index.1.adm
+++ /dev/null
@@ -1,21 +0,0 @@
-1
-2
-3
-4
-5
-6
-7
-8
-9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/accessors/accessors.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/accessors/accessors.1.adm
deleted file mode 100644
index 4f36f91..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/accessors/accessors.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "year1": 2010, "year2": 1987, "year3": -1987, "year4": 928, "year5": 1937, "year6": -3, "year7": 9, "month1": 10, "month2": 11, "month3": 11, "month4": 3, "month5": 12, "month6": 1, "day1": 30, "day2": 19, "day3": 19, "day4": 29, "day5": 29, "day6": 634, "hour1": 23, "hour2": 20, "hour3": 5, "hour4": 14, "min1": 49, "min2": 3, "min3": 23, "min4": 28, "second1": 23, "second2": 6, "second3": 34, "second4": 48, "ms1": 938, "ms2": 280, "ms3": 930, "ms4": 94 }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone/adjust_timezone.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone/adjust_timezone.1.adm
deleted file mode 100644
index 1f80fd9..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/adjust_timezone/adjust_timezone.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "string1": "04:15:10.327+08:00", "string2": "2010-10-22T18:57:13.329-06:15" }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration/calendar_duration.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration/calendar_duration.1.adm
deleted file mode 100644
index 957388f..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/calendar_duration/calendar_duration.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "cduration1": duration("P20Y3M12DT7H48M21.329S"), "c1": true, "cduration2": duration("-P9M6DT4H45M39.328S"), "c2": true, "cduration3": duration("P8Y6M"), "c3": true, "cduration4": duration("-P21Y7M10DT13H9M42.983S"), "c4": true, "cduration5": duration("P20Y3M12DT7H48M21.329S"), "c5": true, "cduration6": duration("-P9M5DT4H45M39.328S"), "c6": true, "cduration7": duration("P8Y6M"), "c7": true, "cduration8": duration("-P21Y7M10DT13H9M42.983S"), "c8": true }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/date_functions/date_functions.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/date_functions/date_functions.1.adm
deleted file mode 100644
index a5285d8..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/date_functions/date_functions.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "date1": date("2012-09-17"), "date2": date("1327-12-02"), "date3": date("2012-10-10"), "date4": date("2010-05-17"), "date5": date("1703-08-09"), "duration1": duration("P137216D"), "duration2": duration("-P854D"), "c1": true, "c2": true }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions/datetime_functions.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions/datetime_functions.1.adm
deleted file mode 100644
index 01f3758..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/datetime_functions/datetime_functions.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "datetime1": datetime("1970-01-12T01:33:27.429Z"), "datetime2": datetime("1327-12-02T23:35:49.938Z"), "datetime3": datetime("1327-12-02T23:35:49.938Z"), "duration1": duration("-P234526DT1H57M37.491S"), "c1": true }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions/interval_functions.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions/interval_functions.1.adm
deleted file mode 100644
index 9f9c9d3..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/interval_functions/interval_functions.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "before1": true, "before2": false, "after1": true, "after2": false, "meet1": true, "meet2": false, "metby1": true, "metby2": false, "overlaps1": true, "overlaps2": false, "overlapped1": true, "overlapped2": false, "overlap1": true, "overlap2": false, "starts1": true, "starts2": false, "startedby1": true, "startedby2": false, "covers1": true, "covers2": false, "coveredby1": true, "coveredby2": false, "ends1": true, "ends2": false, "endedby1": true, "endedby2": false }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/time_functions/time_functions.1.adm b/asterix/asterix-app/src/test/resources/runtimets/results/temporal/time_functions/time_functions.1.adm
deleted file mode 100644
index 791d652..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/results/temporal/time_functions/time_functions.1.adm
+++ /dev/null
@@ -1 +0,0 @@
-{ "time1": time("00:26:00.074Z"), "time2": time("23:35:49.938Z"), "time3": time("23:30:23.000Z"), "time4": time("18:26:00.074Z"), "time5": time("00:11:49.938Z"), "duration1": duration("-PT23H24M"), "duration2": duration("PT18H"), "c1": true, "c2": true }
\ No newline at end of file
diff --git a/asterix/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterix/asterix-app/src/test/resources/runtimets/testsuite.xml
deleted file mode 100644
index b730b41..0000000
--- a/asterix/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ /dev/null
@@ -1,4192 +0,0 @@
-<test-suite xmlns="urn:xml.testframework.asterix.ics.uci.edu" ResultOffsetPath="results" QueryOffsetPath="queries" QueryFileExtension=".aql">
-  <test-group name="aggregate">
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_double">
-        <output-dir compare="Text">avg_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_double_null">
-        <output-dir compare="Text">avg_double_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_empty_01">
-        <output-dir compare="Text">avg_empty_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_empty_02">
-        <output-dir compare="Text">avg_empty_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_float">
-        <output-dir compare="Text">avg_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_float_null">
-        <output-dir compare="Text">avg_float_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int16">
-        <output-dir compare="Text">avg_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int16_null">
-        <output-dir compare="Text">avg_int16_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int32">
-        <output-dir compare="Text">avg_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int32_null">
-        <output-dir compare="Text">avg_int32_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int64">
-        <output-dir compare="Text">avg_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int64_null">
-        <output-dir compare="Text">avg_int64_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int8">
-        <output-dir compare="Text">avg_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="avg_int8_null">
-        <output-dir compare="Text">avg_int8_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="count_01">
-        <output-dir compare="Text">count_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="count_empty_01">
-        <output-dir compare="Text">count_empty_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="count_empty_02">
-        <output-dir compare="Text">count_empty_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="count_null">
-        <output-dir compare="Text">count_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="aggregate">
-      <compilation-unit name="droptype">
-        <output-dir compare="Text">droptype</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="aggregate">
-      <compilation-unit name="global-avg_01">
-        <output-dir compare="Text">global-avg_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="global-avg_null">
-        <output-dir compare="Text">global-avg_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_double">
-        <output-dir compare="Text">local-avg_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_double_null">
-        <output-dir compare="Text">local-avg_double_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_float">
-        <output-dir compare="Text">local-avg_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_float_null">
-        <output-dir compare="Text">local-avg_float_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int16">
-        <output-dir compare="Text">local-avg_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int16_null">
-        <output-dir compare="Text">local-avg_int16_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int32">
-        <output-dir compare="Text">local-avg_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int32_null">
-        <output-dir compare="Text">local-avg_int32_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int64">
-        <output-dir compare="Text">local-avg_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int64_null">
-        <output-dir compare="Text">local-avg_int64_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int8">
-        <output-dir compare="Text">local-avg_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="local-avg_int8_null">
-        <output-dir compare="Text">local-avg_int8_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="max_empty_01">
-        <output-dir compare="Text">max_empty_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="max_empty_02">
-        <output-dir compare="Text">max_empty_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="min_empty_01">
-        <output-dir compare="Text">min_empty_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="min_empty_02">
-        <output-dir compare="Text">min_empty_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_avg">
-        <output-dir compare="Text">scalar_avg</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_avg_empty">
-        <output-dir compare="Text">scalar_avg_empty</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_avg_null">
-        <output-dir compare="Text">scalar_avg_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_count">
-        <output-dir compare="Text">scalar_count</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_count_empty">
-        <output-dir compare="Text">scalar_count_empty</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_count_null">
-        <output-dir compare="Text">scalar_count_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_max">
-        <output-dir compare="Text">scalar_max</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_max_empty">
-        <output-dir compare="Text">scalar_max_empty</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_max_null">
-        <output-dir compare="Text">scalar_max_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_min">
-        <output-dir compare="Text">scalar_min</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_min_empty">
-        <output-dir compare="Text">scalar_min_empty</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_min_null">
-        <output-dir compare="Text">scalar_min_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_sum">
-        <output-dir compare="Text">scalar_sum</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_sum_empty">
-        <output-dir compare="Text">scalar_sum_empty</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="scalar_sum_null">
-        <output-dir compare="Text">scalar_sum_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_double">
-        <output-dir compare="Text">sum_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_double_null">
-        <output-dir compare="Text">sum_double_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_empty_01">
-        <output-dir compare="Text">sum_empty_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_empty_02">
-        <output-dir compare="Text">sum_empty_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_float">
-        <output-dir compare="Text">sum_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_float_null">
-        <output-dir compare="Text">sum_float_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int16">
-        <output-dir compare="Text">sum_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int16_null">
-        <output-dir compare="Text">sum_int16_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int32">
-        <output-dir compare="Text">sum_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int32_null">
-        <output-dir compare="Text">sum_int32_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int64">
-        <output-dir compare="Text">sum_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int64_null">
-        <output-dir compare="Text">sum_int64_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int8">
-        <output-dir compare="Text">sum_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_int8_null">
-        <output-dir compare="Text">sum_int8_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_null-with-pred">
-        <output-dir compare="Text">sum_null-with-pred</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="aggregate">
-      <compilation-unit name="sum_numeric_null">
-        <output-dir compare="Text">sum_numeric_null</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="boolean">
-    <test-case FilePath="boolean">
-      <compilation-unit name="and_01">
-        <output-dir compare="Text">and_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="boolean">
-      <compilation-unit name="and_null">
-        <output-dir compare="Text">and_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="boolean">
-      <compilation-unit name="and_null_false">
-        <output-dir compare="Text">and_null_false</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="boolean">
-      <compilation-unit name="not_01">
-        <output-dir compare="Text">not_01</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="comparison">
-    <test-case FilePath="comparison">
-      <compilation-unit name="datetime_order">
-        <output-dir compare="Text">datetime_order</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="datetime_range">
-        <output-dir compare="Text">datetime_range</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="datetime_tzeq">
-        <output-dir compare="Text">datetime_tzeq</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="double">
-        <output-dir compare="Text">double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="double_gte_01">
-        <output-dir compare="Text">double_gte_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="double_null">
-        <output-dir compare="Text">double_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="eq_01">
-        <output-dir compare="Text">eq_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="float">
-        <output-dir compare="Text">float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="float_null">
-        <output-dir compare="Text">float_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="gt_01">
-        <output-dir compare="Text">gt_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="gte_01">
-        <output-dir compare="Text">gte_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int16">
-        <output-dir compare="Text">int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int16_null">
-        <output-dir compare="Text">int16_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int32">
-        <output-dir compare="Text">int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int32_null">
-        <output-dir compare="Text">int32_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int64">
-        <output-dir compare="Text">int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int64_null">
-        <output-dir compare="Text">int64_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int8">
-        <output-dir compare="Text">int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="int8_null">
-        <output-dir compare="Text">int8_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="lt_01">
-        <output-dir compare="Text">lt_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="lte_01">
-        <output-dir compare="Text">lte_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="neq_01">
-        <output-dir compare="Text">neq_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="comparison">
-      <compilation-unit name="numeric-comparison_01">
-        <output-dir compare="Text">numeric-comparison_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="comparison">
-      <compilation-unit name="string">
-        <output-dir compare="Text">string</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="comparison">
-      <compilation-unit name="string_null">
-        <output-dir compare="Text">string_null</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="constructor">
-    <test-case FilePath="constructor">
-      <compilation-unit name="add-null">
-        <output-dir compare="Text">add-null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="boolean_01">
-        <output-dir compare="Text">boolean_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="circle_01">
-        <output-dir compare="Text">circle_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="date_01">
-        <output-dir compare="Text">date_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="datetime_01">
-        <output-dir compare="Text">datetime_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="double_01">
-        <output-dir compare="Text">double_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="duration_01">
-        <output-dir compare="Text">duration_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="float_01">
-        <output-dir compare="Text">float_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="int_01">
-        <output-dir compare="Text">int_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="interval">
-        <output-dir compare="Text">interval</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="line_01">
-        <output-dir compare="Text">line_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="point_01">
-        <output-dir compare="Text">point_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="polygon_01">
-        <output-dir compare="Text">polygon_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="primitive-01">
-        <output-dir compare="Text">primitive-01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="primitive-02">
-        <output-dir compare="Text">primitive-02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="primitive-03">
-        <output-dir compare="Text">primitive-03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="primitive-04">
-        <output-dir compare="Text">primitive-04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="string_01">
-        <output-dir compare="Text">string_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="constructor">
-      <compilation-unit name="time_01">
-        <output-dir compare="Text">time_01</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="custord">
-    <!--
-    <test-case FilePath="custord">
-      <compilation-unit name="co">
-        <output-dir compare="Text">co</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_01">
-        <output-dir compare="Text">customer_q_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_02">
-        <output-dir compare="Text">customer_q_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_03">
-        <output-dir compare="Text">customer_q_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_04">
-        <output-dir compare="Text">customer_q_04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_05">
-        <output-dir compare="Text">customer_q_05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_06">
-        <output-dir compare="Text">customer_q_06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_07">
-        <output-dir compare="Text">customer_q_07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="customer_q_08">
-        <output-dir compare="Text">customer_q_08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="custord">
-      <compilation-unit name="denorm-cust-order_01">
-        <output-dir compare="Text">denorm-cust-order_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="custord">
-      <compilation-unit name="denorm-cust-order_02">
-        <output-dir compare="Text">denorm-cust-order_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="custord">
-      <compilation-unit name="denorm-cust-order_03">
-        <output-dir compare="Text">denorm-cust-order_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="custord">
-      <compilation-unit name="freq-clerk">
-        <output-dir compare="Text">freq-clerk</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="custord">
-      <compilation-unit name="join_q_01">
-        <output-dir compare="Text">join_q_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="join_q_02">
-        <output-dir compare="Text">join_q_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="join_q_03">
-        <output-dir compare="Text">join_q_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="custord">
-      <compilation-unit name="join_q_04">
-        <output-dir compare="Text">join_q_04</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="custord">
-      <compilation-unit name="load-test">
-        <output-dir compare="Text">load-test</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="order_q_01">
-        <output-dir compare="Text">order_q_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="order_q_02">
-        <output-dir compare="Text">order_q_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="order_q_03">
-        <output-dir compare="Text">order_q_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="order_q_04">
-        <output-dir compare="Text">order_q_04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="order_q_05">
-        <output-dir compare="Text">order_q_05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="custord">
-      <compilation-unit name="order_q_06">
-        <output-dir compare="Text">order_q_06</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="dapd">
-    <test-case FilePath="dapd">
-      <compilation-unit name="q1">
-        <output-dir compare="Text">q1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dapd">
-      <compilation-unit name="q2">
-        <output-dir compare="Text">q2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="dapd">
-      <compilation-unit name="q3">
-        <output-dir compare="Text">q3</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-  </test-group>
-  <test-group name="dml">
-     <test-case FilePath="dml">
-      <compilation-unit name="query-issue288">
-        <output-dir compare="Text">query-issue288</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="query-issue205">
-        <output-dir compare="Text">query-issue205</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="delete-from-loaded-dataset-with-index">
-        <output-dir compare="Text">delete-from-loaded-dataset-with-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="delete-from-loaded-dataset">
-        <output-dir compare="Text">delete-from-loaded-dataset</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="delete-syntax-change">
-        <output-dir compare="Text">delete-syntax-change</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="drop-empty-secondary-indexes">
-        <output-dir compare="Text">drop-empty-secondary-indexes</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="create-drop-cltype">
-        <output-dir compare="Text">create-drop-cltype</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="create-drop-opntype">
-        <output-dir compare="Text">create-drop-opntype</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="empty-load-with-index">
-        <output-dir compare="Text">empty-load-with-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="empty-load">
-        <output-dir compare="Text">empty-load</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-into-empty-dataset-with-index">
-        <output-dir compare="Text">insert-into-empty-dataset-with-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-into-empty-dataset-with-index">
-        <output-dir compare="Text">insert-into-empty-dataset-with-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-syntax">
-        <output-dir compare="Text">insert-syntax</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-into-loaded-dataset-with-index_01">
-        <output-dir compare="Text">insert-into-loaded-dataset-with-index_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-into-loaded-dataset-with-index_02">
-        <output-dir compare="Text">insert-into-loaded-dataset-with-index_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-into-loaded-dataset_01">
-        <output-dir compare="Text">insert-into-loaded-dataset_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-into-loaded-dataset_02">
-        <output-dir compare="Text">insert-into-loaded-dataset_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert-src-dst-01">
-        <output-dir compare="Text">insert-src-dst-01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert">
-        <output-dir compare="Text">insert</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="insert_less_nc">
-        <output-dir compare="Text">insert_less_nc</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="dml">
-      <compilation-unit name="load-from-hdfs">
-        <output-dir compare="Text">load-from-hdfs</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="dml">
-      <compilation-unit name="load-with-index">
-        <output-dir compare="Text">load-with-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-c2o-recursive">
-        <output-dir compare="Text">opentype-c2o-recursive</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-c2o">
-        <output-dir compare="Text">opentype-c2o</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-closed-optional">
-        <output-dir compare="Text">opentype-closed-optional</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-insert">
-        <output-dir compare="Text">opentype-insert</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-insert2">
-        <output-dir compare="Text">opentype-insert2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-noexpand">
-        <output-dir compare="Text">opentype-noexpand</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-o2c-recursive">
-        <output-dir compare="Text">opentype-o2c-recursive</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-o2c">
-        <output-dir compare="Text">opentype-o2c</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="opentype-o2o">
-        <output-dir compare="Text">opentype-o2o</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-btree-secondary-index-nullable">
-        <output-dir compare="Text">scan-delete-btree-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-rtree-secondary-index-nullable">
-        <output-dir compare="Text">scan-delete-rtree-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-rtree-secondary-index">
-        <output-dir compare="Text">scan-delete-rtree-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-btree-secondary-index-nullable">
-        <output-dir compare="Text">scan-insert-btree-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-rtree-secondary-index-nullable">
-        <output-dir compare="Text">scan-insert-rtree-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-rtree-secondary-index">
-        <output-dir compare="Text">scan-insert-rtree-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index">
-        <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-word-secondary-index">
-        <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-fuzzy-ngram-secondary-index">
-        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-ngram-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-fuzzy-word-secondary-index">
-        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-word-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-ngram-secondary-index-nullable">
-        <output-dir compare="Text">scan-insert-inverted-index-ngram-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-word-secondary-index-nullable">
-        <output-dir compare="Text">scan-insert-inverted-index-word-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable">
-        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-ngram-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-insert-inverted-index-fuzzy-word-secondary-index-nullable">
-        <output-dir compare="Text">scan-insert-inverted-index-fuzzy-word-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index">
-        <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-word-secondary-index">
-        <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-fuzzy-ngram-secondary-index">
-        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-ngram-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-fuzzy-word-secondary-index">
-        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-word-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-ngram-secondary-index-nullable">
-        <output-dir compare="Text">scan-delete-inverted-index-ngram-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-word-secondary-index-nullable">
-        <output-dir compare="Text">scan-delete-inverted-index-word-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable">
-        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-ngram-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="dml">
-      <compilation-unit name="scan-delete-inverted-index-fuzzy-word-secondary-index-nullable">
-        <output-dir compare="Text">scan-delete-inverted-index-fuzzy-word-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="employee">
-    <test-case FilePath="employee">
-      <compilation-unit name="q_01">
-        <output-dir compare="Text">q_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="employee">
-      <compilation-unit name="q_02">
-        <output-dir compare="Text">q_02</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="failure">
-    <test-case FilePath="failure">
-      <compilation-unit name="delete-rtree">
-        <output-dir compare="Text">delete-rtree</output-dir>
-        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
-      </compilation-unit>
-      <compilation-unit name="verify_delete-rtree">
-        <output-dir compare="Text">delete-rtree</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="failure">
-      <compilation-unit name="delete">
-        <output-dir compare="Text">delete</output-dir>
-        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
-      </compilation-unit>
-      <compilation-unit name="verify_delete">
-        <output-dir compare="Text">delete</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="failure">
-      <compilation-unit name="insert-rtree">
-        <output-dir compare="Text">insert-rtree</output-dir>
-        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
-      </compilation-unit>
-      <compilation-unit name="verify_insert-rtree">
-        <output-dir compare="Text">insert-rtree</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="failure">
-      <compilation-unit name="insert">
-        <output-dir compare="Text">insert</output-dir>
-        <expected-error>edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException</expected-error>
-      </compilation-unit>
-      <compilation-unit name="verify_insert">
-        <output-dir compare="Text">insert</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="failure">
-      <compilation-unit name="q1_pricing_summary_report_failure">
-        <output-dir compare="Text">q1_pricing_summary_report_failure</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-  </test-group>
-  <!--
-  <test-group name="flwor">
-    <test-case FilePath="flwor">
-      <compilation-unit name="for01">
-        <output-dir compare="Text">for01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for02">
-        <output-dir compare="Text">for02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for03">
-        <output-dir compare="Text">for03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for04">
-        <output-dir compare="Text">for04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for05">
-        <output-dir compare="Text">for05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for06">
-        <output-dir compare="Text">for06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for07">
-        <output-dir compare="Text">for07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for08">
-        <output-dir compare="Text">for08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for09">
-        <output-dir compare="Text">for09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for10">
-        <output-dir compare="Text">for10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for11">
-        <output-dir compare="Text">for11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for12">
-        <output-dir compare="Text">for12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for13">
-        <output-dir compare="Text">for13</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for14">
-        <output-dir compare="Text">for14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for15">
-        <output-dir compare="Text">for15</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for16">
-        <output-dir compare="Text">for16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for17">
-        <output-dir compare="Text">for17</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for18">
-        <output-dir compare="Text">for18</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="for19">
-        <output-dir compare="Text">for19</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="grpby01">
-        <output-dir compare="Text">grpby01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="grpby02">
-        <output-dir compare="Text">grpby02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let01">
-        <output-dir compare="Text">let01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let02">
-        <output-dir compare="Text">let02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let03">
-        <output-dir compare="Text">let03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let04">
-        <output-dir compare="Text">let04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let05">
-        <output-dir compare="Text">let05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let06">
-        <output-dir compare="Text">let06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let07">
-        <output-dir compare="Text">let07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let08">
-        <output-dir compare="Text">let08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let09">
-        <output-dir compare="Text">let09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let10">
-        <output-dir compare="Text">let10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let11">
-        <output-dir compare="Text">let11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let12">
-        <output-dir compare="Text">let12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let13">
-        <output-dir compare="Text">let13</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let14">
-        <output-dir compare="Text">let14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let15">
-        <output-dir compare="Text">let15</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let16">
-        <output-dir compare="Text">let16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let17">
-        <output-dir compare="Text">let17</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let18">
-        <output-dir compare="Text">let18</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let19">
-        <output-dir compare="Text">let19</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let20">
-        <output-dir compare="Text">let20</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let21">
-        <output-dir compare="Text">let21</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let22">
-        <output-dir compare="Text">let22</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let23">
-        <output-dir compare="Text">let23</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let24">
-        <output-dir compare="Text">let24</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let25">
-        <output-dir compare="Text">let25</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let26">
-        <output-dir compare="Text">let26</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let27">
-        <output-dir compare="Text">let27</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let28">
-        <output-dir compare="Text">let28</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let29">
-        <output-dir compare="Text">let29</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let30">
-        <output-dir compare="Text">let30</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let31">
-        <output-dir compare="Text">let31</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="let32">
-        <output-dir compare="Text">let32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-01">
-        <output-dir compare="Text">order-by-01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-02">
-        <output-dir compare="Text">order-by-02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-03">
-        <output-dir compare="Text">order-by-03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-04">
-        <output-dir compare="Text">order-by-04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-05">
-        <output-dir compare="Text">order-by-05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-06">
-        <output-dir compare="Text">order-by-06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-07">
-        <output-dir compare="Text">order-by-07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-08">
-        <output-dir compare="Text">order-by-08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-09">
-        <output-dir compare="Text">order-by-09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-10">
-        <output-dir compare="Text">order-by-10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-11">
-        <output-dir compare="Text">order-by-11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="order-by-12">
-        <output-dir compare="Text">order-by-12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-01">
-        <output-dir compare="Text">ret-01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-02">
-        <output-dir compare="Text">ret-02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-03">
-        <output-dir compare="Text">ret-03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-04">
-        <output-dir compare="Text">ret-04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-05">
-        <output-dir compare="Text">ret-05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-06">
-        <output-dir compare="Text">ret-06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-07">
-        <output-dir compare="Text">ret-07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-08">
-        <output-dir compare="Text">ret-08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-09">
-        <output-dir compare="Text">ret-09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-10">
-        <output-dir compare="Text">ret-10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-11">
-        <output-dir compare="Text">ret-11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-12">
-        <output-dir compare="Text">ret-12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-13">
-        <output-dir compare="Text">ret-13</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-14">
-        <output-dir compare="Text">ret-14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-15">
-        <output-dir compare="Text">ret-15</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-16">
-        <output-dir compare="Text">ret-16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-17">
-        <output-dir compare="Text">ret-17</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-18">
-        <output-dir compare="Text">ret-18</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="flwor">
-      <compilation-unit name="ret-19">
-        <output-dir compare="Text">ret-19</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  -->
-  <test-group name="fuzzyjoin">
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-1_1">
-        <output-dir compare="Text">dblp-1_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-1_2.1.1">
-        <output-dir compare="Text">dblp-1_2.1.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-1_2.1">
-        <output-dir compare="Text">dblp-1_2.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-1_2">
-        <output-dir compare="Text">dblp-1_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2.1_5.3.1">
-        <output-dir compare="Text">dblp-2.1_5.3.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_1">
-        <output-dir compare="Text">dblp-2_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_2">
-        <output-dir compare="Text">dblp-2_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2.2">
-        <output-dir compare="Text">dblp-2.2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_3">
-        <output-dir compare="Text">dblp-2_3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_4">
-        <output-dir compare="Text">dblp-2_4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_5.1">
-        <output-dir compare="Text">dblp-2_5.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_5.2">
-        <output-dir compare="Text">dblp-2_5.2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_5.3.1">
-        <output-dir compare="Text">dblp-2_5.3.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_5.3">
-        <output-dir compare="Text">dblp-2_5.3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-2_5">
-        <output-dir compare="Text">dblp-2_5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-3_1.1">
-        <output-dir compare="Text">dblp-3_1.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-3_1.2">
-        <output-dir compare="Text">dblp-3_1.2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-3_1">
-        <output-dir compare="Text">dblp-3_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-aqlplus_1">
-        <output-dir compare="Text">dblp-aqlplus_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-aqlplus_2">
-        <output-dir compare="Text">dblp-aqlplus_2</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_1">
-        <output-dir compare="Text">dblp-csx-2_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_2">
-        <output-dir compare="Text">dblp-csx-2_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_3">
-        <output-dir compare="Text">dblp-csx-2_3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_4">
-        <output-dir compare="Text">dblp-csx-2_4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_5.1">
-        <output-dir compare="Text">dblp-csx-2_5.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_5.2">
-        <output-dir compare="Text">dblp-csx-2_5.2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_5.3.1">
-        <output-dir compare="Text">dblp-csx-2_5.3.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_5.3">
-        <output-dir compare="Text">dblp-csx-2_5.3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-2_5">
-        <output-dir compare="Text">dblp-csx-2_5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_1">
-        <output-dir compare="Text">dblp-csx-3_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_2">
-        <output-dir compare="Text">dblp-csx-3_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_3">
-        <output-dir compare="Text">dblp-csx-3_3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_4">
-        <output-dir compare="Text">dblp-csx-3_4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5.1">
-        <output-dir compare="Text">dblp-csx-3_5.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5.2">
-        <output-dir compare="Text">dblp-csx-3_5.2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5.3.1">
-        <output-dir compare="Text">dblp-csx-3_5.3.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5.3">
-        <output-dir compare="Text">dblp-csx-3_5.3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5.4.1">
-        <output-dir compare="Text">dblp-csx-3_5.4.1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5.4">
-        <output-dir compare="Text">dblp-csx-3_5.4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-3_5">
-        <output-dir compare="Text">dblp-csx-3_5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-aqlplus_1">
-        <output-dir compare="Text">dblp-csx-aqlplus_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-aqlplus_2">
-        <output-dir compare="Text">dblp-csx-aqlplus_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-aqlplus_3">
-        <output-dir compare="Text">dblp-csx-aqlplus_3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-csx-dblp-aqlplus_1">
-        <output-dir compare="Text">dblp-csx-dblp-aqlplus_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-lookup_1">
-        <output-dir compare="Text">dblp-lookup_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="fuzzyjoin">
-      <compilation-unit name="dblp-splits-3_1">
-        <output-dir compare="Text">dblp-splits-3_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-  </test-group>
-  <test-group name="index-join">
-    <test-case FilePath="index-join">
-      <compilation-unit name="btree-primary-equi-join">
-        <output-dir compare="Text">btree-primary-equi-join</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-join">
-      <compilation-unit name="btree-secondary-equi-join">
-        <output-dir compare="Text">btree-secondary-equi-join</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-join">
-      <compilation-unit name="rtree-spatial-intersect-point">
-        <output-dir compare="Text">rtree-spatial-intersect-point</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="index-selection">
-    <test-case FilePath="index-selection">
-      <compilation-unit name="btree-index-composite-key">
-        <output-dir compare="Text">btree-index-composite-key</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="btree-index-composite-key-mixed-intervals">
-        <output-dir compare="Text">btree-index-composite-key-mixed-intervals</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="btree-index-rewrite-multiple">
-        <output-dir compare="Text">btree-index-rewrite-multiple</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="cust-index-age-nullable">
-        <output-dir compare="Text">cust-index-age-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-ngram-contains">
-        <output-dir compare="Text">fuzzy-inverted-index-ngram-contains</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-ngram-edit-distance-panic">
-        <output-dir compare="Text">fuzzy-inverted-index-ngram-edit-distance-panic</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-ngram-edit-distance">
-        <output-dir compare="Text">fuzzy-inverted-index-ngram-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-ngram-jaccard">
-        <output-dir compare="Text">fuzzy-inverted-index-ngram-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-olist-edit-distance-panic">
-        <output-dir compare="Text">fuzzy-inverted-index-olist-edit-distance-panic</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-olist-edit-distance">
-        <output-dir compare="Text">fuzzy-inverted-index-olist-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-olist-jaccard">
-        <output-dir compare="Text">fuzzy-inverted-index-olist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-ulist-jaccard">
-        <output-dir compare="Text">fuzzy-inverted-index-ulist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-word-contains">
-        <output-dir compare="Text">fuzzy-inverted-index-word-contains</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="fuzzy-inverted-index-word-jaccard">
-        <output-dir compare="Text">fuzzy-inverted-index-word-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-ngram-contains">
-        <output-dir compare="Text">inverted-index-ngram-contains</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-ngram-edit-distance-panic">
-        <output-dir compare="Text">inverted-index-ngram-edit-distance-panic</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-ngram-edit-distance">
-        <output-dir compare="Text">inverted-index-ngram-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-ngram-jaccard">
-        <output-dir compare="Text">inverted-index-ngram-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-olist-edit-distance-panic">
-        <output-dir compare="Text">inverted-index-olist-edit-distance-panic</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-olist-edit-distance">
-        <output-dir compare="Text">inverted-index-olist-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-olist-jaccard">
-        <output-dir compare="Text">inverted-index-olist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-ulist-jaccard">
-        <output-dir compare="Text">inverted-index-ulist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-word-contains">
-        <output-dir compare="Text">inverted-index-word-contains</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="inverted-index-word-jaccard">
-        <output-dir compare="Text">inverted-index-word-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="orders-index-custkey-conjunctive-open">
-        <output-dir compare="Text">orders-index-custkey-conjunctive-open</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="orders-index-custkey-conjunctive">
-        <output-dir compare="Text">orders-index-custkey-conjunctive</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="orders-index-custkey-open">
-        <output-dir compare="Text">orders-index-custkey-open</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="orders-index-custkey">
-        <output-dir compare="Text">orders-index-custkey</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="range-search-open">
-        <output-dir compare="Text">range-search-open</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="range-search">
-        <output-dir compare="Text">range-search</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="rtree-secondary-index-nullable">
-        <output-dir compare="Text">rtree-secondary-index-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="rtree-secondary-index-open">
-        <output-dir compare="Text">rtree-secondary-index-open</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="index-selection">
-      <compilation-unit name="rtree-secondary-index">
-        <output-dir compare="Text">rtree-secondary-index</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="inverted-index-join">
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="ngram-edit-distance">
-        <output-dir compare="Text">ngram-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="ngram-edit-distance-inline">
-        <output-dir compare="Text">ngram-edit-distance-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="ngram-jaccard">
-        <output-dir compare="Text">ngram-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="ngram-jaccard-inline">
-        <output-dir compare="Text">ngram-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="olist-edit-distance">
-        <output-dir compare="Text">olist-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="olist-edit-distance-inline">
-        <output-dir compare="Text">olist-edit-distance-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="olist-jaccard">
-        <output-dir compare="Text">olist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="olist-jaccard-inline">
-        <output-dir compare="Text">olist-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="ulist-jaccard">
-        <output-dir compare="Text">ulist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="ulist-jaccard-inline">
-        <output-dir compare="Text">ulist-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="word-jaccard">
-        <output-dir compare="Text">word-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join">
-      <compilation-unit name="word-jaccard-inline">
-        <output-dir compare="Text">word-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="inverted-index-join-noeqjoin">
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="ngram-edit-distance">
-        <output-dir compare="Text">ngram-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="ngram-edit-distance-inline">
-        <output-dir compare="Text">ngram-edit-distance-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="ngram-jaccard">
-        <output-dir compare="Text">ngram-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="ngram-jaccard-inline">
-        <output-dir compare="Text">ngram-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="olist-edit-distance">
-        <output-dir compare="Text">olist-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="olist-edit-distance-inline">
-        <output-dir compare="Text">olist-edit-distance-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="olist-jaccard">
-        <output-dir compare="Text">olist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="olist-jaccard-inline">
-        <output-dir compare="Text">olist-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="ulist-jaccard">
-        <output-dir compare="Text">ulist-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="ulist-jaccard-inline">
-        <output-dir compare="Text">ulist-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="word-jaccard">
-        <output-dir compare="Text">word-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="inverted-index-join-noeqjoin">
-      <compilation-unit name="word-jaccard-inline">
-        <output-dir compare="Text">word-jaccard-inline</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="list">
-    <test-case FilePath="list">
-      <compilation-unit name="any-collection-member_01">
-        <output-dir compare="Text">any-collection-member_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="get-item_01">
-        <output-dir compare="Text">get-item_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="len_01">
-        <output-dir compare="Text">len_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="len_null_01">
-        <output-dir compare="Text">len_null_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="listify_01">
-        <output-dir compare="Text">listify_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="listify_02">
-        <output-dir compare="Text">listify_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="listify_03">
-        <output-dir compare="Text">listify_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="ordered-list-constructor_01">
-        <output-dir compare="Text">ordered-list-constructor_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="ordered-list-constructor_02">
-        <output-dir compare="Text">ordered-list-constructor_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="ordered-list-constructor_03">
-        <output-dir compare="Text">ordered-list-constructor_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="scan-collection_01">
-        <output-dir compare="Text">scan-collection_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="union_01">
-        <output-dir compare="Text">union_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="union_02">
-        <output-dir compare="Text">union_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="unordered-list-constructor_01">
-        <output-dir compare="Text">unordered-list-constructor_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="unordered-list-constructor_02">
-        <output-dir compare="Text">unordered-list-constructor_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="list">
-      <compilation-unit name="unordered-list-constructor_03">
-        <output-dir compare="Text">unordered-list-constructor_03</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="misc">
-  <test-case FilePath="misc">
-      <compilation-unit name="partition-by-nonexistent-field">
-        <output-dir compare="Text">partition-by-nonexistent-field</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="float_01">
-        <output-dir compare="Text">float_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="groupby-orderby-count">
-        <output-dir compare="Text">groupby-orderby-count</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="ifthenelse_01">
-        <output-dir compare="Text">ifthenelse_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="is-null_01">
-        <output-dir compare="Text">is-null_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="nested-loop-join_01">
-        <output-dir compare="Text">nested-loop-join_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="range_01">
-        <output-dir compare="Text">range_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="tid_01">
-        <output-dir compare="Text">tid_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="misc">
-      <compilation-unit name="year_01">
-        <output-dir compare="Text">year_01</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="nestrecords">
-    <test-case FilePath="nestrecords">
-      <compilation-unit name="nestrecord">
-        <output-dir compare="Text">nestrecord</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="numeric">
-    <test-case FilePath="numeric">
-      <compilation-unit name="abs0">
-        <output-dir compare="Text">abs0</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="abs1">
-        <output-dir compare="Text">abs1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="abs2">
-        <output-dir compare="Text">abs2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="abs3">
-        <output-dir compare="Text">abs3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="abs4">
-        <output-dir compare="Text">abs4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="add_double">
-        <output-dir compare="Text">add_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="add_float">
-        <output-dir compare="Text">add_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="add_int16">
-        <output-dir compare="Text">add_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="add_int32">
-        <output-dir compare="Text">add_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="add_int64">
-        <output-dir compare="Text">add_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="add_int8">
-        <output-dir compare="Text">add_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="ceiling0">
-        <output-dir compare="Text">ceiling0</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="ceiling1">
-        <output-dir compare="Text">ceiling1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="ceiling2">
-        <output-dir compare="Text">ceiling2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="ceiling3">
-        <output-dir compare="Text">ceiling3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="ceiling4">
-        <output-dir compare="Text">ceiling4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="divide_double">
-        <output-dir compare="Text">divide_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="divide_float">
-        <output-dir compare="Text">divide_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="divide_int16">
-        <output-dir compare="Text">divide_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="divide_int32">
-        <output-dir compare="Text">divide_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="divide_int64">
-        <output-dir compare="Text">divide_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="divide_int8">
-        <output-dir compare="Text">divide_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="floor0">
-        <output-dir compare="Text">floor0</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="floor1">
-        <output-dir compare="Text">floor1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="floor2">
-        <output-dir compare="Text">floor2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="floor3">
-        <output-dir compare="Text">floor3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="floor4">
-        <output-dir compare="Text">floor4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="multiply_double">
-        <output-dir compare="Text">multiply_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="multiply_float">
-        <output-dir compare="Text">multiply_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="multiply_int16">
-        <output-dir compare="Text">multiply_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="multiply_int32">
-        <output-dir compare="Text">multiply_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="multiply_int64">
-        <output-dir compare="Text">multiply_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="multiply_int8">
-        <output-dir compare="Text">multiply_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even0">
-        <output-dir compare="Text">round-half-to-even0</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even1">
-        <output-dir compare="Text">round-half-to-even1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even2">
-        <output-dir compare="Text">round-half-to-even2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even20">
-        <output-dir compare="Text">round-half-to-even20</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even21">
-        <output-dir compare="Text">round-half-to-even21</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even22">
-        <output-dir compare="Text">round-half-to-even22</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even23">
-        <output-dir compare="Text">round-half-to-even23</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even24">
-        <output-dir compare="Text">round-half-to-even24</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even3">
-        <output-dir compare="Text">round-half-to-even3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even4">
-        <output-dir compare="Text">round-half-to-even4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round-half-to-even5">
-        <output-dir compare="Text">round-half-to-even5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round0">
-        <output-dir compare="Text">round0</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round1">
-        <output-dir compare="Text">round1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round2">
-        <output-dir compare="Text">round2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round3">
-        <output-dir compare="Text">round3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="round4">
-        <output-dir compare="Text">round4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="subtract_double">
-        <output-dir compare="Text">subtract_double</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="subtract_float">
-        <output-dir compare="Text">subtract_float</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="subtract_int16">
-        <output-dir compare="Text">subtract_int16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="subtract_int32">
-        <output-dir compare="Text">subtract_int32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="subtract_int64">
-        <output-dir compare="Text">subtract_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="subtract_int8">
-        <output-dir compare="Text">subtract_int8</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_double_01">
-        <output-dir compare="Text">unary-minus_double_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_double_02">
-        <output-dir compare="Text">unary-minus_double_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_float_01">
-        <output-dir compare="Text">unary-minus_float_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_float_02">
-        <output-dir compare="Text">unary-minus_float_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_int_01">
-        <output-dir compare="Text">unary-minus_int_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_int_02">
-        <output-dir compare="Text">unary-minus_int_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="numeric">
-      <compilation-unit name="unary-minus_null">
-        <output-dir compare="Text">unary-minus_null</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="open-closed">
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="c2c-w-optional">
-        <output-dir compare="Text">c2c-w-optional</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="c2c-wo-optional">
-        <output-dir compare="Text">c2c-wo-optional</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="c2c">
-        <output-dir compare="Text">c2c</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="open-closed">
-      <compilation-unit name="heterog-list-ordered01">
-        <output-dir compare="Text">heterog-list-ordered01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="heterog-list01">
-        <output-dir compare="Text">heterog-list01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="heterog-list02">
-        <output-dir compare="Text">heterog-list02</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="heterog-list03">
-        <output-dir compare="Text">heterog-list03</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-01">
-        <output-dir compare="Text">open-closed-01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-12">
-        <output-dir compare="Text">open-closed-12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-14">
-        <output-dir compare="Text">open-closed-14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-issue134">
-        <output-dir compare="Text">query-issue134</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-issue55">
-        <output-dir compare="Text">query-issue55</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-issue55-1">
-        <output-dir compare="Text">query-issue55-1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-issue166">
-        <output-dir compare="Text">query-issue166</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-issue208">
-        <output-dir compare="Text">query-issue208</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-issue236">
-       <output-dir compare="Text">query-issue236</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-15">
-        <output-dir compare="Text">open-closed-15</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-16">
-        <output-dir compare="Text">open-closed-16</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-17">
-        <output-dir compare="Text">open-closed-17</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-19">
-        <output-dir compare="Text">open-closed-19</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-20">
-        <output-dir compare="Text">open-closed-20</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-21">
-        <output-dir compare="Text">open-closed-21</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-22">
-        <output-dir compare="Text">open-closed-22</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-24">
-        <output-dir compare="Text">open-closed-24</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-25">
-        <output-dir compare="Text">open-closed-25</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-26">
-        <output-dir compare="Text">open-closed-26</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-28">
-        <output-dir compare="Text">open-closed-28</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-29">
-        <output-dir compare="Text">open-closed-29</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-30">
-        <output-dir compare="Text">open-closed-30</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-31">
-        <output-dir compare="Text">open-closed-31</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-32">
-        <output-dir compare="Text">open-closed-32</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="open-closed-33">
-        <output-dir compare="Text">open-closed-33</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-proposal02">
-        <output-dir compare="Text">query-proposal02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="open-closed">
-      <compilation-unit name="query-proposal">
-        <output-dir compare="Text">query-proposal</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="quantifiers">
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="everysat_01">
-        <output-dir compare="Text">everysat_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="everysat_02">
-        <output-dir compare="Text">everysat_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="everysat_03">
-        <output-dir compare="Text">everysat_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="everysat_04">
-        <output-dir compare="Text">everysat_04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="somesat_01">
-        <output-dir compare="Text">somesat_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="somesat_02">
-        <output-dir compare="Text">somesat_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="somesat_03">
-        <output-dir compare="Text">somesat_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="somesat_04">
-        <output-dir compare="Text">somesat_04</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="somesat_05">
-        <output-dir compare="Text">somesat_05</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="quantifiers">
-      <compilation-unit name="somesat_06">
-        <output-dir compare="Text">somesat_06</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="records">
-    <test-case FilePath="records">
-      <compilation-unit name="closed-record-constructor_01">
-        <output-dir compare="Text">closed-record-constructor_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="closed-record-constructor_02">
-        <output-dir compare="Text">closed-record-constructor_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="closed-record-constructor_03">
-        <output-dir compare="Text">closed-record-constructor_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="expFieldName">
-        <output-dir compare="Text">expFieldName</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="field-access-by-index_01">
-        <output-dir compare="Text">field-access-by-index_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="field-access-on-open-field">
-        <output-dir compare="Text">field-access-on-open-field</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="open-record-constructor_01">
-        <output-dir compare="Text">open-record-constructor_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="open-record-constructor_02">
-        <output-dir compare="Text">open-record-constructor_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="closed-closed-fieldname-conflict_issue173">
-        <output-dir compare="Text">closed-closed-fieldname-conflict_issue173</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-  <test-case FilePath="records">
-      <compilation-unit name="open-closed-fieldname-conflict_issue173">
-        <output-dir compare="Text">open-closed-fieldname-conflict_issue173</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="records">
-      <compilation-unit name="open-open-fieldname-conflict_issue173">
-        <output-dir compare="Text">open-open-fieldname-conflict_issue173</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="scan">
-    <test-case FilePath="scan">
-      <compilation-unit name="10">
-        <output-dir compare="Text">10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="20">
-        <output-dir compare="Text">20</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="issue238_query_1">
-        <output-dir compare="Text">issue238_query_1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="issue238_query_2">
-        <output-dir compare="Text">issue238_query_2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="invalid-scan-syntax">
-        <output-dir compare="Text">invalid-scan-syntax</output-dir>
-        <expected-error>SyntaxError</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="30">
-        <output-dir compare="Text">30</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="alltypes_01">
-        <output-dir compare="Text">alltypes_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="alltypes_02">
-        <output-dir compare="Text">alltypes_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="numeric_types_01">
-        <output-dir compare="Text">numeric_types_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="scan">
-      <compilation-unit name="spatial_types_01">
-        <output-dir compare="Text">spatial_types_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="scan">
-      <compilation-unit name="spatial_types_02">
-        <output-dir compare="Text">spatial_types_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="scan">
-      <compilation-unit name="temp_types_01">
-        <output-dir compare="Text">temp_types_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="scan">
-      <compilation-unit name="temp_types_02">
-        <output-dir compare="Text">temp_types_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-  </test-group>
-  <test-group name="semistructured">
-    <test-case FilePath="semistructured">
-      <compilation-unit name="count-nullable">
-        <output-dir compare="Text">count-nullable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="semistructured">
-      <compilation-unit name="cust-filter">
-        <output-dir compare="Text">cust-filter</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="semistructured">
-      <compilation-unit name="has-param1">
-        <output-dir compare="Text">has-param1</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="similarity">
-    <test-case FilePath="similarity">
-      <compilation-unit name="edit-distance-check_ints">
-        <output-dir compare="Text">edit-distance-check_ints</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="edit-distance-check_strings">
-        <output-dir compare="Text">edit-distance-check_strings</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="edit-distance-list-is-filterable">
-        <output-dir compare="Text">edit-distance-list-is-filterable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="edit-distance-string-is-filterable">
-        <output-dir compare="Text">edit-distance-string-is-filterable</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="edit-distance_ints">
-        <output-dir compare="Text">edit-distance_ints</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="edit-distance_strings">
-        <output-dir compare="Text">edit-distance_strings</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="fuzzyeq-edit-distance">
-        <output-dir compare="Text">fuzzyeq-edit-distance</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="fuzzyeq-similarity-jaccard">
-        <output-dir compare="Text">fuzzyeq-similarity-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="prefix-len-jaccard">
-        <output-dir compare="Text">prefix-len-jaccard</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-check_ints">
-        <output-dir compare="Text">similarity-jaccard-check_ints</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-check_query">
-        <output-dir compare="Text">similarity-jaccard-check_query</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-check_strings">
-        <output-dir compare="Text">similarity-jaccard-check_strings</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-prefix-check">
-        <output-dir compare="Text">similarity-jaccard-prefix-check</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-prefix">
-        <output-dir compare="Text">similarity-jaccard-prefix</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-sorted-check_ints">
-        <output-dir compare="Text">similarity-jaccard-sorted-check_ints</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-sorted-check_query">
-        <output-dir compare="Text">similarity-jaccard-sorted-check_query</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-sorted-check_strings">
-        <output-dir compare="Text">similarity-jaccard-sorted-check_strings</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-sorted_ints">
-        <output-dir compare="Text">similarity-jaccard-sorted_ints</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-sorted_query">
-        <output-dir compare="Text">similarity-jaccard-sorted_query</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard-sorted_strings">
-        <output-dir compare="Text">similarity-jaccard-sorted_strings</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard_ints">
-        <output-dir compare="Text">similarity-jaccard_ints</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard_query">
-        <output-dir compare="Text">similarity-jaccard_query</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="similarity">
-      <compilation-unit name="similarity-jaccard_strings">
-        <output-dir compare="Text">similarity-jaccard_strings</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="spatial">
-    <test-case FilePath="spatial">
-      <compilation-unit name="cell-aggregation-with-filtering">
-        <output-dir compare="Text">cell-aggregation-with-filtering</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="cell-aggregation">
-        <output-dir compare="Text">cell-aggregation</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="circle_accessor">
-        <output-dir compare="Text">circle_accessor</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="circle-intersect-circle">
-        <output-dir compare="Text">circle-intersect-circle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="create-rtree-index">
-        <output-dir compare="Text">create-rtree-index</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="distance-between-points">
-        <output-dir compare="Text">distance-between-points</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="line_accessor">
-        <output-dir compare="Text">line_accessor</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="line-intersect-circle">
-        <output-dir compare="Text">line-intersect-circle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="line-intersect-line">
-        <output-dir compare="Text">line-intersect-line</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="line-intersect-polygon">
-        <output-dir compare="Text">line-intersect-polygon</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="line-intersect-rectangle">
-        <output-dir compare="Text">line-intersect-rectangle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="point_accessor">
-        <output-dir compare="Text">point_accessor</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="point-equals-point">
-        <output-dir compare="Text">point-equals-point</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="point-in-circle">
-        <output-dir compare="Text">point-in-circle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="point-in-polygon">
-        <output-dir compare="Text">point-in-polygon</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="point-in-rectangle">
-        <output-dir compare="Text">point-in-rectangle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="point-on-line">
-        <output-dir compare="Text">point-on-line</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="polygon_accessor">
-        <output-dir compare="Text">polygon_accessor</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="polygon-intersect-circle">
-        <output-dir compare="Text">polygon-intersect-circle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="polygon-intersect-polygon">
-        <output-dir compare="Text">polygon-intersect-polygon</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="polygon-intersect-rectangle">
-        <output-dir compare="Text">polygon-intersect-rectangle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="rectangle_accessor">
-        <output-dir compare="Text">rectangle_accessor</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="rectangle-intersect-circle">
-        <output-dir compare="Text">rectangle-intersect-circle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="rectangle-intersect-rectangle">
-        <output-dir compare="Text">rectangle-intersect-rectangle</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="spatial">
-      <compilation-unit name="spatial-area">
-        <output-dir compare="Text">spatial-area</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="string">
-    <test-case FilePath="string">
-      <compilation-unit name="codepoint-to-string1">
-        <output-dir compare="Text">codepoint-to-string1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="codepoint-to-string2">
-        <output-dir compare="Text">codepoint-to-string2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="concat_01">
-        <output-dir compare="Text">concat_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="concat_02">
-        <output-dir compare="Text">concat_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="contains_01">
-        <output-dir compare="Text">contains_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="cpttostr01">
-        <output-dir compare="Text">cpttostr01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="cpttostr02">
-        <output-dir compare="Text">cpttostr02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="cpttostr04">
-        <output-dir compare="Text">cpttostr04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="end-with1">
-        <output-dir compare="Text">end-with1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="end-with2">
-        <output-dir compare="Text">end-with2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="end-with3">
-        <output-dir compare="Text">end-with3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="end-with4">
-        <output-dir compare="Text">end-with4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="end-with5">
-        <output-dir compare="Text">end-with5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="ends-with_01">
-        <output-dir compare="Text">ends-with_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="endwith02">
-        <output-dir compare="Text">endwith02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="endwith03">
-        <output-dir compare="Text">endwith03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="length_01">
-        <output-dir compare="Text">length_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="length_02">
-        <output-dir compare="Text">length_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="like_01">
-        <output-dir compare="Text">like_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="like_null">
-        <output-dir compare="Text">like_null</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="lowercase">
-        <output-dir compare="Text">lowercase</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches02">
-        <output-dir compare="Text">matches02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches03">
-        <output-dir compare="Text">matches03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches04">
-        <output-dir compare="Text">matches04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches05">
-        <output-dir compare="Text">matches05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches06">
-        <output-dir compare="Text">matches06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches1">
-        <output-dir compare="Text">matches1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches11">
-        <output-dir compare="Text">matches11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches2">
-        <output-dir compare="Text">matches2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches21">
-        <output-dir compare="Text">matches21</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches22">
-        <output-dir compare="Text">matches22</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches23">
-        <output-dir compare="Text">matches23</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matches3">
-        <output-dir compare="Text">matches3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="matchesnull">
-        <output-dir compare="Text">matchesnull</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="replace1">
-        <output-dir compare="Text">replace1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="replace2">
-        <output-dir compare="Text">replace2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="replace21">
-        <output-dir compare="Text">replace21</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="replace22">
-        <output-dir compare="Text">replace22</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="replace3">
-        <output-dir compare="Text">replace3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="start-with1">
-        <output-dir compare="Text">start-with1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="start-with2">
-        <output-dir compare="Text">start-with2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="start-with3">
-        <output-dir compare="Text">start-with3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="start-with4">
-        <output-dir compare="Text">start-with4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="start-with5">
-        <output-dir compare="Text">start-with5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="starts-with_01">
-        <output-dir compare="Text">starts-with_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="startwith02">
-        <output-dir compare="Text">startwith02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="string">
-      <compilation-unit name="startwith03">
-        <output-dir compare="Text">startwith03</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="string">
-      <compilation-unit name="strconcat01">
-        <output-dir compare="Text">strconcat01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="strconcat02">
-        <output-dir compare="Text">strconcat02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-concat1">
-        <output-dir compare="Text">string-concat1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-equal1">
-        <output-dir compare="Text">string-equal1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-equal2">
-        <output-dir compare="Text">string-equal2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-equal3">
-        <output-dir compare="Text">string-equal3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-equal4">
-        <output-dir compare="Text">string-equal4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-join1">
-        <output-dir compare="Text">string-join1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-to-codepoint">
-        <output-dir compare="Text">string-to-codepoint</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="string-to-codepoint1">
-        <output-dir compare="Text">string-to-codepoint1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="strlen02">
-        <output-dir compare="Text">strlen02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="strlen03">
-        <output-dir compare="Text">strlen03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="strtocpt01">
-        <output-dir compare="Text">strtocpt01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="strtocpt02">
-        <output-dir compare="Text">strtocpt02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="strtocpt03">
-        <output-dir compare="Text">strtocpt03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substr01">
-        <output-dir compare="Text">substr01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!-- Issue no 219
-    <test-case FilePath="string">
-      <compilation-unit name="substr04">
-        <output-dir compare="Text">substr04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substr05">
-        <output-dir compare="Text">substr05</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="string">
-      <compilation-unit name="substr06">
-        <output-dir compare="Text">substr06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-after-1">
-        <output-dir compare="Text">substring-after-1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-after-2">
-        <output-dir compare="Text">substring-after-2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-after-3">
-        <output-dir compare="Text">substring-after-3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-after-4">
-        <output-dir compare="Text">substring-after-4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-before-1">
-        <output-dir compare="Text">substring-before-1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-before-2">
-        <output-dir compare="Text">substring-before-2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring-before-3">
-        <output-dir compare="Text">substring-before-3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring2-1">
-        <output-dir compare="Text">substring2-1</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring2-2">
-        <output-dir compare="Text">substring2-2</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring2-3">
-        <output-dir compare="Text">substring2-3</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring2-4">
-        <output-dir compare="Text">substring2-4</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="substring_01">
-        <output-dir compare="Text">substring_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="toLowerCase02">
-        <output-dir compare="Text">toLowerCase02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="toLowerCase03">
-        <output-dir compare="Text">toLowerCase03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="string">
-      <compilation-unit name="toLowerCase04">
-        <output-dir compare="Text">toLowerCase04</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="subset-collection">
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="01">
-        <output-dir compare="Text">01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="02">
-        <output-dir compare="Text">02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="03">
-        <output-dir compare="Text">03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="04">
-        <output-dir compare="Text">04</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="05">
-        <output-dir compare="Text">05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="06">
-        <output-dir compare="Text">06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="subset-collection">
-      <compilation-unit name="07">
-        <output-dir compare="Text">07</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="tokenizers">
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="counthashed-gram-tokens_01">
-        <output-dir compare="Text">counthashed-gram-tokens_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="counthashed-gram-tokens_02">
-        <output-dir compare="Text">counthashed-gram-tokens_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="counthashed-word-tokens_01">
-        <output-dir compare="Text">counthashed-word-tokens_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="gram-tokens_01">
-        <output-dir compare="Text">gram-tokens_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="gram-tokens_02">
-        <output-dir compare="Text">gram-tokens_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="hashed-gram-tokens_01">
-        <output-dir compare="Text">hashed-gram-tokens_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="hashed-gram-tokens_02">
-        <output-dir compare="Text">hashed-gram-tokens_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="hashed-word-tokens_01">
-        <output-dir compare="Text">hashed-word-tokens_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="word-tokens_01">
-        <output-dir compare="Text">word-tokens_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tokenizers">
-      <compilation-unit name="word-tokens_02">
-        <output-dir compare="Text">word-tokens_02</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="tpch">
-    <test-case FilePath="tpch">
-      <compilation-unit name="distinct_by">
-        <output-dir compare="Text">distinct_by</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="group_no_agg">
-        <output-dir compare="Text">group_no_agg</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q10_returned_item">
-        <output-dir compare="Text">q10_returned_item</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q10_returned_item_int64">
-       <output-dir compare="Text">q10_returned_item_int64</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q11_important_stock">
-        <output-dir compare="Text">q11_important_stock</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q12_shipping">
-        <output-dir compare="Text">q12_shipping</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q13_customer_distribution">
-        <output-dir compare="Text">q13_customer_distribution</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q14_promotion_effect">
-        <output-dir compare="Text">q14_promotion_effect</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q15_top_supplier">
-        <output-dir compare="Text">q15_top_supplier</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q16_parts_supplier_relationship">
-        <output-dir compare="Text">q16_parts_supplier_relationship</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q17_small_quantity_order_revenue">
-        <output-dir compare="Text">q17_small_quantity_order_revenue</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q18_large_volume_customer">
-        <output-dir compare="Text">q18_large_volume_customer</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q19_discounted_revenue">
-        <output-dir compare="Text">q19_discounted_revenue</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q1_pricing_summary_report_nt">
-        <output-dir compare="Text">q1_pricing_summary_report_nt</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q20_potential_part_promotion">
-        <output-dir compare="Text">q20_potential_part_promotion</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q21_suppliers_who_kept_orders_waiting">
-        <output-dir compare="Text">q21_suppliers_who_kept_orders_waiting</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q22_global_sales_opportunity">
-        <output-dir compare="Text">q22_global_sales_opportunity</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q2_minimum_cost_supplier">
-        <output-dir compare="Text">q2_minimum_cost_supplier</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q3_shipping_priority_nt">
-        <output-dir compare="Text">q3_shipping_priority_nt</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q4_order_priority">
-        <output-dir compare="Text">q4_order_priority</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q5_local_supplier_volume">
-        <output-dir compare="Text">q5_local_supplier_volume</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q6_forecast_revenue_change">
-        <output-dir compare="Text">q6_forecast_revenue_change</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q7_volume_shipping">
-        <output-dir compare="Text">q7_volume_shipping</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q8_national_market_share">
-        <output-dir compare="Text">q8_national_market_share</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="tpch">
-      <compilation-unit name="q9_product_type_profit_nt">
-        <output-dir compare="Text">q9_product_type_profit_nt</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="writers">
-    <test-case FilePath="writers">
-      <compilation-unit name="print_01">
-        <output-dir compare="Text">print_01</output-dir>
-      </compilation-unit>
-    </test-case>
-<!--  TODO(madhusudancs): Enable this test when REST API supports serialized output support.
-    <test-case FilePath="writers">
-      <compilation-unit name="serialized_01">
-        <output-dir compare="Text">serialized_01</output-dir>
-      </compilation-unit>
-    </test-case>
--->
-  </test-group>
-  <test-group name="cross-dataverse">
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv01">
-        <output-dir compare="Text">cross-dv01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv02">
-        <output-dir compare="Text">cross-dv02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv03">
-        <output-dir compare="Text">cross-dv03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv04">
-        <output-dir compare="Text">cross-dv04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv07">
-        <output-dir compare="Text">cross-dv07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!--NotImplementedException: No binary comparator factory implemented for type RECORD. 
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv08">
-        <output-dir compare="Text">cross-dv08</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv09">
-        <output-dir compare="Text">cross-dv09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv11">
-        <output-dir compare="Text">cross-dv11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv12">
-        <output-dir compare="Text">cross-dv12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv13">
-        <output-dir compare="Text">cross-dv13</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv14">
-        <output-dir compare="Text">cross-dv14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv15">
-        <output-dir compare="Text">cross-dv15</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv16">
-        <output-dir compare="Text">cross-dv16</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <!--NotImplementedException: No binary comparator factory implemented for type RECORD. 
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv17">
-        <output-dir compare="Text">cross-dv17</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!--NotImplementedException: No binary comparator factory implemented for type RECORD.
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv18">
-        <output-dir compare="Text">cross-dv18</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv19">
-        <output-dir compare="Text">cross-dv19</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="cross-dv20">
-        <output-dir compare="Text">cross-dv20</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="insert_across_dataverses">
-        <output-dir compare="Text">insert_across_dataverses</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="cross-dataverse">
-      <compilation-unit name="join_across_dataverses">
-        <output-dir compare="Text">join_across_dataverses</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="user-defined-functions">
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="query-issue201">
-        <output-dir compare="Text">query-issue201</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf01">
-        <output-dir compare="Text">udf01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf02">
-        <output-dir compare="Text">udf02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!-- causes NPE: Issue 200
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf03">
-        <output-dir compare="Text">udf03</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf04">
-        <output-dir compare="Text">udf04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf05">
-        <output-dir compare="Text">udf05</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf06">
-        <output-dir compare="Text">udf06</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf07">
-        <output-dir compare="Text">udf07</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf08">
-        <output-dir compare="Text">udf08</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf09">
-        <output-dir compare="Text">udf09</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf10">
-        <output-dir compare="Text">udf10</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf11">
-        <output-dir compare="Text">udf11</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf12">
-        <output-dir compare="Text">udf12</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf13">
-        <output-dir compare="Text">udf13</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf14">
-        <output-dir compare="Text">udf14</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!-- Issue 166
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf15">
-        <output-dir compare="Text">udf15</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf16">
-        <output-dir compare="Text">udf16</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf17">
-        <output-dir compare="Text">udf17</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf18">
-        <output-dir compare="Text">udf18</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf19">
-        <output-dir compare="Text">udf19</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf20">
-        <output-dir compare="Text">udf20</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf21">
-        <output-dir compare="Text">udf21</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf22">
-        <output-dir compare="Text">udf22</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf23">
-        <output-dir compare="Text">udf23</output-dir>
-      </compilation-unit>
-    </test-case>
-    <!-- Issue 195
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf24">
-        <output-dir compare="Text">udf24</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <!-- Issue 218
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf25">
-        <output-dir compare="Text">udf25</output-dir>
-      </compilation-unit>
-    </test-case>
-    -->
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf26">
-        <output-dir compare="Text">udf26</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="udf27">
-        <output-dir compare="Text">udf27</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="user-defined-functions">
-      <compilation-unit name="f01">
-        <output-dir compare="Text">f01</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="load">
-    <test-case FilePath="load">
-      <compilation-unit name="issue14_query">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="load">
-      <compilation-unit name="issue315_query">
-        <output-dir compare="Text">none</output-dir>
-        <expected-error>edu.uci.ics.asterix.common.exceptions.AsterixException</expected-error> 
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="load">
-      <compilation-unit name="issue289_query">
-        <output-dir compare="Text">issue289_query</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="hints">
-    <test-case FilePath="hints">
-      <compilation-unit name="issue_251_dataset_hint_5">
-        <output-dir compare="Text">issue_251_dataset_hint_5</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="hints">
-      <compilation-unit name="issue_251_dataset_hint_6">
-        <output-dir compare="Text">issue_251_dataset_hint_6</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="hints">
-      <compilation-unit name="issue_251_dataset_hint_7">
-        <output-dir compare="Text">issue_251_dataset_hint_7</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="feeds">
-    <test-case FilePath="feeds">
-      <compilation-unit name="feeds_01">
-        <output-dir compare="Text">feeds_01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="feeds">
-      <compilation-unit name="feeds_02">
-        <output-dir compare="Text">feeds_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="feeds">
-      <compilation-unit name="feeds_03">
-        <output-dir compare="Text">feeds_03</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="feeds">
-      <compilation-unit name="feeds_04">
-        <output-dir compare="Text">feeds_04</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="feeds">
-      <compilation-unit name="issue_230_feeds">
-        <output-dir compare="Text">issue_230_feeds</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-  <test-group name="hdfs">
-    <test-case FilePath="hdfs">
-      <compilation-unit name="issue_245_hdfs">
-        <output-dir compare="Text">issue_245_hdfs</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="hdfs">
-      <compilation-unit name="hdfs_02">
-        <output-dir compare="Text">hdfs_02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="hdfs">
-      <compilation-unit name="hdfs_03">
-        <output-dir compare="Text">hdfs_03</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-    <test-group name="temporal">
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="accessors">
-        <output-dir compare="Text">accessors</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="adjust_timezone">
-        <output-dir compare="Text">adjust_timezone</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="calendar_duration">
-        <output-dir compare="Text">calendar_duration</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="date_functions">
-        <output-dir compare="Text">date_functions</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="datetime_functions">
-        <output-dir compare="Text">datetime_functions</output-dir>
-      </compilation-unit>
-  	</test-case>
-<!--   	<test-case FilePath="temporal">
-  		<compilation-unit name="insert_from_delimited_ds">
-        <output-dir compare="Text">insert_from_delimited_ds</output-dir>
-      </compilation-unit>
-  	</test-case> -->
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="insert_from_ext_ds">
-        <output-dir compare="Text">insert_from_ext_ds</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="interval_functions">
-        <output-dir compare="Text">interval_functions</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="temporal">
-  		<compilation-unit name="time_functions">
-        <output-dir compare="Text">time_functions</output-dir>
-      </compilation-unit>
-  	</test-case>
-  	<test-case FilePath="constructor">
-  		<compilation-unit name="interval">
-        <output-dir compare="Text">interval</output-dir>
-      </compilation-unit>
-  	</test-case>
-  </test-group>
-  <test-group name="leftouterjoin">
-    <test-case FilePath="leftouterjoin">
-      <compilation-unit name="query_issue285">
-        <output-dir compare="Text">query_issue285</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="leftouterjoin">
-      <compilation-unit name="query_issue285-2">
-        <output-dir compare="Text">query_issue285-2</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group>
-</test-suite>
-
diff --git a/asterix/asterix-aql/pom.xml b/asterix/asterix-aql/pom.xml
deleted file mode 100644
index bb6f4b5..0000000
--- a/asterix/asterix-aql/pom.xml
+++ /dev/null
@@ -1,111 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-aql</artifactId>
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>javacc-maven-plugin</artifactId>
-				<version>2.6</version>
-				<executions>
-					<execution>
-						<id>javacc</id>
-						<goals>
-							<goal>javacc</goal>
-						</goals>
-						<configuration>
-							<isStatic>false</isStatic>
-						</configuration>
-					</execution>
-					<execution>
-						<id>javacc-jjdoc</id>
-						<goals>
-							<goal>jjdoc</goal>
-						</goals>
-						<phase>process-sources</phase>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-		<pluginManagement>
-			<plugins>
-				<!--This plugin's configuration is used to store Eclipse m2e settings 
-					only. It has no influence on the Maven build itself. -->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.codehaus.mojo
-										</groupId>
-										<artifactId>
-											javacc-maven-plugin
-										</artifactId>
-										<versionRange>
-											[2.6,)
-										</versionRange>
-										<goals>
-											<goal>jjdoc</goal>
-											<goal>javacc</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore />
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-common</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-om</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-metadata</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.fuzzyjoin</groupId>
-			<artifactId>fuzzyjoin-core</artifactId>
-			<version>0.0.3</version>
-			<scope>compile</scope>
-		</dependency>
-	</dependencies>
-
-</project>
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Clause.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Clause.java
deleted file mode 100644
index 8be2d40..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/base/Clause.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package edu.uci.ics.asterix.aql.base;
-
-public interface Clause extends IAqlExpression {
-    public ClauseType getClauseType();
-
-    public enum ClauseType {
-        FOR_CLAUSE,
-        LET_CLAUSE,
-        WHERE_CLAUSE,
-        ORDER_BY_CLAUSE,
-        LIMIT_CLAUSE,
-        DIE_CLAUSE,
-        GROUP_BY_CLAUSE,
-        DISTINCT_BY_CLAUSE,
-        UPDATE_CLAUSE
-    }
-
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateIndexStatement.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateIndexStatement.java
deleted file mode 100644
index ffd0534..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/CreateIndexStatement.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package edu.uci.ics.asterix.aql.expression;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import edu.uci.ics.asterix.aql.base.Statement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlVisitorWithVoidReturn;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-
-public class CreateIndexStatement implements Statement {
-
-    private Identifier indexName;
-    private boolean needToCreate = true;
-    private Identifier dataverseName;
-    private Identifier datasetName;
-    private List<String> fieldExprs = new ArrayList<String>();
-    private IndexType indexType = IndexType.BTREE;
-    private boolean ifNotExists;
-
-    // Specific to NGram indexes.
-    private int gramLength;
-
-    public CreateIndexStatement() {
-    }
-
-    public void setGramLength(int gramLength) {
-        this.gramLength = gramLength;
-    }
-
-    public int getGramLength() {
-        return gramLength;
-    }
-
-    public void setNeedToCreate(boolean needToCreate) {
-        this.needToCreate = needToCreate;
-    }
-
-    public boolean getNeedToCreate() {
-        return needToCreate;
-    }
-
-    public Identifier getIndexName() {
-        return indexName;
-    }
-
-    public void setIndexName(Identifier indexName) {
-        this.indexName = indexName;
-    }
-
-    public Identifier getDataverseName() {
-        return dataverseName;
-    }
-
-    public void setDataverseName(Identifier dataverseName) {
-        this.dataverseName = dataverseName;
-    }
-
-    public Identifier getDatasetName() {
-        return datasetName;
-    }
-
-    public void setDatasetName(Identifier datasetName) {
-        this.datasetName = datasetName;
-    }
-
-    public List<String> getFieldExprs() {
-        return fieldExprs;
-    }
-
-    public void addFieldExpr(String fe) {
-        this.fieldExprs.add(fe);
-    }
-
-    public IndexType getIndexType() {
-        return indexType;
-    }
-
-    public void setIndexType(IndexType indexType) {
-        this.indexType = indexType;
-    }
-
-    public void setIfNotExists(boolean ifNotExists) {
-        this.ifNotExists = ifNotExists;
-    }
-
-    public boolean getIfNotExists() {
-        return this.ifNotExists;
-    }
-
-    @Override
-    public Kind getKind() {
-        return Kind.CREATE_INDEX;
-    }
-
-    @Override
-    public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
-        return visitor.visitCreateIndexStatement(this, arg);
-    }
-
-    @Override
-    public <T> void accept(IAqlVisitorWithVoidReturn<T> visitor, T arg) throws AsterixException {
-        visitor.visit(this, arg);
-    }
-
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
deleted file mode 100644
index 48b7909..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DeleteStatement.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package edu.uci.ics.asterix.aql.expression;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Statement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlVisitorWithVoidReturn;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-
-public class DeleteStatement implements Statement {
-
-    private VariableExpr vars;
-    private Identifier dataverseName;
-    private Identifier datasetName;
-    private Expression condition;
-    private Clause dieClause;
-    private int varCounter;
-
-    public DeleteStatement(VariableExpr vars, Identifier dataverseName, Identifier datasetName, Expression condition,
-            Clause dieClause, int varCounter) {
-        this.vars = vars;
-        this.dataverseName = dataverseName;
-        this.datasetName = datasetName;
-        this.condition = condition;
-        this.dieClause = dieClause;
-        this.varCounter = varCounter;
-    }
-
-    @Override
-    public Kind getKind() {
-        return Kind.DELETE;
-    }
-
-    public VariableExpr getVariableExpr() {
-        return vars;
-    }
-
-    public Identifier getDataverseName() {
-        return dataverseName;
-    }
-
-    public Identifier getDatasetName() {
-        return datasetName;
-    }
-
-    public Expression getCondition() {
-        return condition;
-    }
-
-    public Clause getDieClause() {
-        return dieClause;
-    }
-
-    public int getVarCounter() {
-        return varCounter;
-    }
-
-    @Override
-    public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
-        return visitor.visitDeleteStatement(this, arg);
-    }
-
-    @Override
-    public <T> void accept(IAqlVisitorWithVoidReturn<T> visitor, T arg) throws AsterixException {
-        visitor.visit(this, arg);
-    }
-
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DieClause.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DieClause.java
deleted file mode 100644
index 3a77d58..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/DieClause.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package edu.uci.ics.asterix.aql.expression;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlVisitorWithVoidReturn;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-
-public class DieClause implements Clause {
-    private Expression expr;
-
-    public DieClause() {
-    }
-
-    public DieClause(Expression dieexpr) {
-        this.expr = dieexpr;
-    }
-
-    public Expression getDieExpr() {
-        return expr;
-    }
-
-    public void setDieExpr(Expression dieexpr) {
-        this.expr = dieexpr;
-    }
-
-    @Override
-    public ClauseType getClauseType() {
-        return ClauseType.DIE_CLAUSE;
-    }
-
-    @Override
-    public <T> void accept(IAqlVisitorWithVoidReturn<T> visitor, T arg) throws AsterixException {
-        visitor.visit(this, arg);
-    }
-
-    @Override
-    public <R, T> R accept(IAqlExpressionVisitor<R, T> visitor, T arg) throws AsterixException {
-        return visitor.visitDieClause(this, arg);
-    }
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/AQLPrintVisitor.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/AQLPrintVisitor.java
deleted file mode 100644
index ab55e34..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/AQLPrintVisitor.java
+++ /dev/null
@@ -1,537 +0,0 @@
-package edu.uci.ics.asterix.aql.expression.visitor;
-
-import java.io.PrintWriter;
-import java.util.Iterator;
-import java.util.List;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Literal;
-import edu.uci.ics.asterix.aql.base.Statement;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.InternalDetailsDecl;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OperatorType;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause.OrderModifier;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition.RecordKind;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeExpression;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-
-public class AQLPrintVisitor implements IAqlVisitorWithVoidReturn<Integer> {
-    // private int level =0;
-    private final PrintWriter out;
-
-    public AQLPrintVisitor() {
-        out = new PrintWriter(System.out);
-    }
-
-    public AQLPrintVisitor(PrintWriter out) {
-        this.out = out;
-    }
-
-    private String skip(int step) {
-        StringBuffer sb = new StringBuffer();
-        for (int i = 0; i < step; i++)
-            sb.append("  ");
-        return sb.toString();
-    }
-
-    @Override
-    public void visit(Query q, Integer step) throws AsterixException {
-        if (q.getBody() != null) {
-            out.println("Query:");
-            q.getBody().accept(this, step);
-        } else {
-            out.println("No query.");
-        }
-    }
-
-    @Override
-    public void visit(LiteralExpr l, Integer step) {
-        Literal lc = l.getValue();
-        if (lc.getLiteralType().equals(Literal.Type.TRUE) || lc.getLiteralType().equals(Literal.Type.FALSE)
-                || lc.getLiteralType().equals(Literal.Type.NULL)) {
-            out.println(skip(step) + "LiteralExpr [" + l.getValue().getLiteralType() + "]");
-        } else {
-            out.println(skip(step) + "LiteralExpr [" + l.getValue().getLiteralType() + "] ["
-                    + l.getValue().getStringValue() + "] ");
-        }
-    }
-
-    @Override
-    public void visit(VariableExpr v, Integer step) {
-        out.println(skip(step) + "Variable [ Name=" + v.getVar().getValue() + " Id=" + v.getVar().getId() + " ]");
-    }
-
-    @Override
-    public void visit(ListConstructor lc, Integer step) throws AsterixException {
-        boolean ordered = false;
-        if (lc.getType().equals(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR)) {
-            ordered = true;
-        }
-
-        out.println(skip(step) + (ordered == true ? "OrderedListConstructor " : "UnorderedListConstructor ") + "[");
-        for (Expression e : lc.getExprList()) {
-            e.accept(this, step + 1);
-        }
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(RecordConstructor rc, Integer step) throws AsterixException {
-        out.println(skip(step) + "RecordConstructor [");
-        // fbList accept visitor
-        for (FieldBinding fb : rc.getFbList()) {
-            out.println(skip(step + 1) + "(");
-            fb.getLeftExpr().accept(this, step + 2);
-            out.println(skip(step + 2) + ":");
-            fb.getRightExpr().accept(this, step + 2);
-            out.println(skip(step + 1) + ")");
-        }
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(CallExpr pf, Integer step) throws AsterixException {
-        out.println(skip(step) + "FunctionCall " + pf.getFunctionSignature().toString() + "[");
-        for (Expression expr : pf.getExprList()) {
-            expr.accept(this, step + 1);
-        }
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(OperatorExpr ifbo, Integer step) throws AsterixException {
-        List<Expression> exprList = ifbo.getExprList();
-        List<OperatorType> opList = ifbo.getOpList();
-        if (ifbo.isCurrentop()) {
-            out.println(skip(step) + "OperatorExpr [");
-            exprList.get(0).accept(this, step + 1);
-            for (int i = 1; i < exprList.size(); i++) {
-                out.println(skip(step + 1) + opList.get(i - 1));
-                exprList.get(i).accept(this, step + 1);
-            }
-            out.println(skip(step) + "]");
-        } else {
-            exprList.get(0).accept(this, step);
-        }
-
-    }
-
-    @Override
-    public void visit(IfExpr ifexpr, Integer step) throws AsterixException {
-        out.println(skip(step) + "IfExpr [");
-        out.println(skip(step + 1) + "Condition:");
-        ifexpr.getCondExpr().accept(this, step + 2);
-        out.println(skip(step + 1) + "Then:");
-        ifexpr.getThenExpr().accept(this, step + 2);
-        out.println(skip(step + 1) + "Else:");
-        ifexpr.getElseExpr().accept(this, step + 2);
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(FLWOGRExpression flwor, Integer step) throws AsterixException {
-        out.println(skip(step) + "FLWOGR [");
-        for (Clause cl : flwor.getClauseList()) {
-            cl.accept(this, step + 1);
-        }
-        out.println(skip(step + 1) + "Return");
-        flwor.getReturnExpr().accept(this, step + 2);
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(QuantifiedExpression qe, Integer step) throws AsterixException {
-        out.println(skip(step) + "QuantifiedExpression " + qe.getQuantifier() + " [");
-        // quantifiedList accept visitor
-        for (QuantifiedPair pair : qe.getQuantifiedList()) {
-            out.print(skip(step + 1) + "[");
-            pair.getVarExpr().accept(this, 0);
-            out.println(skip(step + 1) + "In");
-            pair.getExpr().accept(this, step + 2);
-            out.println(skip(step + 1) + "]");
-        }
-        out.println(skip(step + 1) + "Satifies [");
-        qe.getSatisfiesExpr().accept(this, step + 2);
-        out.println(skip(step + 1) + "]");// for satifies
-        out.println(skip(step) + "]");// for quantifiedExpr
-    }
-
-    @Override
-    public void visit(ForClause fc, Integer step) throws AsterixException {
-        out.print(skip(step) + "For ");
-        fc.getVarExpr().accept(this, 0);
-        out.println(skip(step + 1) + "In ");
-        fc.getInExpr().accept(this, step + 1);
-    }
-
-    @Override
-    public void visit(LetClause lc, Integer step) throws AsterixException {
-        out.print(skip(step) + "Let ");
-        lc.getVarExpr().accept(this, 0);
-        out.println(skip(step + 1) + ":= ");
-        lc.getBindingExpr().accept(this, step + 1);
-    }
-
-    @Override
-    public void visit(WhereClause wc, Integer step) throws AsterixException {
-        out.println(skip(step) + "Where ");
-        wc.getWhereExpr().accept(this, step + 1);
-    }
-
-    @Override
-    public void visit(OrderbyClause oc, Integer step) throws AsterixException {
-        out.println(skip(step) + "Orderby");
-        List<OrderModifier> mlist = oc.getModifierList();
-        List<Expression> list = oc.getOrderbyList();
-        for (int i = 0; i < list.size(); i++) {
-            list.get(i).accept(this, step + 1);
-            out.println(skip(step + 1) + mlist.get(i).toString());
-        }
-        out.println(skip(step));
-    }
-
-    @Override
-    public void visit(GroupbyClause gc, Integer step) throws AsterixException {
-        out.println(skip(step) + "Groupby");
-        for (GbyVariableExpressionPair pair : gc.getGbyPairList()) {
-
-            if (pair.getVar() != null) {
-                pair.getVar().accept(this, step + 1);
-                out.println(skip(step + 1) + ":=");
-            }
-
-            pair.getExpr().accept(this, step + 1);
-        }
-        if (!gc.getDecorPairList().isEmpty()) {
-            out.println(skip(step + 1) + "Decor");
-            for (GbyVariableExpressionPair pair : gc.getDecorPairList()) {
-                if (pair.getVar() != null) {
-                    pair.getVar().accept(this, step + 1);
-                    out.println(skip(step + 1) + ":=");
-                }
-                pair.getExpr().accept(this, step + 1);
-            }
-        }
-        out.println(skip(step + 1) + "With");
-        for (VariableExpr exp : gc.getWithVarList()) {
-            exp.accept(this, step + 1);
-        }
-        out.println(skip(step));
-    }
-
-    @Override
-    public void visit(LimitClause lc, Integer step) throws AsterixException {
-        out.println(skip(step) + "Limit");
-        lc.getLimitExpr().accept(this, step + 1);
-        if (lc.getOffset() != null) {
-            out.println(skip(step + 1) + "Offset");
-            lc.getOffset().accept(this, step + 2);
-        }
-    }
-
-    @Override
-    public void visit(DieClause lc, Integer step) throws AsterixException {
-        out.println(skip(step) + "Limit");
-        lc.getDieExpr().accept(this, step + 1);
-    }
-
-    @Override
-    public void visit(FunctionDecl fd, Integer step) throws AsterixException {
-        out.println(skip(step) + "FunctionDecl " + fd.getSignature().getName() + "(" + fd.getParamList().toString()
-                + ") {");
-        fd.getFuncBody().accept(this, step + 1);
-        out.println(skip(step) + "}");
-        out.println();
-    }
-
-    @Override
-    public void visit(UnaryExpr u, Integer step) throws AsterixException {
-        if (u.getSign() != null) {
-            out.print(skip(step) + u.getSign() + " ");
-            u.getExpr().accept(this, 0);
-        } else
-            u.getExpr().accept(this, step);
-    }
-
-    @Override
-    public void visit(FieldAccessor fa, Integer step) throws AsterixException {
-        out.println(skip(step) + "FieldAccessor [");
-        fa.getExpr().accept(this, step + 1);
-        out.println(skip(step + 1) + "Field=" + ((FieldAccessor) fa).getIdent().getValue());
-        out.println(skip(step) + "]");
-
-    }
-
-    @Override
-    public void visit(IndexAccessor fa, Integer step) throws AsterixException {
-        out.println(skip(step) + "IndexAccessor [");
-        fa.getExpr().accept(this, step + 1);
-        out.print(skip(step + 1) + "Index: ");
-        out.println((((IndexAccessor) fa).isAny() ? "ANY" : ((IndexAccessor) fa).getIndex()));
-
-        out.println(skip(step) + "]");
-
-    }
-
-    @Override
-    public void visit(TypeDecl t, Integer step) throws AsterixException {
-        out.println(skip(step) + "TypeDecl " + t.getIdent() + " [");
-        t.getTypeDef().accept(this, step + 1);
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(TypeReferenceExpression t, Integer arg) throws AsterixException {
-        out.print(t.getIdent());
-    }
-
-    @Override
-    public void visit(RecordTypeDefinition r, Integer step) throws AsterixException {
-        if (r.getRecordKind() == RecordKind.CLOSED) {
-            out.print(skip(step) + "closed ");
-        } else {
-            out.print(skip(step) + "open ");
-        }
-        out.println("RecordType {");
-        Iterator<String> nameIter = r.getFieldNames().iterator();
-        Iterator<TypeExpression> typeIter = r.getFieldTypes().iterator();
-        Iterator<Boolean> isnullableIter = r.getNullableFields().iterator();
-        boolean first = true;
-        while (nameIter.hasNext()) {
-            if (first) {
-                first = false;
-            } else {
-                out.println(",");
-            }
-            String name = nameIter.next();
-            TypeExpression texp = typeIter.next();
-            Boolean isNullable = isnullableIter.next();
-            out.print(skip(step + 1) + name + " : ");
-            texp.accept(this, step + 2);
-            if (isNullable) {
-                out.print("?");
-            }
-        }
-        out.println();
-        out.println(skip(step) + "}");
-    }
-
-    @Override
-    public void visit(OrderedListTypeDefinition x, Integer step) throws AsterixException {
-        out.print("OrderedList [");
-        x.getItemTypeExpression().accept(this, step + 2);
-        out.println("]");
-    }
-
-    @Override
-    public void visit(UnorderedListTypeDefinition x, Integer step) throws AsterixException {
-        out.print("UnorderedList <");
-        x.getItemTypeExpression().accept(this, step + 2);
-        out.println(">");
-    }
-
-    @Override
-    public void visit(DatasetDecl dd, Integer step) throws AsterixException {
-        if (dd.getDatasetType() == DatasetType.INTERNAL) {
-            out.println(skip(step) + "DatasetDecl" + dd.getName() + "(" + dd.getItemTypeName() + ")"
-                    + " partitioned by " + ((InternalDetailsDecl) dd.getDatasetDetailsDecl()).getPartitioningExprs());
-        } else if (dd.getDatasetType() == DatasetType.EXTERNAL) {
-            out.println(skip(step) + "DatasetDecl" + dd.getName() + "(" + dd.getItemTypeName() + ")"
-                    + "is an external dataset");
-        } else if (dd.getDatasetType() == DatasetType.FEED) {
-            out.println(skip(step) + "DatasetDecl" + dd.getName() + "(" + dd.getItemTypeName() + ")"
-                    + "is an feed dataset");
-        }
-    }
-
-    @Override
-    public void visit(DataverseDecl dv, Integer step) throws AsterixException {
-        out.println(skip(step) + "DataverseUse " + dv.getDataverseName());
-    }
-
-    @Override
-    public void visit(NodegroupDecl ngd, Integer step) throws AsterixException {
-        out.println(skip(step) + "Nodegroup " + ngd.getNodeControllerNames());
-    }
-
-    @Override
-    public void visit(LoadFromFileStatement stmtLoad, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(WriteFromQueryResultStatement stmtLoad, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(DropStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(WriteStatement ws, Integer step) throws AsterixException {
-        out.print(skip(step) + "WriteOutputTo " + ws.getNcName() + ":" + ws.getFileName());
-        if (ws.getWriterClassName() != null) {
-            out.print(" using " + ws.getWriterClassName());
-        }
-        out.println();
-    }
-
-    @Override
-    public void visit(SetStatement ss, Integer step) throws AsterixException {
-        out.println(skip(step) + "Set " + ss.getPropName() + "=" + ss.getPropValue());
-    }
-
-    @Override
-    public void visit(CreateIndexStatement cis, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(ControlFeedStatement ss, Integer step) throws AsterixException {
-        out.println(skip(step) + ss.getOperationType() + skip(step) + ss.getDatasetName());
-    }
-
-    @Override
-    public void visit(UnionExpr u, Integer step) throws AsterixException {
-        out.println(skip(step) + "Union [");
-        for (Expression expr : u.getExprs()) {
-            expr.accept(this, step + 1);
-        }
-        out.println(skip(step) + "]");
-    }
-
-    @Override
-    public void visit(DistinctClause dc, Integer step) throws AsterixException {
-        out.print(skip(step) + "Distinct ");
-        for (Expression expr : dc.getDistinctByExpr())
-            expr.accept(this, step + 1);
-    }
-
-    @Override
-    public void visit(InsertStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(DeleteStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(UpdateStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(UpdateClause updateClause, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(CreateDataverseStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void visit(IndexDropStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void visit(NodeGroupDropStatement deleteStatement, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void visit(DataverseDropStatement deleteStatement, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void visit(TypeDropStatement deleteStatement, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-    }
-
-    @Override
-    public void visit(CreateFunctionStatement cfs, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(FunctionDropStatement fds, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-    @Override
-    public void visit(BeginFeedStatement stmtDel, Integer arg) throws AsterixException {
-        // TODO Auto-generated method stub
-
-    }
-
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlExpressionVisitor.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlExpressionVisitor.java
deleted file mode 100644
index 6c8b844..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlExpressionVisitor.java
+++ /dev/null
@@ -1,159 +0,0 @@
-package edu.uci.ics.asterix.aql.expression.visitor;
-
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-
-public interface IAqlExpressionVisitor<R, T> {
-
-    R visitQuery(Query q, T arg) throws AsterixException;
-
-    R visitFunctionDecl(FunctionDecl fd, T arg) throws AsterixException;
-
-    R visitTypeDecl(TypeDecl td, T arg) throws AsterixException;
-
-    R visitNodegroupDecl(NodegroupDecl ngd, T arg) throws AsterixException;
-
-    R visitDatasetDecl(DatasetDecl dd, T arg) throws AsterixException;
-
-    R visitLoadFromFileStatement(LoadFromFileStatement stmtLoad, T arg) throws AsterixException;
-
-    R visitLoadFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, T arg) throws AsterixException;
-
-    R visitDropStatement(DropStatement del, T arg) throws AsterixException;
-
-    R visitInsertStatement(InsertStatement insert, T arg) throws AsterixException;
-
-    R visitDeleteStatement(DeleteStatement del, T arg) throws AsterixException;
-
-    R visitUpdateStatement(UpdateStatement update, T arg) throws AsterixException;
-
-    R visitUpdateClause(UpdateClause del, T arg) throws AsterixException;
-
-    R visitTypeReferenceExpression(TypeReferenceExpression tre, T arg) throws AsterixException;
-
-    R visitRecordTypeDefiniton(RecordTypeDefinition tre, T arg) throws AsterixException;
-
-    R visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte, T arg) throws AsterixException;
-
-    R visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte, T arg) throws AsterixException;
-
-    R visitLiteralExpr(LiteralExpr l, T arg) throws AsterixException;
-
-    R visitVariableExpr(VariableExpr v, T arg) throws AsterixException;
-
-    R visitListConstructor(ListConstructor lc, T arg) throws AsterixException;
-
-    R visitRecordConstructor(RecordConstructor rc, T arg) throws AsterixException;
-
-    R visitOperatorExpr(OperatorExpr ifbo, T arg) throws AsterixException;
-
-    R visitFieldAccessor(FieldAccessor fa, T arg) throws AsterixException;
-
-    R visitIndexAccessor(IndexAccessor ia, T arg) throws AsterixException;
-
-    R visitIfExpr(IfExpr ifexpr, T arg) throws AsterixException;
-
-    R visitFlworExpression(FLWOGRExpression flwor, T arg) throws AsterixException;
-
-    R visitQuantifiedExpression(QuantifiedExpression qe, T arg) throws AsterixException;
-
-    R visitForClause(ForClause fc, T arg) throws AsterixException;
-
-    R visitLetClause(LetClause lc, T arg) throws AsterixException;
-
-    R visitWhereClause(WhereClause wc, T arg) throws AsterixException;
-
-    R visitOrderbyClause(OrderbyClause oc, T arg) throws AsterixException;
-
-    R visitGroupbyClause(GroupbyClause gc, T arg) throws AsterixException;
-
-    R visitLimitClause(LimitClause lc, T arg) throws AsterixException;
-
-    R visitDistinctClause(DistinctClause dc, T arg) throws AsterixException;
-
-    R visitUnaryExpr(UnaryExpr u, T arg) throws AsterixException;
-
-    R visitUnionExpr(UnionExpr u, T arg) throws AsterixException;
-
-    R visitCreateIndexStatement(CreateIndexStatement cis, T arg) throws AsterixException;
-
-    R visitCreateDataverseStatement(CreateDataverseStatement del, T arg) throws AsterixException;
-
-    R visitIndexDropStatement(IndexDropStatement del, T arg) throws AsterixException;
-
-    R visitNodeGroupDropStatement(NodeGroupDropStatement del, T arg) throws AsterixException;
-
-    R visitDataverseDropStatement(DataverseDropStatement del, T arg) throws AsterixException;
-
-    R visitTypeDropStatement(TypeDropStatement del, T arg) throws AsterixException;
-
-    R visitWriteStatement(WriteStatement ws, T arg) throws AsterixException;
-
-    R visitSetStatement(SetStatement ss, T arg) throws AsterixException;
-
-    R visitBeginFeedStatement(BeginFeedStatement bf, T arg) throws AsterixException;
-    
-    R visitControlFeedStatement(ControlFeedStatement del, T arg) throws AsterixException;
-
-    R visitCallExpr(CallExpr pf, T arg) throws AsterixException;
-
-    R visitDataverseDecl(DataverseDecl dv, T arg) throws AsterixException;
-
-    R visitWriteFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, T arg) throws AsterixException;
-
-    R visitDieClause(DieClause stmtLoad, T arg) throws AsterixException;
-
-    R visit(CreateFunctionStatement cfs, T arg) throws AsterixException;
-
-    R visitFunctionDropStatement(FunctionDropStatement del, T arg) throws AsterixException;
-
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlVisitorWithVoidReturn.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlVisitorWithVoidReturn.java
deleted file mode 100644
index d4891ac..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/expression/visitor/IAqlVisitorWithVoidReturn.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package edu.uci.ics.asterix.aql.expression.visitor;
-
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-
-public interface IAqlVisitorWithVoidReturn<T> {
-
-    void visit(Query q, T arg) throws AsterixException;
-
-    void visit(FunctionDecl fd, T arg) throws AsterixException;
-
-    void visit(TypeDecl t, T arg) throws AsterixException;
-
-    void visit(NodegroupDecl ngd, T arg) throws AsterixException;
-
-    void visit(DropStatement stmtDel, T arg) throws AsterixException;
-
-    void visit(LoadFromFileStatement stmtLoad, T arg) throws AsterixException;
-
-    void visit(InsertStatement stmtInsert, T arg) throws AsterixException;
-
-    void visit(DeleteStatement stmtDelete, T arg) throws AsterixException;
-
-    void visit(UpdateStatement stmtUpdate, T arg) throws AsterixException;
-
-    void visit(UpdateClause updateClause, T arg) throws AsterixException;
-
-    void visit(WriteFromQueryResultStatement stmtLoad, T arg) throws AsterixException;
-
-    void visit(DatasetDecl dd, T arg) throws AsterixException;
-
-    void visit(LiteralExpr l, T arg) throws AsterixException;
-
-    void visit(VariableExpr v, T arg) throws AsterixException;
-
-    void visit(ListConstructor lc, T arg) throws AsterixException;
-
-    void visit(RecordConstructor rc, T arg) throws AsterixException;
-
-    void visit(CallExpr pf, T arg) throws AsterixException;
-
-    void visit(OperatorExpr ifbo, T arg) throws AsterixException;
-
-    void visit(FieldAccessor fa, T arg) throws AsterixException;
-
-    void visit(IndexAccessor fa, T arg) throws AsterixException;
-
-    void visit(IfExpr ifexpr, T arg) throws AsterixException;
-
-    void visit(FLWOGRExpression flwor, T arg) throws AsterixException;
-
-    void visit(QuantifiedExpression qe, T arg) throws AsterixException;
-
-    void visit(ForClause fc, T arg) throws AsterixException;
-
-    void visit(LetClause lc, T arg) throws AsterixException;
-
-    void visit(WhereClause wc, T arg) throws AsterixException;
-
-    void visit(OrderbyClause oc, T arg) throws AsterixException;
-
-    void visit(GroupbyClause gc, T arg) throws AsterixException;
-
-    void visit(LimitClause lc, T arg) throws AsterixException;
-
-    void visit(DistinctClause dc, T arg) throws AsterixException;
-
-    void visit(UnaryExpr u, T arg) throws AsterixException;
-
-    void visit(UnionExpr u, T arg) throws AsterixException;
-
-    void visit(TypeReferenceExpression t, T arg) throws AsterixException;
-
-    void visit(RecordTypeDefinition r, T arg) throws AsterixException;
-
-    void visit(OrderedListTypeDefinition x, T arg) throws AsterixException;
-
-    void visit(UnorderedListTypeDefinition x, T arg) throws AsterixException;
-
-    void visit(DataverseDecl dv, T arg) throws AsterixException;
-
-    void visit(SetStatement ss, T arg) throws AsterixException;
-
-    void visit(WriteStatement ws, T arg) throws AsterixException;
-
-    void visit(CreateIndexStatement cis, T arg) throws AsterixException;
-
-    void visit(CreateDataverseStatement cdvStmt, T arg) throws AsterixException;
-
-    void visit(IndexDropStatement stmtDel, T arg) throws AsterixException;
-
-    void visit(NodeGroupDropStatement stmtDel, T arg) throws AsterixException;
-
-    void visit(DataverseDropStatement stmtDel, T arg) throws AsterixException;
-
-    void visit(TypeDropStatement stmtDel, T arg) throws AsterixException;
-    
-    void visit(BeginFeedStatement stmtDel, T arg) throws AsterixException;
-
-    void visit(ControlFeedStatement stmtDel, T arg) throws AsterixException;
-
-    void visit(DieClause stmtDel, T arg) throws AsterixException;
-
-    void visit(CreateFunctionStatement cfs, T arg) throws AsterixException;
-
-    void visit(FunctionDropStatement fds, T arg) throws AsterixException;
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewriter.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewriter.java
deleted file mode 100644
index 62e40fa..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/AqlRewriter.java
+++ /dev/null
@@ -1,570 +0,0 @@
-package edu.uci.ics.asterix.aql.rewrites;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Expression.Kind;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VarIdentifier;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.aql.util.FunctionUtils;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.functions.AsterixFunction;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-
-public final class AqlRewriter {
-
-    private final Query topExpr;
-    private final List<FunctionDecl> declaredFunctions;
-    private final AqlRewritingContext context;
-    private final MetadataTransactionContext mdTxnCtx;
-
-    private enum DfsColor {
-        WHITE,
-        GRAY,
-        BLACK
-    }
-
-    public AqlRewriter(List<FunctionDecl> declaredFunctions, Query topExpr, MetadataTransactionContext mdTxnCtx) {
-        this.topExpr = topExpr;
-        context = new AqlRewritingContext(topExpr.getVarCounter());
-        this.declaredFunctions = declaredFunctions;
-        this.mdTxnCtx = mdTxnCtx;
-    }
-
-    public Query getExpr() {
-        return topExpr;
-    }
-
-    public int getVarCounter() {
-        return context.getVarCounter();
-    }
-
-    public void rewrite() throws AsterixException {
-        wrapInLets();
-        inlineDeclaredUdfs();
-    }
-
-    private void wrapInLets() {
-        // If the top expression of the main statement is not a FLWOR, it wraps
-        // it into a let clause.
-        if (topExpr == null) {
-            return;
-        }
-        Expression body = topExpr.getBody();
-        if (body.getKind() != Kind.FLWOGR_EXPRESSION) {
-            VarIdentifier var = context.newVariable();
-            VariableExpr v = new VariableExpr(var);
-            LetClause c1 = new LetClause(v, body);
-            ArrayList<Clause> clauseList = new ArrayList<Clause>(1);
-            clauseList.add(c1);
-            FLWOGRExpression newBody = new FLWOGRExpression(clauseList, new VariableExpr(var));
-            topExpr.setBody(newBody);
-        }
-    }
-
-    private void inlineDeclaredUdfs() throws AsterixException {
-        if (topExpr == null) {
-            return;
-        }
-        List<FunctionSignature> funIds = new ArrayList<FunctionSignature>();
-        for (FunctionDecl fdecl : declaredFunctions) {
-            funIds.add(fdecl.getSignature());
-        }
-
-        List<FunctionDecl> otherFDecls = new ArrayList<FunctionDecl>();
-        buildOtherUdfs(topExpr.getBody(), otherFDecls, funIds);
-        declaredFunctions.addAll(otherFDecls);
-        if (!declaredFunctions.isEmpty()) {
-            InlineUdfsVisitor visitor = new InlineUdfsVisitor(context);
-            while (topExpr.accept(visitor, declaredFunctions)) {
-                // loop until no more changes
-            }
-        }
-    }
-
-    private void buildOtherUdfs(Expression expression, List<FunctionDecl> functionDecls,
-            List<FunctionSignature> declaredFunctions) throws AsterixException {
-        if (expression == null) {
-            return;
-        }
-
-        Set<FunctionSignature> functionCalls = getFunctionCalls(expression);
-        for (FunctionSignature signature : functionCalls) {
-
-            if (declaredFunctions != null && declaredFunctions.contains(signature)) {
-                continue;
-            }
-
-            FunctionDecl functionDecl = lookupUserDefinedFunctionDecl(signature);
-            if (functionDecl != null) {
-                if (functionDecls.contains(functionDecl)) {
-                    throw new AsterixException(" Detected recursvity!");
-                } else {
-                    functionDecls.add(functionDecl);
-                    buildOtherUdfs(functionDecl.getFuncBody(), functionDecls, declaredFunctions);
-                }
-            } else {
-                if (isBuiltinFunction(signature)) {
-                    continue;
-                } else {
-                    throw new AsterixException(" unknown function " + signature);
-                }
-            }
-        }
-    }
-
-    private FunctionDecl lookupUserDefinedFunctionDecl(FunctionSignature signature) throws AsterixException {
-        if (signature.getNamespace() == null) {
-            return null;
-        }
-        Function function = MetadataManager.INSTANCE.getFunction(mdTxnCtx, signature);
-        if (function == null) {
-            return null;
-        }
-        return FunctionUtils.getFunctionDecl(function);
-
-    }
-
-    private boolean isBuiltinFunction(FunctionSignature functionSignature) {
-        if (AsterixBuiltinFunctions.isBuiltinCompilerFunction(new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-                functionSignature.getName(), functionSignature.getArity()))) {
-            return true;
-        }
-
-        if (AsterixBuiltinFunctions.isBuiltinCompilerFunction(new FunctionIdentifier(
-                AlgebricksBuiltinFunctions.ALGEBRICKS_NS, functionSignature.getName(), functionSignature.getArity()))) {
-            return true;
-        }
-
-        return false;
-
-    }
-
-    private Set<FunctionSignature> getFunctionCalls(Expression expression) throws AsterixException {
-        Map<AsterixFunction, DfsColor> color = new HashMap<AsterixFunction, DfsColor>();
-        Map<AsterixFunction, List<AsterixFunction>> arcs = new HashMap<AsterixFunction, List<AsterixFunction>>();
-        GatherFunctionCalls gfc = new GatherFunctionCalls();
-        expression.accept(gfc, null);
-        return gfc.getCalls();
-    }
-
-    private static class GatherFunctionCalls implements IAqlExpressionVisitor<Void, Void> {
-
-        private final Set<FunctionSignature> calls = new HashSet<FunctionSignature>();
-
-        public GatherFunctionCalls() {
-        }
-
-        @Override
-        public Void visitCallExpr(CallExpr pf, Void arg) throws AsterixException {
-            calls.add(pf.getFunctionSignature());
-            for (Expression e : pf.getExprList()) {
-                e.accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitCreateIndexStatement(CreateIndexStatement cis, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitDataverseDecl(DataverseDecl dv, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitDeleteStatement(DeleteStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitDistinctClause(DistinctClause dc, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitDropStatement(DropStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitDatasetDecl(DatasetDecl dd, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitFieldAccessor(FieldAccessor fa, Void arg) throws AsterixException {
-            fa.getExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitFlworExpression(FLWOGRExpression flwor, Void arg) throws AsterixException {
-            for (Clause c : flwor.getClauseList()) {
-                c.accept(this, arg);
-            }
-            flwor.getReturnExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitForClause(ForClause fc, Void arg) throws AsterixException {
-            fc.getInExpr().accept(this, arg);
-            if (fc.getPosVarExpr() != null) {
-                fc.getPosVarExpr().accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitFunctionDecl(FunctionDecl fd, Void arg) throws AsterixException {
-            fd.getFuncBody().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitGroupbyClause(GroupbyClause gc, Void arg) throws AsterixException {
-            for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
-                p.getExpr().accept(this, arg);
-            }
-            for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
-                p.getExpr().accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitIfExpr(IfExpr ifexpr, Void arg) throws AsterixException {
-            ifexpr.getCondExpr().accept(this, arg);
-            ifexpr.getThenExpr().accept(this, arg);
-            ifexpr.getElseExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitIndexAccessor(IndexAccessor ia, Void arg) throws AsterixException {
-            ia.getExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitInsertStatement(InsertStatement insert, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitLetClause(LetClause lc, Void arg) throws AsterixException {
-            lc.getBindingExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitLimitClause(LimitClause lc, Void arg) throws AsterixException {
-            lc.getLimitExpr().accept(this, arg);
-            if (lc.getOffset() != null) {
-                lc.getOffset().accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitDieClause(DieClause lc, Void arg) throws AsterixException {
-            lc.getDieExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitListConstructor(ListConstructor lc, Void arg) throws AsterixException {
-            for (Expression e : lc.getExprList()) {
-                e.accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitLiteralExpr(LiteralExpr l, Void arg) throws AsterixException {
-            // do nothing
-            return null;
-        }
-
-        @Override
-        public Void visitLoadFromFileStatement(LoadFromFileStatement stmtLoad, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitNodegroupDecl(NodegroupDecl ngd, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitOperatorExpr(OperatorExpr op, Void arg) throws AsterixException {
-            for (Expression e : op.getExprList()) {
-                e.accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitOrderbyClause(OrderbyClause oc, Void arg) throws AsterixException {
-            for (Expression e : oc.getOrderbyList()) {
-                e.accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitQuantifiedExpression(QuantifiedExpression qe, Void arg) throws AsterixException {
-            for (QuantifiedPair qp : qe.getQuantifiedList()) {
-                qp.getExpr().accept(this, arg);
-            }
-            qe.getSatisfiesExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitQuery(Query q, Void arg) throws AsterixException {
-            q.getBody().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitRecordConstructor(RecordConstructor rc, Void arg) throws AsterixException {
-            for (FieldBinding fb : rc.getFbList()) {
-                fb.getLeftExpr().accept(this, arg);
-                fb.getRightExpr().accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitRecordTypeDefiniton(RecordTypeDefinition tre, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitSetStatement(SetStatement ss, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitTypeDecl(TypeDecl td, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitTypeReferenceExpression(TypeReferenceExpression tre, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitUnaryExpr(UnaryExpr u, Void arg) throws AsterixException {
-            u.getExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitUnionExpr(UnionExpr u, Void arg) throws AsterixException {
-            for (Expression e : u.getExprs()) {
-                e.accept(this, arg);
-            }
-            return null;
-        }
-
-        @Override
-        public Void visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitUpdateClause(UpdateClause del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitUpdateStatement(UpdateStatement update, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitVariableExpr(VariableExpr v, Void arg) throws AsterixException {
-            // do nothing
-            return null;
-        }
-
-        @Override
-        public Void visitWhereClause(WhereClause wc, Void arg) throws AsterixException {
-            wc.getWhereExpr().accept(this, arg);
-            return null;
-        }
-
-        @Override
-        public Void visitWriteFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, Void arg)
-                throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitWriteStatement(WriteStatement ws, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        public Set<FunctionSignature> getCalls() {
-            return calls;
-        }
-
-        @Override
-        public Void visitLoadFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, Void arg)
-                throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitCreateDataverseStatement(CreateDataverseStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitIndexDropStatement(IndexDropStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitNodeGroupDropStatement(NodeGroupDropStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitDataverseDropStatement(DataverseDropStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitTypeDropStatement(TypeDropStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitControlFeedStatement(ControlFeedStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visit(CreateFunctionStatement cfs, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitFunctionDropStatement(FunctionDropStatement del, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-        @Override
-        public Void visitBeginFeedStatement(BeginFeedStatement bf, Void arg) throws AsterixException {
-            // TODO Auto-generated method stub
-            return null;
-        }
-
-    }
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
deleted file mode 100644
index 5742ac6..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/CloneAndSubstituteVariablesVisitor.java
+++ /dev/null
@@ -1,595 +0,0 @@
-package edu.uci.ics.asterix.aql.rewrites;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.IAqlExpression;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VarIdentifier;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-
-public class CloneAndSubstituteVariablesVisitor implements
-        IAqlExpressionVisitor<Pair<IAqlExpression, List<VariableSubstitution>>, List<VariableSubstitution>> {
-
-    private AqlRewritingContext context;
-
-    public CloneAndSubstituteVariablesVisitor(AqlRewritingContext context) {
-        this.context = context;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitFieldAccessor(FieldAccessor fa,
-            List<VariableSubstitution> arg) throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p = fa.getExpr().accept(this, arg);
-        FieldAccessor newF = new FieldAccessor((Expression) p.first, fa.getIdent());
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newF, p.second);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitFlworExpression(FLWOGRExpression flwor,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<Clause> newClauses = new ArrayList<Clause>(flwor.getClauseList().size());
-        List<VariableSubstitution> ongoing = arg;
-        for (Clause c : flwor.getClauseList()) {
-            Pair<IAqlExpression, List<VariableSubstitution>> p1 = c.accept(this, ongoing);
-            ongoing = p1.second;
-            newClauses.add((Clause) p1.first);
-        }
-        Pair<IAqlExpression, List<VariableSubstitution>> p2 = flwor.getReturnExpr().accept(this, ongoing);
-        Expression newReturnExpr = (Expression) p2.first;
-        FLWOGRExpression newFlwor = new FLWOGRExpression(newClauses, newReturnExpr);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newFlwor, p2.second);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitForClause(ForClause fc, List<VariableSubstitution> arg)
-            throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = fc.getInExpr().accept(this, arg);
-        VarIdentifier vi = fc.getVarExpr().getVar();
-        // we need new variables
-        VarIdentifier newVar = context.mapOldId(vi.getId(), vi.getValue());
-
-        VariableSubstitution vs = findVarSubst(arg, vi);
-        List<VariableSubstitution> newSubs;
-        if (vs == null) {
-            newSubs = arg;
-        } else {
-            // This for clause is overriding a binding, so we don't subst. that
-            // one anymore.
-            newSubs = eliminateSubstFromList(vi, arg);
-        }
-
-        VariableExpr newVe = new VariableExpr(newVar);
-        ForClause newFor = new ForClause(newVe, (Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newFor, newSubs);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitLetClause(LetClause lc, List<VariableSubstitution> arg)
-            throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = lc.getBindingExpr().accept(this, arg);
-        VarIdentifier vi = lc.getVarExpr().getVar();
-        VarIdentifier newVar = context.mapOldId(vi.getId(), vi.getValue());
-
-        VariableSubstitution vs = findVarSubst(arg, vi);
-        List<VariableSubstitution> newSubs;
-        if (vs == null) {
-            newSubs = arg;
-        } else {
-            newSubs = eliminateSubstFromList(vi, arg);
-        }
-
-        VariableExpr newVe = new VariableExpr(newVar);
-        LetClause newLet = new LetClause(newVe, (Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newLet, newSubs);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitGroupbyClause(GroupbyClause gc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<VariableSubstitution> newSubs = arg;
-        List<GbyVariableExpressionPair> newGbyList = substInVarExprPair(gc.getGbyPairList(), arg, newSubs);
-        List<GbyVariableExpressionPair> newDecorList = substInVarExprPair(gc.getDecorPairList(), arg, newSubs);
-        List<VariableExpr> wList = new LinkedList<VariableExpr>();
-        for (VariableExpr w : gc.getWithVarList()) {
-            VarIdentifier newVar = context.getRewrittenVar(w.getVar().getId());
-            wList.add(new VariableExpr(newVar));
-        }
-        GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, wList, gc.hasHashGroupByHint());
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newGroup, newSubs);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitQuantifiedExpression(QuantifiedExpression qe,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<QuantifiedPair> oldPairs = qe.getQuantifiedList();
-        List<QuantifiedPair> newPairs = new ArrayList<QuantifiedPair>(oldPairs.size());
-        List<VarIdentifier> newVis = new LinkedList<VarIdentifier>();
-        List<VariableSubstitution> newSubs = arg;
-        for (QuantifiedPair t : oldPairs) {
-            VarIdentifier newVar = context.mapOldVarIdentifier(t.getVarExpr().getVar());
-            newVis.add(newVar);
-            newSubs = eliminateSubstFromList(newVar, newSubs);
-            Pair<IAqlExpression, List<VariableSubstitution>> p1 = t.getExpr().accept(this, newSubs);
-            QuantifiedPair t2 = new QuantifiedPair(new VariableExpr(newVar), (Expression) p1.first);
-            newPairs.add(t2);
-        }
-        Pair<IAqlExpression, List<VariableSubstitution>> p2 = qe.getSatisfiesExpr().accept(this, newSubs);
-        QuantifiedExpression qe2 = new QuantifiedExpression(qe.getQuantifier(), newPairs, (Expression) p2.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(qe2, newSubs);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitVariableExpr(VariableExpr v,
-            List<VariableSubstitution> arg) throws AsterixException {
-        VariableSubstitution vs = findVarSubst(arg, v.getVar());
-        VarIdentifier var;
-        if (vs != null) {
-            // it is a variable subst from the list
-            var = vs.getNewVar();
-        } else {
-            // it is a var. from the context
-            var = context.getRewrittenVar(v.getVar().getId());
-            if(var == null){
-                var = v.getVar();
-            }
-        }
-        VariableExpr ve = new VariableExpr(var);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(ve, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitWhereClause(WhereClause wc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = wc.getWhereExpr().accept(this, arg);
-        WhereClause newW = new WhereClause((Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newW, p1.second);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitCallExpr(CallExpr pf, List<VariableSubstitution> arg)
-            throws AsterixException {
-        List<Expression> exprList = visitAndCloneExprList(pf.getExprList(), arg);
-        CallExpr f = new CallExpr(pf.getFunctionSignature(), exprList);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(f, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitFunctionDecl(FunctionDecl fd,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<VarIdentifier> newList = new ArrayList<VarIdentifier>(fd.getParamList().size());
-        for (VarIdentifier vi : fd.getParamList()) {
-            VariableSubstitution vs = findVarSubst(arg, vi);
-            if (vs == null) {
-                throw new AsterixException("Parameter " + vi + " does not appear in the substitution list.");
-            }
-            newList.add(vs.getNewVar());
-        }
-
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = fd.getFuncBody().accept(this, arg);
-        FunctionDecl newF = new FunctionDecl(fd.getSignature(), newList, (Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newF, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitIfExpr(IfExpr ifexpr, List<VariableSubstitution> arg)
-            throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = ifexpr.getCondExpr().accept(this, arg);
-        Pair<IAqlExpression, List<VariableSubstitution>> p2 = ifexpr.getThenExpr().accept(this, arg);
-        Pair<IAqlExpression, List<VariableSubstitution>> p3 = ifexpr.getElseExpr().accept(this, arg);
-        IfExpr i = new IfExpr((Expression) p1.first, (Expression) p2.first, (Expression) p3.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(i, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitIndexAccessor(IndexAccessor ia,
-            List<VariableSubstitution> arg) throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = ia.getExpr().accept(this, arg);
-        IndexAccessor i = new IndexAccessor((Expression) p1.first, ia.getIndex());
-        i.setAny(ia.isAny());
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(i, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitLimitClause(LimitClause lc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = lc.getLimitExpr().accept(this, arg);
-        Pair<IAqlExpression, List<VariableSubstitution>> p2 = lc.getOffset().accept(this, arg);
-        LimitClause c = new LimitClause((Expression) p1.first, (Expression) p2.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(c, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDieClause(DieClause lc, List<VariableSubstitution> arg)
-            throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = lc.getDieExpr().accept(this, arg);
-        DieClause c = new DieClause((Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(c, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitListConstructor(ListConstructor lc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<Expression> oldExprList = lc.getExprList();
-        List<Expression> exprs = visitAndCloneExprList(oldExprList, arg);
-        ListConstructor c = new ListConstructor(lc.getType(), exprs);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(c, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitLiteralExpr(LiteralExpr l,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // LiteralExpr e = new LiteralExpr(l.getValue());
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(l, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitOperatorExpr(OperatorExpr op,
-            List<VariableSubstitution> arg) throws AsterixException {
-        ArrayList<Expression> oldExprList = op.getExprList();
-        ArrayList<Expression> exprs = new ArrayList<Expression>(oldExprList.size());
-        for (Expression e : oldExprList) {
-            Pair<IAqlExpression, List<VariableSubstitution>> p1 = e.accept(this, arg);
-            exprs.add((Expression) p1.first);
-        }
-        OperatorExpr oe = new OperatorExpr(exprs, op.getExprBroadcastIdx(), op.getOpList());
-        oe.setCurrentop(op.isCurrentop());
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(oe, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitOrderbyClause(OrderbyClause oc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<Expression> exprList = visitAndCloneExprList(oc.getOrderbyList(), arg);
-        OrderbyClause oc2 = new OrderbyClause(exprList, oc.getModifierList());
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(oc2, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitQuery(Query q, List<VariableSubstitution> arg)
-            throws AsterixException {
-        Query newQ = new Query();
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = q.getBody().accept(this, arg);
-        newQ.setBody((Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newQ, p1.second);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitRecordConstructor(RecordConstructor rc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<FieldBinding> oldFbs = rc.getFbList();
-        ArrayList<FieldBinding> newFbs = new ArrayList<FieldBinding>(oldFbs.size());
-        for (FieldBinding fb : oldFbs) {
-            Pair<IAqlExpression, List<VariableSubstitution>> p1 = fb.getLeftExpr().accept(this, arg);
-            Pair<IAqlExpression, List<VariableSubstitution>> p2 = fb.getRightExpr().accept(this, arg);
-            FieldBinding fb2 = new FieldBinding((Expression) p1.first, (Expression) p2.first);
-            newFbs.add(fb2);
-        }
-        RecordConstructor newRc = new RecordConstructor(newFbs);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newRc, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitUnaryExpr(UnaryExpr u, List<VariableSubstitution> arg)
-            throws AsterixException {
-        Pair<IAqlExpression, List<VariableSubstitution>> p1 = u.getExpr().accept(this, arg);
-        UnaryExpr newU = new UnaryExpr(u.getSign(), (Expression) p1.first);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newU, arg);
-    }
-
-    private List<Expression> visitAndCloneExprList(List<Expression> oldExprList, List<VariableSubstitution> arg)
-            throws AsterixException {
-        List<Expression> exprs = new ArrayList<Expression>(oldExprList.size());
-        for (Expression e : oldExprList) {
-            Pair<IAqlExpression, List<VariableSubstitution>> p1 = e.accept(this, arg);
-            exprs.add((Expression) p1.first);
-        }
-        return exprs;
-    }
-
-    private static VariableSubstitution findVarSubst(List<VariableSubstitution> varSubstList, VarIdentifier v) {
-        VariableSubstitution res = null;
-        for (VariableSubstitution s : varSubstList) {
-            if (s.getOldVar().getValue().equals(v.getValue())) {
-                res = s;
-                break;
-            }
-        }
-        return res;
-    }
-
-    private static List<VariableSubstitution> eliminateSubstFromList(VarIdentifier vi, List<VariableSubstitution> arg) {
-        List<VariableSubstitution> newArg = new LinkedList<VariableSubstitution>();
-        for (VariableSubstitution vs1 : arg) {
-            if (!vs1.getOldVar().getValue().equals(vi.getValue())) {
-                newArg.add(vs1);
-            }
-        }
-        return newArg;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitTypeDecl(TypeDecl td, List<VariableSubstitution> arg)
-            throws AsterixException {
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitRecordTypeDefiniton(RecordTypeDefinition tre,
-            List<VariableSubstitution> arg) throws AsterixException {
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitTypeReferenceExpression(TypeReferenceExpression tre,
-            List<VariableSubstitution> arg) throws AsterixException {
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitNodegroupDecl(NodegroupDecl ngd,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitLoadFromFileStatement(LoadFromFileStatement stmtLoad,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDropStatement(DropStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitControlFeedStatement(ControlFeedStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    private List<GbyVariableExpressionPair> substInVarExprPair(List<GbyVariableExpressionPair> gbyVeList,
-            List<VariableSubstitution> arg, List<VariableSubstitution> newSubs) throws AsterixException {
-        List<GbyVariableExpressionPair> veList = new LinkedList<GbyVariableExpressionPair>();
-        for (GbyVariableExpressionPair vep : gbyVeList) {
-            VariableExpr oldGbyVar = vep.getVar();
-            VariableExpr newGbyVar = null;
-            if (oldGbyVar != null) {
-                VarIdentifier newVar = context.mapOldVarIdentifier(oldGbyVar.getVar());
-                newSubs = eliminateSubstFromList(newVar, newSubs);
-                newGbyVar = new VariableExpr(newVar);
-            }
-            Pair<IAqlExpression, List<VariableSubstitution>> p1 = vep.getExpr().accept(this, newSubs);
-            GbyVariableExpressionPair ve2 = new GbyVariableExpressionPair(newGbyVar, (Expression) p1.first);
-            veList.add(ve2);
-        }
-        return veList;
-
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitWriteFromQueryResultStatement(
-            WriteFromQueryResultStatement stmtLoad, List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitCreateIndexStatement(CreateIndexStatement cis,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitUnionExpr(UnionExpr u, List<VariableSubstitution> arg)
-            throws AsterixException {
-        List<Expression> exprList = visitAndCloneExprList(u.getExprs(), arg);
-        UnionExpr newU = new UnionExpr(exprList);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(newU, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDistinctClause(DistinctClause dc,
-            List<VariableSubstitution> arg) throws AsterixException {
-        List<Expression> exprList = visitAndCloneExprList(dc.getDistinctByExpr(), arg);
-        DistinctClause dc2 = new DistinctClause(exprList);
-        return new Pair<IAqlExpression, List<VariableSubstitution>>(dc2, arg);
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitOrderedListTypeDefiniton(
-            OrderedListTypeDefinition olte, List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitUnorderedListTypeDefiniton(
-            UnorderedListTypeDefinition ulte, List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitInsertStatement(InsertStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDeleteStatement(DeleteStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitUpdateStatement(UpdateStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitUpdateClause(UpdateClause del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDataverseDecl(DataverseDecl dv,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitSetStatement(SetStatement ss,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitWriteStatement(WriteStatement ws,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDatasetDecl(DatasetDecl dd,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitLoadFromQueryResultStatement(
-            WriteFromQueryResultStatement stmtLoad, List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitCreateDataverseStatement(CreateDataverseStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitIndexDropStatement(IndexDropStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitNodeGroupDropStatement(NodeGroupDropStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitDataverseDropStatement(DataverseDropStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitTypeDropStatement(TypeDropStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visit(CreateFunctionStatement cfs,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitFunctionDropStatement(FunctionDropStatement del,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Pair<IAqlExpression, List<VariableSubstitution>> visitBeginFeedStatement(BeginFeedStatement bf,
-            List<VariableSubstitution> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-}
diff --git a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/InlineUdfsVisitor.java b/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/InlineUdfsVisitor.java
deleted file mode 100644
index f178d88..0000000
--- a/asterix/asterix-aql/src/main/java/edu/uci/ics/asterix/aql/rewrites/InlineUdfsVisitor.java
+++ /dev/null
@@ -1,534 +0,0 @@
-package edu.uci.ics.asterix.aql.rewrites;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import edu.uci.ics.asterix.aql.base.Clause;
-import edu.uci.ics.asterix.aql.base.Expression;
-import edu.uci.ics.asterix.aql.base.Expression.Kind;
-import edu.uci.ics.asterix.aql.base.IAqlExpression;
-import edu.uci.ics.asterix.aql.expression.BeginFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CallExpr;
-import edu.uci.ics.asterix.aql.expression.ControlFeedStatement;
-import edu.uci.ics.asterix.aql.expression.CreateDataverseStatement;
-import edu.uci.ics.asterix.aql.expression.CreateFunctionStatement;
-import edu.uci.ics.asterix.aql.expression.CreateIndexStatement;
-import edu.uci.ics.asterix.aql.expression.DatasetDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDecl;
-import edu.uci.ics.asterix.aql.expression.DataverseDropStatement;
-import edu.uci.ics.asterix.aql.expression.DeleteStatement;
-import edu.uci.ics.asterix.aql.expression.DieClause;
-import edu.uci.ics.asterix.aql.expression.DistinctClause;
-import edu.uci.ics.asterix.aql.expression.DropStatement;
-import edu.uci.ics.asterix.aql.expression.FLWOGRExpression;
-import edu.uci.ics.asterix.aql.expression.FieldAccessor;
-import edu.uci.ics.asterix.aql.expression.FieldBinding;
-import edu.uci.ics.asterix.aql.expression.ForClause;
-import edu.uci.ics.asterix.aql.expression.FunctionDecl;
-import edu.uci.ics.asterix.aql.expression.FunctionDropStatement;
-import edu.uci.ics.asterix.aql.expression.GbyVariableExpressionPair;
-import edu.uci.ics.asterix.aql.expression.GroupbyClause;
-import edu.uci.ics.asterix.aql.expression.IfExpr;
-import edu.uci.ics.asterix.aql.expression.IndexAccessor;
-import edu.uci.ics.asterix.aql.expression.IndexDropStatement;
-import edu.uci.ics.asterix.aql.expression.InsertStatement;
-import edu.uci.ics.asterix.aql.expression.LetClause;
-import edu.uci.ics.asterix.aql.expression.LimitClause;
-import edu.uci.ics.asterix.aql.expression.ListConstructor;
-import edu.uci.ics.asterix.aql.expression.LiteralExpr;
-import edu.uci.ics.asterix.aql.expression.LoadFromFileStatement;
-import edu.uci.ics.asterix.aql.expression.NodeGroupDropStatement;
-import edu.uci.ics.asterix.aql.expression.NodegroupDecl;
-import edu.uci.ics.asterix.aql.expression.OperatorExpr;
-import edu.uci.ics.asterix.aql.expression.OrderbyClause;
-import edu.uci.ics.asterix.aql.expression.OrderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.QuantifiedExpression;
-import edu.uci.ics.asterix.aql.expression.QuantifiedPair;
-import edu.uci.ics.asterix.aql.expression.Query;
-import edu.uci.ics.asterix.aql.expression.RecordConstructor;
-import edu.uci.ics.asterix.aql.expression.RecordTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.SetStatement;
-import edu.uci.ics.asterix.aql.expression.TypeDecl;
-import edu.uci.ics.asterix.aql.expression.TypeDropStatement;
-import edu.uci.ics.asterix.aql.expression.TypeReferenceExpression;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr;
-import edu.uci.ics.asterix.aql.expression.UnionExpr;
-import edu.uci.ics.asterix.aql.expression.UnorderedListTypeDefinition;
-import edu.uci.ics.asterix.aql.expression.UpdateClause;
-import edu.uci.ics.asterix.aql.expression.UpdateStatement;
-import edu.uci.ics.asterix.aql.expression.VarIdentifier;
-import edu.uci.ics.asterix.aql.expression.VariableExpr;
-import edu.uci.ics.asterix.aql.expression.WhereClause;
-import edu.uci.ics.asterix.aql.expression.WriteFromQueryResultStatement;
-import edu.uci.ics.asterix.aql.expression.WriteStatement;
-import edu.uci.ics.asterix.aql.expression.visitor.IAqlExpressionVisitor;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-
-public class InlineUdfsVisitor implements IAqlExpressionVisitor<Boolean, List<FunctionDecl>> {
-
-    private final AqlRewritingContext context;
-    private final CloneAndSubstituteVariablesVisitor cloneVisitor;
-
-    public InlineUdfsVisitor(AqlRewritingContext context) {
-        this.context = context;
-        this.cloneVisitor = new CloneAndSubstituteVariablesVisitor(context);
-    }
-
-    @Override
-    public Boolean visitQuery(Query q, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(q.getBody(), arg);
-        q.setBody(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitFunctionDecl(FunctionDecl fd, List<FunctionDecl> arg) throws AsterixException {
-        // Careful, we should only do this after analyzing the graph of function
-        // calls.
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(fd.getFuncBody(), arg);
-        fd.setFuncBody(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitListConstructor(ListConstructor lc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, ArrayList<Expression>> p = newExprList(lc.getExprList(), arg);
-        lc.setExprList(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitRecordConstructor(RecordConstructor rc, List<FunctionDecl> arg) throws AsterixException {
-        boolean changed = false;
-        for (FieldBinding b : rc.getFbList()) {
-        	Pair<Boolean, Expression> leftExprInlined = inlineUdfsInExpr(b.getLeftExpr(), arg);
-        	b.setLeftExpr(leftExprInlined.second);
-        	changed = changed | leftExprInlined.first;
-        	Pair<Boolean, Expression> rightExprInlined = inlineUdfsInExpr(b.getRightExpr(), arg);
-        	b.setRightExpr(rightExprInlined.second);
-        	changed = changed | rightExprInlined.first;
-        	
-        	/*
-        	if (b.getLeftExpr().accept(this, arg)) {
-                changed = true;
-            }
-            if (b.getRightExpr().accept(this, arg)) {
-                changed = true;
-            }*/
-        }
-        return changed;
-    }
-
-    @Override
-    public Boolean visitCallExpr(CallExpr pf, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, ArrayList<Expression>> p = newExprList(pf.getExprList(), arg);
-        pf.setExprList(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitOperatorExpr(OperatorExpr ifbo, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, ArrayList<Expression>> p = newExprList(ifbo.getExprList(), arg);
-        ifbo.setExprList(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitFieldAccessor(FieldAccessor fa, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(fa.getExpr(), arg);
-        fa.setExpr(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitIndexAccessor(IndexAccessor fa, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(fa.getExpr(), arg);
-        fa.setExpr(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitIfExpr(IfExpr ifexpr, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p1 = inlineUdfsInExpr(ifexpr.getCondExpr(), arg);
-        ifexpr.setCondExpr(p1.second);
-        Pair<Boolean, Expression> p2 = inlineUdfsInExpr(ifexpr.getThenExpr(), arg);
-        ifexpr.setThenExpr(p2.second);
-        Pair<Boolean, Expression> p3 = inlineUdfsInExpr(ifexpr.getElseExpr(), arg);
-        ifexpr.setElseExpr(p3.second);
-        return p1.first || p2.first || p3.first;
-    }
-
-    @Override
-    public Boolean visitFlworExpression(FLWOGRExpression flwor, List<FunctionDecl> arg) throws AsterixException {
-        boolean changed = false;
-        for (Clause c : flwor.getClauseList()) {
-            if (c.accept(this, arg)) {
-                changed = true;
-            }
-        }
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(flwor.getReturnExpr(), arg);
-        flwor.setReturnExpr(p.second);
-        return changed || p.first;
-    }
-
-    @Override
-    public Boolean visitQuantifiedExpression(QuantifiedExpression qe, List<FunctionDecl> arg) throws AsterixException {
-        boolean changed = false;
-        for (QuantifiedPair t : qe.getQuantifiedList()) {
-            Pair<Boolean, Expression> p = inlineUdfsInExpr(t.getExpr(), arg);
-            t.setExpr(p.second);
-            if (p.first) {
-                changed = true;
-            }
-        }
-        Pair<Boolean, Expression> p2 = inlineUdfsInExpr(qe.getSatisfiesExpr(), arg);
-        qe.setSatisfiesExpr(p2.second);
-        return changed || p2.first;
-    }
-
-    @Override
-    public Boolean visitForClause(ForClause fc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(fc.getInExpr(), arg);
-        fc.setInExpr(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitLetClause(LetClause lc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(lc.getBindingExpr(), arg);
-        lc.setBindingExpr(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitWhereClause(WhereClause wc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p = inlineUdfsInExpr(wc.getWhereExpr(), arg);
-        wc.setWhereExpr(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitOrderbyClause(OrderbyClause oc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, ArrayList<Expression>> p = newExprList(oc.getOrderbyList(), arg);
-        oc.setOrderbyList(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitGroupbyClause(GroupbyClause gc, List<FunctionDecl> arg) throws AsterixException {
-        boolean changed = false;
-        for (GbyVariableExpressionPair p : gc.getGbyPairList()) {
-            Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), arg);
-            p.setExpr(be.second);
-            if (be.first) {
-                changed = true;
-            }
-        }
-        for (GbyVariableExpressionPair p : gc.getDecorPairList()) {
-            Pair<Boolean, Expression> be = inlineUdfsInExpr(p.getExpr(), arg);
-            p.setExpr(be.second);
-            if (be.first) {
-                changed = true;
-            }
-        }
-        return changed;
-    }
-
-    @Override
-    public Boolean visitLimitClause(LimitClause lc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p1 = inlineUdfsInExpr(lc.getLimitExpr(), arg);
-        lc.setLimitExpr(p1.second);
-        boolean changed = p1.first;
-        if (lc.getOffset() != null) {
-            Pair<Boolean, Expression> p2 = inlineUdfsInExpr(lc.getOffset(), arg);
-            lc.setOffset(p2.second);
-            changed = changed || p2.first;
-        }
-        return changed;
-    }
-
-    @Override
-    public Boolean visitDieClause(DieClause lc, List<FunctionDecl> arg) throws AsterixException {
-        Pair<Boolean, Expression> p1 = inlineUdfsInExpr(lc.getDieExpr(), arg);
-        lc.setDieExpr(p1.second);
-        return p1.first;
-    }
-
-    @Override
-    public Boolean visitUnaryExpr(UnaryExpr u, List<FunctionDecl> arg) throws AsterixException {
-        return u.getExpr().accept(this, arg);
-    }
-
-    @Override
-    public Boolean visitUnionExpr(UnionExpr u, List<FunctionDecl> fds) throws AsterixException {
-        Pair<Boolean, ArrayList<Expression>> p = newExprList(u.getExprs(), fds);
-        u.setExprs(p.second);
-        return p.first;
-    }
-
-    @Override
-    public Boolean visitDistinctClause(DistinctClause dc, List<FunctionDecl> arg) throws AsterixException {
-        boolean changed = false;
-        for (Expression expr : dc.getDistinctByExpr()) {
-            changed = expr.accept(this, arg);
-        }
-        return changed;
-    }
-
-    @Override
-    public Boolean visitVariableExpr(VariableExpr v, List<FunctionDecl> arg) throws AsterixException {
-        return false;
-    }
-
-    @Override
-    public Boolean visitLiteralExpr(LiteralExpr l, List<FunctionDecl> arg) throws AsterixException {
-        return false;
-    }
-
-    private Pair<Boolean, Expression> inlineUdfsInExpr(Expression expr, List<FunctionDecl> arg) throws AsterixException {
-        if (expr.getKind() != Kind.CALL_EXPRESSION) {
-            boolean r = expr.accept(this, arg);
-            return new Pair<Boolean, Expression>(r, expr);
-        } else {
-            CallExpr f = (CallExpr) expr;
-            FunctionDecl implem = findFuncDeclaration(f.getFunctionSignature(), arg);
-            if (implem == null) {
-                boolean r = expr.accept(this, arg);
-                return new Pair<Boolean, Expression>(r, expr);
-            } else { // it's one of the functions we want to inline
-                List<Clause> clauses = new ArrayList<Clause>();
-                Iterator<VarIdentifier> paramIter = implem.getParamList().iterator();
-                // List<VariableExpr> effectiveArgs = new
-                // ArrayList<VariableExpr>(f.getExprList().size());
-                List<VariableSubstitution> subts = new ArrayList<VariableSubstitution>(f.getExprList().size());
-                for (Expression e : f.getExprList()) {
-                    VarIdentifier param = paramIter.next();
-                    // Obs: we could do smth about passing also literals, or let
-                    // variable inlining to take care of this.
-                    if (e.getKind() == Kind.VARIABLE_EXPRESSION) {
-                        subts.add(new VariableSubstitution(param, ((VariableExpr) e).getVar()));
-                    } else {
-                        VarIdentifier newV = context.newVariable();
-                        Pair<IAqlExpression, List<VariableSubstitution>> p1 = e.accept(cloneVisitor,
-                                new ArrayList<VariableSubstitution>());
-                        LetClause c = new LetClause(new VariableExpr(newV), (Expression) p1.first);
-                        clauses.add(c);
-                        subts.add(new VariableSubstitution(param, newV));
-                    }
-                }
-                Pair<IAqlExpression, List<VariableSubstitution>> p2 = implem.getFuncBody().accept(cloneVisitor, subts);
-                Expression resExpr;
-                if (clauses.isEmpty()) {
-                    resExpr = (Expression) p2.first;
-                } else {
-                    resExpr = new FLWOGRExpression(clauses, (Expression) p2.first);
-                }
-                return new Pair<Boolean, Expression>(true, resExpr);
-            }
-        }
-    }
-
-    private Pair<Boolean, ArrayList<Expression>> newExprList(List<Expression> exprList, List<FunctionDecl> fds)
-            throws AsterixException {
-        ArrayList<Expression> newList = new ArrayList<Expression>();
-        boolean changed = false;
-        for (Expression e : exprList) {
-            Pair<Boolean, Expression> p = inlineUdfsInExpr(e, fds);
-            newList.add(p.second);
-            if (p.first) {
-                changed = true;
-            }
-        }
-        return new Pair<Boolean, ArrayList<Expression>>(changed, newList);
-    }
-
-    private static FunctionDecl findFuncDeclaration(FunctionSignature fid, List<FunctionDecl> sequence) {
-        for (FunctionDecl f : sequence) {
-            if (f.getSignature().equals(fid)) {
-                return f;
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public Boolean visitCreateIndexStatement(CreateIndexStatement cis, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitDataverseDecl(DataverseDecl dv, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitDeleteStatement(DeleteStatement del, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitDropStatement(DropStatement del, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitDatasetDecl(DatasetDecl dd, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitInsertStatement(InsertStatement insert, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitLoadFromFileStatement(LoadFromFileStatement stmtLoad, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitNodegroupDecl(NodegroupDecl ngd, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitOrderedListTypeDefiniton(OrderedListTypeDefinition olte, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitRecordTypeDefiniton(RecordTypeDefinition tre, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitSetStatement(SetStatement ss, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitTypeDecl(TypeDecl td, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitTypeReferenceExpression(TypeReferenceExpression tre, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitUnorderedListTypeDefiniton(UnorderedListTypeDefinition ulte, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitUpdateClause(UpdateClause del, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitUpdateStatement(UpdateStatement update, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitWriteFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitWriteStatement(WriteStatement ws, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitLoadFromQueryResultStatement(WriteFromQueryResultStatement stmtLoad, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitCreateDataverseStatement(CreateDataverseStatement del, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitIndexDropStatement(IndexDropStatement del, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitNodeGroupDropStatement(NodeGroupDropStatement del, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitDataverseDropStatement(DataverseDropStatement del, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitTypeDropStatement(TypeDropStatement del, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitControlFeedStatement(ControlFeedStatement del, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visit(CreateFunctionStatement cfs, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitFunctionDropStatement(FunctionDropStatement del, List<FunctionDecl> arg)
-            throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-
-    @Override
-    public Boolean visitBeginFeedStatement(BeginFeedStatement bf, List<FunctionDecl> arg) throws AsterixException {
-        // TODO Auto-generated method stub
-        return null;
-    }
-}
diff --git a/asterix/asterix-aql/src/main/javacc/AQL.jj b/asterix/asterix-aql/src/main/javacc/AQL.jj
deleted file mode 100644
index 8e3e203..0000000
--- a/asterix/asterix-aql/src/main/javacc/AQL.jj
+++ /dev/null
@@ -1,2617 +0,0 @@
-options {
-
-	  
-       STATIC = false;
-	
-}
-
-
-PARSER_BEGIN(AQLParser)
-
-package edu.uci.ics.asterix.aql.parser;
-
-import java.io.*;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Stack;
-
-import java.util.Map;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import edu.uci.ics.asterix.aql.literal.FloatLiteral;
-import edu.uci.ics.asterix.aql.literal.DoubleLiteral;
-import edu.uci.ics.asterix.aql.literal.FalseLiteral;
-import edu.uci.ics.asterix.aql.base.Literal;
-import edu.uci.ics.asterix.aql.literal.IntegerLiteral;
-import edu.uci.ics.asterix.aql.literal.LongIntegerLiteral;
-import edu.uci.ics.asterix.aql.literal.NullLiteral;
-import edu.uci.ics.asterix.aql.literal.StringLiteral;
-import edu.uci.ics.asterix.aql.literal.TrueLiteral;
-import edu.uci.ics.asterix.metadata.bootstrap.MetadataConstants;
-
-import edu.uci.ics.asterix.aql.base.*;
-import edu.uci.ics.asterix.aql.expression.*;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.aql.expression.visitor.AQLPrintVisitor;
-import edu.uci.ics.asterix.aql.expression.UnaryExpr.Sign;
-import edu.uci.ics.asterix.aql.base.Statement.Kind;
-import edu.uci.ics.asterix.aql.context.Scope;
-import edu.uci.ics.asterix.aql.context.RootScopeFactory;
-import edu.uci.ics.asterix.common.annotations.*;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.om.functions.AsterixFunction;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IndexedNLJoinExpressionAnnotation;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
-
-
-
-
-public class AQLParser extends ScopeChecker {
-
-    // optimizer hints
-    private static final String HASH_GROUP_BY_HINT = "hash";
-    private static final String BROADCAST_JOIN_HINT = "bcast";
-    private static final String INDEXED_NESTED_LOOP_JOIN_HINT = "indexnl";
-    private static final String INMEMORY_HINT = "inmem";
-    private static final String VAL_FILE_HINT = "val-files";
-    private static final String VAL_FILE_SAME_INDEX_HINT = "val-file-same-idx";
-    private static final String INTERVAL_HINT = "interval";
-    private static final String COMPOSE_VAL_FILES_HINT = "compose-val-files";
-    private static final String INSERT_RAND_INT_HINT = "insert-rand-int";
-    private static final String LIST_VAL_FILE_HINT = "list-val-file";
-    private static final String LIST_HINT = "list";
-    private static final String DATETIME_BETWEEN_YEARS_HINT = "datetime-between-years";
-    private static final String DATE_BETWEEN_YEARS_HINT = "date-between-years";
-    private static final String DATETIME_ADD_RAND_HOURS_HINT = "datetime-add-rand-hours";
-    private static final String AUTO_HINT = "auto";   
-        
-    private static final String GEN_FIELDS_HINT = "gen-fields";   
-    
-    // data generator hints
-    private static final String DGEN_HINT = "dgen";
-   
-    private static String getHint(Token t) {
-       if (t.specialToken == null) {
-         return null;
-       }       
-       String s = t.specialToken.image;
-       int n = s.length();
-       if (n < 2) {
-         return null;
-       }  
-       return s.substring(1).trim();
-    }
-
-    public AQLParser(String s){
-		this(new StringReader(s));
-		super.setInput(s);
-	}
-	
-	public static void main(String args[]) throws ParseException, TokenMgrError, IOException, FileNotFoundException, AsterixException {
-			File file = new File(args[0]);
-			Reader fis = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
-		    AQLParser parser = new AQLParser(fis);
-		    List<Statement> st = parser.Statement();
-		    //st.accept(new AQLPrintVisitor(), 0);
-	}
-
-
-}
-
-PARSER_END(AQLParser)
-
-
-List<Statement> Statement() throws ParseException:
-{
-  scopeStack.push(RootScopeFactory.createRootScope(this));
-  List<Statement> decls = new ArrayList<Statement>();
-  Query query=null;
-}
-{
-    (
-      (
-        ( 
-          "use"
-            {
-              decls.add(DataverseDeclaration());
-            }           
-          | "declare" "function" { 
-                              decls.add(FunctionDeclaration()); 
-             }
-	  	   |  "create" (
-	  	   	  {
-                String hint = getHint(token);
-                boolean dgen = false;
-         	   	if (hint != null && hint.startsWith(DGEN_HINT)) {
-         	   	  dgen = true;
-         	   	}                  
-              } 
-              "type"     
-              	{ 
-                              decls.add(TypeDeclaration(dgen, hint)); 
-                 }
-              | "nodegroup" 
-              	{
-                              decls.add(NodegroupDeclaration());
-                }   
-              | "external" <DATASET>
-            	{   
-              		decls.add(DatasetDeclaration(DatasetType.EXTERNAL));
-            	}
-              | "feed" <DATASET>
-                {
-                   decls.add(DatasetDeclaration(DatasetType.FEED)); 	
-            	}
-              | <DATASET>
-          		{
-            		decls.add(DatasetDeclaration(DatasetType.INTERNAL));
-          		}
-              | "index" 
-              	{
-              				decls.add(CreateIndexStatement());
-                 }
-	          | "dataverse"
-          		{
-            		decls.add(CreateDataverseStatement());
-          		}
-          	  | "function"
-          	    {
-          	        decls.add(FunctionCreation());
-          	    }	
-            )        
-         	 | "load" {
-                       decls.add(LoadStatement());
-                   }  
-          	                    
-          	| "drop"
-			(
-          	<DATASET>
-          	{
-            		decls.add(DropStatement());
-          	}
-        	| "index"
-          	{
-            		decls.add(IndexDropStatement());
-          	}
-        	| "nodegroup"
-          	{
-            		decls.add(NodeGroupDropStatement());
-          	}
-        	| "type"
-          	{
-            		decls.add(TypeDropStatement());
-          	}
-        	| "dataverse"
-          	{
-            		decls.add(DataverseDropStatement());
-          	}
-          	| "function"
-          	{
-            		decls.add(FunctionDropStatement());
-          	}
-        	)
-          | "write" {
-                       decls.add(WriteStatement());
-                    }              
-          | "set" {
-                       decls.add(SetStatement());
-                    }                                                      
-	  	  | "insert" {
-		       decls.add(InsertStatement());
-			}
-          | "delete" {
-			decls.add(DeleteStatement());
-		    }
-          | "update" {
-	  		decls.add(UpdateStatement());		
-	  	    } 
-	  	  | "begin" "feed"  
-	  	      {
-                Pair<Identifier,Identifier> nameComponents = getDotSeparatedPair();
-                decls.add(new BeginFeedStatement(nameComponents.first, nameComponents.second, getVarCounter()));
-	  	      } ";"
-	  	      
-	  	  | "suspend" "feed"  
-	  	  	 {
-                decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.SUSPEND));
-             } ";"
-	  	   | "resume" "feed"   {
-                decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.RESUME));
-	  	   } ";"
-	  	   | "end" "feed"   {
-	  	        decls.add(ControlFeedDeclaration(ControlFeedStatement.OperationType.END));
-	  	   } ";" 
-	  	   | "alter" "feed"  {
-      	        decls.add(AlterFeedDeclaration());
-           } ";"
-           
-           | (query = Query()) {
-               decls.add(query);
-           }
-           )*
-          //  (query = Query())?
-      )
-
-      <EOF>
-    )
-    {
-     return decls;  
-    }
-}
-
-InsertStatement InsertStatement() throws ParseException:
-{
-	Identifier dataverseName;
-	Identifier datasetName;
-	Pair<Identifier,Identifier> nameComponents = null;
-	Query query;
-}
-{
-   "into" <DATASET>
-   
-   {
-    nameComponents = getDotSeparatedPair();
-    dataverseName = nameComponents.first;
-    datasetName = nameComponents.second;
-   }
-    
-    query = Query() (";")?
-   {return new InsertStatement(dataverseName, datasetName, query,  getVarCounter());}
-}
-
-DeleteStatement DeleteStatement() throws ParseException:
-{
-	VariableExpr var = null;
-    Identifier dataverseName;
-    Identifier datasetName = null;
-	Expression condition = null;
-	Clause dieClause = null;
-	Pair<Identifier, Identifier> nameComponents;
-}
-{
-   var = Variable() { getCurrentScope().addNewVarSymbolToScope(var.getVar());  }
-   "from" 
-   <DATASET> 
-   { 
-	  nameComponents  = getDotSeparatedPair();
-   }
-   ("where" condition = Expression())?  (dieClause = DieClause())? (";")?
-   {return new DeleteStatement(var, nameComponents.first, nameComponents.second, condition,  dieClause, getVarCounter()); }
-}
-
-UpdateStatement UpdateStatement() throws ParseException:
-{
-	VariableExpr vars;
-    Expression target;
-	Expression condition;
-	UpdateClause uc;
- 	List<UpdateClause> ucs = new ArrayList<UpdateClause>();
-}
-{
-   vars = Variable()  "in" target = Expression()
-	"where" condition = Expression() 
-	<LEFTPAREN> (uc=UpdateClause() {ucs.add(uc); }  ("," uc=UpdateClause() {ucs.add(uc); } )*) <RIGHTPAREN> ";"
-   {return new UpdateStatement(vars, target, condition, ucs);}
-}
-
-
-
-UpdateClause UpdateClause() throws ParseException:
-{
-	Expression target = null;
-	Expression value = null ;	
-	InsertStatement is = null;
-	DeleteStatement ds = null;
-	UpdateStatement us = null;
-	Expression condition = null;
-	UpdateClause ifbranch = null;
-	UpdateClause elsebranch = null;
-}
-{
-   "set" target = Expression() ":=" value = Expression() 
-   | "insert" is = InsertStatement()
-   | "delete" ds = DeleteStatement()
-   | "update" us = UpdateStatement()
-   | "if" <LEFTPAREN> condition = Expression() <RIGHTPAREN> "then" ifbranch = UpdateClause() [LOOKAHEAD(1) "else" elsebranch = UpdateClause()] 
-   {return new UpdateClause(target, value, is, ds, us, condition, ifbranch, elsebranch);}
-}
-
-
-Statement SetStatement() throws ParseException:
-{
-  String pn = null;
-  Statement stmt = null;
-}
-{
-  <IDENTIFIER>  { pn = token.image; }  
-  <STRING_LITERAL>
-    { String pv = removeQuotesAndEscapes(token.image); }
-    ";"
-  {
-    return new SetStatement(pn, pv);
-  }
-}
-
-Statement WriteStatement() throws ParseException:
-{
-  Identifier nodeName = null;
-  String fileName = null;
-  Statement stmt = null;
-  Query query;
-  String writerClass = null;
-  Pair<Identifier,Identifier> nameComponents = null;
-}
-{
-  (( "output" "to" 
-    <IDENTIFIER> { nodeName = new Identifier(token.image); } 
-    ":" <STRING_LITERAL> { fileName = removeQuotesAndEscapes(token.image); }
-    ( "using" <STRING_LITERAL> { writerClass = removeQuotesAndEscapes(token.image); } )?
-         {                  
-             stmt = new WriteStatement(nodeName, fileName, writerClass);         
-         } )
-    |
-   ( "into" 
-     <DATASET> 
-     
-      {
-       nameComponents = getDotSeparatedPair();
-      }
-     
-     <LEFTPAREN> query = Query() <RIGHTPAREN>
-     {
-        stmt = new WriteFromQueryResultStatement(nameComponents.first, nameComponents.second, query, getVarCounter());
-     } ))  
-        
-    ";"
-    {
-      return stmt;
-    }
-}
-
-CreateIndexStatement CreateIndexStatement() throws ParseException:
-{
-  CreateIndexStatement cis = new CreateIndexStatement();
-  Pair<Identifier,Identifier> nameComponents = null;
-}
-{
-  <IDENTIFIER> { cis.setIndexName(new Identifier(token.image)); }
-  (
-    "if not exists"
-    {
-      cis.setIfNotExists(true);
-    }
-  )?
-  "on"  
-  
-   {
-   nameComponents = getDotSeparatedPair();
-   cis.setDataverseName(nameComponents.first);
-   cis.setDatasetName(nameComponents.second);
-   }
-  
-  <LEFTPAREN>
-  	( <IDENTIFIER> { cis.addFieldExpr(token.image); } )
-  	("," <IDENTIFIER> { cis.addFieldExpr(token.image); })*
-  <RIGHTPAREN>
-    ("type"
-  		("btree" { cis.setIndexType(IndexType.BTREE); }  		
-  		| "rtree" { cis.setIndexType(IndexType.RTREE); }
-  		| "keyword" { cis.setIndexType(IndexType.WORD_INVIX); }
-  		| "fuzzy keyword" { cis.setIndexType(IndexType.FUZZY_WORD_INVIX); }
-  		| "ngram"
-  		  <LEFTPAREN>
-  		  (<INTEGER_LITERAL>
-  		    {
-  		      cis.setIndexType(IndexType.NGRAM_INVIX);
-  		      cis.setGramLength(Integer.valueOf(token.image));
-  		    }
-  		  )
-  		  <RIGHTPAREN>
-  		| "fuzzy ngram"
-  		  <LEFTPAREN>
-  		  (<INTEGER_LITERAL>
-  		    {
-  		      cis.setIndexType(IndexType.FUZZY_NGRAM_INVIX);
-  		      cis.setGramLength(Integer.valueOf(token.image));
-  		    }
-  		  )
-  		  <RIGHTPAREN>
-		)
-  	";"  	
-  	| ";"
-    )
-   {
-     return cis;
-   }
-}
-
-DataverseDecl DataverseDeclaration() throws ParseException:
-{
-  Identifier dvName = null;  
-}
-{
-  "dataverse" <IDENTIFIER> { defaultDataverse = token.image;}
-  ";"
-  {
-    return new DataverseDecl(new Identifier(defaultDataverse));
-  }
-}
-
-DropStatement DropStatement() throws ParseException :
-{
-  Identifier dataverseName = null;
-  Identifier datasetName = null;
-  boolean ifExists = false;
-  Pair<Identifier,Identifier> nameComponents=null;
-}
-{
-   {
-   nameComponents = getDotSeparatedPair();
-   dataverseName = nameComponents.first;
-   datasetName = nameComponents.second;
-   }
-   
-   
-  (
-    "if exists"
-    {
-      ifExists = true;
-    }
-  )? ";"
-  {
-    return new DropStatement(dataverseName, datasetName, ifExists);
-  }
-}
-
-IndexDropStatement IndexDropStatement() throws ParseException :
-{
-  Identifier dataverseName = null;
-  Identifier datasetName = null;
-  Identifier indexName = null;
-  boolean ifExists = false;
-  Triple<Identifier,Identifier,Identifier> nameComponents=null;
-}
-{
-  
-  {
-   nameComponents = getDotSeparatedTriple();
-   dataverseName = nameComponents.first;
-   datasetName = nameComponents.second;
-   indexName = nameComponents.third;
-   }
-  
-  (
-    "if exists"
-    {
-      ifExists = true;
-    }
-  )? ";"
-  {
-    return new IndexDropStatement(dataverseName, datasetName, indexName, ifExists);
-  }
-}
-
-NodeGroupDropStatement NodeGroupDropStatement() throws ParseException :
-{
-  Identifier groupName = null;
-  boolean ifExists = false;
-}
-{
-  < IDENTIFIER >
-  {
-    groupName = new Identifier(token.image);
-  }
-  (
-    "if exists"
-    {
-      ifExists = true;
-    }
-  )? ";"
-  {
-    return new NodeGroupDropStatement(groupName, ifExists);
-  }
-}
-
-TypeDropStatement TypeDropStatement() throws ParseException :
-{
-  Identifier dataverseName = null;
-  Identifier typeName = null;
-  boolean ifExists = false;
-  Pair<Identifier,Identifier> nameComponents;
-}
-{
-  {
-    nameComponents = getDotSeparatedPair();
-    dataverseName = nameComponents.first == null ? new Identifier(defaultDataverse) : nameComponents.first;
-    typeName = nameComponents.second;
-  }
-  (
-    "if exists"
-    {
-      ifExists = true;
-    }
-  )? ";"
-  {
-    return new TypeDropStatement(dataverseName, typeName, ifExists);
-  }
-}
-
-DataverseDropStatement DataverseDropStatement() throws ParseException :
-{
-  Identifier dataverseName = null;
-  boolean ifExists = false;
-}
-{
-  < IDENTIFIER >
-  {
-    dataverseName = new Identifier(token.image);
-  }
-  (
-    "if exists"
-    {
-      ifExists = true;
-    }
-  )? ";"
-  {
-    return new DataverseDropStatement(dataverseName, ifExists);
-  }
-}
-
-CreateDataverseStatement CreateDataverseStatement() throws ParseException :
-{
-  Identifier dvName = null;
-  boolean ifNotExists = false;
-  String format = null;
-}
-{
-  < IDENTIFIER >
-  {
-    dvName = new Identifier(token.image);
-  }
-  (
-    "if not exists"
-    {
-      ifNotExists = true;
-    }
-  )?
-  (
-    "with format" < STRING_LITERAL >
-    {
-      format = removeQuotesAndEscapes(token.image);
-    }
-  )?
-  ";"
-  {
-    return new CreateDataverseStatement(dvName, format, ifNotExists);
-  }
-}
-
-
-FunctionDropStatement FunctionDropStatement() throws ParseException :
-{
-  String dataverse;
-  String functionName;
-  int arity=0;
-  boolean ifExists = false;
-  Pair<Identifier, Identifier> nameComponents=null;
-}
-{
-  {
-     nameComponents = getDotSeparatedPair();
-     dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
-     functionName = nameComponents.second.getValue(); 
-  }
-  
-   "@"
-  <INTEGER_LITERAL> 
-  {  
-     Token t= getToken(0);
-	 arity = new Integer(t.image);
-  	 if( arity < 0 && arity != FunctionIdentifier.VARARGS){
-  	 	throw new ParseException(" invalid arity:" + arity);
-  	 } 
-  }
-  
-  (
-    "if exists"
-    {
-      ifExists = true;
-    }
-  )? ";"
-  {
-    return new FunctionDropStatement(new FunctionSignature(dataverse, functionName, arity), ifExists);
-  }
-}
-
-
-LoadFromFileStatement LoadStatement() throws ParseException:
-{
-  Identifier dataverseName = null;
-  Identifier datasetName = null;
-  boolean alreadySorted = false;
-  String adapterName;
-  Map<String,String> properties;
-  Pair<Identifier,Identifier> nameComponents = null;
-}
-{
-   <DATASET> 
-   {
-   nameComponents = getDotSeparatedPair();
-   dataverseName = nameComponents.first;
-   datasetName = nameComponents.second;
-   }
-   
-   "using"
-  
-    {
-    	adapterName = getAdapterName();
-    }
-   
-    {
-      properties = getConfiguration();
-    }
-  
-    ("pre-sorted" 
-      {  alreadySorted = true; }
-    )?
-        
-  ";"
-  {
-     return new LoadFromFileStatement(dataverseName, datasetName, adapterName, properties, alreadySorted);
-  }   
-}
-
-
-String getAdapterName() throws ParseException :
-{
-	String adapterName = null;
-}
-{
-    ( 
-      <IDENTIFIER> {
-     	adapterName = (new Identifier(token.image)).getValue();; 
-      }
-      | 
-      <STRING_LITERAL>
-      {
-        adapterName = removeQuotesAndEscapes(token.image);
-      }
-    )
-    {
-	return adapterName;
-	}
-}
-
-
-DatasetDecl DatasetDeclaration(DatasetType datasetType) throws ParseException :
-{
-  DatasetDecl dd = null;
-  Identifier datasetName = null;
-  Identifier dataverseName = null;
-  Identifier itemDataverseName = null;
-  Identifier itemTypeName = null;
-  String nameComponentFirst = null;
-  String nameComponentSecond = null;
-  boolean ifNotExists = false;
-  IDatasetDetailsDecl datasetDetails = null;
-  Pair<Identifier,Identifier> nameComponents = null;
-  Map<String,String> hints = new HashMap<String,String>();	
-}
-{
-  {
-   nameComponents = getDotSeparatedPair();
-   dataverseName = nameComponents.first;
-   datasetName = nameComponents.second;
-   }
-    
-  (
-    "if not exists"
-    {
-      ifNotExists = true;
-    }
-  )?
-  (
-  	< LEFTPAREN > <IDENTIFIER>
-  	{
-    	itemTypeName = new Identifier(token.image);
-  	}
-  	< RIGHTPAREN >
-  )
-  {
-  	  if(datasetType == DatasetType.INTERNAL) {
-      	datasetDetails = InternalDatasetDeclaration();
-      }
-      else if(datasetType == DatasetType.EXTERNAL) {
-      	datasetDetails = ExternalDatasetDeclaration();
-      }
-      else if(datasetType == DatasetType.FEED) {
-      	datasetDetails = FeedDatasetDeclaration();
-      }
-  }
-  
-  (
-  "hints"
-  {
-      initProperties(hints);
-  }
-  )?
-   ";"
- 
-  {
-   dd = new DatasetDecl(dataverseName, datasetName, itemTypeName, hints, datasetType, datasetDetails,ifNotExists);
-   return dd;
-  }
-}
-
-InternalDetailsDecl InternalDatasetDeclaration() throws ParseException :
-{
-    InternalDetailsDecl idd = null;
-    List<String> primaryKeyFields = new ArrayList<String>();
-    Identifier nodeGroupName=null;
-}
-{
-  (
-    {
-  	  primaryKeyFields = getPrimaryKeyFields();
-    }
-  )
-  
-  (
-  "on" < IDENTIFIER >
-    {
-        nodeGroupName = new Identifier(token.image);
-    }
-  )?
-  
-  {
-    idd = new InternalDetailsDecl(nodeGroupName, primaryKeyFields);
-    return idd;
-  }
-}
-
-ExternalDetailsDecl ExternalDatasetDeclaration() throws ParseException :
-{
-  ExternalDetailsDecl edd = null;
-  String adapterName = null;
-  Map < String, String > properties;
-}
-{
-  {
-    edd = new ExternalDetailsDecl();
-  }
- 
-    "using"
-    {
-    	adapterName = getAdapterName();
-    }
-
-    {
-      properties = getConfiguration();
-    }
-
-    {
-    	  edd = new ExternalDetailsDecl();
-		  edd.setAdapter(adapterName);
-   		  edd.setProperties(properties);
-    } 
- 
-  {
-    return edd;
-  }
-}
-
-FeedDetailsDecl FeedDatasetDeclaration() throws ParseException :
-{
-    FeedDetailsDecl fdd = null;
-    String adapterName = null;
-    Map < String, String > properties;
-	Pair<Identifier,Identifier> nameComponents;
-	List<String> primaryKeyFields = new ArrayList<String>();
-    Identifier nodeGroupName=null;
-    FunctionSignature appliedFunction=null;
-	String dataverse;
-	String functionName;
-	int arity;
-}
-{
-   "using"
-    {
-    	adapterName = getAdapterName();
-    }
-
-    {
-      properties = getConfiguration();
-    }
-  
-  ("apply" "function" 
-  {
-  nameComponents = getDotSeparatedPair();
-  dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
-  functionName = nameComponents.second.getValue();
-  }
-  ("@" <INTEGER_LITERAL> 
-     {
-        arity = Integer.parseInt(token.image);
-     }
-  )
-  
-  {
-    appliedFunction = new FunctionSignature(dataverse, functionName, arity);
-  }   
-  )?
-  
-  (
-    {
-  	  primaryKeyFields  = getPrimaryKeyFields();
-    }
-  )
-  
-  (
-  "on" < IDENTIFIER >
-  {
-    	nodeGroupName = new Identifier(token.image);
-  }
-  )?
-  
-  {
-    fdd = new FeedDetailsDecl(adapterName, properties, appliedFunction, nodeGroupName, primaryKeyFields);
-    return fdd;
-  }
-}
-
-List<String> getPrimaryKeyFields()  throws ParseException :
-{
-	List<String> primaryKeyFields = new ArrayList<String>();
-}
-{
-
-  "primary" "key"
-  < IDENTIFIER >
-  {
-    	 primaryKeyFields.add(token.image);
-  }
-  (
-    "," < IDENTIFIER >
-    {
-    	 primaryKeyFields.add(token.image);
-    }
-  )*
-  {
-   	return primaryKeyFields;
-  }
-  
-}
-
-
-
-
-
-ControlFeedStatement ControlFeedDeclaration(ControlFeedStatement.OperationType operationType) throws ParseException :
-{
-  Pair<Identifier,Identifier> nameComponents = null;
-}
-{
-    {
-    nameComponents = getDotSeparatedPair();
-    return new ControlFeedStatement(operationType, nameComponents.first, nameComponents.second);
-    }
-}
-
-
-ControlFeedStatement AlterFeedDeclaration() throws ParseException :
-{
-    Pair<Identifier,Identifier> nameComponents = null;
-    Map < String, String > configuration = new HashMap < String, String > ();
-}
-{
-   {
-    nameComponents = getDotSeparatedPair();
-   }
-
-   "set"
-   { 
-   configuration = getConfiguration();
-   }
-  
-  {
-    return new ControlFeedStatement(ControlFeedStatement.OperationType.ALTER, nameComponents.first, nameComponents.second, configuration);
-  }
-}
-
-Map<String,String> getConfiguration()  throws ParseException :
-{
-	Map<String,String> configuration = new LinkedHashMap<String,String>();
-	String key;
-	String value;
-}
-{
-
-<LEFTPAREN>
-    (
-      (
-        <LEFTPAREN>
-        (
-          <STRING_LITERAL>
-          {
-            key = removeQuotesAndEscapes(token.image);
-          }
-          "=" <STRING_LITERAL>
-          {
-            value = removeQuotesAndEscapes(token.image);
-          }
-        )
-        <RIGHTPAREN>
-        {
-          configuration.put(key, value);
-        }
-      )
-      (
-        "," <LEFTPAREN>
-        (
-          <STRING_LITERAL>
-          {
-            key = removeQuotesAndEscapes(token.image);
-          }
-          "=" <STRING_LITERAL>
-          {
-            value = removeQuotesAndEscapes(token.image);
-          }
-        )
-        <RIGHTPAREN>
-        {
-          configuration.put(key, value);
-        }
-      )*
-    )?
-    <RIGHTPAREN>
-     {
-     	return configuration;
-     }
-}
-
-void initProperties(Map<String,String> properties)  throws ParseException :
-{
-	String key;
-	String value;
-}
-{
-    (
-      <LEFTPAREN>
-        (
-          <IDENTIFIER>
-          {
-            key = (new Identifier(token.image)).getValue();
-          }
-          "=" 
-          (
-            (<STRING_LITERAL>
-             {
-              value = removeQuotesAndEscapes(token.image);
-             }
-            ) |
-            (<INTEGER_LITERAL>
-             {
-             try{
-              value = "" + Long.valueOf(token.image);
-              } catch (NumberFormatException nfe){
-                  throw new ParseException("inapproriate value: " + token.image); 
-              }
-             } 
-            )
-          )
-        {
-          properties.put(key.toUpperCase(), value);
-        }
-       ( 
-        "," 
-        (
-          <IDENTIFIER>
-          {
-            key = (new Identifier(token.image)).getValue();
-          }
-          "=" 
-          (
-           (<STRING_LITERAL>
-            {
-              value = removeQuotesAndEscapes(token.image);
-            }
-           ) |
-           (<INTEGER_LITERAL>
-            {
-              try{
-                value = "" + Long.valueOf(token.image);
-              } catch (NumberFormatException nfe){
-              	throw new ParseException("inapproriate value: " + token.image); 
-              }
-            } 
-           )
-          ) 
-        )
-        {
-          properties.put(key.toUpperCase(), value);
-        }
-        
-       )*
-      )
-       <RIGHTPAREN>
-    )?
-}
-
-
-
-NodegroupDecl NodegroupDeclaration() throws ParseException :
-{
-  Identifier name = null;
-  List < Identifier > ncNames = new ArrayList < Identifier > ();
-  boolean ifNotExists = false;
-}
-{
-  < IDENTIFIER >
-  {
-    name = new Identifier(token.image);
-  }
-  (
-    "if not exists"
-    { 
-      ifNotExists = true;
-    }
-  )?
-  "on" < IDENTIFIER >
-  {
-    ncNames.add(new Identifier(token.image));
-  }
-  (
-    "," < IDENTIFIER >
-    {
-      ncNames.add(new Identifier(token.image));
-    }
-  )*
-  ";"
-  {
-    return new NodegroupDecl(name, ncNames, ifNotExists);
-  }
-}
-
-
-TypeDecl TypeDeclaration(boolean dgen, String hint) throws ParseException:
-{
-  Identifier dataverse;
-  Identifier ident;
-  TypeExpression typeExpr;
-  boolean ifNotExists = false;
-  Pair<Identifier,Identifier> nameComponents=null;	
-}
-{
-  {
-    nameComponents = getDotSeparatedPair();
-    dataverse = nameComponents.first;
-    ident = nameComponents.second; 
-  }
-  
-  (
-    "if not exists"
-    {
-      ifNotExists = true;
-    }
-  )?
-  "as"
-  ( typeExpr = TypeExpr() )
-  (";")?
-  {
-    long numValues = -1;
-    String filename = null;
-    if (dgen) {       
-      String splits[] = hint.split(" +");
-      if (splits.length != 3) {
-        throw new ParseException("Expecting /*+ dgen <filename> <numberOfItems> */");
-      } 
-      filename = splits[1];
-      numValues = Long.parseLong(splits[2]);
-    }  
-    TypeDataGen tddg = new TypeDataGen(dgen, filename, numValues);
-    return new TypeDecl(dataverse, ident, typeExpr, tddg, ifNotExists);
-  }
-}
-
-TypeExpression TypeExpr() throws ParseException:
-{
-  TypeExpression typeExpr = null;
-}
-{
-  (
-      typeExpr = RecordTypeDef()
-    | typeExpr = TypeReference()
-    | typeExpr = OrderedListTypeDef()
-    | typeExpr = UnorderedListTypeDef()  
-  )  
-  {
-    return typeExpr;
-  }
-}
-
-RecordTypeDefinition RecordTypeDef() throws ParseException:
-{
-  RecordTypeDefinition recType = new RecordTypeDefinition();
-  RecordTypeDefinition.RecordKind recordKind = null; 
-}
-{
-  ( "closed" { recordKind = RecordTypeDefinition.RecordKind.CLOSED; } 
-    | "open" { recordKind = RecordTypeDefinition.RecordKind.OPEN; } )?
-   "{"
-    {
-      String hint = getHint(token);
-      if (hint != null) { 
-        String splits[] = hint.split(" +");
-        if (splits[0].equals(GEN_FIELDS_HINT)) {
-          if (splits.length != 5) {
-            throw new ParseException("Expecting: /*+ gen-fields <type> <min> <max> <prefix>*/");
-          }
-          if (!splits[1].equals("int")) {
-            throw new ParseException("The only supported type for gen-fields is int.");
-          } 
-          UndeclaredFieldsDataGen ufdg = new UndeclaredFieldsDataGen(UndeclaredFieldsDataGen.Type.INT, 
-             Integer.parseInt(splits[2]), Integer.parseInt(splits[3]), splits[4]);
-          recType.setUndeclaredFieldsDataGen(ufdg);   
-        }
-      }  
-      
-    }
-		( 
-		  RecordField(recType)
-		  ( ","  RecordField(recType) )*
-		)?
-   "}"
-   {
-      if (recordKind == null) {
-        recordKind = RecordTypeDefinition.RecordKind.OPEN;
-      }
-      recType.setRecordKind(recordKind);
-      return recType;
-   } 
-}
-
-void RecordField(RecordTypeDefinition recType) throws ParseException:
-{
-        String fieldName;
-        TypeExpression type = null; 
-        boolean nullable = false;
-}
-{
-      <IDENTIFIER>
-      	{
-	     Token t = getToken(0);
-	     fieldName = t.toString();	     	     
-         String hint = getHint(t);
-         IRecordFieldDataGen rfdg = null;
-         if (hint != null) { 
-           String splits[] = hint.split(" +");
-           if (splits[0].equals(VAL_FILE_HINT)) { 
-             File[] valFiles = new File[splits.length - 1];
-             for (int k=1; k<splits.length; k++) {
-               valFiles[k-1] = new File(splits[k]);
-             } 
-             rfdg = new FieldValFileDataGen(valFiles);
-           } else if (splits[0].equals(VAL_FILE_SAME_INDEX_HINT)) {
-             rfdg = new FieldValFileSameIndexDataGen(new File(splits[1]), splits[2]);
-           } else if (splits[0].equals(LIST_VAL_FILE_HINT)) {
-             rfdg = new ListValFileDataGen(new File(splits[1]), Integer.parseInt(splits[2]), Integer.parseInt(splits[3]));
-           } else if (splits[0].equals(LIST_HINT)) {
-             rfdg = new ListDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]));
-           } else if (splits[0].equals(INTERVAL_HINT)) {
-             FieldIntervalDataGen.ValueType vt;
-             if (splits[1].equals("int")) {
-               vt = FieldIntervalDataGen.ValueType.INT;
-             } else if (splits[1].equals("long")) {
-               vt = FieldIntervalDataGen.ValueType.LONG;
-             } else if (splits[1].equals("float")) {
-               vt = FieldIntervalDataGen.ValueType.FLOAT;
-             } else if (splits[1].equals("double")) {
-               vt = FieldIntervalDataGen.ValueType.DOUBLE;
-             } else {
-               throw new ParseException("Unknown type for interval data gen: " + splits[1]);
-             }
-             rfdg = new FieldIntervalDataGen(vt, splits[2], splits[3]); 
-           } else if (splits[0].equals(INSERT_RAND_INT_HINT)) {
-             rfdg = new InsertRandIntDataGen(splits[1], splits[2]);
-           } else if (splits[0].equals(DATE_BETWEEN_YEARS_HINT)) {
-             rfdg = new DateBetweenYearsDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]));
-           } else if (splits[0].equals(DATETIME_BETWEEN_YEARS_HINT)) {
-             rfdg = new DatetimeBetweenYearsDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]));
-           } else if (splits[0].equals(DATETIME_ADD_RAND_HOURS_HINT)) {
-             rfdg = new DatetimeAddRandHoursDataGen(Integer.parseInt(splits[1]), Integer.parseInt(splits[2]), splits[3]);
-           } else if (splits[0].equals(AUTO_HINT)) {
-              rfdg = new AutoDataGen(splits[1]);
-           }
-         }
-	    }
-	  ":"
-	  ( type =  TypeExpr() )
-	  ("?" { nullable = true; } )?
-	  {
-	     recType.addField(fieldName, type, nullable, rfdg);
-	  }   
-}
-
-TypeReferenceExpression TypeReference() throws ParseException:
-{}
-{
- <IDENTIFIER>
- {
-     Token t = getToken(0);
-     Identifier id = new Identifier(t.toString());
-     return new TypeReferenceExpression(id);
- }
-}
-
-OrderedListTypeDefinition OrderedListTypeDef() throws ParseException:
-{  
-  TypeExpression type = null;
-}
-{
-  "["
-    ( type =  TypeExpr() )
-  "]"
-  {
-    return new OrderedListTypeDefinition(type);
-  }
-}
-
-
-UnorderedListTypeDefinition UnorderedListTypeDef() throws ParseException:
-{  
-  TypeExpression type = null;
-}
-{
-  "{{"
-    ( type =  TypeExpr() )
-  "}}"
-  {
-    return new UnorderedListTypeDefinition(type);
-  }
-}
-
-Pair<Identifier,Identifier> getDotSeparatedPair() throws ParseException:
-{
- Identifier first = null;
- Identifier second = null;
-}
-{
-  < IDENTIFIER >
-  {
-    first = new Identifier(token.image);
-  } 
-  ("." <IDENTIFIER>
-  {
-    second = new Identifier(token.image);
-  }
-  )?
-  
-  {
-   if(second == null){
-   	second = first;
-   	first = null;
-   } 
-   
-   return new Pair<Identifier,Identifier>(first,second);
-  }  
-}  
-  
-Triple<Identifier,Identifier,Identifier> getDotSeparatedTriple() throws ParseException:
-{
- Identifier first = null;
- Identifier second = null;
- Identifier third = null;
-}
-{
-  < IDENTIFIER >
-  {
-    first = new Identifier(token.image);
-  } 
-  "." <IDENTIFIER>
-  {
-    second = new Identifier(token.image);
-  }
-  (
-  "." <IDENTIFIER>
-  {
-    third = new Identifier(token.image);
-  }
-  )?
-  
-  {
-   if(third == null){
-   	third  = second;
-   	second = first;
-   	first = null;
-   } 
-   
-   return new Triple<Identifier,Identifier,Identifier>(first,second,third);
-  }  
-}  
-
-
-  
-
-FunctionDecl FunctionDeclaration() throws ParseException:
-{
-  FunctionDecl funcDecl;
-  FunctionSignature signature;
-  String functionName;
-  int arity = 0;
-  List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
-  Expression funcBody;
-  VarIdentifier var = null;
-  createNewScope();
-}
-{
-
-    <IDENTIFIER>
-	{
-	  Token t = getToken(0);
-	  functionName = t.toString();
-	}
-    <LEFTPAREN> (<VARIABLE>
-    {
-      var = new VarIdentifier();
-      var.setValue(getToken(0).toString());
-      paramList.add(var);
-      getCurrentScope().addNewVarSymbolToScope(var);
-      arity++;
-    }
-    ("," <VARIABLE>
-    {
-      var = new VarIdentifier();
-      var.setValue(getToken(0).toString());
-      paramList.add(var);
-      getCurrentScope().addNewVarSymbolToScope(var);
-      arity++;
-    })*)? <RIGHTPAREN> "{" funcBody = Expression() "}"
-
-    {
-      signature = new FunctionSignature(defaultDataverse, functionName, arity);
-      getCurrentScope().addFunctionDescriptor(signature, false);
-      funcDecl = new FunctionDecl(signature, paramList, funcBody);
-      return funcDecl;
-    }
-}
-
-CreateFunctionStatement FunctionCreation() throws ParseException:
-{
-  CreateFunctionStatement cfs = null;
-  FunctionSignature signature;
-  String dataverse;
-  String functionName;
-  boolean ifNotExists = false;
-  List<VarIdentifier> paramList = new ArrayList<VarIdentifier>();
-  String functionBody;
-  VarIdentifier var = null;
-  createNewScope();
-  Expression functionBodyExpr;
-  Token beginPos;
-  Token endPos;
-  Pair<Identifier,Identifier> nameComponents=null;
-}
-{
-    {
-      nameComponents = getDotSeparatedPair();
-   	  dataverse = nameComponents.first != null ? nameComponents.first.getValue() : defaultDataverse;
-   	  functionName= nameComponents.second.getValue();
-	}
-	
-	(
-      "if not exists"
-       {
-         ifNotExists = true;
-       }
-    )?
-	
-    <LEFTPAREN> (<VARIABLE>
-    {
-      var = new VarIdentifier();
-      var.setValue(getToken(0).toString());
-      paramList.add(var);
-      getCurrentScope().addNewVarSymbolToScope(var);
-    }
-    ("," <VARIABLE>
-    {
-      var = new VarIdentifier();
-      var.setValue(getToken(0).toString());
-      paramList.add(var);
-      getCurrentScope().addNewVarSymbolToScope(var);
-    })*)? <RIGHTPAREN>  "{"
-          {
-          beginPos = getToken(0);
-          } 
-          functionBodyExpr = Expression() 
-          "}"
-          {
-            endPos = getToken(0);
-            functionBody = extractFragment(beginPos.beginLine, beginPos.beginColumn, endPos.beginLine, endPos.beginColumn);
-          }
-    {
-      signature = new FunctionSignature(dataverse, functionName, paramList.size());
-      getCurrentScope().addFunctionDescriptor(signature, false);
-      cfs = new CreateFunctionStatement(signature, paramList, functionBody, ifNotExists);
-      return cfs;
-    }
-}
-
-
-
-Query Query()throws ParseException:
-{
-  Query query = new Query();
-  Expression expr;
-}
-{
-    expr = Expression()
-    (";")?
-    {
-      query.setBody(expr);
-      query.setVarCounter(getVarCounter());
-      return query;
-    }
-     
-}
-
-
-
-Expression Expression():
-{
-  Expression expr = null;
-  Expression exprP = null;
-}
-{
-(
-  
-//OperatorExpr | IfThenElse | FLWOGRExpression | QuantifiedExpression
-    expr = OperatorExpr()
-    | expr = IfThenElse()
-    | expr = FLWOGR()
-    | expr = QuantifiedExpression()
-   
-
-)
-	{
-	  return (exprP==null) ? expr : exprP;
-	}
-}
-
-
-
-Expression OperatorExpr()throws ParseException:
-{
-  OperatorExpr op = null;
-  Expression operand = null;
-}
-{
-	operand = AndExpr()
-	(
-	
-	  "or"
-  	{
-  	  if (op == null) {
-  	    op = new OperatorExpr();
-  	    op.addOperand(operand);
-	    op.setCurrentop(true);  	      	     
-  	  }  
-  	  Token t = getToken(0);
-      op.addOperator(t.toString());
-	}
-
-	operand = AndExpr()
-	{
-	  op.addOperand(operand);
-	}
-
-	)*
-	
-	{
-	  return op==null? operand: op;
-	}
-}
-
-Expression AndExpr()throws ParseException:
-{
-  OperatorExpr op = null;
-  Expression operand = null;
-}
-{
-	operand = RelExpr()
-	(
-	
-	  "and"
-  	{
-  	  if (op == null) {
-  	    op = new OperatorExpr();
-  	    op.addOperand(operand);
-	    op.setCurrentop(true);  	      	     
-  	  }  
-  	  Token t = getToken(0);
-      op.addOperator(t.toString());
-	}
-
-	operand = RelExpr()
-	{
-	  op.addOperand(operand);
-	}
-
-	)*
-	
-	{
-	  return op==null? operand: op;
-	}
-}
-
-
-
-Expression RelExpr()throws ParseException:
-{
-  OperatorExpr op = null;
-  Expression operand = null;
-  boolean broadcast = false;
-  IExpressionAnnotation annotation = null;
-}
-{
-    operand = AddExpr()
-    { 
-      if (operand instanceof VariableExpr) {        
-        String hint = getHint(token);        
-        if (hint != null && hint.equals(BROADCAST_JOIN_HINT)) {
-          broadcast = true;
-        }
-      }
-    } 
-
-    (
-      LOOKAHEAD(2)( "<" | ">" | "<=" | ">=" | "=" | "!=" |"~=")
-  	  {
-  	    String mhint = getHint(token);
-  	    if (mhint != null && mhint.equals(INDEXED_NESTED_LOOP_JOIN_HINT)) {
-          annotation = IndexedNLJoinExpressionAnnotation.INSTANCE;
-        }
-  	    if (op == null) {
-  	      op = new OperatorExpr();
-  	      op.addOperand(operand, broadcast);
-          op.setCurrentop(true);
-          broadcast = false;
-  	    }   
-  	    Token t = getToken(0);
-        op.addOperator(t.toString());
-	  }
-	  
- 	  operand = AddExpr()
-	  {
-         broadcast = false;	     
-         if (operand instanceof VariableExpr) {
-           String hint = getHint(token);        
-           if (hint != null && hint.equals(BROADCAST_JOIN_HINT)) {
-             broadcast = true;
-           }
-         }
-         op.addOperand(operand, broadcast);
-      } 
-    )?
- 	
- 	{
- 	  if (annotation != null) {
- 	    op.addHint(annotation);
- 	  }
- 	  return op==null? operand: op;
- 	}
-}
-
-Expression AddExpr()throws ParseException:
-{
-  OperatorExpr op = null;
-  Expression operand = null;  
-}
-{
-	operand = MultExpr()
-
-	( ("+" | "-")
-  	{
-  	  if (op == null) {
-  	    op = new OperatorExpr();
-        op.addOperand(operand);  	    
-        op.setCurrentop(true);        
-  	  } 
-  	  Token t = getToken(0);
-	  ((OperatorExpr)op).addOperator(t.toString());
-	}
-
-	operand = MultExpr()
-	{
-	  op.addOperand(operand);
-	}
-	)*
-	
-	{
- 	  return op==null? operand: op;
- 	}
-}
-
-Expression MultExpr()throws ParseException:
-{
-  OperatorExpr op = null;
-  Expression operand = null;
-}
-{
-	operand = UnionExpr()
-
-	(( "*" | "/" | "%" | <CARET> | "idiv")
-  	{
-  	  if (op == null) {
-  	    op = new OperatorExpr();
-        op.addOperand(operand);
-        op.setCurrentop(true);          	    
-  	  } 
-  	  Token t = getToken(0);
-	  op.addOperator(t.toString());
-	}
-	operand = UnionExpr()
-	{
-	   op.addOperand(operand);
-	}
-	)*
-	
- 	{
- 	  return op==null?operand:op;
- 	}	
-}
-
-Expression UnionExpr() throws ParseException:
-{
-    UnionExpr union = null;
-    Expression operand1 = null;
-    Expression operand2 = null;
-}
-{
-   operand1 = UnaryExpr() 
-   ("union" 
-       (operand2 = UnaryExpr()) {
-          if (union == null) {
-             union = new UnionExpr();
-             union.addExpr(operand1); 
-          }
-          union.addExpr(operand2);   
-       } )*
-   {
-     return (union == null)? operand1: union;
-   }
-}
-
-Expression UnaryExpr() throws ParseException:
-{
-	Expression uexpr = null;
-	Expression expr = null;
-}
-{
-	(( "+"|"-") 
-	{
-	  	uexpr = new UnaryExpr(); 
-		Token t = getToken(0);
-		if("+".equals(t.toString()))
-			((UnaryExpr)uexpr).setSign(Sign.POSITIVE);
-		else if("-".equals(t.toString()))
-			((UnaryExpr)uexpr).setSign(Sign.NEGATIVE);
-		else 
-			throw new ParseException();
-	}
-	)?
-	
-	expr = ValueExpr()
-	{
-		if(uexpr!=null){
-			((UnaryExpr)uexpr).setExpr(expr);
-			return uexpr;
-		}
-		else{
-			return expr;
-		}
-	}
-}
-
-Expression ValueExpr() throws ParseException:
-{
-  Expression expr;
-}
-{
-  expr = FieldOrIndexAccessor()
-  {
-    return expr;
-  }
-}
-
-
-Expression FieldOrIndexAccessor()throws ParseException:
-{
-  Expression expr = null;
-  Identifier ident = null;
-  AbstractAccessor fa = null;
-  int index;
-
-}
-{
-	( expr = PrimaryExpr()
-
-	)
-
-
-	(
-	(
-	  	ident = Field()
-	{
-		  if(fa == null)
-		  	fa = new FieldAccessor(expr, ident);
-		  else
-		  	fa = new FieldAccessor(fa, ident);
-	}
-	)
-	| (
-		index = Index()
-		{
-		  if(fa == null)
-		  	fa = new IndexAccessor(expr, index);
-		  else
-		  	fa = new IndexAccessor(fa, index);
-		}
-	) 
-	)*
-
-	
-  	{
- 	  return fa==null?expr:fa;
- 	}
-}
-
-Identifier Field() throws ParseException:
-{
-  Identifier ident = null;
-
-}
-{
-  "." < IDENTIFIER >
-  	{
-    
-  	ident = new Identifier();
-	ident.setValue(getToken(0).toString());
-
-	  return ident;
-	}
-}
-
-int Index() throws ParseException:
-{
-	Expression expr = null;
-	int idx = -2;
-}
-{
-  "[" ( expr = Expression()
-	{
-		if(expr.getKind() == Expression.Kind.LITERAL_EXPRESSION)
-		{
-			Literal lit = ((LiteralExpr)expr).getValue();
-			if(lit.getLiteralType() == Literal.Type.INTEGER || 
-			   lit.getLiteralType() == Literal.Type.LONG) {
-				idx = Integer.valueOf(lit.getStringValue());
-			}
-			else {
-				throw new ParseException("Index should be an INTEGER");				
-            }
-		}
-
-	}
-
-  	| "?"
-	{
-		idx = IndexAccessor.ANY;
-	  // ANY
-	}
- 	 
-  	)
-
-   "]"
-	{
-	  return idx;
-	}
-}
-
-
-Expression PrimaryExpr()throws ParseException:
-{
-  Expression expr = null;
-}
-{
-  //Literal | VariableRef | ListConstructor | RecordConstructor | FunctionCallExpr | DatasetAccessExpression | ParenthesizedExpression
-	(
-	  expr =Literal() 
-	   | expr = FunctionCallExpr()
-	   | expr = DatasetAccessExpression()
-	   | expr =VariableRef() 
-	   
-    {
-      if(((VariableExpr)expr).getIsNewVar() == true)
-      	throw new ParseException("can't find variable " + ((VariableExpr)expr).getVar());
-    }
-    	   | expr = ListConstructor()
-	   | expr = RecordConstructor()
-	   | expr = ParenthesizedExpression()
-	)
- 	{
- 	  return expr;
- 	}
-}
-
-Expression Literal() throws ParseException:
-{
-
-  LiteralExpr lit = new LiteralExpr();
-  Token t;
-}
-{
-(
-      <STRING_LITERAL>
-	{
-	  t= getToken(0);
-	  lit.setValue( new StringLiteral(removeQuotesAndEscapes(t.image)));
-	}
-    
- 	 | <INTEGER_LITERAL>
-    {
-      t= getToken(0);
-	  try {
-	      lit.setValue(new IntegerLiteral(new Integer(t.image)));
-	  } catch(NumberFormatException ex) {
-	      lit.setValue(new LongIntegerLiteral(new Long(t.image)));
-	  }
-	}
-     | < FLOAT_LITERAL >
-    {
-      t= getToken(0);
-      lit.setValue(new FloatLiteral(new Float(t.image)));
-    }     
-	 | < DOUBLE_LITERAL >
-    {
-      t= getToken(0);
-	  lit.setValue(new DoubleLiteral(new Double(t.image)));
-	}	  
- 	 | <NULL>
-	{
-	  t= getToken(0);
-	  lit.setValue(NullLiteral.INSTANCE);
-	}
-   	 | <TRUE>
-	{
-	  t= getToken(0);
-	  lit.setValue(TrueLiteral.INSTANCE);
-	}   	 
-   	 | <FALSE>
-	{
-	  t= getToken(0);
-	  lit.setValue(FalseLiteral.INSTANCE);
-	}
-)
-    {
-      return lit;
-    }
-}
-
-
-VariableExpr VariableRef() throws ParseException:
-{
-	VariableExpr varExp = new VariableExpr();
-	VarIdentifier var = new VarIdentifier();
-	Token t;
-}
-{
-      <VARIABLE>
-    {
-     t = getToken(0);//get current token
-     String varName = t.toString(); 
-     Identifier ident = lookupSymbol(varName);
-     if (isInForbiddenScopes(varName)) {
-       throw new ParseException("Inside limit clauses, it is disallowed to reference a variable having the same name as any variable bound in the same scope as the limit clause.");
-     }
-     if(ident != null) { // exist such ident
-       varExp.setIsNewVar(false);
-       varExp.setVar((VarIdentifier)ident);       
-     } else {
-       varExp.setVar(var);     
-     }
-     var.setValue(t.toString());        
-     return varExp;
-    }
-}
-
-
-VariableExpr Variable() throws ParseException:
-{
-	VariableExpr varExp = new VariableExpr();
-	VarIdentifier var = new VarIdentifier();
-	Token t;
-}
-{
-      <VARIABLE>
-    {
-     t = getToken(0);//get current token
-     Identifier ident = lookupSymbol(t.toString());
-     if(ident != null) { // exist such ident
-       varExp.setIsNewVar(false);
-     }  
-     varExp.setVar(var);     
-     var.setValue(t.toString());        
-     return varExp;
-    }
-}
-
-Expression ListConstructor() throws ParseException:
-{
-	Expression expr = null;
-}
-{
-    (
-    	expr = OrderedListConstructor() | expr = UnorderedListConstructor()
-    )
-    
-    {
-      return expr;
-    }
-}
-
-
-ListConstructor OrderedListConstructor() throws ParseException:
-{
-  	ListConstructor expr = new ListConstructor();
-  	Expression tmp = null;
-  	List<Expression> exprList = new ArrayList<Expression>();
-  	expr.setType(ListConstructor.Type.ORDERED_LIST_CONSTRUCTOR);
-}
-{
-
-    "[" 
-	    ( tmp = Expression()
-			{
-			  exprList.add(tmp);
-			}
-		
-		    ("," tmp = Expression() { exprList.add(tmp);  })*
-	    )? 
-    
-    "]"
-
-    {
-      expr.setExprList(exprList);
-      return expr;
-    }    
-}
-
-ListConstructor UnorderedListConstructor() throws ParseException:
-{
-  	ListConstructor expr = new ListConstructor();
-  	Expression tmp = null;
-  	List<Expression> exprList = new ArrayList<Expression>();
-  	expr.setType(ListConstructor.Type.UNORDERED_LIST_CONSTRUCTOR);
-}
-{
-
-    "{{" ( tmp = Expression()
-	{
-	  exprList.add(tmp);
-	}
-    ("," tmp = Expression() { exprList.add(tmp);  })*)? "}}"
-    {
-      expr.setExprList(exprList);
-      return expr;
-    }    
-}
-
-RecordConstructor RecordConstructor() throws ParseException:
-{
-  	RecordConstructor expr = new RecordConstructor();
-  	FieldBinding tmp = null;
-  	List<FieldBinding> fbList = new ArrayList<FieldBinding>();
-}
-{
-    "{" (tmp = FieldBinding()
-    {
-      fbList.add(tmp);
-    }
-    ("," tmp = FieldBinding() { fbList.add(tmp);  })*)? "}"
-    {
-      expr.setFbList(fbList);
-      return expr;
-    }       
-}
-
-FieldBinding FieldBinding() throws ParseException:
-{
-	FieldBinding fb = new FieldBinding();
-	Expression left, right;
-}
-{
-    left = Expression() ":" right = Expression()
-    {
-      fb.setLeftExpr(left);
-      fb.setRightExpr(right);
-      return fb;
-    }
-}
-
-
-Expression FunctionCallExpr() throws ParseException:
-{
-  CallExpr callExpr;
-  List<Expression> argList = new ArrayList<Expression>();
-  Expression tmp;
-  int arity = 0;
-  String funcName;
-  String dataverse;
-  String hint=null;
-  String id1=null;
-  String id2=null;
-}
-{  
-    
-    <IDENTIFIER> { dataverse = defaultDataverse; funcName = token.image;} ("." <IDENTIFIER> { dataverse = funcName; funcName = token.image;})?
-    {
-       hint = getHint(token);
-    }
-     <LEFTPAREN> (tmp = Expression()
-     {
-       argList.add(tmp);
-       arity ++;
-     } ("," tmp = Expression() { argList.add(tmp); arity++; })*)? <RIGHTPAREN>
-
-     {
-       FunctionSignature signature = lookupFunctionSignature(dataverse, funcName.toString(), arity);
-             if(signature == null)
-             {
-                signature = new FunctionSignature(dataverse, funcName.toString(), arity);
-             }
-       callExpr = new CallExpr(signature,argList);
-       if (hint != null && hint.startsWith(INDEXED_NESTED_LOOP_JOIN_HINT)) {
-          callExpr.addHint(IndexedNLJoinExpressionAnnotation.INSTANCE);
-        }
-       return callExpr;
-     }
-}
-
-Expression DatasetAccessExpression() throws ParseException:
-{
-  CallExpr callExpr;
-  List<Expression> argList = new ArrayList<Expression>();
-  String funcName;
-  String dataverse;
-  LiteralExpr ds;
-  LiteralExpr dvds;
-  Expression nameArg;
-  int arity = 0;
-}
-{  
-    <DATASET> {dataverse = MetadataConstants.METADATA_DATAVERSE_NAME; funcName = getToken(0).toString();}
-    (
-    (<IDENTIFIER> {ds = new LiteralExpr(); ds.setValue( new StringLiteral(token.image) ); argList.add(ds); arity ++;} ("." <IDENTIFIER> { dvds = new LiteralExpr(); dvds.setValue(new StringLiteral(ds.getValue()+"."+token.image)); argList.remove(0); argList.add(dvds);})? ) |  
-    (<LEFTPAREN> nameArg = Expression() {argList.add(nameArg); arity ++;} ("," nameArg = Expression() { argList.add(nameArg); arity++; })* <RIGHTPAREN>)
-    )  
-     
-     {
-       FunctionSignature signature = lookupFunctionSignature(dataverse, funcName.toString(), arity);
-       if(signature == null)
-             {
-                signature = new FunctionSignature(dataverse, funcName.toString(), arity);
-             }
-       callExpr = new CallExpr(signature,argList);
-       return callExpr;
-     }
-}
-
-Expression ParenthesizedExpression() throws ParseException:
-{
-  Expression expr;
-}
-{
-    <LEFTPAREN> expr = Expression() <RIGHTPAREN>
-    {
-      return expr;
-    }
-}
-
-Expression IfThenElse() throws ParseException:
-{
-  Expression condExpr;
-  Expression thenExpr;
-  Expression elseExpr;
-  IfExpr ifExpr = new IfExpr();
-}
-{
-    "if" <LEFTPAREN> condExpr = Expression() <RIGHTPAREN> "then" thenExpr = Expression() "else" elseExpr = Expression()
-
-    {
-      ifExpr.setCondExpr(condExpr);
-      ifExpr.setThenExpr(thenExpr);
-      ifExpr.setElseExpr(elseExpr);
-      return ifExpr;
-    }
-}
-
-Expression  FLWOGR() throws ParseException:
-{
-	FLWOGRExpression flworg = new FLWOGRExpression();
-	List<Clause> clauseList = new ArrayList<Clause>();
-	Expression returnExpr;
-	Clause tmp;
-	createNewScope();
-}
-{
-     (tmp = ForClause()  {clauseList.add(tmp);} | tmp = LetClause() {clauseList.add(tmp);})
-      (tmp = Clause() {clauseList.add(tmp);})* "return" returnExpr = Expression()
-
-     {
-       flworg.setClauseList(clauseList);
-       flworg.setReturnExpr(returnExpr);
-       removeCurrentScope();
-       return flworg;
-     }
-}
-
-Clause Clause()throws ParseException :
-{
-  Clause clause;
-}
-{
-    (
-         clause = ForClause() 
-       | clause = LetClause() 
-       | clause = WhereClause() 
-       | clause = OrderbyClause() 
-       | clause = GroupClause() 
-       | clause = LimitClause()
-       | clause = DistinctClause()
-       | clause = DieClause()
-    )
-    {
-      return clause;
-    }
-}
-
-Clause ForClause()throws ParseException :
-{
-	ForClause fc = new ForClause();
-	VariableExpr varExp;
-	VariableExpr varPos = null;
-	Expression inExp;
-	extendCurrentScope();
-}
-{
-    "for" varExp = Variable()
-    {
-     	getCurrentScope().addNewVarSymbolToScope(varExp.getVar());
-	}
-	("at" varPos = Variable()
-	  {
-	     getCurrentScope().addNewVarSymbolToScope(varPos.getVar());
-	  } 
-	 )? 
-      "in" ( inExp = Expression() )
-    {
-      fc.setVarExpr(varExp);
-      fc.setInExpr(inExp);
-      if (varPos != null) {
-        fc.setPosExpr(varPos);
-      }
-      return fc;
-    }
-}
-
-Clause LetClause() throws ParseException:
-{
-	LetClause lc = new LetClause();
-	VariableExpr varExp;
-	Expression beExp;
-	extendCurrentScope();
-}
-{
-    "let" varExp = Variable() ":=" beExp = Expression()
-    {
-      getCurrentScope().addNewVarSymbolToScope(varExp.getVar());
-      lc.setVarExpr(varExp);
-      lc.setBeExpr(beExp);
-      return lc;
-    }
-}
-
-Clause WhereClause()throws ParseException :
-{
-  WhereClause wc = new WhereClause();
-  Expression whereExpr;
-}
-{
-    "where" whereExpr = Expression()
-    {
-      wc.setWhereExpr(whereExpr);
-      return wc;
-    }
-}
-
-Clause OrderbyClause()throws ParseException :
-{
-  OrderbyClause oc = new OrderbyClause();
-  Expression orderbyExpr;
-  List<Expression> orderbyList = new ArrayList<Expression>();
-  List<OrderbyClause.OrderModifier> modifierList = new ArrayList<OrderbyClause.OrderModifier >();
-  int numOfOrderby = 0;
-}
-{
-  (
-    "order" 
-      {
-         String hint = getHint(token);
-         if (hint != null && hint.startsWith(INMEMORY_HINT)) {
-           String splits[] = hint.split(" +"); 
-           int numFrames = Integer.parseInt(splits[1]);
-           int numTuples = Integer.parseInt(splits[2]);
-           oc.setNumFrames(numFrames);
-           oc.setNumTuples(numTuples);   
-         } 
-      }     
-    "by" orderbyExpr = Expression()
-    {
-      orderbyList.add(orderbyExpr);
-      OrderbyClause.OrderModifier modif = OrderbyClause.OrderModifier.ASC;       
-    }
-    ( ("asc" { modif = OrderbyClause.OrderModifier.ASC; })
-    | ("desc" { modif = OrderbyClause.OrderModifier.DESC; }))?
-    {
-      modifierList.add(modif);
-    }
-    
-    ("," orderbyExpr = Expression()
-    {
-      orderbyList.add(orderbyExpr);
-      modif = OrderbyClause.OrderModifier.ASC;
-    }
-    ( ("asc" { modif = OrderbyClause.OrderModifier.ASC; })
-    | ("desc" { modif = OrderbyClause.OrderModifier.DESC; }))?
-    {
-      modifierList.add(modif);
-    }    
-    )*
-)
-    {
-      oc.setModifierList(modifierList);
-      oc.setOrderbyList(orderbyList);
-      return oc;
-    }
-}
-Clause GroupClause()throws ParseException :
-{
-  	GroupbyClause gbc = new GroupbyClause();
-  	// GbyVariableExpressionPair pair = new GbyVariableExpressionPair();
- 	List<GbyVariableExpressionPair> vePairList = new ArrayList<GbyVariableExpressionPair>();
-    List<GbyVariableExpressionPair> decorPairList = new ArrayList<GbyVariableExpressionPair>();
-	List<VariableExpr> withVarList= new ArrayList<VariableExpr>();
-	VariableExpr var = null;
-	VariableExpr withVar = null;
-	Expression expr = null;
-	VariableExpr decorVar = null;
-	Expression decorExpr = null;
-}
-{
-  	{
-  	  Scope newScope = extendCurrentScopeNoPush(true); 
-  	  // extendCurrentScope(true);
-  	}
-    "group"
-      {
-         String hint = getHint(token);
-         if (hint != null && hint.equals(HASH_GROUP_BY_HINT)) {
-           gbc.setHashGroupByHint(true);   
-         } 
-      } 
-    "by" (LOOKAHEAD(2)  var = Variable()
-    {
-      newScope.addNewVarSymbolToScope(var.getVar());
-    } ":=")?
-    expr = Expression() 
-       {
-         GbyVariableExpressionPair pair1 = new GbyVariableExpressionPair(var, expr);    
-         vePairList.add(pair1);
-       }
-    ("," ( LOOKAHEAD(2) var = Variable()
-    {
-      newScope.addNewVarSymbolToScope(var.getVar());
-    } ":=")?
-    	expr = Expression()  
-    	 {
-           GbyVariableExpressionPair pair2 = new GbyVariableExpressionPair(var, expr);    
-           vePairList.add(pair2);
-         }
-    	)*
-    ("decor" decorVar = Variable() ":=" decorExpr = Expression()
-       {    
-         newScope.addNewVarSymbolToScope(decorVar.getVar()); 
-         GbyVariableExpressionPair pair3 = new GbyVariableExpressionPair(decorVar, decorExpr);
-         decorPairList.add(pair3);
-       }
-      ("," "decor" decorVar = Variable() ":=" decorExpr = Expression()
-           { 
-             newScope.addNewVarSymbolToScope(decorVar.getVar()); 
-             GbyVariableExpressionPair pair4 = new GbyVariableExpressionPair(decorVar, decorExpr);
-             decorPairList.add(pair4);              
-           }
-       )*            
-    )?	
-    "with" withVar = VariableRef()
-    {
-      if(withVar.getIsNewVar()==true)
-      	throw new ParseException("can't find variable " + withVar.getVar());
-      withVarList.add(withVar);
-      newScope.addNewVarSymbolToScope(withVar.getVar());
-    }
-    ("," withVar = VariableRef()
-    {
-      if(withVar.getIsNewVar()==true)
-      	throw new ParseException("can't find variable " + withVar.getVar());
-      withVarList.add(withVar);
-      newScope.addNewVarSymbolToScope(withVar.getVar());
-    })*
-    {
-      gbc.setGbyPairList(vePairList);
-      gbc.setDecorPairList(decorPairList);
-      gbc.setWithVarList(withVarList);
-      replaceCurrentScope(newScope);
-      return gbc;
-    }
-}
-
-
-LimitClause LimitClause() throws ParseException:
-{
-	LimitClause lc = new LimitClause();
-	Expression expr;
-	pushForbiddenScope(getCurrentScope());
-}
-{
-    "limit" expr = Expression()    { lc.setLimitExpr(expr);    }
-    ("offset" expr = Expression() { lc.setOffset(expr);    })?
-
-  {
-    popForbiddenScope();   
-    return lc;
-  }
-}
-
-DistinctClause DistinctClause() throws ParseException:
-{
-  List<Expression> exprs = new ArrayList<Expression>();
-  Expression expr;
-}
-{
-  "distinct" "by" expr = Expression() 
-  {
-    exprs.add(expr);
-  }
-  ("," expr = Expression() 
-  	{
-  		exprs.add(expr); 
-  	} 
-  )*
-  {
-  	return new DistinctClause(exprs);
-  }
-}
-
-DieClause DieClause() throws ParseException:
-{
-	DieClause lc = new DieClause();
-	Expression expr;
-	pushForbiddenScope(getCurrentScope());
-}
-{
-  "die" "after" expr = Expression()    { lc.setDieExpr(expr);    }
-  {
-    popForbiddenScope();   
-    return lc;
-  }
-}
-
-
-QuantifiedExpression QuantifiedExpression()throws ParseException:
-{
-  QuantifiedExpression qc = new QuantifiedExpression();
-  List<QuantifiedPair> quantifiedList = new ArrayList<QuantifiedPair>();
-  Expression satisfiesExpr;
-  VariableExpr var;
-  Expression inExpr;
-  QuantifiedPair pair;
-}
-{
-  {
-    createNewScope();
-  }
-	
-   (      ("some"  {  qc.setQuantifier(QuantifiedExpression.Quantifier.SOME);	})
-		| ("every" {  qc.setQuantifier(QuantifiedExpression.Quantifier.EVERY);	}))
-	var = Variable() "in" inExpr = Expression() 
-	{
-	  pair = new QuantifiedPair(var, inExpr);
-      getCurrentScope().addNewVarSymbolToScope(var.getVar());
-      quantifiedList.add(pair);
-	}
-	(
-	"," var = Variable() "in" inExpr = Expression() 
-	{ 
-      pair = new QuantifiedPair(var, inExpr);
-      getCurrentScope().addNewVarSymbolToScope(var.getVar());
-      quantifiedList.add(pair);	
-	}
-	)*
-	 "satisfies" satisfiesExpr = Expression()
-	 {
-	   qc.setSatisfiesExpr(satisfiesExpr);
-	   qc.setQuantifiedList(quantifiedList);
-	   removeCurrentScope();
-	   return qc;
-	 }
-}
-
-TOKEN_MGR_DECLS:
-{
-        public int commentDepth = 0;
-}
-
-<DEFAULT>
-TOKEN :
-{
-   <CARET : "^"  >
-}
-
-<DEFAULT>
-TOKEN :
-{
-   <DATASET : "dataset"  >
-}
-
-<DEFAULT>
-TOKEN :
-{
-   <LEFTPAREN : "("  >
-}
-
-<DEFAULT>
-TOKEN :
-{
-   <RIGHTPAREN : ")"  >
-}
-
-
-<DEFAULT>
-TOKEN :
-{
-	<INTEGER_LITERAL : (<DIGIT>)+ >
-}
-
-
-<DEFAULT>
-TOKEN :
-{
-	<NULL : "null">
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<TRUE : "true">
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<FALSE : "false">
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<#DIGIT : ["0" - "9"]>
-}
-
-
-TOKEN:
-{
-  < DOUBLE_LITERAL: <INTEGER>
-        | <INTEGER> ( "." <INTEGER> )?
-        | "." <INTEGER>
-  >
-  |
-  < FLOAT_LITERAL: <INTEGER> ( "f" | "F" )
-        | <INTEGER> ( "." <INTEGER> ( "f" | "F" ) )?
-        | "." <INTEGER> ( "f" | "F" )
-  >
-  |
-  <INTEGER : (<DIGIT>)+ >
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<#LETTER : ["A" - "Z", "a" - "z"]>
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<SPECIALCHARS : ["$", "_", "-"]  >
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<STRING_LITERAL : ("\"" (<EscapeQuot> | ~["\""])* "\"") | ("\'"(<EscapeApos> | ~["\'"])* "\'")>
-	|
-	< #EscapeQuot: "\\\"" >
-	|
-    < #EscapeApos: "\\\'" >
-}
-
-<DEFAULT>
-TOKEN :
-{
-	<IDENTIFIER : (<LETTER>)+ (<LETTER> | <DIGIT> | <SPECIALCHARS>)*>
-}
-
-
-<DEFAULT>
-TOKEN :
-{
-	<VARIABLE : "$" <IDENTIFIER> >
-}
-
-SKIP:
-{
-    " "
-|   "\t"
-|   "\r"
-|   "\n"
-}
-
-SKIP:
-{
-	<"//" (~["\n"])* "\n">
-}
-
-SKIP:
-{
-	<"//" (~["\n","\r"])* ("\n"|"\r"|"\r\n")?> 
-}
-
-
-SKIP:
-{
-        <"/*"> {commentDepth=1;}: INSIDE_COMMENT
-}
-
-<INSIDE_COMMENT>
-SPECIAL_TOKEN:
-{
-       <"+"(" ")*(~["*"])*>
-}
-
-<INSIDE_COMMENT>
-SKIP:
-{
-        <"/*"> {commentDepth++;}
-}
-
-<INSIDE_COMMENT>
-SKIP:
-{
-        <"*/"> {commentDepth--; if (commentDepth == 0) SwitchTo(DEFAULT);}
-|       <~[]>
-}
diff --git a/asterix/asterix-common/pom.xml b/asterix/asterix-common/pom.xml
deleted file mode 100644
index bb2b97f..0000000
--- a/asterix/asterix-common/pom.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-common</artifactId>
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>algebricks-compiler</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-dataflow-std</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-transactions</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-common</artifactId>
-		</dependency>
-	</dependencies>
-
-</project>
-
diff --git a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/GlobalConfig.java b/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/GlobalConfig.java
deleted file mode 100644
index 1183b65..0000000
--- a/asterix/asterix-common/src/main/java/edu/uci/ics/asterix/common/config/GlobalConfig.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package edu.uci.ics.asterix.common.config;
-
-import java.util.logging.Logger;
-
-public class GlobalConfig {
-    public static final boolean DEBUG = true;
-
-    public static final String ASTERIX_LOGGER_NAME = "edu.uci.ics.asterix";
-
-    public static final Logger ASTERIX_LOGGER = Logger.getLogger(ASTERIX_LOGGER_NAME);
-
-    public static final String ASTERIX_LOGFILE_PATTERN = "%t/asterix.log";
-
-    public static final String DEFAULT_CONFIG_FILE_NAME = "test.properties";
-
-    public static final String TEST_CONFIG_FILE_NAME = "src/main/resources/test.properties";
-
-    public static final String CONFIG_FILE_PROPERTY = "AsterixConfigFileName";
-
-    public static final String WEB_SERVER_PORT_PROPERTY = "AsterixWebServerPort";
-
-    public static final String JSON_API_SERVER_PORT_PROPERTY = "AsterixJSONAPIServerPort";
-
-    public static final String BUFFER_CACHE_PAGE_SIZE_PROPERTY = "BufferCachePageSize";
-
-    public static final String BUFFER_CACHE_NUM_PAGES_PROPERTY = "BufferCacheNumPages";
-
-    public static final int DEFAULT_BUFFER_CACHE_NUM_PAGES = 4096;
-
-    public static final int DEFAULT_FRAME_SIZE = 32768;
-
-    public static final String FRAME_SIZE_PROPERTY = "FrameSize";
-
-    public static final float DEFAULT_BTREE_FILL_FACTOR = 1.00f;
-
-    public static int DEFAULT_INPUT_DATA_COLUMN = 0;
-
-    public static int DEFAULT_INDEX_MEM_PAGE_SIZE = 32768;
-
-    public static int DEFAULT_INDEX_MEM_NUM_PAGES = 1000;
-
-    public static int getFrameSize() {
-        int frameSize = GlobalConfig.DEFAULT_FRAME_SIZE;
-        String frameSizeStr = System.getProperty(GlobalConfig.FRAME_SIZE_PROPERTY);
-        if (frameSizeStr != null) {
-            int fz = -1;
-            try {
-                fz = Integer.parseInt(frameSizeStr);
-            } catch (NumberFormatException nfe) {
-                GlobalConfig.ASTERIX_LOGGER.warning("Wrong frame size size argument. Picking default value ("
-                        + GlobalConfig.DEFAULT_FRAME_SIZE + ") instead.\n");
-            }
-            if (fz >= 0) {
-                frameSize = fz;
-            }
-        }
-        return frameSize;
-    }
-}
diff --git a/asterix/asterix-events/pom.xml b/asterix/asterix-events/pom.xml
deleted file mode 100644
index 107cc0c..0000000
--- a/asterix/asterix-events/pom.xml
+++ /dev/null
@@ -1,170 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-          <artifactId>asterix</artifactId>
-          <groupId>edu.uci.ics.asterix</groupId>
-          <version>0.0.5-SNAPSHOT</version>
-  </parent>
-  <groupId>edu.uci.ics.asterix</groupId>
-  <artifactId>asterix-events</artifactId>
-  <version>0.0.5-SNAPSHOT</version>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-       <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.0.2</version>
-          <configuration>
-             <source>1.6</source>
-             <target>1.6</target>
-          </configuration>
-       </plugin>
-       <plugin>
-          <groupId>org.jvnet.jaxb2.maven2</groupId>
-          <artifactId>maven-jaxb2-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>event</id>
-              <goals>
-                <goal>generate</goal>
-              </goals>
-              <configuration>
-                <args>
-                  <arg>-Xsetters</arg>
-                  <arg>-Xvalue-constructor</arg>
-                </args>
-                <plugins>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-basics</artifactId>
-                    <version>0.6.2</version>
-                  </plugin>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-value-constructor</artifactId>
-                    <version>3.0</version>
-                  </plugin>
-                </plugins>
-                <schemaDirectory>src/main/resources/schema</schemaDirectory>
-                <schemaIncludes>
-	          <include>event.xsd</include>
-	        </schemaIncludes>
-                <generatePackage>edu.uci.ics.asterix.event.schema.event</generatePackage>
-                <generateDirectory>${project.build.directory}/generated-sources/event</generateDirectory>
-              </configuration>
-            </execution>
-            <execution>
-              <id>pattern</id>
-              <goals>
-                <goal>generate</goal>
-              </goals>
-              <configuration>
-                <args>
-                  <arg>-Xsetters</arg>
-                  <arg>-Xvalue-constructor</arg>
-                </args>
-                <plugins>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-basics</artifactId>
-                    <version>0.6.2</version>
-                  </plugin>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-value-constructor</artifactId>
-                    <version>3.0</version>
-                  </plugin>
-                </plugins>
-                <schemaDirectory>src/main/resources/schema</schemaDirectory>
-                <schemaIncludes>
-	          <include>pattern.xsd</include>
-	        </schemaIncludes>
-                <generatePackage>edu.uci.ics.asterix.event.schema.pattern</generatePackage>
-                <generateDirectory>${project.build.directory}/generated-sources/pattern</generateDirectory>
-              </configuration>
-            </execution>
-            <execution>
-              <id>cluster</id>
-              <goals>
-                <goal>generate</goal>
-              </goals>
-              <configuration>
-                <args>
-                  <arg>-Xsetters</arg>
-                  <arg>-Xvalue-constructor</arg>
-                </args>
-                <plugins>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-basics</artifactId>
-                    <version>0.6.2</version>
-                  </plugin>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-value-constructor</artifactId>
-                    <version>3.0</version>
-                  </plugin>
-                </plugins>
-                <schemaDirectory>src/main/resources/schema</schemaDirectory>
-                <schemaIncludes>
-	          <include>cluster.xsd</include>
-	        </schemaIncludes>
-                <generatePackage>edu.uci.ics.asterix.event.schema.cluster</generatePackage>
-                <generateDirectory>${project.build.directory}/generated-sources/cluster</generateDirectory>
-                <bindingDirectory>src/main/resources/schema</bindingDirectory>
-                <bindingIncludes>
-                  <bindingInclude>jaxb-bindings.xjb</bindingInclude>
-                </bindingIncludes>
-              </configuration>
-            </execution>
-          </executions>
-       </plugin>
-       <plugin>
-         <artifactId>maven-assembly-plugin</artifactId>
-         <version>2.2-beta-2</version>
-         <executions>
-           <execution>
-             <configuration>
-               <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-             </configuration>
-             <phase>package</phase>
-             <goals>
-               <goal>attached</goal>
-             </goals>
-           </execution>
-         </executions>
-       </plugin>
-    </plugins>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.8.1</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>args4j</groupId>
-      <artifactId>args4j</artifactId>
-      <version>2.0.12</version>
-      <type>jar</type>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.jvnet.jaxb2_commons</groupId>
-      <artifactId>jaxb2-value-constructor</artifactId>
-      <version>3.0</version>
-    </dependency>
-    <dependency>
-      <groupId>commons-io</groupId>
-      <artifactId>commons-io</artifactId>
-      <version>1.4</version>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventDriver.java b/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventDriver.java
deleted file mode 100644
index 66c0102..0000000
--- a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/driver/EventDriver.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.event.driver;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
-
-import org.kohsuke.args4j.CmdLineParser;
-
-import edu.uci.ics.asterix.event.management.DefaultOutputHandler;
-import edu.uci.ics.asterix.event.management.EventUtil;
-import edu.uci.ics.asterix.event.management.EventrixClient;
-import edu.uci.ics.asterix.event.management.IOutputHandler;
-import edu.uci.ics.asterix.event.management.Randomizer;
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-import edu.uci.ics.asterix.event.schema.cluster.Property;
-import edu.uci.ics.asterix.event.schema.event.Events;
-import edu.uci.ics.asterix.event.schema.pattern.Patterns;
-
-public class EventDriver {
-
-    public static final String CLIENT_NODE_ID = "client_node";
-    public static final Node CLIENT_NODE = new Node(CLIENT_NODE_ID, "127.0.0.1", null, null, null, null, null, null);
-
-    private static String eventsDir;
-    private static Events events;
-    private static Map<String, String> env = new HashMap<String, String>();
-    private static String scriptDirSuffix;
-
-    public static String getEventsDir() {
-        return eventsDir;
-    }
-
-    public static Events getEvents() {
-        return events;
-    }
-
-    public static Map<String, String> getEnvironment() {
-        return env;
-    }
-
-    public static String getStringifiedEnv(Cluster cluster) {
-        StringBuffer buffer = new StringBuffer();
-        for (Property p : cluster.getEnv().getProperty()) {
-            buffer.append(p.getKey() + "=" + p.getValue() + " ");
-        }
-        return buffer.toString();
-    }
-
-    public static Cluster initializeCluster(String path) throws JAXBException, IOException {
-        File file = new File(path);
-        JAXBContext ctx = JAXBContext.newInstance(Cluster.class);
-        Unmarshaller unmarshaller = ctx.createUnmarshaller();
-        Cluster cluster = (Cluster) unmarshaller.unmarshal(file);
-        for (Property p : cluster.getEnv().getProperty()) {
-            env.put(p.getKey(), p.getValue());
-        }
-        return cluster;
-    }
-
-    public static Patterns initializePatterns(String path) throws JAXBException, IOException {
-        File file = new File(path);
-        JAXBContext ctx = JAXBContext.newInstance(Patterns.class);
-        Unmarshaller unmarshaller = ctx.createUnmarshaller();
-        return (Patterns) unmarshaller.unmarshal(file);
-    }
-
-    private static void initialize(EventConfig eventConfig) throws IOException, JAXBException {
-
-    }
-
-    public static EventrixClient getClient(String eventsDir, Cluster cluster, boolean dryRun) throws Exception {
-        return new EventrixClient(eventsDir, cluster, dryRun, new DefaultOutputHandler());
-    }
-
-    public static EventrixClient getClient(String eventsDir, Cluster cluster, boolean dryRun,
-            IOutputHandler outputHandler) throws Exception {
-        return new EventrixClient(eventsDir, cluster, dryRun, outputHandler);
-    }
-
-    public static void main(String[] args) throws Exception {
-        String eventsHome = System.getenv("EVENT_HOME");
-        if (eventsHome == null) {
-            throw new IllegalStateException("EVENT_HOME is not set");
-        }
-        eventsDir = eventsHome + File.separator + EventUtil.EVENTS_DIR;
-        EventConfig eventConfig = new EventConfig();
-        CmdLineParser parser = new CmdLineParser(eventConfig);
-        try {
-            parser.parseArgument(args);
-            if (eventConfig.help) {
-                parser.printUsage(System.out);
-            }
-            if (eventConfig.seed > 0) {
-                Randomizer.getInstance(eventConfig.seed);
-            }
-            Cluster cluster = initializeCluster(eventConfig.clusterPath);
-            Patterns patterns = initializePatterns(eventConfig.patternPath);
-            initialize(eventConfig);
-
-            if (!eventConfig.dryRun) {
-                prepare(cluster);
-            }
-            EventrixClient client = new EventrixClient(eventsDir, cluster, eventConfig.dryRun,
-                    new DefaultOutputHandler());
-            client.submit(patterns);
-            if (!eventConfig.dryRun) {
-                cleanup(cluster);
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            parser.printUsage(System.err);
-        }
-    }
-
-    private static void prepare(Cluster cluster) throws IOException, InterruptedException {
-
-        scriptDirSuffix = "" + System.nanoTime();
-        List<String> args = new ArrayList<String>();
-        args.add(scriptDirSuffix);
-        Node clientNode = new Node();
-        clientNode.setId("client");
-        clientNode.setClusterIp("127.0.0.1");
-        for (Node node : cluster.getNode()) {
-            args.add(node.getClusterIp());
-        }
-        EventUtil.executeLocalScript(clientNode, eventsDir + "/" + "events" + "/" + "prepare.sh", args);
-    }
-
-    private static void cleanup(Cluster cluster) throws IOException, InterruptedException {
-        List<String> args = new ArrayList<String>();
-        args.add(scriptDirSuffix);
-        Node clientNode = new Node();
-        clientNode.setId("client");
-        clientNode.setClusterIp("127.0.0.1");
-        for (Node node : cluster.getNode()) {
-            args.add(node.getClusterIp());
-        }
-        EventUtil.executeLocalScript(clientNode, eventsDir + "/" + "events" + "/" + "cleanup.sh", args);
-    }
-}
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventExecutor.java b/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventExecutor.java
deleted file mode 100644
index 6d89c88..0000000
--- a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventExecutor.java
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.event.management;
-
-import java.io.BufferedInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.StringWriter;
-import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.io.IOUtils;
-
-import edu.uci.ics.asterix.event.driver.EventDriver;
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-import edu.uci.ics.asterix.event.schema.cluster.Property;
-import edu.uci.ics.asterix.event.schema.pattern.Pattern;
-
-public class EventExecutor {
-
-    public static final String EVENTS_DIR = "events";
-    private static final String EXECUTE_SCRIPT = "execute.sh";
-    private static final String IP_LOCATION = "IP_LOCATION";
-    private static final String CLUSTER_ENV = "ENV";
-    private static final String SCRIPT = "SCRIPT";
-    private static final String ARGS = "ARGS";
-    private static final String DAEMON = "DAEMON";
-
-    public void executeEvent(Node node, String script, List<String> args, boolean isDaemon, Cluster cluster,
-            Pattern pattern, IOutputHandler outputHandler, EventrixClient client) throws IOException {
-        List<String> pargs = new ArrayList<String>();
-        pargs.add("/bin/bash");
-        pargs.add(client.getEventsDir() + File.separator + "scripts" + File.separator + EXECUTE_SCRIPT);
-        StringBuffer envBuffer = new StringBuffer(IP_LOCATION + "=" + node.getClusterIp() + " ");
-        if (!node.getId().equals(EventDriver.CLIENT_NODE_ID) && cluster.getEnv() != null) {
-            for (Property p : cluster.getEnv().getProperty()) {
-                if (p.getKey().equals("JAVA_HOME")) {
-                    String val = node.getJavaHome() == null ? p.getValue() : node.getJavaHome();
-                    envBuffer.append(p.getKey() + "=" + val + " ");
-                } else if (p.getKey().equals("JAVA_OPTS")) {
-                    StringBuilder builder = new StringBuilder();
-                    builder.append("\"");
-                    String javaOpts = (node.getJavaOpts() == null ? cluster.getJavaOpts() : node.getJavaOpts());
-                    if (javaOpts != null) {
-                        builder.append(javaOpts);
-                    }
-                    if (cluster.isDebugEnabled() != null && cluster.isDebugEnabled().booleanValue()) {
-                        BigInteger debugPort = node.getDebug() == null ? cluster.getDebug() : node.getDebug();
-                        if (debugPort != null) {
-                            builder.append("-Xdebug -Xrunjdwp:transport=dt_socket,address=" + debugPort.intValue()
-                                    + "," + "server=y,suspend=n");
-                        }
-                    }
-                    builder.append("\"");
-                    envBuffer.append(p.getKey() + "=" + builder + " ");
-                } else {
-                    envBuffer.append(p.getKey() + "=" + p.getValue() + " ");
-                }
-
-            }
-            pargs.add(cluster.getUsername() == null ? System.getProperty("user.name") : cluster.getUsername());
-        }
-
-        StringBuffer argBuffer = new StringBuffer();
-        if (args != null && args.size() > 0) {
-            for (String arg : args) {
-                argBuffer.append(arg + " ");
-            }
-        }
-
-        ProcessBuilder pb = new ProcessBuilder(pargs);
-        pb.environment().put(IP_LOCATION, node.getClusterIp());
-        pb.environment().put(CLUSTER_ENV, envBuffer.toString());
-        pb.environment().put(SCRIPT, script);
-        pb.environment().put(ARGS, argBuffer.toString());
-        pb.environment().put(DAEMON, isDaemon ? "true" : "false");
-
-        Process p = pb.start();
-        if (!isDaemon) {
-            BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
-            StringWriter writer = new StringWriter();
-            IOUtils.copy(bis, writer, "UTF-8");
-            String result = writer.getBuffer().toString();
-            OutputAnalysis analysis = outputHandler.reportEventOutput(pattern.getEvent(), result);
-            if (!analysis.isExpected()) {
-                throw new IOException(analysis.getErrorMessage() + result);
-            }
-        }
-    }
-}
diff --git a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventUtil.java b/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventUtil.java
deleted file mode 100644
index e6c58eb..0000000
--- a/asterix/asterix-events/src/main/java/edu/uci/ics/asterix/event/management/EventUtil.java
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.event.management;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.List;
-
-import edu.uci.ics.asterix.event.driver.EventDriver;
-import edu.uci.ics.asterix.event.management.ValueType.Type;
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-import edu.uci.ics.asterix.event.schema.event.Event;
-import edu.uci.ics.asterix.event.schema.event.Events;
-import edu.uci.ics.asterix.event.schema.pattern.Pattern;
-
-public class EventUtil {
-
-	public static final String EVENTS_DIR = "events";
-	public static final String CLUSTER_CONF = "config/cluster.xml";
-	public static final String PATTERN_CONF = "config/pattern.xml";
-	public static final DateFormat dateFormat = new SimpleDateFormat(
-			"yyyy/MM/dd HH:mm:ss");
-
-	private static final String IP_LOCATION = "IP_LOCATION";
-	private static final String CLUSTER_ENV = "ENV";
-	private static final String SCRIPT = "SCRIPT";
-	private static final String ARGS = "ARGS";
-	private static final String EXECUTE_SCRIPT = "events/execute.sh";
-
-	public static long parseTimeInterval(ValueType v, String unit)
-			throws IllegalArgumentException {
-		int val = 0;
-		switch (v.getType()) {
-		case ABS:
-			val = Integer.parseInt(v.getAbsoluteValue());
-			break;
-		case RANDOM_MIN_MAX:
-			val = Randomizer.getInstance().getRandomInt(v.getMin(), v.getMax());
-			break;
-		case RANDOM_RANGE:
-			String[] values = v.getRangeSet();
-			val = Integer.parseInt(values[Randomizer.getInstance()
-					.getRandomInt(0, values.length - 1)]);
-			break;
-		}
-		return computeInterval(val, unit);
-	}
-
-	public static long parseTimeInterval(String v, String unit)
-			throws IllegalArgumentException {
-		int value = Integer.parseInt(v);
-		return computeInterval(value, unit);
-	}
-
-	private static long computeInterval(int val, String unit) {
-		int vmult = 1;
-		if ("hr".equalsIgnoreCase(unit)) {
-			vmult = 3600 * 1000;
-		} else if ("min".equalsIgnoreCase(unit)) {
-			vmult = 60 * 1000;
-		} else if ("sec".equalsIgnoreCase(unit)) {
-			vmult = 1000;
-		} else
-			throw new IllegalArgumentException(
-					" invalid unit value specified for frequency (hr,min,sec)");
-		return val * vmult;
-
-	}
-
-	public static Event getEvent(Pattern pattern, Events events) {
-		for (Event event : events.getEvent()) {
-			if (event.getType().equals(pattern.getEvent().getType())) {
-				return event;
-			}
-		}
-		throw new IllegalArgumentException(" Unknown event type"
-				+ pattern.getEvent().getType());
-	}
-
-	public static Node getEventLocation(Pattern pattern,
-			List<Node> candidateLocations, Cluster cluster) {
-		ValueType value = new ValueType(pattern.getEvent().getNodeid()
-				.getValue());
-		Node location = null;
-		Type vtype = value.getType();
-
-		switch (vtype) {
-		case ABS:
-			location = getNodeFromId(value.getAbsoluteValue(), cluster);
-			break;
-		case RANDOM_RANGE:
-			int nodeIndex = Randomizer.getInstance().getRandomInt(0,
-					candidateLocations.size() - 1);
-			location = candidateLocations.get(nodeIndex);
-			break;
-		case RANDOM_MIN_MAX:
-			throw new IllegalStateException(
-					" Canont configure a min max value range for location");
-		}
-		return location;
-
-	}
-
-	public static List<Node> getCandidateLocations(Pattern pattern,
-			Cluster cluster) {
-		ValueType value = new ValueType(pattern.getEvent().getNodeid()
-				.getValue());
-		List<Node> candidateList = new ArrayList<Node>();
-		switch (value.getType()) {
-		case ABS:
-			candidateList.add(getNodeFromId(value.getAbsoluteValue(), cluster));
-			break;
-		case RANDOM_RANGE:
-			boolean anyOption = false;
-			String[] values = value.getRangeSet();
-			for (String v : values) {
-				if (v.equalsIgnoreCase("ANY")) {
-					anyOption = true;
-				}
-			}
-			if (anyOption) {
-				for (Node node : cluster.getNode()) {
-					candidateList.add(node);
-				}
-			} else {
-				boolean found = false;
-				for (String v : values) {
-					for (Node node : cluster.getNode()) {
-						if (node.getId().equals(v)) {
-							candidateList.add(node);
-							found = true;
-							break;
-						}
-					}
-					if (!found) {
-						throw new IllegalStateException("Unknonw nodeId : " + v);
-					}
-					found = false;
-				}
-
-			}
-			String[] excluded = value.getRangeExcluded();
-			if (excluded != null && excluded.length > 0) {
-				List<Node> markedForRemoval = new ArrayList<Node>();
-				for (String exclusion : excluded) {
-					for (Node node : candidateList) {
-						if (node.getId().equals(exclusion)) {
-							markedForRemoval.add(node);
-						}
-					}
-				}
-				candidateList.removeAll(markedForRemoval);
-			}
-			break;
-		case RANDOM_MIN_MAX:
-			throw new IllegalStateException(
-					" Invalid value configured for location");
-		}
-		return candidateList;
-	}
-
-	private static Node getNodeFromId(String nodeid, Cluster cluster) {
-		if (nodeid.equals(EventDriver.CLIENT_NODE.getId())) {
-			return EventDriver.CLIENT_NODE;
-		}
-
-		if (nodeid.equals(cluster.getMasterNode().getId())) {
-			String javaOpts = cluster.getMasterNode().getJavaOpts() == null ? cluster
-					.getJavaOpts() : cluster.getMasterNode().getJavaOpts();
-			String logDir = cluster.getMasterNode().getLogdir() == null ? cluster
-					.getLogdir() : cluster.getMasterNode().getLogdir();
-			String javaHome = cluster.getMasterNode().getJavaHome() == null ? cluster
-					.getJavaHome() : cluster.getMasterNode().getJavaHome();
-			BigInteger debug = cluster.getMasterNode().getDebug();
-			return new Node(cluster.getMasterNode().getId(), cluster
-					.getMasterNode().getClusterIp(), javaHome, javaOpts,
-					logDir, null, null, debug);
-		}
-
-		List<Node> nodeList = cluster.getNode();
-		for (Node node : nodeList) {
-			if (node.getId().equals(nodeid)) {
-				return node;
-			}
-		}
-		StringBuffer buffer = new StringBuffer();
-		buffer.append(EventDriver.CLIENT_NODE.getId() + ",");
-		buffer.append(cluster.getMasterNode().getId() + ",");
-		for (Node v : cluster.getNode()) {
-			buffer.append(v.getId() + ",");
-		}
-		buffer.deleteCharAt(buffer.length() - 1);
-		throw new IllegalArgumentException("Unknown node id :" + nodeid
-				+ " valid ids:" + buffer);
-	}
-
-	public static void executeEventScript(Node node, String script,
-			List<String> args, Cluster cluster) throws IOException,
-			InterruptedException {
-		List<String> pargs = new ArrayList<String>();
-		pargs.add("/bin/bash");
-		pargs.add(EventDriver.getEventsDir() + "/" + EXECUTE_SCRIPT);
-		StringBuffer argBuffer = new StringBuffer();
-		String env = EventDriver.getStringifiedEnv(cluster) + " " + IP_LOCATION
-				+ "=" + node.getClusterIp();
-		if (args != null) {
-			for (String arg : args) {
-				argBuffer.append(arg + " ");
-			}
-		}
-		ProcessBuilder pb = new ProcessBuilder(pargs);
-		pb.environment().putAll(EventDriver.getEnvironment());
-		pb.environment().put(IP_LOCATION, node.getClusterIp());
-		pb.environment().put(CLUSTER_ENV, env);
-		pb.environment().put(SCRIPT, script);
-		pb.environment().put(ARGS, argBuffer.toString());
-		pb.start();
-	}
-
-	public static void executeLocalScript(Node node, String script,
-			List<String> args) throws IOException, InterruptedException {
-		List<String> pargs = new ArrayList<String>();
-		pargs.add("/bin/bash");
-		pargs.add(script);
-		if (args != null) {
-			pargs.addAll(args);
-		}
-		ProcessBuilder pb = new ProcessBuilder(pargs);
-		pb.environment().putAll(EventDriver.getEnvironment());
-		pb.environment().put(IP_LOCATION, node.getClusterIp());
-		pb.start();
-	}
-
-	public static List<String> getEventArgs(Pattern pattern) {
-		List<String> pargs = new ArrayList<String>();
-		if (pattern.getEvent().getPargs() == null) {
-			return pargs;
-		}
-		String[] args = pattern.getEvent().getPargs().split(" ");
-		for (String arg : args) {
-			pargs.add(arg.trim());
-		}
-		return pargs;
-	}
-
-}
diff --git a/asterix/asterix-events/src/main/resources/events/backup/backup.sh b/asterix/asterix-events/src/main/resources/events/backup/backup.sh
deleted file mode 100755
index 556ca39..0000000
--- a/asterix/asterix-events/src/main/resources/events/backup/backup.sh
+++ /dev/null
@@ -1,72 +0,0 @@
-WORKING_DIR=$1
-ASTERIX_INSTANCE_NAME=$2
-ASTERIX_IODEVICES=$3
-NODE_STORE=$4
-ASTERIX_ROOT_METADATA_DIR=$5
-TXN_LOG_DIR_NAME=$6
-BACKUP_ID=$7
-BACKUP_DIR=$8
-BACKUP_TYPE=$9
-NODE_ID=${10}
-
-nodeIODevices=$(echo $ASTERIX_IODEVICES | tr "," "\n")
-
-if [ $BACKUP_TYPE == "hdfs" ];
-then
-  HDFS_URL=${11}
-  HADOOP_VERSION=${12}
-  export HADOOP_HOME=$WORKING_DIR/hadoop-$HADOOP_VERSION
-  index=1
-  for nodeIODevice in $nodeIODevices
-  do
-    STORE_DIR=$nodeIODevice/$NODE_STORE
-    TXN_LOG_DIR=$nodeIODevice/$TXN_LOG_DIR_NAME
-    NODE_BACKUP_DIR=$BACKUP_DIR/$ASTERIX_INSTANCE_NAME/$BACKUP_ID/$NODE_ID/
-   
-    # make the destination directory 
-    $HADOOP_HOME/bin/hadoop fs -mkdir $STORE_DIR $HDFS_URL/$NODE_BACKUP_DIR
-
-    # copy store directory
-    $HADOOP_HOME/bin/hadoop fs -copyFromLocal $STORE_DIR $HDFS_URL/$NODE_BACKUP_DIR/
-
-    # copy asterix root metadata directory and log directory from the primary(first) iodevice
-    if [ $index -eq 1 ];
-    then
-      # copy asterix root metadata directory
-      $HADOOP_HOME/bin/hadoop fs -copyFromLocal $nodeIODevice/$ASTERIX_ROOT_METADATA_DIR $HDFS_URL/$NODE_BACKUP_DIR/
-
-      # copy log directory 
-      $HADOOP_HOME/bin/hadoop fs -copyFromLocal $TXN_LOG_DIR $HDFS_URL/$NODE_BACKUP_DIR/
-    fi
-
-    index=`expr $index + 1`
-  done
-else 
-  index=1
-  for nodeIODevice in $nodeIODevices
-  do
-    STORE_DIR=$nodeIODevice/$NODE_STORE
-    TXN_LOG_DIR=$nodeIODevice/$TXN_LOG_DIR_NAME
-    NODE_BACKUP_DIR=$BACKUP_DIR/$ASTERIX_INSTANCE_NAME/$BACKUP_ID/$NODE_ID
-
-    # create the backup directory, if it does not exists
-    if [ ! -d $NODE_BACKUP_DIR ];
-    then
-      mkdir -p $NODE_BACKUP_DIR
-    fi
-
-    # copy store directory
-    cp -r $STORE_DIR $NODE_BACKUP_DIR/
-
-    # copy asterix root metadata directory and log directory from the primary(first) iodevice
-    if [ $index -eq 1 ];
-    then
-      cp -r $nodeIODevice/$ASTERIX_ROOT_METADATA_DIR  $NODE_BACKUP_DIR/
-
-      # copy log directory
-      cp -r $TXN_LOG_DIR $NODE_BACKUP_DIR/
-    fi
-
-    index=`expr $index + 1`
-  done
-fi
diff --git a/asterix/asterix-events/src/main/resources/events/cc_start/cc_start.sh b/asterix/asterix-events/src/main/resources/events/cc_start/cc_start.sh
deleted file mode 100755
index 37645bc..0000000
--- a/asterix/asterix-events/src/main/resources/events/cc_start/cc_start.sh
+++ /dev/null
@@ -1,5 +0,0 @@
-if [ ! -d $LOG_DIR ]; 
-then 
-  mkdir -p $LOG_DIR
-fi
-$ASTERIX_HOME/bin/asterixcc -client-net-ip-address $CLIENT_NET_IP -client-net-port 1098 -cluster-net-ip-address $CLUSTER_NET_IP -cluster-net-port 1099 -http-port 8888  &> $LOG_DIR/cc.log
diff --git a/asterix/asterix-events/src/main/resources/events/node_join/nc_join.sh b/asterix/asterix-events/src/main/resources/events/node_join/nc_join.sh
deleted file mode 100755
index 6b5280b..0000000
--- a/asterix/asterix-events/src/main/resources/events/node_join/nc_join.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-CC_HOST=$1
-NC_ID=$2
-IO_DEVICES=$3
-if [ ! -d $LOG_DIR ]; 
-then 
-  mkdir -p $LOG_DIR
-fi
-$ASTERIX_HOME/bin/asterixnc -node-id $NC_ID -cc-host $CC_HOST -cc-port 1099 -cluster-net-ip-address $IP_LOCATION  -data-ip-address $IP_LOCATION -iodevices $IO_DEVICES -result-ip-address $IP_LOCATION &> $LOG_DIR/${NC_ID}.log
diff --git a/asterix/asterix-events/src/main/resources/events/restore/restore.sh b/asterix/asterix-events/src/main/resources/events/restore/restore.sh
deleted file mode 100755
index 6396eec..0000000
--- a/asterix/asterix-events/src/main/resources/events/restore/restore.sh
+++ /dev/null
@@ -1,75 +0,0 @@
-WORKING_DIR=$1
-ASTERIX_INSTANCE_NAME=$2
-ASTERIX_IODEVICES=$3
-NODE_STORE=$4
-ASTERIX_ROOT_METADATA_DIR=$5
-TXN_LOG_DIR_NAME=$6
-BACKUP_ID=$7
-BACKUP_DIR=$8
-BACKUP_TYPE=$9
-NODE_ID=${10}
-HDFS_URL=${11}
-HADOOP_VERSION=${12}
-HADOOP_HOME=$WORKING_DIR/hadoop-$HADOOP_VERSION
-
-iodevices=$(echo $ASTERIX_IODEVICES | tr "," "\n")
-
-index=1
-for iodevice in $iodevices
-do
-  NODE_BACKUP_DIR=$BACKUP_DIR/$ASTERIX_INSTANCE_NAME/$BACKUP_ID/$NODE_ID
-
-  # remove the existing store directory
-  STORE_DIR=$iodevice/$NODE_STORE
-
-  # if STORE_DIR ends with a /, remove it
-  if [ ${STORE_DIR:${#STORE_DIR}-1} == "/" ];
-  then
-    STORE_DIR=${STORE_DIR:0:${#STORE_DIR}-1}
-  fi
-
-  DEST_STORE_DIR=${STORE_DIR%/*}
-  SOURCE_STORE_DIR=${NODE_STORE##*/}
-  rm -rf $DEST_STORE_DIR/$SOURCE_STORE_DIR
-
-  # remove the existing log directory
-  DEST_LOG_DIR=$iodevice/$TXN_LOG_DIR_NAME/
-  rm -rf $DEST_LOG_DIR
-
-  # remove the existing asterix metadata directory
-  rm -rf $iodevice/$ASTERIX_ROOT_METADATA_DIR
-
-  if [ $BACKUP_TYPE == "hdfs" ];
-  then
-      # RESTORE FROM HDFS BACKUP
-
-      # copy store directory
-      $HADOOP_HOME/bin/hadoop fs -copyToLocal $HDFS_URL/$NODE_BACKUP_DIR/$SOURCE_STORE_DIR  $DEST_STORE_DIR/ 
-
-      # copy asterix metadata root directory and txn log directory
-      if [ $index -eq 1 ];
-      then
-        $HADOOP_HOME/bin/hadoop fs -copyToLocal $HDFS_URL/$NODE_BACKUP_DIR/$ASTERIX_ROOT_METADATA_DIR $iodevice/
-
-        # copy transaction logs directory
-        $HADOOP_HOME/bin/hadoop fs -copyToLocal $HDFS_URL/$NODE_BACKUP_DIR/$TXN_LOG_DIR_NAME $iodevice/
-      fi
-
-  else
-
-      # RESTORE FROM LOCAL BACKUP
-      # copy store directory
-      cp  -r $NODE_BACKUP_DIR/$SOURCE_STORE_DIR  $DEST_STORE_DIR/ 
-
-      # copy asterix metadata root directory and txn log directory
-      if [ $index -eq 1 ];
-      then
-        cp -r $NODE_BACKUP_DIR/$ASTERIX_ROOT_METADATA_DIR $iodevice/
-
-        # copy transaction logs directory
-        cp -r $NODE_BACKUP_DIR/$TXN_LOG_DIR_NAME $iodevice/
-      fi
-
-  fi
-  index=`expr $index + 1`
-done
diff --git a/asterix/asterix-events/src/main/resources/schema/cluster.xsd b/asterix/asterix-events/src/main/resources/schema/cluster.xsd
deleted file mode 100644
index 0e1adce..0000000
--- a/asterix/asterix-events/src/main/resources/schema/cluster.xsd
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:cl="cluster" targetNamespace="cluster" elementFormDefault="qualified">
-
-<!-- definition of simple types --> 
-<xs:element name="name" type="xs:string"/>
-<xs:element name="java_opts" type="xs:string"/>
-<xs:element name="logdir" type="xs:string"/>
-<xs:element name="id" type="xs:string"/>
-<xs:element name="client-ip" type="xs:string"/>
-<xs:element name="cluster-ip" type="xs:string"/>
-<xs:element name="key" type="xs:string"/>
-<xs:element name="value" type="xs:string"/>
-<xs:element name="dir" type="xs:string"/>
-<xs:element name="NFS" type="xs:boolean"/>
-<xs:element name="store" type="xs:string"/>
-<xs:element name="iodevices" type="xs:string"/>
-<xs:element name="java_home" type="xs:string"/>
-<xs:element name="username" type="xs:string"/>
-<xs:element name="debug" type="xs:integer"/>
-<xs:element name="debugEnabled" type="xs:boolean"/>
-
-<!-- definition of complex elements -->
-<xs:element name="workingDir">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element ref="cl:dir"/>
-      <xs:element ref="cl:NFS"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:element>
-
-<xs:element name="master-node">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element ref="cl:id"/>
-      <xs:element ref="cl:client-ip"/>
-      <xs:element ref="cl:cluster-ip"/>
-      <xs:element ref="cl:java_home" minOccurs="0"/>
-      <xs:element ref="cl:java_opts" minOccurs="0"/>
-      <xs:element ref="cl:logdir" minOccurs="0"/>
-      <xs:element ref="cl:debug" minOccurs="0"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:element>
-
-<xs:element name="property">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element ref="cl:key"/>
-      <xs:element ref="cl:value"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:element>
-
-<xs:element name="env">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element ref="cl:property" minOccurs="0" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:element>
-
-<xs:element name="node">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element ref="cl:id"/>
-      <xs:element ref="cl:cluster-ip"/>
-      <xs:element ref="cl:java_home" minOccurs="0"/>
-      <xs:element ref="cl:java_opts" minOccurs="0"/>
-      <xs:element ref="cl:logdir" minOccurs="0"/>
-      <xs:element ref="cl:store" minOccurs="0"/>
-      <xs:element ref="cl:iodevices" minOccurs="0"/>
-      <xs:element ref="cl:debug" minOccurs="0"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:element>
-
-<xs:element name="cluster">
-  <xs:complexType>
-    <xs:sequence>
-      <xs:element ref="cl:name"/>
-      <xs:element ref="cl:username"/>
-      <xs:element ref="cl:env" minOccurs="0"/>
-      <xs:element ref="cl:java_home" minOccurs="0"/>
-      <xs:element ref="cl:java_opts" minOccurs="0"/>
-      <xs:element ref="cl:logdir" minOccurs="0"/>
-      <xs:element ref="cl:store" minOccurs="0"/>
-      <xs:element ref="cl:iodevices" minOccurs="0"/>
-      <xs:element ref="cl:workingDir"/>
-      <xs:element ref="cl:debugEnabled" minOccurs="0"/>
-      <xs:element ref="cl:debug" minOccurs="0"/>
-      <xs:element ref="cl:master-node"/>
-      <xs:element ref="cl:node" maxOccurs="unbounded"/>
-    </xs:sequence>
-  </xs:complexType>
-</xs:element>
-
-</xs:schema>     
diff --git a/asterix/asterix-external-data/pom.xml b/asterix/asterix-external-data/pom.xml
deleted file mode 100644
index 67ca3df..0000000
--- a/asterix/asterix-external-data/pom.xml
+++ /dev/null
@@ -1,139 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-external-data</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>appassembler-maven-plugin</artifactId>
-				<version>1.0</version>
-				<executions>
-					<execution>
-						<configuration>
-							<programs>
-								<program>
-									<mainClass>edu.uci.ics.asterix.drivers.AsterixWebServer</mainClass>
-									<name>asterix-web</name>
-								</program>
-								<program>
-									<mainClass>edu.uci.ics.asterix.drivers.AsterixClientDriver</mainClass>
-									<name>asterix-cmd</name>
-								</program>
-							</programs>
-							<repositoryLayout>flat</repositoryLayout>
-							<repositoryName>lib</repositoryName>
-						</configuration>
-						<phase>package</phase>
-						<goals>
-							<goal>assemble</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.7.2</version>
-				<configuration>
-					<!-- doesn't work from m2eclipse, currently <additionalClasspathElements> 
-						<additionalClasspathElement>${basedir}/src/main/resources</additionalClasspathElement> 
-						</additionalClasspathElements> -->
-					<forkMode>pertest</forkMode>
-					<argLine>-enableassertions -Xmx${test.heap.size}m
-						-Dfile.encoding=UTF-8
-						-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
-					<includes>
-						<include>**/*TestSuite.java</include>
-						<include>**/*Test.java</include>
-					</includes>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>javax.servlet</groupId>
-			<artifactId>servlet-api</artifactId>
-			<version>2.5</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-om</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-runtime</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>com.kenai.nbpwr</groupId>
-			<artifactId>org-apache-commons-io</artifactId>
-			<version>1.3.1-201002241208</version>
-			<scope>test</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.twitter4j</groupId>
-			<artifactId>twitter4j-core</artifactId>
-			<version>2.2.3</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-core</artifactId>
-			<version>0.20.2</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>net.java.dev.rome</groupId>
-			<artifactId>rome-fetcher</artifactId>
-			<version>1.0.0</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>rome</groupId>
-			<artifactId>rome</artifactId>
-			<version>1.0.1-modified-01</version>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-dataflow-hadoop</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>jdom</groupId>
-			<artifactId>jdom</artifactId>
-			<version>1.0</version>
-		</dependency>
-	</dependencies>
-
-</project>
diff --git a/asterix/asterix-installer/pom.xml b/asterix/asterix-installer/pom.xml
deleted file mode 100644
index 87a73af..0000000
--- a/asterix/asterix-installer/pom.xml
+++ /dev/null
@@ -1,151 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <parent>
-          <artifactId>asterix</artifactId>
-          <groupId>edu.uci.ics.asterix</groupId>
-          <version>0.0.5-SNAPSHOT</version>
-  </parent>
-  <artifactId>asterix-installer</artifactId>
-
-  <properties>
-    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-  </properties>
-
-  <build>
-    <plugins>
-       <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>2.0.2</version>
-          <configuration>
-             <source>1.6</source>
-             <target>1.6</target>
-          </configuration>
-       </plugin>
-
-       <plugin>
-          <groupId>org.jvnet.jaxb2.maven2</groupId>
-          <artifactId>maven-jaxb2-plugin</artifactId>
-          <executions>
-            <execution>
-              <id>configuration</id>
-              <goals>
-                <goal>generate</goal>
-              </goals>
-              <configuration>
-                <args>
-                  <arg>-Xsetters</arg>
-                  <arg>-Xvalue-constructor</arg>
-                </args>
-                <plugins>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-basics</artifactId>
-                    <version>0.6.2</version>
-                  </plugin>
-                  <plugin>
-                    <groupId>org.jvnet.jaxb2_commons</groupId>
-                    <artifactId>jaxb2-value-constructor</artifactId>
-                    <version>3.0</version>
-                  </plugin>
-                </plugins>
-                <schemaDirectory>src/main/resources/schema</schemaDirectory>
-                <schemaIncludes>
-                  <include>installer-conf.xsd</include>
-                </schemaIncludes>
-                <generatePackage>edu.uci.ics.asterix.installer.schema.conf</generatePackage>
-                <generateDirectory>${project.build.directory}/generated-sources/configuration</generateDirectory>
-              </configuration>
-            </execution>
-            <execution>
-              <id>cluster</id>
-              <goals>
-                <goal>generate</goal>
-              </goals>
-              <configuration>
-                <schemaDirectory>src/main/resources/schema</schemaDirectory>
-                <schemaIncludes>
-                  <include>cluster.xsd</include>
-                </schemaIncludes>
-                <generatePackage>edu.uci.ics.asterix.installer.schema.cluster</generatePackage>
-                <bindingDirectory>src/main/resources/schema</bindingDirectory>
-                <bindingIncludes>
-                  <bindingInclude>jaxb-bindings.xjb</bindingInclude>
-                </bindingIncludes>
-                <generateDirectory>${project.build.directory}/generated-sources/cluster</generateDirectory>
-              </configuration>
-            </execution>
-          </executions>
-       </plugin>
-       <plugin>
-         <artifactId>maven-assembly-plugin</artifactId>
-         <version>2.2-beta-2</version>
-         <executions>
-           <execution>
-             <configuration>
-               <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-             </configuration>
-             <phase>package</phase>
-             <goals>
-               <goal>attached</goal>
-             </goals>
-           </execution>
-         </executions>
-       </plugin>
-    </plugins> 
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>3.8.1</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>args4j</groupId>
-      <artifactId>args4j</artifactId>
-      <version>2.0.12</version>
-      <type>jar</type>
-      <scope>compile</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.zookeeper</groupId>
-      <artifactId>zookeeper</artifactId>
-      <version>3.4.5</version>
-      <exclusions>
-            <exclusion>
-                <groupId>com.sun.jmx</groupId>
-                <artifactId>jmxri</artifactId>
-            </exclusion>
-            <exclusion>
-                <groupId>com.sun.jdmk</groupId>
-                <artifactId>jmxtools</artifactId>
-            </exclusion>
-            <exclusion>
-                <groupId>javax.jms</groupId>
-                <artifactId>jms</artifactId>
-            </exclusion>
-        </exclusions>
-    </dependency>
-    <dependency>
-        <groupId>commons-io</groupId>
-        <artifactId>commons-io</artifactId>
-        <version>1.4</version>
-    </dependency>
-    <dependency>
-        <groupId>edu.uci.ics.asterix</groupId>
-        <artifactId>asterix-events</artifactId>
-        <version>0.0.5-SNAPSHOT</version>
-        <type>jar</type>
-        <scope>compile</scope>
-    </dependency>
-    <dependency>
-        <groupId>edu.uci.ics.asterix</groupId>
-        <artifactId>asterix-server</artifactId>
-        <version>0.0.5-SNAPSHOT</version>
-        <type>zip</type>
-        <classifier>binary-assembly</classifier>
-    </dependency>
-  </dependencies>
-</project>
diff --git a/asterix/asterix-installer/src/main/assembly/binary-assembly.xml b/asterix/asterix-installer/src/main/assembly/binary-assembly.xml
deleted file mode 100644
index 6a0c130..0000000
--- a/asterix/asterix-installer/src/main/assembly/binary-assembly.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<assembly>
-  <id>binary-assembly</id>
-  <formats>
-    <format>zip</format>
-  </formats>
-  <includeBaseDirectory>false</includeBaseDirectory>
-  <fileSets>
-    <fileSet>
-      <directory>src/main/resources/conf</directory>
-      <outputDirectory>conf</outputDirectory>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/resources/clusters</directory>
-      <outputDirectory>clusters</outputDirectory>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/resources/zookeeper</directory>
-      <fileMode>0755</fileMode>
-      <outputDirectory>.installer/zookeeper/bin</outputDirectory>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/resources/scripts</directory>
-      <fileMode>0755</fileMode>
-      <includes>
-        <include>managix</include>
-      </includes>
-      <outputDirectory>bin</outputDirectory>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/resources/scripts</directory>
-      <fileMode>0755</fileMode>
-      <excludes>
-        <exclude>managix</exclude>
-      </excludes>
-      <outputDirectory>.installer/scripts</outputDirectory>
-    </fileSet>
-    <fileSet>
-      <directory>src/main/resources/hadoop-0.20.2</directory>
-      <outputDirectory>.installer/hadoop-0.20.2</outputDirectory>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <fileSet>
-      <directory>target</directory>
-      <outputDirectory>lib</outputDirectory>
-      <includes>
-        <include>*.jar</include>
-      </includes>
-    </fileSet>
-    <fileSet>
-      <directory>../asterix-events/src/main/resources/events</directory>
-      <outputDirectory>.installer/eventrix/events</outputDirectory>
-      <fileMode>0755</fileMode>
-    </fileSet>
-    <fileSet>
-      <directory>../asterix-events/src/main/resources/scripts</directory>
-      <outputDirectory>.installer/eventrix/scripts</outputDirectory>
-    </fileSet>
-  </fileSets>
-  <dependencySets>
-    <dependencySet>
-      <includes>
-         <include>log4j:log4j</include>
-         <include>edu.uci.ics.asterix:asterix-events</include>
-         <include>org.apache.zookeeper:zookeeper</include>
-         <include>args4j:args4j</include>
-         <include>log4j:log4j</include>
-         <include>commons-io:commons-io</include>
-         <include>org.slf4j:slf4j-api</include>
-         <include>org.slf4j:slf4j-log4j12</include>
-       </includes>
-       <unpack>false</unpack>
-       <outputDirectory>lib</outputDirectory>
-    </dependencySet>
-    <dependencySet>
-      <includes>
-        <include>org.apache.hadoop:hadoop-core</include>
-        <include>commons-cli:commons-cli</include>
-        <include>commons-logging:commons-logging</include>
-      </includes>
-      <unpack>false</unpack>
-      <outputDirectory>.installer/hadoop-0.20.2/lib</outputDirectory>
-    </dependencySet>
-    <dependencySet>
-      <includes>
-        <include>org.apache.zookeeper:zookeeper</include>
-        <include>log4j:log4j</include>
-        <include>org.slf4j:slf4j-api</include>
-      </includes>
-      <unpack>false</unpack>
-      <outputDirectory>.installer/zookeeper/lib</outputDirectory>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>asterix</outputDirectory>
-      <includes>
-        <include>asterix-server*</include>
-      </includes>
-      <useTransitiveDependencies>false</useTransitiveDependencies>
-    </dependencySet>
-    <dependencySet>
-      <outputDirectory>.installer/eventrix</outputDirectory>
-      <includes>
-        <include>asterix-events*</include>
-      </includes>
-      <unpack>false</unpack>
-      <useTransitiveDependencies>false</useTransitiveDependencies>
-    </dependencySet>
-  </dependencySets>
-</assembly>
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
deleted file mode 100644
index 5ef7449..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/AlterCommand.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.command;
-
-import java.util.Date;
-import java.util.Properties;
-
-import org.kohsuke.args4j.Option;
-
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.driver.InstallerUtil;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
-import edu.uci.ics.asterix.installer.service.ILookupService;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class AlterCommand extends AbstractCommand {
-
-    @Override
-    protected void execCommand() throws Exception {
-        InstallerDriver.initConfig();
-        String instanceName = ((AlterConfig) config).name;
-        InstallerUtil.validateAsterixInstanceExists(instanceName, State.INACTIVE);
-        ILookupService lookupService = ServiceProvider.INSTANCE.getLookupService();
-        AsterixInstance instance = lookupService.getAsterixInstance(instanceName);
-
-        Properties asterixConfProp = InstallerUtil.getAsterixConfiguration(((AlterConfig) config).confPath);
-        instance.setConfiguration(asterixConfProp);
-        instance.setModifiedTimestamp(new Date());
-        lookupService.updateAsterixInstance(instance);
-        LOGGER.info("Configuration for Asterix instance: " + instanceName + " has been altered");
-    }
-
-    @Override
-    protected CommandConfig getCommandConfig() {
-        return new AlterConfig();
-    }
-
-    @Override
-    protected String getUsageDescription() {
-        return "\nAlter the instance's configuration settings."
-                + "\nPrior to running this command, the instance is required to be INACTIVE state."
-                + "\n\nAvailable arguments/options" + "\n-n name of the ASTERIX instance"
-                + "\n-conf path to the ASTERIX configuration file.";
-    }
-
-}
-
-class AlterConfig extends CommandConfig {
-
-    @Option(name = "-n", required = true, usage = "Name of Asterix Instance")
-    public String name;
-
-    @Option(name = "-conf", required = true, usage = "Path to instance configuration")
-    public String confPath;
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/BackupCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/BackupCommand.java
deleted file mode 100644
index 297a168..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/BackupCommand.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.command;
-
-import java.util.Date;
-import java.util.List;
-
-import org.kohsuke.args4j.Option;
-
-import edu.uci.ics.asterix.event.schema.pattern.Patterns;
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.driver.InstallerUtil;
-import edu.uci.ics.asterix.installer.events.PatternCreator;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
-import edu.uci.ics.asterix.installer.model.BackupInfo;
-import edu.uci.ics.asterix.installer.schema.conf.Backup;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class BackupCommand extends AbstractCommand {
-
-    public static final String ASTERIX_ROOT_METADATA_DIR = "asterix_root_metadata";
-
-    @Override
-    protected void execCommand() throws Exception {
-        InstallerDriver.initConfig();
-        String asterixInstanceName = ((BackupConfig) config).name;
-        AsterixInstance instance = InstallerUtil.validateAsterixInstanceExists(asterixInstanceName, State.INACTIVE);
-        List<BackupInfo> backupInfo = instance.getBackupInfo();
-        PatternCreator pc = new PatternCreator();
-        Backup backupConf = InstallerDriver.getConfiguration().getBackup();
-        Patterns patterns = pc.getBackUpAsterixPattern(instance, backupConf);
-        InstallerUtil.getEventrixClient(instance.getCluster()).submit(patterns);
-        int backupId = backupInfo.size();
-        BackupInfo binfo = new BackupInfo(backupId, new Date(), backupConf);
-        backupInfo.add(binfo);
-        LOGGER.info(asterixInstanceName + " backed up " + binfo);
-        ServiceProvider.INSTANCE.getLookupService().updateAsterixInstance(instance);
-    }
-
-    @Override
-    protected CommandConfig getCommandConfig() {
-        return new BackupConfig();
-    }
-
-    @Override
-    protected String getUsageDescription() {
-        return "\nIn an undesirable event of data loss either due to a disk/system"
-                + "\nfailure or accidental execution of a DDL statement (drop dataverse/dataset),"
-                + "\nyou may need to recover the lost data. The backup command allows you to take a"
-                + "\nbackup of the data stored with an ASTERIX instance. "
-                + "\nThe backed up snapshot is stored in HDFS." + "\n\nAvailable arguments/options:"
-                + "\n-n name of the Asterix instance";
-
-    }
-
-}
-
-class BackupConfig extends CommandConfig {
-
-    @Option(name = "-n", required = true, usage = "Name of the Asterix instance")
-    public String name;
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ConfigureCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ConfigureCommand.java
deleted file mode 100644
index d22e6ce..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ConfigureCommand.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package edu.uci.ics.asterix.installer.command;
-
-import java.io.File;
-import java.io.FileOutputStream;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Marshaller;
-import javax.xml.bind.Unmarshaller;
-
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.WorkingDir;
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.schema.conf.Configuration;
-
-public class ConfigureCommand extends AbstractCommand {
-
-    @Override
-    protected void execCommand() throws Exception {
-        String localClusterPath = InstallerDriver.getManagixHome() + File.separator + "clusters" + File.separator
-                + "local" + File.separator + "local.xml";
-
-        JAXBContext ctx = JAXBContext.newInstance(Cluster.class);
-        Unmarshaller unmarshaller = ctx.createUnmarshaller();
-        Cluster cluster = (Cluster) unmarshaller.unmarshal(new File(localClusterPath));
-
-        String workingDir = InstallerDriver.getManagixHome() + File.separator + "clusters" + File.separator + "local"
-                + File.separator + "working_dir";
-        cluster.setWorkingDir(new WorkingDir(workingDir, true));
-        cluster.setIodevices(workingDir);
-        cluster.setStore("storage");
-        cluster.setLogdir(workingDir + File.separator + "logs");
-        cluster.setJavaHome(System.getenv("JAVA_HOME"));
-        cluster.setJavaOpts("-Xmx1024m");
-
-        Marshaller marshaller = ctx.createMarshaller();
-        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
-        marshaller.marshal(cluster, new FileOutputStream(localClusterPath));
-
-        String installerConfPath = InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_CONF_XML;
-        ctx = JAXBContext.newInstance(Configuration.class);
-        unmarshaller = ctx.createUnmarshaller();
-        Configuration configuration = (Configuration) unmarshaller.unmarshal(new File(installerConfPath));
-
-        configuration.getBackup().setBackupDir(workingDir + File.separator + "backup");
-        configuration.getZookeeper().setHomeDir(
-                InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_INTERNAL_DIR
-                        + File.separator + "zookeeper_home");
-        configuration.getZookeeper().getServers().setJavaHome(System.getenv("JAVA_HOME"));
-
-        marshaller = ctx.createMarshaller();
-        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
-        marshaller.marshal(configuration, new FileOutputStream(installerConfPath));
-
-    }
-
-    @Override
-    protected String getUsageDescription() {
-        return "\nAuto-generates the ASTERIX installer configruation settings and ASTERIX cluster "
-                + "\nconfiguration settings for a single node setup.";
-    }
-
-    @Override
-    protected CommandConfig getCommandConfig() {
-        return new ConfigureConfig();
-    }
-
-}
-
-class ConfigureConfig extends CommandConfig {
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
deleted file mode 100644
index fd0af04..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/CreateCommand.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.command;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-
-import org.kohsuke.args4j.Option;
-
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Env;
-import edu.uci.ics.asterix.event.schema.cluster.Property;
-import edu.uci.ics.asterix.event.schema.cluster.WorkingDir;
-import edu.uci.ics.asterix.event.schema.pattern.Patterns;
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.driver.InstallerUtil;
-import edu.uci.ics.asterix.installer.error.VerificationUtil;
-import edu.uci.ics.asterix.installer.events.PatternCreator;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class CreateCommand extends AbstractCommand {
-
-	private String asterixInstanceName;
-	private Cluster cluster;
-
-	@Override
-	protected void execCommand() throws Exception {
-		InstallerDriver.initConfig();
-		ValidateCommand validateCommand = new ValidateCommand();
-		boolean valid = validateCommand
-				.validateCluster(((CreateConfig) config).clusterPath);
-		if (!valid) {
-			throw new Exception("Cannot create an Asterix instance.");
-		}
-		asterixInstanceName = ((CreateConfig) config).name;
-		InstallerUtil.validateAsterixInstanceNotExists(asterixInstanceName);
-		CreateConfig createConfig = (CreateConfig) config;
-		JAXBContext ctx = JAXBContext.newInstance(Cluster.class);
-		Unmarshaller unmarshaller = ctx.createUnmarshaller();
-		cluster = (Cluster) unmarshaller.unmarshal(new File(
-				createConfig.clusterPath));
-		AsterixInstance asterixInstance = InstallerUtil.createAsterixInstance(
-				asterixInstanceName, cluster);
-		InstallerUtil.evaluateConflictWithOtherInstances(asterixInstance);
-		InstallerUtil.createAsterixZip(asterixInstance, true);
-		List<Property> clusterProperties = new ArrayList<Property>();
-		clusterProperties.add(new Property("ASTERIX_HOME", cluster
-				.getWorkingDir().getDir() + File.separator + "asterix"));
-		StringBuilder javaOpts = new StringBuilder();
-		if (cluster.getJavaOpts() != null) {
-			javaOpts.append(cluster.getJavaOpts());
-		}
-		clusterProperties.add(new Property("JAVA_OPTS", javaOpts.toString()));
-		clusterProperties.add(new Property("CLUSTER_NET_IP", cluster
-				.getMasterNode().getClusterIp()));
-		clusterProperties.add(new Property("CLIENT_NET_IP", cluster
-				.getMasterNode().getClientIp()));
-		clusterProperties.add(new Property("LOG_DIR", cluster.getLogdir()));
-		clusterProperties.add(new Property("JAVA_HOME", cluster.getJavaHome()));
-		clusterProperties.add(new Property("WORKING_DIR", cluster
-				.getWorkingDir().getDir()));
-		cluster.setEnv(new Env(clusterProperties));
-
-		PatternCreator pc = new PatternCreator();
-		Patterns patterns = pc.getStartAsterixPattern(asterixInstanceName,
-				cluster);
-		InstallerUtil.getEventrixClient(cluster).submit(patterns);
-
-		AsterixRuntimeState runtimeState = VerificationUtil
-				.getAsterixRuntimeState(asterixInstance);
-		VerificationUtil.updateInstanceWithRuntimeDescription(asterixInstance,
-				runtimeState, true);
-		ServiceProvider.INSTANCE.getLookupService().writeAsterixInstance(
-				asterixInstance);
-		InstallerUtil.deleteDirectory(InstallerDriver.getManagixHome()
-				+ File.separator + InstallerDriver.ASTERIX_DIR + File.separator
-				+ asterixInstanceName);
-		LOGGER.info(asterixInstance.getDescription(false));
-	}
-
-	@Override
-	protected CommandConfig getCommandConfig() {
-		return new CreateConfig();
-	}
-
-	public Cluster getCluster() {
-		return cluster;
-	}
-
-	public String getAsterixInstanceName() {
-		return asterixInstanceName;
-	}
-
-	@Override
-	protected String getUsageDescription() {
-		return "\nCreates an ASTERIX instance with a specified name."
-				+ "\n\nPost creation, the instance is in ACTIVE state, indicating its "
-				+ "\navailability for executing statements/queries."
-				+ "\n\nUsage arguments/options:"
-				+ "\n-n Name of the ASTERIX instance."
-				+ "\n-c Path to the cluster configuration file";
-	}
-
-}
-
-class CreateConfig extends CommandConfig {
-
-	@Option(name = "-n", required = true, usage = "Name of Asterix Instance")
-	public String name;
-
-	@Option(name = "-c", required = true, usage = "Path to cluster configuration")
-	public String clusterPath;
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/HelpCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/HelpCommand.java
deleted file mode 100644
index a9864a3..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/HelpCommand.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.command;
-
-import org.kohsuke.args4j.Option;
-
-public class HelpCommand extends AbstractCommand {
-
-    @Override
-    protected void execCommand() throws Exception {
-        HelpConfig helpConfig = (HelpConfig) config;
-        String command = helpConfig.command;
-        CommandType cmdType = CommandType.valueOf(command.toUpperCase());
-        String helpMessage = null;
-        switch (cmdType) {
-            case CREATE:
-                helpMessage = new CreateCommand().getUsageDescription();
-                break;
-            case CONFIGURE:
-                helpMessage = new ConfigureCommand().getUsageDescription();
-                break;
-            case DELETE:
-                helpMessage = new DeleteCommand().getUsageDescription();
-                break;
-            case DESCRIBE:
-                helpMessage = new DescribeCommand().getUsageDescription();
-                break;
-            case RESTORE:
-                helpMessage = new RestoreCommand().getUsageDescription();
-                break;
-            case START:
-                helpMessage = new StartCommand().getUsageDescription();
-                break;
-            case SHUTDOWN:
-                helpMessage = new ShutdownCommand().getUsageDescription();
-                break;
-            case BACKUP:
-                helpMessage = new BackupCommand().getUsageDescription();
-                break;
-            case STOP:
-                helpMessage = new StopCommand().getUsageDescription();
-                break;
-            case VALIDATE:
-                helpMessage = new ValidateCommand().getUsageDescription();
-                break;
-            default:
-                helpMessage = "Unknown command " + command;
-        }
-
-        System.out.println(helpMessage);
-    }
-
-    @Override
-    protected CommandConfig getCommandConfig() {
-        return new HelpConfig();
-    }
-
-    @Override
-    protected String getUsageDescription() {
-        return "\nAlter the instance's configuration settings."
-                + "\nPrior to running this command, the instance is required to be INACTIVE state."
-                + "\n\nAvailable arguments/options" + "\n-n name of the ASTERIX instance"
-                + "\n-conf path to the ASTERIX configuration file.";
-    }
-
-}
-
-class HelpConfig extends CommandConfig {
-
-    @Option(name = "-cmd", required = true, usage = "Name of Asterix Instance")
-    public String command;
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StartCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StartCommand.java
deleted file mode 100644
index 38bcf33..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/StartCommand.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.command;
-
-import java.io.File;
-
-import org.kohsuke.args4j.Option;
-
-import edu.uci.ics.asterix.event.schema.pattern.Patterns;
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.driver.InstallerUtil;
-import edu.uci.ics.asterix.installer.error.VerificationUtil;
-import edu.uci.ics.asterix.installer.events.PatternCreator;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
-import edu.uci.ics.asterix.installer.model.AsterixRuntimeState;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class StartCommand extends AbstractCommand {
-
-    @Override
-    protected void execCommand() throws Exception {
-        InstallerDriver.initConfig();
-        String asterixInstanceName = ((StartConfig) config).name;
-        AsterixInstance instance = InstallerUtil.validateAsterixInstanceExists(asterixInstanceName, State.INACTIVE);
-        InstallerUtil.createAsterixZip(instance, false);
-        PatternCreator pc = new PatternCreator();
-        Patterns patterns = pc.getStartAsterixPattern(asterixInstanceName, instance.getCluster());
-        InstallerUtil.getEventrixClient(instance.getCluster()).submit(patterns);
-        InstallerUtil.deleteDirectory(InstallerDriver.getManagixHome() + File.separator + InstallerDriver.ASTERIX_DIR
-                + File.separator + asterixInstanceName);
-        AsterixRuntimeState runtimeState = VerificationUtil.getAsterixRuntimeState(instance);
-        VerificationUtil.updateInstanceWithRuntimeDescription(instance, runtimeState, true);
-        LOGGER.info(instance.getDescription(false));
-        ServiceProvider.INSTANCE.getLookupService().updateAsterixInstance(instance);
-    }
-
-    @Override
-    protected CommandConfig getCommandConfig() {
-        return new StartConfig();
-    }
-
-    @Override
-    protected String getUsageDescription() {
-        return "\nStarts an ASTERIX instance that is in INACTIVE state."
-                + "\nAfter executing the start command, the ASTERIX instance transits to the ACTIVE state,"
-                + "\nindicating that it is now available for executing statements/queries."
-                + "\n\nAvailable arguments/options" + "\n-n name of the ASTERIX instance. ";
-    }
-}
-
-class StartConfig extends CommandConfig {
-
-    @Option(name = "-n", required = true, usage = "Name of Asterix Instance")
-    public String name;
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ValidateCommand.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ValidateCommand.java
deleted file mode 100644
index 3d292a9..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/command/ValidateCommand.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.command;
-
-import java.io.File;
-import java.net.InetAddress;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-
-import org.kohsuke.args4j.Option;
-
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.MasterNode;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.schema.conf.Configuration;
-import edu.uci.ics.asterix.installer.schema.conf.Zookeeper;
-
-public class ValidateCommand extends AbstractCommand {
-
-	private static final String OK = " [" + "OK" + "]";
-	private static final String ERROR = " [" + "ERROR" + "]";
-	private static final String WARNING = " [" + "WARNING" + "]";
-
-	@Override
-	protected void execCommand() throws Exception {
-		ValidateConfig vConfig = (ValidateConfig) config;
-		logValidationResult("Environment", validateEnvironment());
-		if (((ValidateConfig) config).cluster != null) {
-			logValidationResult("Cluster configuration",
-					validateCluster(vConfig.cluster));
-		} else {
-			logValidationResult("Installer Configuration",
-					validateConfiguration());
-		}
-	}
-
-	private void logValidationResult(String prefix, boolean isValid) {
-		if (!isValid) {
-			LOGGER.fatal(prefix + ERROR);
-		} else {
-			LOGGER.info(prefix + OK);
-		}
-	}
-
-	@Override
-	protected CommandConfig getCommandConfig() {
-		return new ValidateConfig();
-	}
-
-	@Override
-	protected String getUsageDescription() {
-		return "\nValidate the installer's configuration or a cluster configuration"
-				+ "\nUsage"
-				+ "\nFor validating the installer configuration"
-				+ "\nuse managix validate"
-				+ "\n\nFor validating a cluster configuration"
-				+ "\nuse managix validate -c <path to the cluster configuration file>";
-	}
-
-	public boolean validateEnvironment() throws Exception {
-		boolean valid = true;
-		String managixHome = System.getenv(InstallerDriver.ENV_MANAGIX_HOME);
-		if (managixHome == null) {
-			valid = false;
-			LOGGER.fatal(InstallerDriver.ENV_MANAGIX_HOME + " not set " + ERROR);
-		} else {
-			File home = new File(managixHome);
-			if (!home.exists()) {
-				valid = false;
-				LOGGER.fatal(InstallerDriver.ENV_MANAGIX_HOME + ": "
-						+ home.getAbsolutePath() + " does not exist!" + ERROR);
-			}
-		}
-		return valid;
-
-	}
-
-	public boolean validateCluster(String clusterPath) throws Exception {
-		boolean valid = true;
-		Cluster cluster = null;
-		File f = new File(clusterPath);
-		if (!f.exists() || !f.isFile()) {
-			LOGGER.error(" Invalid path " + f.getAbsolutePath() + ERROR);
-			valid = false;
-		} else {
-			JAXBContext ctx = JAXBContext.newInstance(Cluster.class);
-			Unmarshaller unmarshaller = ctx.createUnmarshaller();
-			cluster = (Cluster) unmarshaller.unmarshal(new File(clusterPath));
-			validateClusterProperties(cluster);
-
-			Set<String> servers = new HashSet<String>();
-			Set<String> serverIds = new HashSet<String>();
-			servers.add(cluster.getMasterNode().getClusterIp());
-			serverIds.add(cluster.getMasterNode().getId());
-
-			MasterNode masterNode = cluster.getMasterNode();
-			Node master = new Node(masterNode.getId(),
-					masterNode.getClusterIp(), masterNode.getJavaOpts(),
-					masterNode.getJavaHome(), masterNode.getLogdir(), null,
-					null, null);
-
-			valid = valid & validateNodeConfiguration(master, cluster);
-
-			for (Node node : cluster.getNode()) {
-				servers.add(node.getClusterIp());
-				if (serverIds.contains(node.getId())) {
-					valid = false;
-					LOGGER.error("Duplicate node id :" + node.getId() + ERROR);
-				} else {
-					valid = valid & validateNodeConfiguration(node, cluster);
-				}
-			}
-		}
-
-		return valid;
-	}
-
-	private void validateClusterProperties(Cluster cluster) {
-		List<String> tempDirs = new ArrayList<String>();
-		if (cluster.getLogdir() != null
-				&& checkTemporaryPath(cluster.getLogdir())) {
-			tempDirs.add("Log directory: " + cluster.getLogdir());
-		}
-		if (cluster.getIodevices() != null
-				&& checkTemporaryPath(cluster.getIodevices())) {
-			tempDirs.add("IO Device: " + cluster.getIodevices());
-		}
-
-		if (tempDirs.size() > 0) {
-			StringBuffer msg = new StringBuffer();
-			msg.append("The following paths are subject to be cleaned up by OS");
-			for (String tempDir : tempDirs) {
-				msg.append("\n" + tempDir + WARNING);
-			}
-			LOGGER.warn(msg);
-		}
-
-	}
-
-	private boolean validateNodeConfiguration(Node node, Cluster cluster) {
-		boolean valid = true;
-		valid = checkNodeReachability(node.getClusterIp());
-		if (node.getJavaHome() == null || node.getJavaHome().length() == 0) {
-			if (cluster.getJavaHome() == null
-					|| cluster.getJavaHome().length() == 0) {
-				valid = false;
-				LOGGER.fatal("java_home not defined at cluster/node level for node: "
-						+ node.getId() + ERROR);
-			}
-		}
-
-		if (node.getLogdir() == null || node.getLogdir().length() == 0) {
-			if (cluster.getLogdir() == null
-					|| cluster.getLogdir().length() == 0) {
-				valid = false;
-				LOGGER.fatal("log_dir not defined at cluster/node level for node: "
-						+ node.getId() + ERROR);
-			}
-		}
-
-		if (node.getStore() == null || node.getStore().length() == 0) {
-			if (!cluster.getMasterNode().getId().equals(node.getId())
-					&& (cluster.getStore() == null || cluster.getStore()
-							.length() == 0)) {
-				valid = false;
-				LOGGER.fatal("store not defined at cluster/node level for node: "
-						+ node.getId() + ERROR);
-			}
-		}
-
-		if (node.getIodevices() == null || node.getIodevices().length() == 0) {
-			if (!cluster.getMasterNode().getId().equals(node.getId())
-					&& (cluster.getIodevices() == null || cluster
-							.getIodevices().length() == 0)) {
-				valid = false;
-				LOGGER.fatal("iodevice(s) not defined at cluster/node level for node: "
-						+ node.getId() + ERROR);
-			}
-		}
-
-		return valid;
-	}
-
-	private boolean checkTemporaryPath(String logdir) {
-		return logdir.startsWith("/tmp/");
-
-	}
-
-	public boolean validateConfiguration() throws Exception {
-		String managixHome = System.getenv(InstallerDriver.ENV_MANAGIX_HOME);
-		File configFile = new File(managixHome + File.separator
-				+ InstallerDriver.MANAGIX_CONF_XML);
-		JAXBContext configCtx = JAXBContext.newInstance(Configuration.class);
-		Unmarshaller unmarshaller = configCtx.createUnmarshaller();
-		Configuration conf = (Configuration) unmarshaller.unmarshal(configFile);
-		return validateZookeeperConfiguration(conf);
-	}
-
-	private boolean validateZookeeperConfiguration(Configuration conf)
-			throws Exception {
-		boolean valid = true;
-		Zookeeper zk = conf.getZookeeper();
-
-		if (zk.getHomeDir() == null || zk.getHomeDir().length() == 0) {
-			valid = false;
-			LOGGER.fatal("Zookeeper home dir not configured" + ERROR);
-		} else if (checkTemporaryPath(zk.getHomeDir())) {
-			LOGGER.warn("Zookeeper home dir is subject to be cleaned up by OS"
-					+ WARNING);
-		}
-
-		if (zk.getServers().getServer().isEmpty()) {
-			valid = false;
-			LOGGER.fatal("Zookeeper servers not configured" + ERROR);
-		}
-
-		boolean validEnsemble = true;
-		for (String server : zk.getServers().getServer()) {
-			validEnsemble = validEnsemble && checkNodeReachability(server);
-		}
-
-		return valid;
-	}
-
-	private boolean checkNodeReachability(String server) {
-		boolean reachable = true;
-		try {
-			InetAddress address = InetAddress.getByName(server);
-			if (!address.isReachable(1000)) {
-				LOGGER.fatal("\n" + "Server: " + server + " unreachable"
-						+ ERROR);
-				reachable = false;
-			}
-		} catch (Exception e) {
-			reachable = false;
-			LOGGER.fatal("\n" + "Server: " + server + " Invalid address"
-					+ ERROR);
-		}
-		return reachable;
-	}
-
-}
-
-class ValidateConfig extends CommandConfig {
-
-	@Option(name = "-c", required = false, usage = "Path to the cluster configuration xml")
-	public String cluster;
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerDriver.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerDriver.java
deleted file mode 100644
index 8083427..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerDriver.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.driver;
-
-import java.io.File;
-import java.io.FileFilter;
-
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.Unmarshaller;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-
-import edu.uci.ics.asterix.installer.command.CommandHandler;
-import edu.uci.ics.asterix.installer.schema.conf.Configuration;
-import edu.uci.ics.asterix.installer.service.ILookupService;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class InstallerDriver {
-
-	public static final String MANAGIX_INTERNAL_DIR = ".installer";
-	public static final String MANAGIX_EVENT_DIR = MANAGIX_INTERNAL_DIR
-			+ File.separator + "eventrix";
-	public static final String MANAGIX_EVENT_SCRIPTS_DIR = MANAGIX_INTERNAL_DIR
-			+ File.separator + "eventrix" + File.separator + "scripts";
-	public static final String ASTERIX_DIR = "asterix";
-	public static final String EVENTS_DIR = "events";
-
-	private static final Logger LOGGER = Logger.getLogger(InstallerDriver.class
-			.getName());
-	public static final String ENV_MANAGIX_HOME = "MANAGIX_HOME";
-	public static final String MANAGIX_CONF_XML = "conf" + File.separator
-			+ "managix-conf.xml";
-
-	private static Configuration conf;
-	private static String managixHome;
-	private static String asterixZip;
-
-	public static String getAsterixZip() {
-		return asterixZip;
-	}
-
-	public static Configuration getConfiguration() {
-		return conf;
-	}
-
-	public static void initConfig() throws Exception {
-		File configFile = new File(managixHome + File.separator
-				+ MANAGIX_CONF_XML);
-		JAXBContext configCtx = JAXBContext.newInstance(Configuration.class);
-		Unmarshaller unmarshaller = configCtx.createUnmarshaller();
-		conf = (Configuration) unmarshaller.unmarshal(configFile);
-		asterixZip = initBinary("asterix-server");
-
-		ILookupService lookupService = ServiceProvider.INSTANCE
-				.getLookupService();
-		if (!lookupService.isRunning(conf)) {
-			lookupService.startService(conf);
-		}
-	}
-
-	private static String initBinary(final String fileNamePattern) {
-		String asterixDir = InstallerDriver.getAsterixDir();
-		File file = new File(asterixDir);
-		File[] zipFiles = file.listFiles(new FileFilter() {
-			public boolean accept(File arg0) {
-				return arg0.getAbsolutePath().contains(fileNamePattern)
-						&& arg0.isFile();
-			}
-		});
-		if (zipFiles.length == 0) {
-			String msg = " Binary not found at " + asterixDir;
-			LOGGER.log(Level.FATAL, msg);
-			throw new IllegalStateException(msg);
-		}
-		if (zipFiles.length > 1) {
-			String msg = " Multiple binaries found at " + asterixDir;
-			LOGGER.log(Level.FATAL, msg);
-			throw new IllegalStateException(msg);
-		}
-
-		return zipFiles[0].getAbsolutePath();
-	}
-
-	public static String getManagixHome() {
-		return managixHome;
-	}
-
-	public static String getAsterixDir() {
-		return managixHome + File.separator + ASTERIX_DIR;
-	}
-
-	public static void main(String args[]) {
-		try {
-			if (args.length != 0) {
-				managixHome = System.getenv(ENV_MANAGIX_HOME);
-				CommandHandler cmdHandler = new CommandHandler();
-				cmdHandler.processCommand(args);
-			} else {
-				printUsage();
-			}
-		} catch (IllegalArgumentException iae) {
-			LOGGER.error("Unknown command");
-			printUsage();
-		} catch (Exception e) {
-			LOGGER.error(e.getMessage());
-			if (e.getMessage() == null || e.getMessage().length() == 0) {
-				e.printStackTrace();
-			}
-		}
-	}
-
-	private static void printUsage() {
-		StringBuffer buffer = new StringBuffer("managix <command> <options>"
-				+ "\n");
-		buffer.append("Commands" + "\n");
-		buffer.append("create   " + ":" + " Creates a new asterix instance"
-				+ "\n");
-		buffer.append("delete   " + ":" + " Deletes an asterix instance" + "\n");
-		buffer.append("start    " + ":" + " Starts an  asterix instance" + "\n");
-		buffer.append("stop     " + ":"
-				+ " Stops an asterix instance that is in ACTIVE state" + "\n");
-		buffer.append("backup   " + ":"
-				+ " Creates a back up for an existing asterix instance" + "\n");
-		buffer.append("restore  " + ":" + " Restores an asterix instance"
-				+ "\n");
-		buffer.append("describe " + ":"
-				+ " Describes an existing asterix instance" + "\n");
-		buffer.append("validate " + ":"
-				+ " Validates the installer/cluster configuration" + "\n");
-		buffer.append("configure"
-				+ ":"
-				+ " Auto-generate configuration for local psedu-distributed Asterix instance"
-				+ "\n");
-		buffer.append("shutdown " + ":" + " Shutdown the installer service"
-				+ "\n");
-		buffer.append("validate " + ":"
-				+ " Validates the installer/cluster configuration" + "\n");
-		buffer.append("configure"
-				+ ":"
-				+ " Auto-generate configuration for local psedu-distributed Asterix instance"
-				+ "\n");
-		buffer.append("shutdown " + ":" + " Shutdown the installer service"
-				+ "\n");
-		buffer.append("help     " + ":"
-				+ " Provides usage description of a command" + "\n");
-
-		LOGGER.info(buffer.toString());
-	}
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
deleted file mode 100644
index e2be142..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/driver/InstallerUtil.java
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.driver;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.StringWriter;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Random;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.jar.JarOutputStream;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-
-import org.apache.commons.io.IOUtils;
-
-import edu.uci.ics.asterix.event.driver.EventDriver;
-import edu.uci.ics.asterix.event.management.EventrixClient;
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-import edu.uci.ics.asterix.installer.error.InstallerException;
-import edu.uci.ics.asterix.installer.error.OutputHandler;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.model.AsterixInstance.State;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class InstallerUtil {
-
-    public static final String TXN_LOG_DIR = "txnLogs";
-    public static final String TXN_LOG_DIR_KEY_SUFFIX = "txnLogDir";
-
-    public static AsterixInstance createAsterixInstance(String asterixInstanceName, Cluster cluster)
-            throws FileNotFoundException, IOException {
-        Properties asterixConfProp = new Properties();
-        asterixConfProp.put("output_dir", cluster.getWorkingDir().getDir() + File.separator + "asterix_output");
-        Node metadataNode = getMetadataNode(cluster);
-        String asterixZipName = InstallerDriver.getAsterixZip().substring(
-                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
-        String asterixVersion = asterixZipName.substring("asterix-server-".length(),
-                asterixZipName.indexOf("-binary-assembly"));
-        AsterixInstance instance = new AsterixInstance(asterixInstanceName, cluster, asterixConfProp,
-                metadataNode.getId(), asterixVersion);
-        return instance;
-    }
-
-    public static void createAsterixZip(AsterixInstance asterixInstance, boolean newDeployment) throws IOException,
-            InterruptedException {
-
-        String modifiedZipPath = injectAsterixPropertyFile(InstallerDriver.getAsterixZip(), asterixInstance,
-                newDeployment);
-        injectAsterixLogPropertyFile(modifiedZipPath, asterixInstance);
-    }
-
-    private static String injectAsterixPropertyFile(String origZipFile, AsterixInstance asterixInstance,
-            boolean newDeployment) throws IOException {
-        writeAsterixConfigurationFile(asterixInstance, newDeployment);
-        String asterixInstanceDir = InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName();
-        unzip(origZipFile, asterixInstanceDir);
-        File sourceJar = new File(asterixInstanceDir + File.separator + "lib" + File.separator + "asterix-app-"
-                + asterixInstance.getAsterixVersion() + ".jar");
-        String asterixPropertyFile = "test.properties";
-        File replacementFile = new File(asterixInstanceDir + File.separator + "test.properties");
-        replaceInJar(sourceJar, asterixPropertyFile, replacementFile);
-        new File(asterixInstanceDir + File.separator + "test.properties").delete();
-        String asterixZipName = InstallerDriver.getAsterixZip().substring(
-                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
-        zipDir(new File(asterixInstanceDir), new File(asterixInstanceDir + File.separator + asterixZipName));
-        return asterixInstanceDir + File.separator + asterixZipName;
-    }
-
-    private static String injectAsterixLogPropertyFile(String origZipFile, AsterixInstance asterixInstance)
-            throws IOException {
-        String asterixInstanceDir = InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName();
-        unzip(origZipFile, asterixInstanceDir);
-        File sourceJar1 = new File(asterixInstanceDir + File.separator + "lib" + File.separator + "asterix-app-"
-                + asterixInstance.getAsterixVersion() + ".jar");
-        String txnLogPropertyFile = "log.properties";
-        Properties txnLogProperties = new Properties();
-        URLClassLoader urlClassLoader = new URLClassLoader(new URL[] { sourceJar1.toURI().toURL() });
-        InputStream in = urlClassLoader.getResourceAsStream(txnLogPropertyFile);
-        if (in != null) {
-            txnLogProperties.load(in);
-        }
-
-        writeAsterixLogConfigurationFile(asterixInstance.getName(), asterixInstance.getCluster(), txnLogProperties);
-
-        File sourceJar2 = new File(asterixInstanceDir + File.separator + "lib" + File.separator + "asterix-app-"
-                + asterixInstance.getAsterixVersion() + ".jar");
-        File replacementFile = new File(asterixInstanceDir + File.separator + "log.properties");
-        replaceInJar(sourceJar2, txnLogPropertyFile, replacementFile);
-
-        new File(asterixInstanceDir + File.separator + "log.properties").delete();
-        String asterixZipName = InstallerDriver.getAsterixZip().substring(
-                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
-        zipDir(new File(asterixInstanceDir), new File(asterixInstanceDir + File.separator + asterixZipName));
-        return asterixInstanceDir + File.separator + asterixZipName;
-    }
-
-    public static void addLibraryToAsterixZip(AsterixInstance asterixInstance, String dataverseName,
-            String libraryName, String libraryPath) throws IOException {
-        File instanceDir = new File(InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName());
-        if (!instanceDir.exists()) {
-            instanceDir.mkdirs();
-        }
-        String asterixZipName = InstallerDriver.getAsterixZip().substring(
-                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
-
-        String sourceZip = instanceDir.getAbsolutePath() + File.separator + asterixZipName;
-        unzip(sourceZip, instanceDir.getAbsolutePath());
-        File libraryPathInZip = new File(instanceDir.getAbsolutePath() + File.separator + "external" + File.separator
-                + "library" + dataverseName + File.separator + "to-add" + File.separator + libraryName);
-        libraryPathInZip.mkdirs();
-        Runtime.getRuntime().exec("cp" + " " + libraryPath + " " + libraryPathInZip.getAbsolutePath());
-        Runtime.getRuntime().exec("rm " + sourceZip);
-        String destZip = InstallerDriver.getAsterixDir() + File.separator + asterixInstance.getName() + File.separator
-                + asterixZipName;
-        zipDir(instanceDir, new File(destZip));
-        Runtime.getRuntime().exec("mv" + " " + destZip + " " + sourceZip);
-    }
-
-    private static Node getMetadataNode(Cluster cluster) {
-        Random random = new Random();
-        int nNodes = cluster.getNode().size();
-        return cluster.getNode().get(random.nextInt(nNodes));
-    }
-
-    public static String getNodeDirectories(String asterixInstanceName, Node node, Cluster cluster) {
-        String storeDataSubDir = asterixInstanceName + File.separator + "data" + File.separator;
-        String[] storeDirs = null;
-        StringBuffer nodeDataStore = new StringBuffer();
-        String storeDirValue = node.getStore();
-        if (storeDirValue == null) {
-            storeDirValue = cluster.getStore();
-            if (storeDirValue == null) {
-                throw new IllegalStateException(" Store not defined for node " + node.getId());
-            }
-            storeDataSubDir = node.getId() + File.separator + storeDataSubDir;
-        }
-
-        storeDirs = storeDirValue.split(",");
-        for (String ns : storeDirs) {
-            nodeDataStore.append(ns + File.separator + storeDataSubDir.trim());
-            nodeDataStore.append(",");
-        }
-        nodeDataStore.deleteCharAt(nodeDataStore.length() - 1);
-        return nodeDataStore.toString();
-    }
-
-    private static void writeAsterixConfigurationFile(AsterixInstance asterixInstance, boolean newData)
-            throws IOException {
-        String asterixInstanceName = asterixInstance.getName();
-        Cluster cluster = asterixInstance.getCluster();
-        String metadataNodeId = asterixInstance.getMetadataNodeId();
-
-        StringBuffer conf = new StringBuffer();
-        conf.append("MetadataNode=" + asterixInstanceName + "_" + metadataNodeId + "\n");
-        conf.append("NewUniverse=" + newData + "\n");
-
-        String storeDir = null;
-        for (Node node : cluster.getNode()) {
-            storeDir = node.getStore() == null ? cluster.getStore() : node.getStore();
-            conf.append(asterixInstanceName + "_" + node.getId() + ".stores" + "=" + storeDir + "\n");
-        }
-
-        Properties asterixConfProp = asterixInstance.getConfiguration();
-        String outputDir = asterixConfProp.getProperty("output_dir");
-        conf.append("OutputDir=" + outputDir);
-
-        File asterixConfDir = new File(InstallerDriver.getAsterixDir() + File.separator + asterixInstanceName);
-        asterixConfDir.mkdirs();
-        dumpToFile(InstallerDriver.getAsterixDir() + File.separator + asterixInstanceName + File.separator
-                + "test.properties", conf.toString());
-    }
-
-    private static void writeAsterixLogConfigurationFile(String asterixInstanceName, Cluster cluster,
-            Properties logProperties) throws IOException {
-        StringBuffer conf = new StringBuffer();
-        for (Map.Entry<Object, Object> p : logProperties.entrySet()) {
-            conf.append(p.getKey() + "=" + p.getValue() + "\n");
-        }
-
-        for (Node node : cluster.getNode()) {
-            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
-            String txnLogDir = iodevices.split(",")[0].trim() + File.separator + InstallerUtil.TXN_LOG_DIR;
-            conf.append(asterixInstanceName + "_" + node.getId() + "." + TXN_LOG_DIR_KEY_SUFFIX + "=" + txnLogDir
-                    + "\n");
-        }
-        dumpToFile(InstallerDriver.getAsterixDir() + File.separator + asterixInstanceName + File.separator
-                + "log.properties", conf.toString());
-
-    }
-
-    public static Properties getAsterixConfiguration(String asterixConf) throws FileNotFoundException, IOException {
-        Properties prop = new Properties();
-        prop.load(new FileInputStream(asterixConf));
-        return prop;
-    }
-
-    public static void unzip(String sourceFile, String destDir) throws IOException {
-        BufferedOutputStream dest = null;
-        FileInputStream fis = new FileInputStream(sourceFile);
-        ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis));
-        ZipEntry entry = null;
-
-        int BUFFER_SIZE = 4096;
-        while ((entry = zis.getNextEntry()) != null) {
-            String dst = destDir + File.separator + entry.getName();
-            if (entry.isDirectory()) {
-                createDir(destDir, entry);
-                continue;
-            }
-            int count;
-            byte data[] = new byte[BUFFER_SIZE];
-
-            // write the file to the disk
-            FileOutputStream fos = new FileOutputStream(dst);
-            dest = new BufferedOutputStream(fos, BUFFER_SIZE);
-            while ((count = zis.read(data, 0, BUFFER_SIZE)) != -1) {
-                dest.write(data, 0, count);
-            }
-            // close the output streams
-            dest.flush();
-            dest.close();
-        }
-
-        zis.close();
-    }
-
-    public static void zipDir(File sourceDir, File destFile) throws IOException {
-        FileOutputStream fos = new FileOutputStream(destFile);
-        ZipOutputStream zos = new ZipOutputStream(fos);
-        zipDir(sourceDir, destFile, zos);
-        zos.close();
-    }
-
-    private static void zipDir(File sourceDir, final File destFile, ZipOutputStream zos) throws IOException {
-        File[] dirList = sourceDir.listFiles(new FileFilter() {
-            public boolean accept(File f) {
-                return !f.getName().endsWith(destFile.getName());
-            }
-        });
-        for (int i = 0; i < dirList.length; i++) {
-            File f = dirList[i];
-            if (f.isDirectory()) {
-                zipDir(f, destFile, zos);
-            } else {
-                int bytesIn = 0;
-                byte[] readBuffer = new byte[2156];
-                FileInputStream fis = new FileInputStream(f);
-                ZipEntry entry = new ZipEntry(sourceDir.getName() + File.separator + f.getName());
-                zos.putNextEntry(entry);
-                while ((bytesIn = fis.read(readBuffer)) != -1) {
-                    zos.write(readBuffer, 0, bytesIn);
-                }
-                fis.close();
-            }
-        }
-    }
-
-    private static void replaceInJar(File sourceJar, String origFile, File replacementFile) throws IOException {
-        File destJar = new File(sourceJar.getAbsolutePath() + ".modified");
-        InputStream jarIs = null;
-        FileInputStream fis = new FileInputStream(replacementFile);
-        JarFile sourceJarFile = new JarFile(sourceJar);
-        Enumeration<JarEntry> entries = sourceJarFile.entries();
-        JarOutputStream jos = new JarOutputStream(new FileOutputStream(destJar));
-        byte[] buffer = new byte[2048];
-        int read;
-        while (entries.hasMoreElements()) {
-            JarEntry entry = (JarEntry) entries.nextElement();
-            String name = entry.getName();
-            if (name.equals(origFile)) {
-                continue;
-            }
-            jarIs = sourceJarFile.getInputStream(entry);
-            jos.putNextEntry(entry);
-            while ((read = jarIs.read(buffer)) != -1) {
-                jos.write(buffer, 0, read);
-            }
-        }
-        JarEntry entry = new JarEntry(origFile);
-        jos.putNextEntry(entry);
-        while ((read = fis.read(buffer)) != -1) {
-            jos.write(buffer, 0, read);
-        }
-        fis.close();
-        jos.close();
-        jarIs.close();
-        sourceJar.delete();
-        destJar.renameTo(sourceJar);
-        sourceJar.setExecutable(true);
-    }
-
-    public static void dumpToFile(String dest, String content) throws IOException {
-        FileWriter writer = new FileWriter(dest);
-        writer.write(content);
-        writer.close();
-    }
-
-    private static void createDir(String destDirectory, ZipEntry entry) {
-        String name = entry.getName();
-        int index = name.lastIndexOf(File.separator);
-        String dirSequence = name.substring(0, index);
-        File newDirs = new File(destDirectory + File.separator + dirSequence);
-        newDirs.mkdirs();
-    }
-
-    public static AsterixInstance validateAsterixInstanceExists(String name, State... permissibleStates)
-            throws Exception {
-        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(name);
-        if (instance == null) {
-            throw new InstallerException("Asterix instance by name " + name + " does not exist.");
-        }
-        boolean valid = false;
-        for (State state : permissibleStates) {
-            if (state.equals(instance.getState())) {
-                valid = true;
-                break;
-            }
-        }
-        if (!valid) {
-            throw new InstallerException("Asterix instance by the name " + name + " is in " + instance.getState()
-                    + " state ");
-        }
-        return instance;
-    }
-
-    public static void validateAsterixInstanceNotExists(String name) throws Exception {
-        AsterixInstance instance = ServiceProvider.INSTANCE.getLookupService().getAsterixInstance(name);
-        if (instance != null) {
-            throw new InstallerException("Asterix instance by name " + name + " already exists.");
-        }
-    }
-
-    public static void evaluateConflictWithOtherInstances(AsterixInstance instance) throws Exception {
-        List<AsterixInstance> existingInstances = ServiceProvider.INSTANCE.getLookupService().getAsterixInstances();
-        List<String> usedIps = new ArrayList<String>();
-        String masterIp = instance.getCluster().getMasterNode().getClusterIp();
-        for (Node node : instance.getCluster().getNode()) {
-            usedIps.add(node.getClusterIp());
-        }
-        usedIps.add(instance.getCluster().getMasterNode().getClusterIp());
-        boolean conflictFound = false;
-        AsterixInstance conflictingInstance = null;
-        for (AsterixInstance existing : existingInstances) {
-            conflictFound = existing.getCluster().getMasterNode().getClusterIp().equals(masterIp);
-            if (conflictFound) {
-                conflictingInstance = existing;
-                break;
-            }
-            for (Node n : existing.getCluster().getNode()) {
-                if (usedIps.contains(n.getClusterIp())) {
-                    conflictFound = true;
-                    conflictingInstance = existing;
-                    break;
-                }
-            }
-        }
-        if (conflictFound) {
-            throw new Exception("Cluster definition conflicts with an existing instance of Asterix: "
-                    + conflictingInstance.getName());
-        }
-    }
-
-    public static void deleteDirectory(String path) throws IOException {
-        Runtime.getRuntime().exec("rm -rf " + path);
-    }
-
-    public static String executeLocalScript(String path, List<String> args) throws Exception {
-        List<String> pargs = new ArrayList<String>();
-        pargs.add("/bin/bash");
-        pargs.add(path);
-        if (args != null) {
-            pargs.addAll(args);
-        }
-        ProcessBuilder pb = new ProcessBuilder(pargs);
-        pb.environment().putAll(EventDriver.getEnvironment());
-        pb.environment().put("IP_LOCATION", EventDriver.CLIENT_NODE.getClusterIp());
-        Process p = pb.start();
-        BufferedInputStream bis = new BufferedInputStream(p.getInputStream());
-        StringWriter writer = new StringWriter();
-        IOUtils.copy(bis, writer, "UTF-8");
-        return writer.toString();
-    }
-
-    public static EventrixClient getEventrixClient(Cluster cluster) throws Exception {
-        return new EventrixClient(
-                InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_EVENT_DIR, cluster, false,
-                OutputHandler.INSTANCE);
-    }
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/events/PatternCreator.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/events/PatternCreator.java
deleted file mode 100644
index f6aeafe..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/events/PatternCreator.java
+++ /dev/null
@@ -1,454 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.events;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import edu.uci.ics.asterix.event.driver.EventDriver;
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-import edu.uci.ics.asterix.event.schema.pattern.Delay;
-import edu.uci.ics.asterix.event.schema.pattern.Event;
-import edu.uci.ics.asterix.event.schema.pattern.Nodeid;
-import edu.uci.ics.asterix.event.schema.pattern.Pattern;
-import edu.uci.ics.asterix.event.schema.pattern.Patterns;
-import edu.uci.ics.asterix.event.schema.pattern.Value;
-import edu.uci.ics.asterix.installer.command.BackupCommand;
-import edu.uci.ics.asterix.installer.command.StopCommand;
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.driver.InstallerUtil;
-import edu.uci.ics.asterix.installer.error.VerificationUtil;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.model.BackupInfo;
-import edu.uci.ics.asterix.installer.model.BackupInfo.BackupType;
-import edu.uci.ics.asterix.installer.schema.conf.Backup;
-import edu.uci.ics.asterix.installer.service.ILookupService;
-import edu.uci.ics.asterix.installer.service.ServiceProvider;
-
-public class PatternCreator {
-
-    private ILookupService lookupService = ServiceProvider.INSTANCE.getLookupService();
-
-    private void addInitialDelay(Pattern p, int delay, String unit) {
-        Delay d = new Delay(new Value(null, "" + delay), unit);
-        p.setDelay(d);
-    }
-
-    public Patterns getStartAsterixPattern(String asterixInstanceName, Cluster cluster) throws Exception {
-        String ccLocationId = cluster.getMasterNode().getId();
-        String ccLocationIp = cluster.getMasterNode().getClusterIp();
-
-        String destDir = cluster.getWorkingDir().getDir() + File.separator + "asterix";
-        List<Pattern> ps = new ArrayList<Pattern>();
-
-        Pattern copyHyracks = createCopyHyracksPattern(asterixInstanceName, cluster, ccLocationIp, destDir);
-        ps.add(copyHyracks);
-
-        Pattern createCC = createCCStartPattern(ccLocationId);
-        addInitialDelay(createCC, 3, "sec");
-        ps.add(createCC);
-
-        boolean copyHyracksToNC = !cluster.getWorkingDir().isNFS();
-        for (Node node : cluster.getNode()) {
-            if (copyHyracksToNC) {
-                Pattern copyHyracksForNC = createCopyHyracksPattern(asterixInstanceName, cluster, node.getClusterIp(),
-                        destDir);
-                ps.add(copyHyracksForNC);
-            }
-            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
-            Pattern createNC = createNCStartPattern(cluster.getMasterNode().getClusterIp(), node.getId(),
-                    asterixInstanceName + "_" + node.getId(), iodevices);
-            addInitialDelay(createNC, 5, "sec");
-            ps.add(createNC);
-        }
-
-        Patterns patterns = new Patterns(ps);
-        patterns.getPattern().addAll(createHadoopLibraryTransferPattern(cluster).getPattern());
-        return patterns;
-    }
-
-    public Patterns getStopCommandPattern(StopCommand stopCommand) throws Exception {
-        List<Pattern> ps = new ArrayList<Pattern>();
-        AsterixInstance asterixInstance = lookupService.getAsterixInstance(stopCommand.getAsterixInstanceName());
-        Cluster cluster = asterixInstance.getCluster();
-
-        String ccLocation = cluster.getMasterNode().getId();
-        Pattern createCC = createCCStopPattern(ccLocation);
-        addInitialDelay(createCC, 5, "sec");
-        ps.add(createCC);
-
-        String asterixInstanceName = stopCommand.getAsterixInstanceName();
-        int nodeControllerIndex = 1;
-        for (Node node : cluster.getNode()) {
-            Pattern createNC = createNCStopPattern(node.getId(), asterixInstanceName + "_" + nodeControllerIndex);
-            ps.add(createNC);
-            nodeControllerIndex++;
-        }
-
-        Patterns patterns = new Patterns(ps);
-        return patterns;
-    }
-
-    public Patterns getBackUpAsterixPattern(AsterixInstance instance, Backup backupConf) throws Exception {
-        BackupType backupType = BackupInfo.getBackupType(backupConf);
-        Patterns patterns = null;
-        switch (backupType) {
-            case HDFS:
-                patterns = getHDFSBackUpAsterixPattern(instance, backupConf);
-                break;
-            case LOCAL:
-                patterns = getLocalBackUpAsterixPattern(instance, backupConf);
-                break;
-        }
-        return patterns;
-    }
-
-    public Patterns getRestoreAsterixPattern(AsterixInstance instance, BackupInfo backupInfo) throws Exception {
-        BackupType backupType = backupInfo.getBackupType();
-        Patterns patterns = null;
-        switch (backupType) {
-            case HDFS:
-                patterns = getHDFSRestoreAsterixPattern(instance, backupInfo);
-                break;
-            case LOCAL:
-                patterns = getLocalRestoreAsterixPattern(instance, backupInfo);
-                break;
-        }
-        return patterns;
-    }
-
-    private Patterns getHDFSBackUpAsterixPattern(AsterixInstance instance, Backup backupConf) throws Exception {
-        Cluster cluster = instance.getCluster();
-        String hdfsUrl = backupConf.getHdfs().getUrl();
-        String hadoopVersion = backupConf.getHdfs().getVersion();
-        String hdfsBackupDir = backupConf.getBackupDir();
-        VerificationUtil.verifyBackupRestoreConfiguration(hdfsUrl, hadoopVersion, hdfsBackupDir);
-        String workingDir = cluster.getWorkingDir().getDir();
-        String backupId = "" + instance.getBackupInfo().size();
-        String store;
-        String pargs;
-        String iodevices;
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        for (Node node : cluster.getNode()) {
-            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
-            iodevices = node.getIodevices() == null ? instance.getCluster().getIodevices() : node.getIodevices();
-            store = node.getStore() == null ? cluster.getStore() : node.getStore();
-            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + store + " "
-                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
-                    + hdfsBackupDir + " " + "hdfs" + " " + node.getId() + " " + hdfsUrl + " " + hadoopVersion;
-            Event event = new Event("backup", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-        }
-        return new Patterns(patternList);
-    }
-
-    private Patterns getLocalBackUpAsterixPattern(AsterixInstance instance, Backup backupConf) throws Exception {
-        Cluster cluster = instance.getCluster();
-        String backupDir = backupConf.getBackupDir();
-        String workingDir = cluster.getWorkingDir().getDir();
-        String backupId = "" + instance.getBackupInfo().size();
-        String iodevices;
-        String store;
-        String pargs;
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        for (Node node : cluster.getNode()) {
-            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
-            iodevices = node.getIodevices() == null ? instance.getCluster().getIodevices() : node.getIodevices();
-            store = node.getStore() == null ? cluster.getStore() : node.getStore();
-            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + store + " "
-                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
-                    + backupDir + " " + "local" + " " + node.getId();
-            Event event = new Event("backup", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-        }
-        return new Patterns(patternList);
-    }
-
-    public Patterns getHDFSRestoreAsterixPattern(AsterixInstance instance, BackupInfo backupInfo) throws Exception {
-        Cluster cluster = instance.getCluster();
-        String clusterStore = instance.getCluster().getStore();
-        String hdfsUrl = backupInfo.getBackupConf().getHdfs().getUrl();
-        String hadoopVersion = backupInfo.getBackupConf().getHdfs().getVersion();
-        String hdfsBackupDir = backupInfo.getBackupConf().getBackupDir();
-        VerificationUtil.verifyBackupRestoreConfiguration(hdfsUrl, hadoopVersion, hdfsBackupDir);
-        String workingDir = cluster.getWorkingDir().getDir();
-        int backupId = backupInfo.getId();
-        String nodeStore;
-        String pargs;
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        for (Node node : cluster.getNode()) {
-            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
-            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
-            nodeStore = node.getStore() == null ? clusterStore : node.getStore();
-            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + nodeStore + " "
-                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
-                    + " " + hdfsBackupDir + " " + "hdfs" + " " + node.getId() + " " + hdfsUrl + " " + hadoopVersion;
-            Event event = new Event("restore", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-        }
-        return new Patterns(patternList);
-    }
-
-    public Patterns getLocalRestoreAsterixPattern(AsterixInstance instance, BackupInfo backupInfo) throws Exception {
-        Cluster cluster = instance.getCluster();
-        String clusterStore = instance.getCluster().getStore();
-        String backupDir = backupInfo.getBackupConf().getBackupDir();
-        String workingDir = cluster.getWorkingDir().getDir();
-        int backupId = backupInfo.getId();
-        String nodeStore;
-        String pargs;
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        for (Node node : cluster.getNode()) {
-            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
-            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
-            nodeStore = node.getStore() == null ? clusterStore : node.getStore();
-            pargs = workingDir + " " + instance.getName() + " " + iodevices + " " + nodeStore + " "
-                    + BackupCommand.ASTERIX_ROOT_METADATA_DIR + " " + InstallerUtil.TXN_LOG_DIR + " " + backupId + " "
-                    + backupDir + " " + "local" + " " + node.getId();
-            Event event = new Event("restore", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-        }
-        return new Patterns(patternList);
-    }
-
-    public Patterns createHadoopLibraryTransferPattern(Cluster cluster) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        String workingDir = cluster.getWorkingDir().getDir();
-        String hadoopVersion = InstallerDriver.getConfiguration().getBackup().getHdfs().getVersion();
-        File hadoopDir = new File(InstallerDriver.getManagixHome() + File.separator
-                + InstallerDriver.MANAGIX_INTERNAL_DIR + File.separator + "hadoop-" + hadoopVersion);
-        if (!hadoopDir.exists()) {
-            throw new IllegalStateException("Hadoop version :" + hadoopVersion + " not supported");
-        }
-
-        Nodeid nodeid = new Nodeid(new Value(null, EventDriver.CLIENT_NODE.getId()));
-        String username = cluster.getUsername() != null ? cluster.getUsername() : System.getProperty("user.name");
-        String pargs = username + " " + hadoopDir.getAbsolutePath() + " " + cluster.getMasterNode().getClusterIp()
-                + " " + workingDir;
-        Event event = new Event("directory_transfer", nodeid, pargs);
-        Pattern p = new Pattern(null, 1, null, event);
-        addInitialDelay(p, 2, "sec");
-        patternList.add(p);
-
-        boolean copyToNC = !cluster.getWorkingDir().isNFS();
-        if (copyToNC) {
-            for (Node node : cluster.getNode()) {
-                nodeid = new Nodeid(new Value(null, node.getId()));
-                pargs = cluster.getUsername() + " " + hadoopDir.getAbsolutePath() + " " + node.getClusterIp() + " "
-                        + workingDir;
-                event = new Event("directory_transfer", nodeid, pargs);
-                p = new Pattern(null, 1, null, event);
-                addInitialDelay(p, 2, "sec");
-                patternList.add(p);
-            }
-        }
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    public Patterns createDeleteInstancePattern(AsterixInstance instance) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        patternList.addAll(createRemoveAsterixStoragePattern(instance).getPattern());
-        if (instance.getBackupInfo() != null && instance.getBackupInfo().size() > 0) {
-            List<BackupInfo> backups = instance.getBackupInfo();
-            Set<String> removedBackupDirsHDFS = new HashSet<String>();
-            Set<String> removedBackupDirsLocal = new HashSet<String>();
-
-            String backupDir;
-            for (BackupInfo binfo : backups) {
-                backupDir = binfo.getBackupConf().getBackupDir();
-                switch (binfo.getBackupType()) {
-                    case HDFS:
-                        if (removedBackupDirsHDFS.contains(backups)) {
-                            continue;
-                        }
-                        patternList.addAll(createRemoveHDFSBackupPattern(instance, backupDir).getPattern());
-                        removedBackupDirsHDFS.add(backupDir);
-                        break;
-
-                    case LOCAL:
-                        if (removedBackupDirsLocal.contains(backups)) {
-                            continue;
-                        }
-                        patternList.addAll(createRemoveLocalBackupPattern(instance, backupDir).getPattern());
-                        removedBackupDirsLocal.add(backupDir);
-                        break;
-                }
-
-            }
-        }
-        patternList.addAll(createRemoveAsterixLogDirPattern(instance).getPattern());
-        patternList.addAll(createRemoveAsterixRootMetadata(instance).getPattern());
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    private Patterns createRemoveHDFSBackupPattern(AsterixInstance instance, String hdfsBackupDir) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        Cluster cluster = instance.getCluster();
-        String hdfsUrl = InstallerDriver.getConfiguration().getBackup().getHdfs().getUrl();
-        String hadoopVersion = InstallerDriver.getConfiguration().getBackup().getHdfs().getVersion();
-        String workingDir = cluster.getWorkingDir().getDir();
-        Node launchingNode = cluster.getNode().get(0);
-        Nodeid nodeid = new Nodeid(new Value(null, launchingNode.getId()));
-        String pathToDelete = hdfsBackupDir + File.separator + instance.getName();
-        String pargs = workingDir + " " + hadoopVersion + " " + hdfsUrl + " " + pathToDelete;
-        Event event = new Event("hdfs_delete", nodeid, pargs);
-        patternList.add(new Pattern(null, 1, null, event));
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    private Patterns createRemoveLocalBackupPattern(AsterixInstance instance, String localBackupDir) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        Cluster cluster = instance.getCluster();
-
-        String pathToDelete = localBackupDir + File.separator + instance.getName();
-        String pargs = pathToDelete;
-        List<String> removedBackupDirs = new ArrayList<String>();
-        for (Node node : cluster.getNode()) {
-            if (removedBackupDirs.contains(node.getClusterIp())) {
-                continue;
-            }
-            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
-            Event event = new Event("file_delete", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-            removedBackupDirs.add(node.getClusterIp());
-        }
-
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    public Patterns createRemoveAsterixWorkingDirPattern(AsterixInstance instance) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        Cluster cluster = instance.getCluster();
-        String workingDir = cluster.getWorkingDir().getDir();
-        String pargs = workingDir;
-        Nodeid nodeid = new Nodeid(new Value(null, cluster.getMasterNode().getId()));
-        Event event = new Event("file_delete", nodeid, pargs);
-        patternList.add(new Pattern(null, 1, null, event));
-
-        if (!cluster.getWorkingDir().isNFS()) {
-            for (Node node : cluster.getNode()) {
-                nodeid = new Nodeid(new Value(null, node.getId()));
-                event = new Event("file_delete", nodeid, pargs);
-                patternList.add(new Pattern(null, 1, null, event));
-            }
-        }
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    private Patterns createRemoveAsterixRootMetadata(AsterixInstance instance) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        Cluster cluster = instance.getCluster();
-        Nodeid nodeid = null;
-        String pargs = null;
-        Event event = null;
-        for (Node node : cluster.getNode()) {
-            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
-            String primaryIODevice = iodevices.split(",")[0].trim();
-            pargs = primaryIODevice + File.separator + BackupCommand.ASTERIX_ROOT_METADATA_DIR;
-            nodeid = new Nodeid(new Value(null, node.getId()));
-            event = new Event("file_delete", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-        }
-
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    private Patterns createRemoveAsterixLogDirPattern(AsterixInstance instance) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        Cluster cluster = instance.getCluster();
-        String pargs = instance.getCluster().getLogdir();
-        Nodeid nodeid = new Nodeid(new Value(null, cluster.getMasterNode().getId()));
-        Event event = new Event("file_delete", nodeid, pargs);
-        patternList.add(new Pattern(null, 1, null, event));
-
-        for (Node node : cluster.getNode()) {
-            nodeid = new Nodeid(new Value(null, node.getId()));
-            event = new Event("file_delete", nodeid, pargs);
-            patternList.add(new Pattern(null, 1, null, event));
-        }
-
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    private Patterns createRemoveAsterixStoragePattern(AsterixInstance instance) throws Exception {
-        List<Pattern> patternList = new ArrayList<Pattern>();
-        Cluster cluster = instance.getCluster();
-        String pargs = null;
-
-        for (Node node : cluster.getNode()) {
-            Nodeid nodeid = new Nodeid(new Value(null, node.getId()));
-            String[] nodeIODevices;
-            String iodevices = node.getIodevices() == null ? cluster.getIodevices() : node.getIodevices();
-            nodeIODevices = iodevices.trim().split(",");
-            for (String nodeIODevice : nodeIODevices) {
-                String nodeStore = node.getStore() == null ? cluster.getStore() : node.getStore();
-                pargs = nodeIODevice.trim() + File.separator + nodeStore;
-                Event event = new Event("file_delete", nodeid, pargs);
-                patternList.add(new Pattern(null, 1, null, event));
-            }
-        }
-        Patterns patterns = new Patterns(patternList);
-        return patterns;
-    }
-
-    private Pattern createCopyHyracksPattern(String instanceName, Cluster cluster, String destinationIp, String destDir) {
-        Nodeid nodeid = new Nodeid(new Value(null, EventDriver.CLIENT_NODE.getId()));
-        String username = cluster.getUsername() != null ? cluster.getUsername() : System.getProperty("user.name");
-        String asterixZipName = InstallerDriver.getAsterixZip().substring(
-                InstallerDriver.getAsterixZip().lastIndexOf(File.separator) + 1);
-        String fileToTransfer = new File(InstallerDriver.getAsterixDir() + File.separator + instanceName
-                + File.separator + asterixZipName).getAbsolutePath();
-        String pargs = username + " " + fileToTransfer + " " + destinationIp + " " + destDir + " " + "unpack";
-        Event event = new Event("file_transfer", nodeid, pargs);
-        return new Pattern(null, 1, null, event);
-    }
-
-    private Pattern createCCStartPattern(String hostId) {
-        Nodeid nodeid = new Nodeid(new Value(null, hostId));
-        Event event = new Event("cc_start", nodeid, "");
-        return new Pattern(null, 1, null, event);
-    }
-
-    public Pattern createCCStopPattern(String hostId) {
-        Nodeid nodeid = new Nodeid(new Value(null, hostId));
-        Event event = new Event("cc_failure", nodeid, null);
-        return new Pattern(null, 1, null, event);
-    }
-
-    public Pattern createNCStartPattern(String ccHost, String hostId, String nodeControllerId, String iodevices) {
-        Nodeid nodeid = new Nodeid(new Value(null, hostId));
-        String pargs = ccHost + " " + nodeControllerId + " " + iodevices;
-        Event event = new Event("node_join", nodeid, pargs);
-        return new Pattern(null, 1, null, event);
-    }
-
-    public Pattern createNCStopPattern(String hostId, String nodeControllerId) {
-        Nodeid nodeid = new Nodeid(new Value(null, hostId));
-        Event event = new Event("node_failure", nodeid, nodeControllerId);
-        return new Pattern(null, 1, null, event);
-    }
-
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
deleted file mode 100644
index 9f8b28d..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/model/AsterixInstance.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.model;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Properties;
-
-import edu.uci.ics.asterix.event.schema.cluster.Cluster;
-import edu.uci.ics.asterix.event.schema.cluster.Node;
-
-public class AsterixInstance implements Serializable {
-
-	private static final long serialVersionUID = 2874439550187520449L;
-
-	public enum State {
-		ACTIVE, INACTIVE, UNUSABLE
-	}
-
-	private final Cluster cluster;
-	private final String name;
-	private final Date createdTimestamp;
-	private Date stateChangeTimestamp;
-	private Date modifiedTimestamp;
-	private Properties configuration;
-	private State state;
-	private final String metadataNodeId;
-	private final String asterixVersion;
-	private final List<BackupInfo> backupInfo;
-	private final String webInterfaceUrl;
-	private AsterixRuntimeState runtimeState;
-	private State previousState;
-
-	public AsterixInstance(String name, Cluster cluster,
-			Properties configuration, String metadataNodeId,
-			String asterixVersion) {
-		this.name = name;
-		this.cluster = cluster;
-		this.configuration = configuration;
-		this.metadataNodeId = metadataNodeId;
-		this.state = State.ACTIVE;
-		this.previousState = State.UNUSABLE;
-		this.asterixVersion = asterixVersion;
-		this.createdTimestamp = new Date();
-		this.backupInfo = new ArrayList<BackupInfo>();
-		this.webInterfaceUrl = "http://"
-				+ cluster.getMasterNode().getClusterIp() + ":" + 19001;
-	}
-
-	public Date getModifiedTimestamp() {
-		return stateChangeTimestamp;
-	}
-
-	public Properties getConfiguration() {
-		return configuration;
-	}
-
-	public void setConfiguration(Properties properties) {
-		this.configuration = properties;
-	}
-
-	public State getState() {
-		return state;
-	}
-
-	public void setState(State state) {
-		this.previousState = this.state;
-		this.state = state;
-	}
-
-	public Cluster getCluster() {
-		return cluster;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public Date getCreatedTimestamp() {
-		return createdTimestamp;
-	}
-
-	public Date getStateChangeTimestamp() {
-		return stateChangeTimestamp;
-	}
-
-	public void setStateChangeTimestamp(Date stateChangeTimestamp) {
-		this.stateChangeTimestamp = stateChangeTimestamp;
-	}
-
-	public void setModifiedTimestamp(Date modifiedTimestamp) {
-		this.modifiedTimestamp = modifiedTimestamp;
-	}
-
-	public String getMetadataNodeId() {
-		return metadataNodeId;
-	}
-
-	public String getAsterixVersion() {
-		return asterixVersion;
-	}
-
-	public String getDescription(boolean detailed) {
-		StringBuffer buffer = new StringBuffer();
-		buffer.append("Name:" + name + "\n");
-		buffer.append("Created:" + createdTimestamp + "\n");
-		buffer.append("Web-Url:" + webInterfaceUrl + "\n");
-		buffer.append("State:" + state);
-		if (!state.equals(State.UNUSABLE) && stateChangeTimestamp != null) {
-			buffer.append(" (" + stateChangeTimestamp + ")" + "\n");
-		} else {
-			buffer.append("\n");
-		}
-		if (modifiedTimestamp != null) {
-			buffer.append("Last modified timestamp:" + modifiedTimestamp + "\n");
-		}
-
-		if (runtimeState.getSummary() != null
-				&& runtimeState.getSummary().length() > 0) {
-			buffer.append("\nWARNING!:" + runtimeState.getSummary() + "\n");
-		}
-		if (detailed) {
-			addDetailedInformation(buffer);
-		}
-		return buffer.toString();
-	}
-
-	public List<BackupInfo> getBackupInfo() {
-		return backupInfo;
-	}
-
-	public String getWebInterfaceUrl() {
-		return webInterfaceUrl;
-	}
-
-	public AsterixRuntimeState getAsterixRuntimeState() {
-		return runtimeState;
-	}
-
-	public void setAsterixRuntimeStates(AsterixRuntimeState runtimeState) {
-		this.runtimeState = runtimeState;
-	}
-
-	private void addDetailedInformation(StringBuffer buffer) {
-		buffer.append("Master node:" + cluster.getMasterNode().getId() + ":"
-				+ cluster.getMasterNode().getClusterIp() + "\n");
-		for (Node node : cluster.getNode()) {
-			buffer.append(node.getId() + ":" + node.getClusterIp() + "\n");
-		}
-
-		if (backupInfo != null && backupInfo.size() > 0) {
-			for (BackupInfo info : backupInfo) {
-				buffer.append(info + "\n");
-			}
-		}
-		buffer.append("\n");
-		buffer.append("Asterix version:" + asterixVersion + "\n");
-		buffer.append("Metadata Node:" + metadataNodeId + "\n");
-		buffer.append("Processes" + "\n");
-		for (ProcessInfo pInfo : runtimeState.getProcesses()) {
-			buffer.append(pInfo + "\n");
-		}
-
-	}
-
-	public State getPreviousState() {
-		return previousState;
-	}
-}
diff --git a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ZooKeeperService.java b/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ZooKeeperService.java
deleted file mode 100644
index b87d721..0000000
--- a/asterix/asterix-installer/src/main/java/edu/uci/ics/asterix/installer/service/ZooKeeperService.java
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.installer.service;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.TimeUnit;
-
-import org.apache.log4j.Logger;
-import org.apache.zookeeper.CreateMode;
-import org.apache.zookeeper.KeeperException;
-import org.apache.zookeeper.WatchedEvent;
-import org.apache.zookeeper.Watcher;
-import org.apache.zookeeper.ZooDefs.Ids;
-import org.apache.zookeeper.ZooKeeper;
-import org.apache.zookeeper.data.Stat;
-
-import edu.uci.ics.asterix.installer.driver.InstallerDriver;
-import edu.uci.ics.asterix.installer.driver.InstallerUtil;
-import edu.uci.ics.asterix.installer.error.InstallerException;
-import edu.uci.ics.asterix.installer.model.AsterixInstance;
-import edu.uci.ics.asterix.installer.schema.conf.Configuration;
-
-public class ZooKeeperService implements ILookupService {
-
-    private static final Logger LOGGER = Logger.getLogger(ZooKeeperService.class.getName());
-
-    private static final int ZOOKEEPER_LEADER_CONN_PORT = 2222;
-    private static final int ZOOKEEPER_LEADER_ELEC_PORT = 2223;
-    private static final int ZOOKEEPER_SESSION_TIME_OUT = 40 * 1000; //milliseconds
-    private static final String ZOOKEEPER_HOME = InstallerDriver.getManagixHome() + File.separator
-            + InstallerDriver.MANAGIX_INTERNAL_DIR + File.separator + "zookeeper";
-    private static final String ZOO_KEEPER_CONFIG = ZOOKEEPER_HOME + File.separator + "zk.cfg";
-
-    private boolean isRunning = false;
-    private ZooKeeper zk;
-    private String zkConnectionString;
-    private static final String ASTERIX_INSTANCE_BASE_PATH = "/Asterix";
-    private static final int DEFAULT_NODE_VERSION = -1;
-    private LinkedBlockingQueue<String> msgQ = new LinkedBlockingQueue<String>();
-    private ZooKeeperWatcher watcher = new ZooKeeperWatcher(msgQ);
-
-    public boolean isRunning(Configuration conf) throws Exception {
-        List<String> servers = conf.getZookeeper().getServers().getServer();
-        int clientPort = conf.getZookeeper().getClientPort().intValue();
-        StringBuffer connectionString = new StringBuffer();
-        for (String serverAddress : servers) {
-            connectionString.append(serverAddress);
-            connectionString.append(":");
-            connectionString.append(clientPort);
-            connectionString.append(",");
-        }
-        if (connectionString.length() > 0) {
-            connectionString.deleteCharAt(connectionString.length() - 1);
-        }
-        zkConnectionString = connectionString.toString();
-
-        zk = new ZooKeeper(zkConnectionString, ZOOKEEPER_SESSION_TIME_OUT, watcher);
-        try {
-            zk.exists("/dummy", watcher);
-            if (LOGGER.isDebugEnabled()) {
-                LOGGER.debug("ZooKeeper running at " + connectionString);
-            }
-            createRootIfNotExist();
-            isRunning = true;
-        } catch (KeeperException ke) {
-            isRunning = false;
-        }
-        return isRunning;
-    }
-
-    public void startService(Configuration conf) throws Exception {
-        if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("Starting ZooKeeper at " + zkConnectionString);
-        }
-        ZookeeperUtil.writeConfiguration(ZOO_KEEPER_CONFIG, conf, ZOOKEEPER_LEADER_CONN_PORT,
-                ZOOKEEPER_LEADER_ELEC_PORT);
-        String initScript = ZOOKEEPER_HOME + File.separator + "bin" + File.separator + "zk.init";
-        StringBuffer cmdBuffer = new StringBuffer();
-        cmdBuffer.append(initScript + " ");
-        cmdBuffer.append(conf.getZookeeper().getHomeDir() + " ");
-        cmdBuffer.append(conf.getZookeeper().getServers().getJavaHome() + " ");
-        List<String> zkServers = conf.getZookeeper().getServers().getServer();
-        for (String zkServer : zkServers) {
-            cmdBuffer.append(zkServer + " ");
-        }
-        Runtime.getRuntime().exec(cmdBuffer.toString());
-        zk = new ZooKeeper(zkConnectionString, ZOOKEEPER_SESSION_TIME_OUT, watcher);
-        String head = msgQ.poll(10, TimeUnit.SECONDS);
-        if (head == null) {
-            String msg = "Unable to start Zookeeper Service. Please verify the configuration at "
-                    + InstallerDriver.getManagixHome() + File.separator + InstallerDriver.MANAGIX_CONF_XML;
-            throw new Exception(msg);
-        }
-        msgQ.take();
-        createRootIfNotExist();
-    }
-
-    public void stopService(Configuration conf) throws Exception {
-        if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("Stopping ZooKeeper running at " + zkConnectionString);
-        }
-        String stopScript = ZOOKEEPER_HOME + File.separator + "bin" + File.separator + "stop_zk";
-        StringBuffer cmdBuffer = new StringBuffer();
-        cmdBuffer.append(stopScript + " ");
-        cmdBuffer.append(conf.getZookeeper().getHomeDir() + " ");
-        List<String> zkServers = conf.getZookeeper().getServers().getServer();
-        for (String zkServer : zkServers) {
-            cmdBuffer.append(zkServer + " ");
-        }
-        Runtime.getRuntime().exec(cmdBuffer.toString());
-        if (LOGGER.isDebugEnabled()) {
-            LOGGER.debug("Stopped ZooKeeper service at " + zkConnectionString);
-        }
-    }
-
-    public void writeAsterixInstance(AsterixInstance asterixInstance) throws Exception {
-        String instanceBasePath = ASTERIX_INSTANCE_BASE_PATH + File.separator + asterixInstance.getName();
-        ByteArrayOutputStream b = new ByteArrayOutputStream();
-        ObjectOutputStream o = new ObjectOutputStream(b);
-        o.writeObject(asterixInstance);
-        zk.create(instanceBasePath, b.toByteArray(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
-    }
-
-    private void createRootIfNotExist() throws Exception {
-        try {
-            Stat stat = zk.exists(ASTERIX_INSTANCE_BASE_PATH, false);
-            if (stat == null) {
-                zk.create(ASTERIX_INSTANCE_BASE_PATH, "root".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
-            }
-        } catch (Exception e) {
-            createRootIfNotExist();
-        }
-    }
-
-    public AsterixInstance getAsterixInstance(String name) throws Exception {
-        String path = ASTERIX_INSTANCE_BASE_PATH + File.separator + name;
-        Stat stat = zk.exists(ASTERIX_INSTANCE_BASE_PATH + File.separator + name, false);
-        if (stat == null) {
-            return null;
-        }
-        byte[] asterixInstanceBytes = zk.getData(path, false, new Stat());
-        return readAsterixInstanceObject(asterixInstanceBytes);
-    }
-
-    public boolean exists(String asterixInstanceName) throws Exception {
-        return zk.exists(ASTERIX_INSTANCE_BASE_PATH + File.separator + asterixInstanceName, false) != null;
-    }
-
-    public void removeAsterixInstance(String name) throws Exception {
-        if (!exists(name)) {
-            throw new InstallerException("Asterix instance by name " + name + " does not exists.");
-        }
-        zk.delete(ASTERIX_INSTANCE_BASE_PATH + File.separator + name, DEFAULT_NODE_VERSION);
-    }
-
-    public List<AsterixInstance> getAsterixInstances() throws Exception {
-        List<String> instanceNames = zk.getChildren(ASTERIX_INSTANCE_BASE_PATH, false);
-        List<AsterixInstance> asterixInstances = new ArrayList<AsterixInstance>();
-        String path;
-        for (String instanceName : instanceNames) {
-            path = ASTERIX_INSTANCE_BASE_PATH + File.separator + instanceName;
-            byte[] asterixInstanceBytes = zk.getData(path, false, new Stat());
-            asterixInstances.add(readAsterixInstanceObject(asterixInstanceBytes));
-        }
-        return asterixInstances;
-    }
-
-    private AsterixInstance readAsterixInstanceObject(byte[] asterixInstanceBytes) throws IOException,
-            ClassNotFoundException {
-        ByteArrayInputStream b = new ByteArrayInputStream(asterixInstanceBytes);
-        ObjectInputStream ois = new ObjectInputStream(b);
-        return (AsterixInstance) ois.readObject();
-    }
-
-    public void updateAsterixInstance(AsterixInstance updatedInstance) throws Exception {
-        removeAsterixInstance(updatedInstance.getName());
-        writeAsterixInstance(updatedInstance);
-    }
-
-}
-
-class ZooKeeperWatcher implements Watcher {
-
-    private boolean isRunning = true;
-    private LinkedBlockingQueue<String> msgQ;
-
-    public ZooKeeperWatcher(LinkedBlockingQueue<String> msgQ) {
-        this.msgQ = msgQ;
-    }
-
-    public void process(WatchedEvent wEvent) {
-        switch (wEvent.getState()) {
-            case SyncConnected:
-                msgQ.add("connected");
-                break;
-        }
-    }
-
-    public boolean isRunning() {
-        return isRunning;
-    }
-
-}
-
-class ZookeeperUtil {
-
-    public static void writeConfiguration(String zooKeeperConfigPath, Configuration conf, int leaderConnPort,
-            int leaderElecPort) throws IOException {
-
-        StringBuffer buffer = new StringBuffer();
-        buffer.append("tickTime=1000" + "\n");
-        buffer.append("dataDir=" + conf.getZookeeper().getHomeDir() + File.separator + "data" + "\n");
-        buffer.append("clientPort=" + conf.getZookeeper().getClientPort().intValue() + "\n");
-        buffer.append("initLimit=" + 2 + "\n");
-        buffer.append("syncLimit=" + 2 + "\n");
-
-        List<String> servers = conf.getZookeeper().getServers().getServer();
-        int serverId = 1;
-        for (String server : servers) {
-            buffer.append("server" + "." + serverId + "=" + server + ":" + leaderConnPort + ":" + leaderElecPort + "\n");
-            serverId++;
-        }
-        InstallerUtil.dumpToFile(zooKeeperConfigPath, buffer.toString());
-    }
-
-}
diff --git a/asterix/asterix-installer/src/main/resources/clusters/local/conf/asterix.conf b/asterix/asterix-installer/src/main/resources/clusters/local/conf/asterix.conf
deleted file mode 100644
index 659b48e..0000000
--- a/asterix/asterix-installer/src/main/resources/clusters/local/conf/asterix.conf
+++ /dev/null
@@ -1 +0,0 @@
-output_dir=/tmp/asterix_output/
diff --git a/asterix/asterix-installer/src/main/resources/clusters/local/local.xml b/asterix/asterix-installer/src/main/resources/clusters/local/local.xml
deleted file mode 100644
index d397bcd..0000000
--- a/asterix/asterix-installer/src/main/resources/clusters/local/local.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<cluster xmlns="cluster">
-  <name>local</name>
-  <workingDir>
-    <dir>/tmp/asterix-installer</dir>
-    <NFS>true</NFS>
-  </workingDir>
-  <logdir>/tmp/asterix/logs</logdir>
-  <iodevices>/tmp</iodevices>
-  <store>asterix/storage</store>
-  <java_home></java_home>
-  <java_opts>-Xmx1024m</java_opts>
-  <master-node>
-    <id>master</id>
-    <client-ip>127.0.0.1</client-ip>
-    <cluster-ip>127.0.0.1</cluster-ip>
-  </master-node>
-  <node>
-    <id>node1</id>
-    <cluster-ip>127.0.0.1</cluster-ip>
-  </node>
-</cluster>
diff --git a/asterix/asterix-installer/src/main/resources/scripts/managix b/asterix/asterix-installer/src/main/resources/scripts/managix
deleted file mode 100755
index cd0794e..0000000
--- a/asterix/asterix-installer/src/main/resources/scripts/managix
+++ /dev/null
@@ -1,20 +0,0 @@
-if [ -z $MANAGIX_HOME ] 
- then
-   echo "MANAGIX_HOME is not defined"
-   exit 1
-fi
-
-VERSION=0.0.4-SNAPSHOT
-
-for jar in `ls $MANAGIX_HOME/lib/*.jar`
-  do 
-  if [ -z $MANAGIX_CLASSPATH ] 
-  then 
-    MANAGIX_CLASSPATH=$jar 
-  else
-    MANAGIX_CLASSPATH=$MANAGIX_CLASSPATH:$jar 
-  fi
-done
-
-MANAGIX_CLASSPATH=$MANAGIX_CLASSPATH:$MANAGIX_HOME/conf/log4j.properties
-java $JAVA_OPTS -Dlog4j.configuration=file:$MANAGIX_HOME/conf/log4j.properties -cp $MANAGIX_CLASSPATH edu.uci.ics.asterix.installer.driver.InstallerDriver $@
diff --git a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/pom.xml b/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/pom.xml
deleted file mode 100644
index 624c8d3..0000000
--- a/asterix/asterix-maven-plugins/lexer-generator-maven-plugin/pom.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>edu.uci.ics.asterix</groupId>
-  <artifactId>lexer-generator-maven-plugin</artifactId>
-	<parent>
-		<artifactId>asterix-maven-plugins</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-
-  <packaging>maven-plugin</packaging>
-  <name>lexer-generator-maven-plugin</name>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-compiler-plugin</artifactId>
-        <version>2.0.2</version>
-        <configuration>
-          <source>1.6</source>
-          <target>1.6</target>
-	  <fork>true</fork>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
-  <dependencies>
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <version>4.8.1</version>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.maven</groupId>
-      <artifactId>maven-plugin-api</artifactId>
-      <version>2.0.2</version>
-    </dependency>
-  </dependencies>    
-</project>
diff --git a/asterix/asterix-maven-plugins/pom.xml b/asterix/asterix-maven-plugins/pom.xml
deleted file mode 100644
index f460970..0000000
--- a/asterix/asterix-maven-plugins/pom.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <groupId>edu.uci.ics.asterix</groupId>
-  <artifactId>asterix-maven-plugins</artifactId>
-  <packaging>pom</packaging>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-
-  <dependencies>
-  	<dependency>
-  		<groupId>org.apache.maven</groupId>
-  		<artifactId>maven-plugin-api</artifactId>
-  		<version>2.2.1</version>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  </dependencies>
-
-  <modules>
-    <module>lexer-generator-maven-plugin</module>
-  </modules>
-</project>
diff --git a/asterix/asterix-metadata/pom.xml b/asterix/asterix-metadata/pom.xml
deleted file mode 100644
index ca3f342..0000000
--- a/asterix/asterix-metadata/pom.xml
+++ /dev/null
@@ -1,71 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-metadata</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-common</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-om</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-external-data</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-core</artifactId>
-			<version>0.20.2</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-btree</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-core</artifactId>
-			<version>0.20.2</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-	</dependencies>
-</project>
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
deleted file mode 100644
index ad106fe..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataManager.java
+++ /dev/null
@@ -1,605 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata;
-
-import java.rmi.RemoteException;
-import java.util.List;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
-import edu.uci.ics.asterix.metadata.api.IMetadataManager;
-import edu.uci.ics.asterix.metadata.api.IMetadataNode;
-import edu.uci.ics.asterix.metadata.bootstrap.MetadataConstants;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.Node;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobIdFactory;
-
-/**
- * Provides access to Asterix metadata via remote methods to the metadata node.
- * This metadata manager maintains a local cache of metadata Java objects
- * received from the metadata node, to avoid contacting the metadata node
- * repeatedly. We assume that this metadata manager is the only metadata manager
- * in an Asterix cluster. Therefore, no separate cache-invalidation mechanism is
- * needed at this point.
- * Assumptions/Limitations:
- * The metadata subsystem is started during NC Bootstrap start, i.e., when
- * Asterix is deployed.
- * The metadata subsystem is destroyed in NC Bootstrap end, i.e., when Asterix
- * is undeployed.
- * The metadata subsystem consists of the MetadataManager and the MatadataNode.
- * The MetadataManager provides users access to the metadata.
- * The MetadataNode implements direct access to the storage layer on behalf of
- * the MetadataManager, and translates the binary representation of ADM into
- * Java objects for consumption by the MetadataManager's users.
- * There is exactly one instance of the MetadataManager and of the MetadataNode
- * in the cluster, which may or may not be co-located on the same machine (or in
- * the same JVM).
- * The MetadataManager exists in the same JVM as its user's (e.g., the query
- * compiler).
- * The MetadataNode exists in the same JVM as it's transactional components
- * (LockManager, LogManager, etc.)
- * Users shall access the metadata only through the MetadataManager, and never
- * via the MetadataNode directly.
- * Multiple threads may issue requests to the MetadataManager concurrently. For
- * the sake of accessing metadata, we assume a transaction consists of one
- * thread.
- * Users are responsible for locking the metadata (using the MetadataManager
- * API) before issuing requests.
- * The MetadataNode is responsible for acquiring finer-grained locks on behalf
- * of requests from the MetadataManager. Currently, locks are acquired per
- * BTree, since the BTree does not acquire even finer-grained locks yet
- * internally.
- * The metadata can be queried with AQL DML like any other dataset, but can only
- * be changed with AQL DDL.
- * The transaction ids for metadata transactions must be unique across the
- * cluster, i.e., metadata transaction ids shall never "accidentally" overlap
- * with transaction ids of regular jobs or other metadata transactions.
- */
-public class MetadataManager implements IMetadataManager {
-    // Set in init().
-    public static MetadataManager INSTANCE;
-    private final MetadataCache cache = new MetadataCache();
-    private IAsterixStateProxy proxy;
-    private IMetadataNode metadataNode;
-    private final ReadWriteLock metadataLatch;
-
-    public MetadataManager(IAsterixStateProxy proxy) {
-        if (proxy == null) {
-            throw new Error("Null proxy given to MetadataManager.");
-        }
-        this.proxy = proxy;
-        this.metadataNode = null;
-        this.metadataLatch = new ReentrantReadWriteLock(true);
-    }
-
-    @Override
-    public void init() throws RemoteException {
-        // Could be synchronized on any object. Arbitrarily chose proxy.
-        synchronized (proxy) {
-            if (metadataNode != null) {
-                return;
-            }
-            metadataNode = proxy.getMetadataNode();
-            if (metadataNode == null) {
-                throw new Error("Failed to get the MetadataNode.\n" + "The MetadataNode was configured to run on NC: "
-                        + proxy.getAsterixProperties().getMetadataNodeName());
-            }
-        }
-    }
-
-    @Override
-    public MetadataTransactionContext beginTransaction() throws RemoteException, ACIDException {
-        JobId jobId = JobIdFactory.generateJobId();
-        metadataNode.beginTransaction(jobId);
-        return new MetadataTransactionContext(jobId);
-    }
-
-    @Override
-    public void commitTransaction(MetadataTransactionContext ctx) throws RemoteException, ACIDException {
-        metadataNode.commitTransaction(ctx.getJobId());
-        cache.commit(ctx);
-    }
-
-    @Override
-    public void abortTransaction(MetadataTransactionContext ctx) throws RemoteException, ACIDException {
-        metadataNode.abortTransaction(ctx.getJobId());
-    }
-
-    @Override
-    public void lock(MetadataTransactionContext ctx, byte lockMode) throws RemoteException, ACIDException {
-        metadataNode.lock(ctx.getJobId(), lockMode);
-    }
-
-    @Override
-    public void unlock(MetadataTransactionContext ctx) throws RemoteException, ACIDException {
-        metadataNode.unlock(ctx.getJobId());
-    }
-
-    @Override
-    public void addDataverse(MetadataTransactionContext ctx, Dataverse dataverse) throws MetadataException {
-        try {
-            metadataNode.addDataverse(ctx.getJobId(), dataverse);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.addDataverse(dataverse);
-    }
-
-    @Override
-    public void dropDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException {
-        try {
-            metadataNode.dropDataverse(ctx.getJobId(), dataverseName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.dropDataverse(dataverseName);
-    }
-
-    @Override
-    public List<Dataverse> getDataverses(MetadataTransactionContext ctx) throws MetadataException {
-        try {
-            return metadataNode.getDataverses(ctx.getJobId());
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public Dataverse getDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException {
-        // First look in the context to see if this transaction created the
-        // requested dataverse itself (but the dataverse is still uncommitted).
-        Dataverse dataverse = ctx.getDataverse(dataverseName);
-        if (dataverse != null) {
-            // Don't add this dataverse to the cache, since it is still
-            // uncommitted.
-            return dataverse;
-        }
-        if (ctx.dataverseIsDropped(dataverseName)) {
-            // Dataverse has been dropped by this transaction but could still be
-            // in the cache.
-            return null;
-        }
-        dataverse = cache.getDataverse(dataverseName);
-        if (dataverse != null) {
-            // Dataverse is already in the cache, don't add it again.
-            return dataverse;
-        }
-        try {
-            dataverse = metadataNode.getDataverse(ctx.getJobId(), dataverseName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // We fetched the dataverse from the MetadataNode. Add it to the cache
-        // when this transaction commits.
-        if (dataverse != null) {
-            ctx.addDataverse(dataverse);
-        }
-        return dataverse;
-    }
-
-    @Override
-    public List<Dataset> getDataverseDatasets(MetadataTransactionContext ctx, String dataverseName)
-            throws MetadataException {
-        List<Dataset> dataverseDatasets;
-        try {
-            // Assuming that the transaction can read its own writes on the
-            // metadata node.
-            dataverseDatasets = metadataNode.getDataverseDatasets(ctx.getJobId(), dataverseName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // Don't update the cache to avoid checking against the transaction's
-        // uncommitted datasets.
-        return dataverseDatasets;
-    }
-
-    @Override
-    public void addDataset(MetadataTransactionContext ctx, Dataset dataset) throws MetadataException {
-        // add dataset into metadataNode 
-        try {
-            metadataNode.addDataset(ctx.getJobId(), dataset);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-
-        // reflect the dataset into the cache
-        ctx.addDataset(dataset);
-    }
-
-    @Override
-    public void dropDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
-            throws MetadataException {
-        try {
-            metadataNode.dropDataset(ctx.getJobId(), dataverseName, datasetName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.dropDataset(dataverseName, datasetName);
-    }
-
-    @Override
-    public Dataset getDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
-            throws MetadataException {
-
-        // First look in the context to see if this transaction created the
-        // requested dataset itself (but the dataset is still uncommitted).
-        Dataset dataset = ctx.getDataset(dataverseName, datasetName);
-        if (dataset != null) {
-            // Don't add this dataverse to the cache, since it is still
-            // uncommitted.
-            return dataset;
-        }
-        if (ctx.datasetIsDropped(dataverseName, datasetName)) {
-            // Dataset has been dropped by this transaction but could still be
-            // in the cache.
-            return null;
-        }
-
-        dataset = cache.getDataset(dataverseName, datasetName);
-        if (dataset != null) {
-            // Dataset is already in the cache, don't add it again.
-            return dataset;
-        }
-        try {
-            dataset = metadataNode.getDataset(ctx.getJobId(), dataverseName, datasetName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // We fetched the dataset from the MetadataNode. Add it to the cache
-        // when this transaction commits.
-        if (dataset != null) {
-            ctx.addDataset(dataset);
-        }
-        return dataset;
-    }
-
-    @Override
-    public List<Index> getDatasetIndexes(MetadataTransactionContext ctx, String dataverseName, String datasetName)
-            throws MetadataException {
-        List<Index> datsetIndexes;
-        try {
-            datsetIndexes = metadataNode.getDatasetIndexes(ctx.getJobId(), dataverseName, datasetName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        return datsetIndexes;
-    }
-
-    @Override
-    public void addDatatype(MetadataTransactionContext ctx, Datatype datatype) throws MetadataException {
-        try {
-            metadataNode.addDatatype(ctx.getJobId(), datatype);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.addDatatype(datatype);
-    }
-
-    @Override
-    public void dropDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
-            throws MetadataException {
-        try {
-            metadataNode.dropDatatype(ctx.getJobId(), dataverseName, datatypeName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.dropDataDatatype(dataverseName, datatypeName);
-    }
-
-    @Override
-    public Datatype getDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
-            throws MetadataException {
-        // First look in the context to see if this transaction created the
-        // requested datatype itself (but the datatype is still uncommitted).
-        Datatype datatype = ctx.getDatatype(dataverseName, datatypeName);
-        if (datatype != null) {
-            // Don't add this dataverse to the cache, since it is still
-            // uncommitted.
-            return datatype;
-        }
-        if (ctx.datatypeIsDropped(dataverseName, datatypeName)) {
-            // Datatype has been dropped by this transaction but could still be
-            // in the cache.
-            return null;
-        }
-
-        datatype = cache.getDatatype(dataverseName, datatypeName);
-        if (datatype != null) {
-            // Datatype is already in the cache, don't add it again.
-            return datatype;
-        }
-        try {
-            datatype = metadataNode.getDatatype(ctx.getJobId(), dataverseName, datatypeName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // We fetched the datatype from the MetadataNode. Add it to the cache
-        // when this transaction commits.
-        if (datatype != null) {
-            ctx.addDatatype(datatype);
-        }
-        return datatype;
-    }
-
-    @Override
-    public void addIndex(MetadataTransactionContext ctx, Index index) throws MetadataException {
-        try {
-            metadataNode.addIndex(ctx.getJobId(), index);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.addIndex(index);
-    }
-
-    @Override
-    public void addAdapter(MetadataTransactionContext mdTxnCtx, DatasourceAdapter adapter) throws MetadataException {
-        try {
-            metadataNode.addAdapter(mdTxnCtx.getJobId(), adapter);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        mdTxnCtx.addAdapter(adapter);
-
-    }
-
-    @Override
-    public void dropIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
-            throws MetadataException {
-        try {
-            metadataNode.dropIndex(ctx.getJobId(), dataverseName, datasetName, indexName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.dropIndex(dataverseName, datasetName, indexName);
-    }
-
-    @Override
-    public Index getIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
-            throws MetadataException {
-
-        // First look in the context to see if this transaction created the
-        // requested index itself (but the index is still uncommitted).
-        Index index = ctx.getIndex(dataverseName, datasetName, indexName);
-        if (index != null) {
-            // Don't add this index to the cache, since it is still
-            // uncommitted.
-            return index;
-        }
-
-        if (ctx.indexIsDropped(dataverseName, datasetName, indexName)) {
-            // Index has been dropped by this transaction but could still be
-            // in the cache.
-            return null;
-        }
-
-        index = cache.getIndex(dataverseName, datasetName, indexName);
-        if (index != null) {
-            // Index is already in the cache, don't add it again.
-            return index;
-        }
-        try {
-            index = metadataNode.getIndex(ctx.getJobId(), dataverseName, datasetName, indexName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // We fetched the index from the MetadataNode. Add it to the cache
-        // when this transaction commits.
-        if (index != null) {
-            ctx.addIndex(index);
-        }
-        return index;
-    }
-
-    @Override
-    public void addNode(MetadataTransactionContext ctx, Node node) throws MetadataException {
-        try {
-            metadataNode.addNode(ctx.getJobId(), node);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addNodegroup(MetadataTransactionContext ctx, NodeGroup nodeGroup) throws MetadataException {
-        try {
-            metadataNode.addNodeGroup(ctx.getJobId(), nodeGroup);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.addNogeGroup(nodeGroup);
-    }
-
-    @Override
-    public void dropNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException {
-        try {
-            metadataNode.dropNodegroup(ctx.getJobId(), nodeGroupName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.dropNodeGroup(nodeGroupName);
-    }
-
-    @Override
-    public NodeGroup getNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException {
-        // First look in the context to see if this transaction created the
-        // requested dataverse itself (but the dataverse is still uncommitted).
-        NodeGroup nodeGroup = ctx.getNodeGroup(nodeGroupName);
-        if (nodeGroup != null) {
-            // Don't add this dataverse to the cache, since it is still
-            // uncommitted.
-            return nodeGroup;
-        }
-        if (ctx.nodeGroupIsDropped(nodeGroupName)) {
-            // NodeGroup has been dropped by this transaction but could still be
-            // in the cache.
-            return null;
-        }
-        nodeGroup = cache.getNodeGroup(nodeGroupName);
-        if (nodeGroup != null) {
-            // NodeGroup is already in the cache, don't add it again.
-            return nodeGroup;
-        }
-        try {
-            nodeGroup = metadataNode.getNodeGroup(ctx.getJobId(), nodeGroupName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // We fetched the nodeGroup from the MetadataNode. Add it to the cache
-        // when this transaction commits.
-        if (nodeGroup != null) {
-            ctx.addNogeGroup(nodeGroup);
-        }
-        return nodeGroup;
-    }
-
-    @Override
-    public void addFunction(MetadataTransactionContext mdTxnCtx, Function function) throws MetadataException {
-        try {
-            metadataNode.addFunction(mdTxnCtx.getJobId(), function);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        mdTxnCtx.addFunction(function);
-    }
-
-    @Override
-    public void dropFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
-            throws MetadataException {
-        try {
-            metadataNode.dropFunction(ctx.getJobId(), functionSignature);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        ctx.dropFunction(functionSignature);
-    }
-
-    @Override
-    public Function getFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
-            throws MetadataException {
-        // First look in the context to see if this transaction created the
-        // requested dataset itself (but the dataset is still uncommitted).
-        Function function = ctx.getFunction(functionSignature);
-        if (function != null) {
-            // Don't add this dataverse to the cache, since it is still
-            // uncommitted.
-            return function;
-        }
-        if (ctx.functionIsDropped(functionSignature)) {
-            // Function has been dropped by this transaction but could still be
-            // in the cache.
-            return null;
-        }
-        if (ctx.getDataverse(functionSignature.getNamespace()) != null) {
-            // This transaction has dropped and subsequently created the same
-            // dataverse.
-            return null;
-        }
-        function = cache.getFunction(functionSignature);
-        if (function != null) {
-            // Function is already in the cache, don't add it again.
-            return function;
-        }
-        try {
-            function = metadataNode.getFunction(ctx.getJobId(), functionSignature);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // We fetched the function from the MetadataNode. Add it to the cache
-        // when this transaction commits.
-        if (function != null) {
-            ctx.addFunction(function);
-        }
-        return function;
-
-    }
-
-    @Override
-    public void initializeDatasetIdFactory(MetadataTransactionContext ctx) throws MetadataException {
-        try {
-            metadataNode.initializeDatasetIdFactory(ctx.getJobId());
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public List<Function> getDataverseFunctions(MetadataTransactionContext ctx, String dataverseName)
-            throws MetadataException {
-        List<Function> dataverseFunctions;
-        try {
-            // Assuming that the transaction can read its own writes on the
-            // metadata node.
-            dataverseFunctions = metadataNode.getDataverseFunctions(ctx.getJobId(), dataverseName);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        // Don't update the cache to avoid checking against the transaction's
-        // uncommitted functions.
-        return dataverseFunctions;
-    }
-
-    @Override
-    public void dropAdapter(MetadataTransactionContext ctx, String dataverseName, String name) throws MetadataException {
-        try {
-            metadataNode.dropAdapter(ctx.getJobId(), dataverseName, name);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public DatasourceAdapter getAdapter(MetadataTransactionContext ctx, String dataverseName, String name)
-            throws MetadataException {
-        DatasourceAdapter adapter = null;
-        try {
-            adapter = metadataNode.getAdapter(ctx.getJobId(), dataverseName, name);
-        } catch (RemoteException e) {
-            throw new MetadataException(e);
-        }
-        return adapter;
-    }
-
-    @Override
-    public void acquireWriteLatch() {
-        metadataLatch.writeLock().lock();
-    }
-
-    @Override
-    public void releaseWriteLatch() {
-        metadataLatch.writeLock().unlock();
-    }
-
-    @Override
-    public void acquireReadLatch() {
-        metadataLatch.readLock().lock();
-    }
-
-    @Override
-    public void releaseReadLatch() {
-        metadataLatch.readLock().unlock();
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
deleted file mode 100644
index d9c6ed4..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/MetadataNode.java
+++ /dev/null
@@ -1,1124 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata;
-
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.List;
-
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.common.context.AsterixAppRuntimeContext;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.metadata.api.IMetadataIndex;
-import edu.uci.ics.asterix.metadata.api.IMetadataNode;
-import edu.uci.ics.asterix.metadata.api.IValueExtractor;
-import edu.uci.ics.asterix.metadata.bootstrap.MetadataPrimaryIndexes;
-import edu.uci.ics.asterix.metadata.bootstrap.MetadataSecondaryIndexes;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.Node;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.DatasetTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.DatasourceAdapterTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.DatatypeTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.DataverseTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.FunctionTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.IndexTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.NodeGroupTupleTranslator;
-import edu.uci.ics.asterix.metadata.entitytupletranslators.NodeTupleTranslator;
-import edu.uci.ics.asterix.metadata.valueextractors.DatasetNameValueExtractor;
-import edu.uci.ics.asterix.metadata.valueextractors.DatatypeNameValueExtractor;
-import edu.uci.ics.asterix.metadata.valueextractors.MetadataEntityValueExtractor;
-import edu.uci.ics.asterix.metadata.valueextractors.NestedDatatypeNameValueExtractor;
-import edu.uci.ics.asterix.metadata.valueextractors.TupleCopyValueExtractor;
-import edu.uci.ics.asterix.om.base.AMutableString;
-import edu.uci.ics.asterix.om.base.AString;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexModificationOperationCallback;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.SecondaryIndexModificationOperationCallback;
-import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetId;
-import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetIdFactory;
-import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext.TransactionType;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
-import edu.uci.ics.hyracks.dataflow.common.comm.io.ArrayTupleReference;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.dataflow.common.util.TupleUtils;
-import edu.uci.ics.hyracks.storage.am.btree.exceptions.BTreeDuplicateKeyException;
-import edu.uci.ics.hyracks.storage.am.btree.impls.RangePredicate;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndex;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexAccessor;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexCursor;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexLifecycleManager;
-import edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallback;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexCursor;
-import edu.uci.ics.hyracks.storage.am.common.api.TreeIndexException;
-import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallback;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOperation;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.MultiComparator;
-import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
-
-public class MetadataNode implements IMetadataNode {
-    private static final long serialVersionUID = 1L;
-
-    private static final DatasetId METADATA_DATASET_ID = new DatasetId(MetadataPrimaryIndexes.METADATA_DATASET_ID);
-
-    private IIndexLifecycleManager indexLifecycleManager;
-    private TransactionSubsystem transactionSubsystem;
-
-    public static final MetadataNode INSTANCE = new MetadataNode();
-
-    private MetadataNode() {
-        super();
-    }
-
-    public void initialize(AsterixAppRuntimeContext runtimeContext) {
-        this.transactionSubsystem = runtimeContext.getTransactionSubsystem();
-        this.indexLifecycleManager = runtimeContext.getIndexLifecycleManager();
-    }
-
-    @Override
-    public void beginTransaction(JobId transactionId) throws ACIDException, RemoteException {
-        transactionSubsystem.getTransactionManager().beginTransaction(transactionId);
-    }
-
-    @Override
-    public void commitTransaction(JobId jobId) throws RemoteException, ACIDException {
-        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        transactionSubsystem.getTransactionManager().commitTransaction(txnCtx, new DatasetId(-1), -1);
-    }
-
-    @Override
-    public void abortTransaction(JobId jobId) throws RemoteException, ACIDException {
-        try {
-            TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-            transactionSubsystem.getTransactionManager().abortTransaction(txnCtx, new DatasetId(-1), -1);
-        } catch (ACIDException e) {
-            e.printStackTrace();
-            throw e;
-        }
-    }
-
-    @Override
-    public void lock(JobId jobId, byte lockMode) throws ACIDException, RemoteException {
-        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        transactionSubsystem.getLockManager().lock(METADATA_DATASET_ID, -1, lockMode, txnCtx);
-    }
-
-    @Override
-    public void unlock(JobId jobId) throws ACIDException, RemoteException {
-        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        transactionSubsystem.getLockManager().unlock(METADATA_DATASET_ID, -1, txnCtx);
-    }
-
-    @Override
-    public void addDataverse(JobId jobId, Dataverse dataverse) throws MetadataException, RemoteException {
-        try {
-            DataverseTupleTranslator tupleReaderWriter = new DataverseTupleTranslator(true);
-            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(dataverse);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, tuple);
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A dataverse with this name " + dataverse.getDataverseName()
-                    + " already exists.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addDataset(JobId jobId, Dataset dataset) throws MetadataException, RemoteException {
-        try {
-            // Insert into the 'dataset' dataset.
-            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(true);
-            ITupleReference datasetTuple = tupleReaderWriter.getTupleFromMetadataEntity(dataset);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, datasetTuple);
-            if (dataset.getDatasetType() == DatasetType.INTERNAL || dataset.getDatasetType() == DatasetType.FEED) {
-                // Add the primary index for the dataset.
-                InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails();
-                Index primaryIndex = new Index(dataset.getDataverseName(), dataset.getDatasetName(),
-                        dataset.getDatasetName(), IndexType.BTREE, id.getPrimaryKey(), true, dataset.getPendingOp());
-
-                addIndex(jobId, primaryIndex);
-                ITupleReference nodeGroupTuple = createTuple(id.getNodeGroupName(), dataset.getDataverseName(),
-                        dataset.getDatasetName());
-                insertTupleIntoIndex(jobId, MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, nodeGroupTuple);
-            }
-            // Add entry in datatype secondary index.
-            ITupleReference dataTypeTuple = createTuple(dataset.getDataverseName(), dataset.getItemTypeName(),
-                    dataset.getDatasetName());
-            insertTupleIntoIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, dataTypeTuple);
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A dataset with this name " + dataset.getDatasetName()
-                    + " already exists in dataverse '" + dataset.getDataverseName() + "'.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addIndex(JobId jobId, Index index) throws MetadataException, RemoteException {
-        try {
-            IndexTupleTranslator tupleWriter = new IndexTupleTranslator(true);
-            ITupleReference tuple = tupleWriter.getTupleFromMetadataEntity(index);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, tuple);
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("An index with name '" + index.getIndexName() + "' already exists.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addNode(JobId jobId, Node node) throws MetadataException, RemoteException {
-        try {
-            NodeTupleTranslator tupleReaderWriter = new NodeTupleTranslator(true);
-            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(node);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.NODE_DATASET, tuple);
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A node with name '" + node.getNodeName() + "' already exists.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addNodeGroup(JobId jobId, NodeGroup nodeGroup) throws MetadataException, RemoteException {
-        try {
-            NodeGroupTupleTranslator tupleReaderWriter = new NodeGroupTupleTranslator(true);
-            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(nodeGroup);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A nodegroup with name '" + nodeGroup.getNodeGroupName() + "' already exists.",
-                    e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addDatatype(JobId jobId, Datatype datatype) throws MetadataException, RemoteException {
-        try {
-            DatatypeTupleTranslator tupleReaderWriter = new DatatypeTupleTranslator(jobId, this, true);
-            ITupleReference tuple = tupleReaderWriter.getTupleFromMetadataEntity(datatype);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A datatype with name '" + datatype.getDatatypeName() + "' already exists.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addFunction(JobId jobId, Function function) throws MetadataException, RemoteException {
-        try {
-            // Insert into the 'function' dataset.
-            FunctionTupleTranslator tupleReaderWriter = new FunctionTupleTranslator(true);
-            ITupleReference functionTuple = tupleReaderWriter.getTupleFromMetadataEntity(function);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, functionTuple);
-
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A function with this name " + function.getName() + " and arity "
-                    + function.getArity() + " already exists in dataverse '" + function.getDataverseName() + "'.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    public void insertIntoDatatypeSecondaryIndex(JobId jobId, String dataverseName, String nestedTypeName,
-            String topTypeName) throws Exception {
-        ITupleReference tuple = createTuple(dataverseName, nestedTypeName, topTypeName);
-        insertTupleIntoIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, tuple);
-    }
-
-    private void insertTupleIntoIndex(JobId jobId, IMetadataIndex metadataIndex, ITupleReference tuple)
-            throws Exception {
-        long resourceID = metadataIndex.getResourceID();
-        ILSMIndex lsmIndex = (ILSMIndex) indexLifecycleManager.getIndex(resourceID);
-        indexLifecycleManager.open(resourceID);
-
-        //prepare a Callback for logging
-        IModificationOperationCallback modCallback = createIndexModificationCallback(jobId, resourceID, metadataIndex,
-                lsmIndex, IndexOperation.INSERT);
-
-        IIndexAccessor indexAccessor = lsmIndex.createAccessor(modCallback, NoOpOperationCallback.INSTANCE);
-
-        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        txnCtx.setTransactionType(TransactionType.READ_WRITE);
-
-        // TODO: fix exceptions once new BTree exception model is in hyracks.
-        indexAccessor.insert(tuple);
-
-        indexLifecycleManager.close(resourceID);
-    }
-
-    private IModificationOperationCallback createIndexModificationCallback(JobId jobId, long resourceId,
-            IMetadataIndex metadataIndex, ILSMIndex lsmIndex, IndexOperation indexOp) throws Exception {
-        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-
-        if (metadataIndex.isPrimaryIndex()) {
-            return new PrimaryIndexModificationOperationCallback(metadataIndex.getDatasetId().getId(),
-                    metadataIndex.getPrimaryKeyIndexes(), txnCtx, transactionSubsystem.getLockManager(),
-                    transactionSubsystem, resourceId, ResourceType.LSM_BTREE, indexOp);
-        } else {
-            return new SecondaryIndexModificationOperationCallback(metadataIndex.getDatasetId().getId(),
-                    metadataIndex.getPrimaryKeyIndexes(), txnCtx, transactionSubsystem.getLockManager(),
-                    transactionSubsystem, resourceId, ResourceType.LSM_BTREE, indexOp);
-        }
-    }
-
-    @Override
-    public void dropDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException {
-        try {
-            List<Dataset> dataverseDatasets;
-
-            dataverseDatasets = getDataverseDatasets(jobId, dataverseName);
-            if (dataverseDatasets != null && dataverseDatasets.size() > 0) {
-                // Drop all datasets in this dataverse.
-                for (int i = 0; i < dataverseDatasets.size(); i++) {
-                    dropDataset(jobId, dataverseName, dataverseDatasets.get(i).getDatasetName());
-                }
-            }
-            List<Datatype> dataverseDatatypes;
-            // As a side effect, acquires an S lock on the 'datatype' dataset
-            // on behalf of txnId.
-            dataverseDatatypes = getDataverseDatatypes(jobId, dataverseName);
-            if (dataverseDatatypes != null && dataverseDatatypes.size() > 0) {
-                // Drop all types in this dataverse.
-                for (int i = 0; i < dataverseDatatypes.size(); i++) {
-                    forceDropDatatype(jobId, dataverseName, dataverseDatatypes.get(i).getDatatypeName());
-                }
-            }
-
-            // As a side effect, acquires an S lock on the 'Function' dataset
-            // on behalf of txnId.
-            List<Function> dataverseFunctions = getDataverseFunctions(jobId, dataverseName);
-            if (dataverseFunctions != null && dataverseFunctions.size() > 0) {
-                // Drop all functions in this dataverse.
-                for (Function function : dataverseFunctions) {
-                    dropFunction(jobId, new FunctionSignature(dataverseName, function.getName(), function.getArity()));
-                }
-            }
-
-            // As a side effect, acquires an S lock on the 'Adapter' dataset
-            // on behalf of txnId.
-            List<DatasourceAdapter> dataverseAdapters = getDataverseAdapters(jobId, dataverseName);
-            if (dataverseAdapters != null && dataverseAdapters.size() > 0) {
-                // Drop all functions in this dataverse.
-                for (DatasourceAdapter adapter : dataverseAdapters) {
-                    dropAdapter(jobId, dataverseName, adapter.getAdapterIdentifier().getAdapterName());
-                }
-            }
-
-            // Delete the dataverse entry from the 'dataverse' dataset.
-            ITupleReference searchKey = createTuple(dataverseName);
-            // As a side effect, acquires an S lock on the 'dataverse' dataset
-            // on behalf of txnId.
-            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, searchKey);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, tuple);
-
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new MetadataException("Cannot drop dataverse '" + dataverseName + "' because it doesn't exist.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void dropDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
-            RemoteException {
-        Dataset dataset;
-        try {
-            dataset = getDataset(jobId, dataverseName, datasetName);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-        if (dataset == null) {
-            throw new MetadataException("Cannot drop dataset '" + datasetName + "' because it doesn't exist.");
-        }
-        try {
-            // Delete entry from the 'datasets' dataset.
-            ITupleReference searchKey = createTuple(dataverseName, datasetName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'dataset' dataset.
-            try {
-                ITupleReference datasetTuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATASET_DATASET,
-                        searchKey);
-                deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, datasetTuple);
-            } catch (TreeIndexException tie) {
-                //ignore this exception and continue deleting all relevant artifacts. 
-            }
-
-            // Delete entry from secondary index 'group'.
-            if (dataset.getDatasetType() == DatasetType.INTERNAL || dataset.getDatasetType() == DatasetType.FEED) {
-                InternalDatasetDetails id = (InternalDatasetDetails) dataset.getDatasetDetails();
-                ITupleReference groupNameSearchKey = createTuple(id.getNodeGroupName(), dataverseName, datasetName);
-                // Searches the index for the tuple to be deleted. Acquires an S
-                // lock on the GROUPNAME_ON_DATASET_INDEX index.
-                try {
-                    ITupleReference groupNameTuple = getTupleToBeDeleted(jobId,
-                            MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, groupNameSearchKey);
-                    deleteTupleFromIndex(jobId, MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, groupNameTuple);
-                } catch (TreeIndexException tie) {
-                    //ignore this exception and continue deleting all relevant artifacts.
-                }
-            }
-            // Delete entry from secondary index 'type'.
-            ITupleReference dataTypeSearchKey = createTuple(dataverseName, dataset.getItemTypeName(), datasetName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the DATATYPENAME_ON_DATASET_INDEX index.
-            try {
-                ITupleReference dataTypeTuple = getTupleToBeDeleted(jobId,
-                        MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, dataTypeSearchKey);
-                deleteTupleFromIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, dataTypeTuple);
-            } catch (TreeIndexException tie) {
-                //ignore this exception and continue deleting all relevant artifacts.
-            }
-
-            // Delete entry(s) from the 'indexes' dataset.
-            if (dataset.getDatasetType() == DatasetType.INTERNAL || dataset.getDatasetType() == DatasetType.FEED) {
-                List<Index> datasetIndexes = getDatasetIndexes(jobId, dataverseName, datasetName);
-                if (datasetIndexes != null) {
-                    for (Index index : datasetIndexes) {
-                        dropIndex(jobId, dataverseName, datasetName, index.getIndexName());
-                    }
-                }
-            }
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void dropIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datasetName, indexName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'index' dataset.
-            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, tuple);
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new MetadataException("Cannot drop index '" + datasetName + "." + indexName
-                    + "' because it doesn't exist.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void dropNodegroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException {
-        List<String> datasetNames;
-        try {
-            datasetNames = getDatasetNamesPartitionedOnThisNodeGroup(jobId, nodeGroupName);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-        if (!datasetNames.isEmpty()) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("Nodegroup '" + nodeGroupName
-                    + "' cannot be dropped; it was used for partitioning these datasets:");
-            for (int i = 0; i < datasetNames.size(); i++)
-                sb.append("\n" + (i + 1) + "- " + datasetNames.get(i) + ".");
-            throw new MetadataException(sb.toString());
-        }
-        try {
-            ITupleReference searchKey = createTuple(nodeGroupName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'nodegroup' dataset.
-            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, searchKey);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, tuple);
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new MetadataException("Cannot drop nodegroup '" + nodeGroupName + "' because it doesn't exist", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void dropDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
-            RemoteException {
-        List<String> datasetNames;
-        List<String> usedDatatypes;
-        try {
-            datasetNames = getDatasetNamesDeclaredByThisDatatype(jobId, dataverseName, datatypeName);
-            usedDatatypes = getDatatypeNamesUsingThisDatatype(jobId, dataverseName, datatypeName);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-        // Check whether type is being used by datasets.
-        if (!datasetNames.isEmpty()) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("Cannot drop type '" + datatypeName + "'; it was used when creating these datasets:");
-            for (int i = 0; i < datasetNames.size(); i++)
-                sb.append("\n" + (i + 1) + "- " + datasetNames.get(i) + ".");
-            throw new MetadataException(sb.toString());
-        }
-        // Check whether type is being used by other types.
-        if (!usedDatatypes.isEmpty()) {
-            StringBuilder sb = new StringBuilder();
-            sb.append("Cannot drop type '" + datatypeName + "'; it is used in these datatypes:");
-            for (int i = 0; i < usedDatatypes.size(); i++)
-                sb.append("\n" + (i + 1) + "- " + usedDatatypes.get(i) + ".");
-            throw new MetadataException(sb.toString());
-        }
-        // Delete the datatype entry, including all it's nested types.
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'datatype' dataset.
-            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey);
-            // This call uses the secondary index on datatype. Get nested types before deleting entry from secondary index.
-            List<String> nestedTypes = getNestedDatatypeNames(jobId, dataverseName, datatypeName);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
-            deleteFromDatatypeSecondaryIndex(jobId, dataverseName, datatypeName);
-            for (String nestedType : nestedTypes) {
-                Datatype dt = getDatatype(jobId, dataverseName, nestedType);
-                if (dt != null && dt.getIsAnonymous()) {
-                    dropDatatype(jobId, dataverseName, dt.getDatatypeName());
-                }
-            }
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new MetadataException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    private void forceDropDatatype(JobId jobId, String dataverseName, String datatypeName) throws AsterixException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'datatype' dataset.
-            ITupleReference tuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, tuple);
-            deleteFromDatatypeSecondaryIndex(jobId, dataverseName, datatypeName);
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new AsterixException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
-        } catch (AsterixException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new AsterixException(e);
-        }
-    }
-
-    private void deleteFromDatatypeSecondaryIndex(JobId jobId, String dataverseName, String datatypeName)
-            throws AsterixException {
-        try {
-            List<String> nestedTypes = getNestedDatatypeNames(jobId, dataverseName, datatypeName);
-            for (String nestedType : nestedTypes) {
-                ITupleReference searchKey = createTuple(dataverseName, nestedType, datatypeName);
-                // Searches the index for the tuple to be deleted. Acquires an S
-                // lock on the DATATYPENAME_ON_DATATYPE_INDEX index.
-                ITupleReference tuple = getTupleToBeDeleted(jobId,
-                        MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, searchKey);
-                deleteTupleFromIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, tuple);
-            }
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new AsterixException("Cannot drop type '" + datatypeName + "' because it doesn't exist", e);
-        } catch (AsterixException e) {
-            throw e;
-        } catch (Exception e) {
-            throw new AsterixException(e);
-        }
-    }
-
-    private void deleteTupleFromIndex(JobId jobId, IMetadataIndex metadataIndex, ITupleReference tuple)
-            throws Exception {
-        long resourceID = metadataIndex.getResourceID();
-        ILSMIndex lsmIndex = (ILSMIndex) indexLifecycleManager.getIndex(resourceID);
-        indexLifecycleManager.open(resourceID);
-        //prepare a Callback for logging
-        IModificationOperationCallback modCallback = createIndexModificationCallback(jobId, resourceID, metadataIndex,
-                lsmIndex, IndexOperation.DELETE);
-        IIndexAccessor indexAccessor = lsmIndex.createAccessor(modCallback, NoOpOperationCallback.INSTANCE);
-
-        TransactionContext txnCtx = transactionSubsystem.getTransactionManager().getTransactionContext(jobId);
-        txnCtx.setTransactionType(TransactionType.READ_WRITE);
-
-        indexAccessor.delete(tuple);
-        indexLifecycleManager.close(resourceID);
-    }
-
-    @Override
-    public List<Dataverse> getDataverses(JobId jobId) throws MetadataException, RemoteException {
-        try {
-            DataverseTupleTranslator tupleReaderWriter = new DataverseTupleTranslator(false);
-            IValueExtractor<Dataverse> valueExtractor = new MetadataEntityValueExtractor<Dataverse>(tupleReaderWriter);
-            List<Dataverse> results = new ArrayList<Dataverse>();
-            searchIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, null, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-
-    }
-
-    @Override
-    public Dataverse getDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException {
-
-        try {
-            ITupleReference searchKey = createTuple(dataverseName);
-            DataverseTupleTranslator tupleReaderWriter = new DataverseTupleTranslator(false);
-            IValueExtractor<Dataverse> valueExtractor = new MetadataEntityValueExtractor<Dataverse>(tupleReaderWriter);
-            List<Dataverse> results = new ArrayList<Dataverse>();
-            searchIndex(jobId, MetadataPrimaryIndexes.DATAVERSE_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-
-    }
-
-    @Override
-    public List<Dataset> getDataverseDatasets(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName);
-            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(false);
-            IValueExtractor<Dataset> valueExtractor = new MetadataEntityValueExtractor<Dataset>(tupleReaderWriter);
-            List<Dataset> results = new ArrayList<Dataset>();
-            searchIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, searchKey, valueExtractor, results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    private List<Datatype> getDataverseDatatypes(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName);
-            DatatypeTupleTranslator tupleReaderWriter = new DatatypeTupleTranslator(jobId, this, false);
-            IValueExtractor<Datatype> valueExtractor = new MetadataEntityValueExtractor<Datatype>(tupleReaderWriter);
-            List<Datatype> results = new ArrayList<Datatype>();
-            searchIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey, valueExtractor, results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public Dataset getDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datasetName);
-            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(false);
-            List<Dataset> results = new ArrayList<Dataset>();
-            IValueExtractor<Dataset> valueExtractor = new MetadataEntityValueExtractor<Dataset>(tupleReaderWriter);
-            searchIndex(jobId, MetadataPrimaryIndexes.DATASET_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    private List<String> getDatasetNamesDeclaredByThisDatatype(JobId jobId, String dataverseName, String datatypeName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
-            List<String> results = new ArrayList<String>();
-            IValueExtractor<String> valueExtractor = new DatasetNameValueExtractor();
-            searchIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX, searchKey, valueExtractor,
-                    results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    public List<String> getDatatypeNamesUsingThisDatatype(JobId jobId, String dataverseName, String datatypeName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
-            List<String> results = new ArrayList<String>();
-            IValueExtractor<String> valueExtractor = new DatatypeNameValueExtractor(dataverseName, this);
-            searchIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, searchKey, valueExtractor,
-                    results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    private List<String> getNestedDatatypeNames(JobId jobId, String dataverseName, String datatypeName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName);
-            List<String> results = new ArrayList<String>();
-            IValueExtractor<String> valueExtractor = new NestedDatatypeNameValueExtractor(datatypeName);
-            searchIndex(jobId, MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX, searchKey, valueExtractor,
-                    results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    public List<String> getDatasetNamesPartitionedOnThisNodeGroup(JobId jobId, String nodegroup)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(nodegroup);
-            List<String> results = new ArrayList<String>();
-            IValueExtractor<String> valueExtractor = new DatasetNameValueExtractor();
-            searchIndex(jobId, MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX, searchKey, valueExtractor, results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public Index getIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datasetName, indexName);
-            IndexTupleTranslator tupleReaderWriter = new IndexTupleTranslator(false);
-            IValueExtractor<Index> valueExtractor = new MetadataEntityValueExtractor<Index>(tupleReaderWriter);
-            List<Index> results = new ArrayList<Index>();
-            searchIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public List<Index> getDatasetIndexes(JobId jobId, String dataverseName, String datasetName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datasetName);
-            IndexTupleTranslator tupleReaderWriter = new IndexTupleTranslator(false);
-            IValueExtractor<Index> valueExtractor = new MetadataEntityValueExtractor<Index>(tupleReaderWriter);
-            List<Index> results = new ArrayList<Index>();
-            searchIndex(jobId, MetadataPrimaryIndexes.INDEX_DATASET, searchKey, valueExtractor, results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public Datatype getDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, datatypeName);
-            DatatypeTupleTranslator tupleReaderWriter = new DatatypeTupleTranslator(jobId, this, false);
-            IValueExtractor<Datatype> valueExtractor = new MetadataEntityValueExtractor<Datatype>(tupleReaderWriter);
-            List<Datatype> results = new ArrayList<Datatype>();
-            searchIndex(jobId, MetadataPrimaryIndexes.DATATYPE_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public NodeGroup getNodeGroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(nodeGroupName);
-            NodeGroupTupleTranslator tupleReaderWriter = new NodeGroupTupleTranslator(false);
-            IValueExtractor<NodeGroup> valueExtractor = new MetadataEntityValueExtractor<NodeGroup>(tupleReaderWriter);
-            List<NodeGroup> results = new ArrayList<NodeGroup>();
-            searchIndex(jobId, MetadataPrimaryIndexes.NODEGROUP_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public Function getFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(functionSignature.getNamespace(), functionSignature.getName(), ""
-                    + functionSignature.getArity());
-            FunctionTupleTranslator tupleReaderWriter = new FunctionTupleTranslator(false);
-            List<Function> results = new ArrayList<Function>();
-            IValueExtractor<Function> valueExtractor = new MetadataEntityValueExtractor<Function>(tupleReaderWriter);
-            searchIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void dropFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException,
-            RemoteException {
-
-        Function function;
-        try {
-            function = getFunction(jobId, functionSignature);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-        if (function == null) {
-            throw new MetadataException("Cannot drop function '" + functionSignature.toString()
-                    + "' because it doesn't exist.");
-        }
-        try {
-            // Delete entry from the 'function' dataset.
-            ITupleReference searchKey = createTuple(functionSignature.getNamespace(), functionSignature.getName());
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'function' dataset.
-            ITupleReference datasetTuple = getTupleToBeDeleted(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET,
-                    searchKey);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, datasetTuple);
-
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new MetadataException("There is no function with the name " + functionSignature.getName()
-                    + " and arity " + functionSignature.getArity(), e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    private ITupleReference getTupleToBeDeleted(JobId jobId, IMetadataIndex metadataIndex, ITupleReference searchKey)
-            throws Exception {
-        IValueExtractor<ITupleReference> valueExtractor = new TupleCopyValueExtractor(metadataIndex.getTypeTraits());
-        List<ITupleReference> results = new ArrayList<ITupleReference>();
-        searchIndex(jobId, metadataIndex, searchKey, valueExtractor, results);
-        if (results.isEmpty()) {
-            // TODO: Temporarily a TreeIndexException to make it get caught by
-            // caller in the appropriate catch block.
-            throw new TreeIndexException("Could not find entry to be deleted.");
-        }
-        // There should be exactly one result returned from the search.
-        return results.get(0);
-    }
-
-    //Debugging Method
-    public String printMetadata() {
-
-        StringBuilder sb = new StringBuilder();
-        try {
-            IMetadataIndex index = MetadataPrimaryIndexes.DATAVERSE_DATASET;
-            long resourceID = index.getResourceID();
-            IIndex indexInstance = indexLifecycleManager.getIndex(resourceID);
-            indexLifecycleManager.open(resourceID);
-            IIndexAccessor indexAccessor = indexInstance.createAccessor(NoOpOperationCallback.INSTANCE,
-                    NoOpOperationCallback.INSTANCE);
-            ITreeIndexCursor rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
-
-            RangePredicate rangePred = null;
-            rangePred = new RangePredicate(null, null, true, true, null, null);
-            indexAccessor.search(rangeCursor, rangePred);
-            try {
-                while (rangeCursor.hasNext()) {
-                    rangeCursor.next();
-                    sb.append(TupleUtils.printTuple(rangeCursor.getTuple(),
-                            new ISerializerDeserializer[] { AqlSerializerDeserializerProvider.INSTANCE
-                                    .getSerializerDeserializer(BuiltinType.ASTRING) }));
-                }
-            } finally {
-                rangeCursor.close();
-            }
-            indexLifecycleManager.close(resourceID);
-
-            index = MetadataPrimaryIndexes.DATASET_DATASET;
-            resourceID = index.getResourceID();
-            indexInstance = indexLifecycleManager.getIndex(resourceID);
-            indexLifecycleManager.open(resourceID);
-            indexAccessor = indexInstance
-                    .createAccessor(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE);
-            rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
-
-            rangePred = null;
-            rangePred = new RangePredicate(null, null, true, true, null, null);
-            indexAccessor.search(rangeCursor, rangePred);
-            try {
-                while (rangeCursor.hasNext()) {
-                    rangeCursor.next();
-                    sb.append(TupleUtils.printTuple(rangeCursor.getTuple(), new ISerializerDeserializer[] {
-                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING),
-                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING) }));
-                }
-            } finally {
-                rangeCursor.close();
-            }
-            indexLifecycleManager.close(resourceID);
-
-            index = MetadataPrimaryIndexes.INDEX_DATASET;
-            resourceID = index.getResourceID();
-            indexInstance = indexLifecycleManager.getIndex(resourceID);
-            indexLifecycleManager.open(resourceID);
-            indexAccessor = indexInstance
-                    .createAccessor(NoOpOperationCallback.INSTANCE, NoOpOperationCallback.INSTANCE);
-            rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
-
-            rangePred = null;
-            rangePred = new RangePredicate(null, null, true, true, null, null);
-            indexAccessor.search(rangeCursor, rangePred);
-            try {
-                while (rangeCursor.hasNext()) {
-                    rangeCursor.next();
-                    sb.append(TupleUtils.printTuple(rangeCursor.getTuple(), new ISerializerDeserializer[] {
-                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING),
-                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING),
-                            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(BuiltinType.ASTRING) }));
-                }
-            } finally {
-                rangeCursor.close();
-            }
-            indexLifecycleManager.close(resourceID);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return sb.toString();
-    }
-
-    private <ResultType> void searchIndex(JobId jobId, IMetadataIndex index, ITupleReference searchKey,
-            IValueExtractor<ResultType> valueExtractor, List<ResultType> results) throws Exception {
-        IBinaryComparatorFactory[] comparatorFactories = index.getKeyBinaryComparatorFactory();
-        long resourceID = index.getResourceID();
-        IIndex indexInstance = indexLifecycleManager.getIndex(resourceID);
-        indexLifecycleManager.open(resourceID);
-        IIndexAccessor indexAccessor = indexInstance.createAccessor(NoOpOperationCallback.INSTANCE,
-                NoOpOperationCallback.INSTANCE);
-        ITreeIndexCursor rangeCursor = (ITreeIndexCursor) indexAccessor.createSearchCursor();
-
-        IBinaryComparator[] searchCmps = null;
-        MultiComparator searchCmp = null;
-        RangePredicate rangePred = null;
-        if (searchKey != null) {
-            searchCmps = new IBinaryComparator[searchKey.getFieldCount()];
-            for (int i = 0; i < searchKey.getFieldCount(); i++) {
-                searchCmps[i] = comparatorFactories[i].createBinaryComparator();
-            }
-            searchCmp = new MultiComparator(searchCmps);
-        }
-        rangePred = new RangePredicate(searchKey, searchKey, true, true, searchCmp, searchCmp);
-        indexAccessor.search(rangeCursor, rangePred);
-
-        try {
-            while (rangeCursor.hasNext()) {
-                rangeCursor.next();
-                ResultType result = valueExtractor.getValue(jobId, rangeCursor.getTuple());
-                if (result != null) {
-                    results.add(result);
-                }
-            }
-        } finally {
-            rangeCursor.close();
-        }
-        indexLifecycleManager.close(resourceID);
-    }
-
-    @Override
-    public void initializeDatasetIdFactory(JobId jobId) throws MetadataException, RemoteException {
-        int mostRecentDatasetId = MetadataPrimaryIndexes.FIRST_AVAILABLE_USER_DATASET_ID;
-        long resourceID = MetadataPrimaryIndexes.DATASET_DATASET.getResourceID();
-        IIndex indexInstance = indexLifecycleManager.getIndex(resourceID);
-        try {
-            indexLifecycleManager.open(resourceID);
-            IIndexAccessor indexAccessor = indexInstance.createAccessor(NoOpOperationCallback.INSTANCE,
-                    NoOpOperationCallback.INSTANCE);
-            IIndexCursor rangeCursor = indexAccessor.createSearchCursor();
-
-            DatasetTupleTranslator tupleReaderWriter = new DatasetTupleTranslator(false);
-            IValueExtractor<Dataset> valueExtractor = new MetadataEntityValueExtractor<Dataset>(tupleReaderWriter);
-            RangePredicate rangePred = new RangePredicate(null, null, true, true, null, null);
-
-            indexAccessor.search(rangeCursor, rangePred);
-            int datasetId;
-
-            try {
-                while (rangeCursor.hasNext()) {
-                    rangeCursor.next();
-                    datasetId = ((Dataset) valueExtractor.getValue(jobId, rangeCursor.getTuple())).getDatasetId();
-                    if (mostRecentDatasetId < datasetId) {
-                        mostRecentDatasetId = datasetId;
-                    }
-                }
-            } finally {
-                rangeCursor.close();
-            }
-
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-
-        DatasetIdFactory.initialize(mostRecentDatasetId);
-    }
-
-    // TODO: Can use Hyrack's TupleUtils for this, once we switch to a newer
-    // Hyracks version.
-    public ITupleReference createTuple(String... fields) throws HyracksDataException {
-        ISerializerDeserializer<AString> stringSerde = AqlSerializerDeserializerProvider.INSTANCE
-                .getSerializerDeserializer(BuiltinType.ASTRING);
-        AMutableString aString = new AMutableString("");
-        ArrayTupleBuilder tupleBuilder = new ArrayTupleBuilder(fields.length);
-        for (String s : fields) {
-            aString.setValue(s);
-            stringSerde.serialize(aString, tupleBuilder.getDataOutput());
-            tupleBuilder.addFieldEndOffset();
-        }
-        ArrayTupleReference tuple = new ArrayTupleReference();
-        tuple.reset(tupleBuilder.getFieldEndOffsets(), tupleBuilder.getByteArray());
-        return tuple;
-    }
-
-    @Override
-    public List<Function> getDataverseFunctions(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName);
-            FunctionTupleTranslator tupleReaderWriter = new FunctionTupleTranslator(false);
-            IValueExtractor<Function> valueExtractor = new MetadataEntityValueExtractor<Function>(tupleReaderWriter);
-            List<Function> results = new ArrayList<Function>();
-            searchIndex(jobId, MetadataPrimaryIndexes.FUNCTION_DATASET, searchKey, valueExtractor, results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public void addAdapter(JobId jobId, DatasourceAdapter adapter) throws MetadataException, RemoteException {
-        try {
-            // Insert into the 'Adapter' dataset.
-            DatasourceAdapterTupleTranslator tupleReaderWriter = new DatasourceAdapterTupleTranslator(true);
-            ITupleReference adapterTuple = tupleReaderWriter.getTupleFromMetadataEntity(adapter);
-            insertTupleIntoIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, adapterTuple);
-
-        } catch (BTreeDuplicateKeyException e) {
-            throw new MetadataException("A adapter with this name " + adapter.getAdapterIdentifier().getAdapterName()
-                    + " already exists in dataverse '" + adapter.getAdapterIdentifier().getNamespace() + "'.", e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-
-    }
-
-    @Override
-    public void dropAdapter(JobId jobId, String dataverseName, String adapterName) throws MetadataException,
-            RemoteException {
-        DatasourceAdapter adapter;
-        try {
-            adapter = getAdapter(jobId, dataverseName, adapterName);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-        if (adapter == null) {
-            throw new MetadataException("Cannot drop adapter '" + adapter + "' because it doesn't exist.");
-        }
-        try {
-            // Delete entry from the 'Adapter' dataset.
-            ITupleReference searchKey = createTuple(dataverseName, adapterName);
-            // Searches the index for the tuple to be deleted. Acquires an S
-            // lock on the 'Adapter' dataset.
-            ITupleReference datasetTuple = getTupleToBeDeleted(jobId,
-                    MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey);
-            deleteTupleFromIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, datasetTuple);
-
-            // TODO: Change this to be a BTree specific exception, e.g.,
-            // BTreeKeyDoesNotExistException.
-        } catch (TreeIndexException e) {
-            throw new MetadataException("Cannot drop adapter '" + adapterName, e);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-
-    }
-
-    @Override
-    public DatasourceAdapter getAdapter(JobId jobId, String dataverseName, String adapterName)
-            throws MetadataException, RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName, adapterName);
-            DatasourceAdapterTupleTranslator tupleReaderWriter = new DatasourceAdapterTupleTranslator(false);
-            List<DatasourceAdapter> results = new ArrayList<DatasourceAdapter>();
-            IValueExtractor<DatasourceAdapter> valueExtractor = new MetadataEntityValueExtractor<DatasourceAdapter>(
-                    tupleReaderWriter);
-            searchIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey, valueExtractor, results);
-            if (results.isEmpty()) {
-                return null;
-            }
-            return results.get(0);
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-
-    @Override
-    public List<DatasourceAdapter> getDataverseAdapters(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException {
-        try {
-            ITupleReference searchKey = createTuple(dataverseName);
-            DatasourceAdapterTupleTranslator tupleReaderWriter = new DatasourceAdapterTupleTranslator(false);
-            IValueExtractor<DatasourceAdapter> valueExtractor = new MetadataEntityValueExtractor<DatasourceAdapter>(
-                    tupleReaderWriter);
-            List<DatasourceAdapter> results = new ArrayList<DatasourceAdapter>();
-            searchIndex(jobId, MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET, searchKey, valueExtractor, results);
-            return results;
-        } catch (Exception e) {
-            throw new MetadataException(e);
-        }
-    }
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IAsterixStateProxy.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IAsterixStateProxy.java
deleted file mode 100644
index 5f772c7..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IAsterixStateProxy.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.api;
-
-import java.io.Serializable;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-
-import edu.uci.ics.asterix.metadata.bootstrap.AsterixProperties;
-
-/**
- * Interface for setting/getting distributed state of Asterix.
- */
-public interface IAsterixStateProxy extends Remote, Serializable {
-    public void setMetadataNode(IMetadataNode metadataNode) throws RemoteException;
-
-    public void setAsterixProperties(AsterixProperties asterixProperties) throws RemoteException;
-
-    public IMetadataNode getMetadataNode() throws RemoteException;
-
-    public AsterixProperties getAsterixProperties() throws RemoteException;
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataManager.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataManager.java
deleted file mode 100644
index fdf2d60..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataManager.java
+++ /dev/null
@@ -1,456 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.api;
-
-import java.rmi.RemoteException;
-import java.util.List;
-
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.Node;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-
-/**
- * A metadata manager provides user access to Asterix metadata (e.g., types,
- * datasets, indexes, etc.). A metadata manager satisfies requests by contacting
- * the metadata node which is responsible for the storage-level details. This
- * interface describes the operations that a metadata manager must support.
- * Every operation is meant to be performed in the context of a transaction on
- * the metadata node against the metadata. It is the responsibility of the user
- * to begin a transaction, lock the metadata, and commit or abort a metadata
- * transaction using the appropriate methods declared below. Lock acquisition at
- * finer levels is the responsibility of the metadata node, not the metadata
- * manager or its user.
- */
-public interface IMetadataManager {
-
-    /**
-     * Initializes the metadata manager, e.g., finds the remote metadata node.
-     * 
-     * @throws RemoteException
-     *             If an error occurred while contacting the proxy for finding
-     *             the metadata node.
-     */
-    public void init() throws RemoteException, MetadataException;
-
-    /**
-     * Begins a transaction on the metadata node.
-     * 
-     * @return A globally unique transaction id.
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public MetadataTransactionContext beginTransaction() throws ACIDException, RemoteException;
-
-    /**
-     * Commits a remote transaction on the metadata node.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void commitTransaction(MetadataTransactionContext ctx) throws ACIDException, RemoteException;
-
-    /**
-     * Aborts a remote transaction running on the metadata node.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void abortTransaction(MetadataTransactionContext ctx) throws ACIDException, RemoteException;
-
-    /**
-     * Locks the metadata in given mode. The lock acquisition is delegated to
-     * the metadata node. This method blocks until the lock can be acquired.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param lockMode
-     *            Desired lockode.
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void lock(MetadataTransactionContext ctx, byte lockMode) throws ACIDException, RemoteException;
-
-    /**
-     * Releases all locks on the metadata held by the given transaction id.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void unlock(MetadataTransactionContext ctx) throws ACIDException, RemoteException;
-
-    /**
-     * Inserts a new dataverse into the metadata.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverse
-     *            Dataverse instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the dataverse already exists.
-     */
-    public void addDataverse(MetadataTransactionContext ctx, Dataverse dataverse) throws MetadataException;
-
-    /**
-     * Retrieves all dataverses
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @return A list of dataverse instances.
-     * @throws MetadataException
-     */
-    List<Dataverse> getDataverses(MetadataTransactionContext ctx) throws MetadataException;
-    
-    /**
-     * Retrieves a dataverse with given name.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of the dataverse to retrieve.
-     * @return A dataverse instance.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist.
-     */
-    public Dataverse getDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException;
-
-    /**
-     * Retrieves all datasets belonging to the given dataverse.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of the dataverse of which to find all datasets.
-     * @return A list of dataset instances.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist.
-     */
-    public List<Dataset> getDataverseDatasets(MetadataTransactionContext ctx, String dataverseName)
-            throws MetadataException;
-
-    /**
-     * Deletes the dataverse with given name, and all it's associated datasets,
-     * indexes, and types.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @return A list of dataset instances.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist.
-     */
-    public void dropDataverse(MetadataTransactionContext ctx, String dataverseName) throws MetadataException;
-
-    /**
-     * Inserts a new dataset into the metadata.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataset
-     *            Dataset instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the dataset already exists.
-     */
-    public void addDataset(MetadataTransactionContext ctx, Dataset dataset) throws MetadataException;
-    
-    /**
-     * Retrieves a dataset within a given dataverse.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Dataverse name to look for the dataset.
-     * @param datasetName
-     *            Name of dataset to be retrieved.
-     * @return A dataset instance.
-     * @throws MetadataException
-     *             For example, if the dataset does not exist.
-     */
-    public Dataset getDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
-            throws MetadataException;
-
-    /**
-     * Retrieves all indexes of a dataset.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse which holds the given dataset.
-     * @param datasetName
-     *            Name of dataset for which to retrieve all indexes.
-     * @return A list of Index instances.
-     * @throws MetadataException
-     *             For example, if the dataset and/or dataverse does not exist.
-     */
-    public List<Index> getDatasetIndexes(MetadataTransactionContext ctx, String dataverseName, String datasetName)
-            throws MetadataException;
-
-    /**
-     * Deletes the dataset with given name, and all it's associated indexes.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse which holds the given dataset.
-     * @param datasetName
-     *            Name of dataset to delete.
-     * @throws MetadataException
-     *             For example, if the dataset and/or dataverse does not exist.
-     */
-    public void dropDataset(MetadataTransactionContext ctx, String dataverseName, String datasetName)
-            throws MetadataException;
-
-    /**
-     * Inserts an index into the metadata. The index itself knows its name, and
-     * which dataset it belongs to.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param index
-     *            Index instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the index already exists.
-     */
-    public void addIndex(MetadataTransactionContext ctx, Index index) throws MetadataException;
-
-    /**
-     * Retrieves the index with given name, in given dataverse and dataset.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of the datavers holding the given dataset.
-     * @param datasetName
-     *            Name of the dataset holding the index.
-     * @indexName Name of the index to retrieve.
-     * @return An Index instance.
-     * @throws MetadataException
-     *             For example, if the index does not exist.
-     */
-    public Index getIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
-            throws MetadataException;
-
-    /**
-     * Deletes the index with given name, in given dataverse and dataset.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of the datavers holding the given dataset.
-     * @param datasetName
-     *            Name of the dataset holding the index.
-     * @indexName Name of the index to retrieve.
-     * @throws MetadataException
-     *             For example, if the index does not exist.
-     */
-    public void dropIndex(MetadataTransactionContext ctx, String dataverseName, String datasetName, String indexName)
-            throws MetadataException;
-
-    /**
-     * Inserts a datatype.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param datatype
-     *            Datatype instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the datatype already exists.
-     */
-    public void addDatatype(MetadataTransactionContext ctx, Datatype datatype) throws MetadataException;
-
-    /**
-     * Retrieves the datatype with given name in given dataverse.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse holding the datatype.
-     * @param datatypeName
-     *            Name of datatype to be retrieved.
-     * @return A datatype instance.
-     * @throws MetadataException
-     *             For example, if the datatype does not exist.
-     */
-    public Datatype getDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
-            throws MetadataException;
-
-    /**
-     * Deletes the given datatype in given dataverse.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse holding the datatype.
-     * @param datatypeName
-     *            Name of datatype to be deleted.
-     * @throws MetadataException
-     *             For example, if there are still datasets using the type to be
-     *             deleted.
-     */
-    public void dropDatatype(MetadataTransactionContext ctx, String dataverseName, String datatypeName)
-            throws MetadataException;
-
-    /**
-     * Inserts a node group.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param nodeGroup
-     *            Node group instance to insert.
-     * @throws MetadataException
-     *             For example, if the node group already exists.
-     */
-    public void addNodegroup(MetadataTransactionContext ctx, NodeGroup nodeGroup) throws MetadataException;
-
-    /**
-     * Retrieves a node group.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param nodeGroupName
-     *            Name of node group to be retrieved.
-     * @throws MetadataException
-     *             For example, if the node group does not exist.
-     */
-    public NodeGroup getNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException;
-
-    /**
-     * Deletes a node group.
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param nodeGroupName
-     *            Name of node group to be deleted.
-     * @throws MetadataException
-     *             For example, there are still datasets partitioned on the node
-     *             group to be deleted.
-     */
-    public void dropNodegroup(MetadataTransactionContext ctx, String nodeGroupName) throws MetadataException;
-
-    /**
-     * Inserts a node (machine).
-     * 
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param node
-     *            Node instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the node already exists.
-     */
-    public void addNode(MetadataTransactionContext ctx, Node node) throws MetadataException;
-
-    /**
-     * @param mdTxnCtx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param function
-     *            An instance of type Function that represents the function
-     *            being added
-     * @throws MetadataException
-     */
-    public void addFunction(MetadataTransactionContext mdTxnCtx, Function function) throws MetadataException;
-
-    /**
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param functionSignature
-     *            the functions signature (unique to the function)
-     * @return
-     * @throws MetadataException
-     */
-
-    public Function getFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
-            throws MetadataException;
-
-    /**
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param functionSignature
-     *            the functions signature (unique to the function)
-     * @throws MetadataException
-     */
-    public void dropFunction(MetadataTransactionContext ctx, FunctionSignature functionSignature)
-            throws MetadataException;
-
-    /**
-     * @param mdTxnCtx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param function
-     *            An instance of type Adapter that represents the adapter being
-     *            added
-     * @throws MetadataException
-     */
-    public void addAdapter(MetadataTransactionContext mdTxnCtx, DatasourceAdapter adapter) throws MetadataException;
-
-    /**
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            the dataverse associated with the adapter being searched
-     * @param Name
-     *            name of the adapter
-     * @return
-     * @throws MetadataException
-     */
-    public DatasourceAdapter getAdapter(MetadataTransactionContext ctx, String dataverseName, String name)
-            throws MetadataException;
-
-    /**
-     * @param ctx
-     *            MetadataTransactionContext of an active metadata transaction.
-     * @param dataverseName
-     *            the dataverse associated with the adapter being dropped
-     * @param name
-     *            name of the adapter
-     * @throws MetadataException
-     */
-    public void dropAdapter(MetadataTransactionContext ctx, String dataverseName, String name) throws MetadataException;
-
-    /**
-     * @param ctx
-     * @param dataverseName
-     * @return
-     * @throws MetadataException
-     */
-    public List<Function> getDataverseFunctions(MetadataTransactionContext ctx, String dataverseName)
-            throws MetadataException;
-
-	
-    public void initializeDatasetIdFactory(MetadataTransactionContext ctx) throws MetadataException;
-    
-    public void acquireWriteLatch();
-
-    public void releaseWriteLatch();
-
-    public void acquireReadLatch();
-
-    public void releaseReadLatch();
-
-
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataNode.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataNode.java
deleted file mode 100644
index 836d42f..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/api/IMetadataNode.java
+++ /dev/null
@@ -1,477 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.api;
-
-import java.io.Serializable;
-import java.rmi.Remote;
-import java.rmi.RemoteException;
-import java.util.List;
-
-import edu.uci.ics.asterix.common.functions.FunctionSignature;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.Function;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.Node;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-
-/**
- * A metadata node stores metadata in its local storage structures (currently
- * BTrees). A metadata node services requests on behalf of the (possibly remote)
- * metadata manager by executing local transactions against its local storage.
- * This interface mirrors the methods in IMetadataManager.
- * Users wanting to lock/access metadata shall always go through the
- * MetadataManager, and should never call methods on the MetadataNode directly
- * for any reason.
- */
-public interface IMetadataNode extends Remote, Serializable {
-
-    /**
-     * Begins a local transaction against the metadata.
-     * 
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void beginTransaction(JobId jobId) throws ACIDException, RemoteException;
-
-    /**
-     * Commits a local transaction against the metadata.
-     * 
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void commitTransaction(JobId jobId) throws ACIDException, RemoteException;
-
-    /**
-     * Aborts a local transaction against the metadata.
-     * 
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void abortTransaction(JobId jobId) throws ACIDException, RemoteException;
-
-    /**
-     * Locally locks the entire metadata in given mode on behalf of given
-     * transaction id.
-     * 
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void lock(JobId jobId, byte lockMode) throws ACIDException, RemoteException;
-
-    /**
-     * Releases all local locks of given transaction id.
-     * 
-     * @throws ACIDException
-     * @throws RemoteException
-     */
-    public void unlock(JobId jobId) throws ACIDException, RemoteException;
-
-    /**
-     * Inserts a new dataverse into the metadata, acquiring local locks on
-     * behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverse
-     *            Dataverse instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the dataverse already exists.
-     * @throws RemoteException
-     */
-    public void addDataverse(JobId jobId, Dataverse dataverse) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves all dataverses, acquiring local locks on behalf of
-     * the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @return A list of dataverse instances.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist.
-     * @throws RemoteException
-     */
-    public List<Dataverse> getDataverses(JobId jobId) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves a dataverse with given name, acquiring local locks on behalf of
-     * the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of the dataverse to retrieve.
-     * @return A dataverse instance.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist.
-     * @throws RemoteException
-     */
-    public Dataverse getDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves all datasets belonging to the given dataverse, acquiring local
-     * locks on behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of the dataverse of which to find all datasets.
-     * @return A list of dataset instances.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist. RemoteException
-     */
-    public List<Dataset> getDataverseDatasets(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Deletes the dataverse with given name, and all it's associated datasets,
-     * indexes, and types, acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @return A list of dataset instances.
-     * @throws MetadataException
-     *             For example, if the dataverse does not exist.
-     * @throws RemoteException
-     */
-    public void dropDataverse(JobId jobId, String dataverseName) throws MetadataException, RemoteException;
-
-    /**
-     * Inserts a new dataset into the metadata, acquiring local locks on behalf
-     * of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataset
-     *            Dataset instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the dataset already exists.
-     * @throws RemoteException
-     */
-    public void addDataset(JobId jobId, Dataset dataset) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves a dataset within a given dataverse, acquiring local locks on
-     * behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Dataverse name to look for the dataset.
-     * @param datasetName
-     *            Name of dataset to be retrieved.
-     * @return A dataset instance.
-     * @throws MetadataException
-     *             For example, if the dataset does not exist.
-     * @throws RemoteException
-     */
-    public Dataset getDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Retrieves all indexes of a dataset, acquiring local locks on behalf of
-     * the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse which holds the given dataset.
-     * @param datasetName
-     *            Name of dataset for which to retrieve all indexes.
-     * @return A list of Index instances.
-     * @throws MetadataException
-     *             For example, if the dataset and/or dataverse does not exist.
-     * @throws RemoteException
-     */
-    public List<Index> getDatasetIndexes(JobId jobId, String dataverseName, String datasetName)
-            throws MetadataException, RemoteException;
-
-    /**
-     * Deletes the dataset with given name, and all it's associated indexes,
-     * acquiring local locks on behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse which holds the given dataset.
-     * @param datasetName
-     *            Name of dataset to delete.
-     * @throws MetadataException
-     *             For example, if the dataset and/or dataverse does not exist.
-     * @throws RemoteException
-     */
-    public void dropDataset(JobId jobId, String dataverseName, String datasetName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Inserts an index into the metadata, acquiring local locks on behalf of
-     * the given transaction id. The index itself knows its name, and which
-     * dataset it belongs to.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param index
-     *            Index instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the index already exists.
-     * @throws RemoteException
-     */
-    public void addIndex(JobId jobId, Index index) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves the index with given name, in given dataverse and dataset,
-     * acquiring local locks on behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of the datavers holding the given dataset.
-     * @param datasetName
-     *            Name of the dataset holding the index.
-     * @indexName Name of the index to retrieve.
-     * @return An Index instance.
-     * @throws MetadataException
-     *             For example, if the index does not exist.
-     * @throws RemoteException
-     */
-    public Index getIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
-            throws MetadataException, RemoteException;
-
-    /**
-     * Deletes the index with given name, in given dataverse and dataset,
-     * acquiring local locks on behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of the datavers holding the given dataset.
-     * @param datasetName
-     *            Name of the dataset holding the index.
-     * @indexName Name of the index to retrieve.
-     * @throws MetadataException
-     *             For example, if the index does not exist.
-     * @throws RemoteException
-     */
-    public void dropIndex(JobId jobId, String dataverseName, String datasetName, String indexName)
-            throws MetadataException, RemoteException;
-
-    /**
-     * Inserts a datatype, acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param datatype
-     *            Datatype instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the datatype already exists.
-     * @throws RemoteException
-     */
-    public void addDatatype(JobId jobId, Datatype datatype) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves the datatype with given name in given dataverse, acquiring
-     * local locks on behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse holding the datatype.
-     * @param datatypeName
-     *            Name of datatype to be retrieved.
-     * @return A datatype instance.
-     * @throws MetadataException
-     *             For example, if the datatype does not exist.
-     * @throws RemoteException
-     */
-    public Datatype getDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Deletes the given datatype in given dataverse, acquiring local locks on
-     * behalf of the given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            Name of dataverse holding the datatype.
-     * @param datatypeName
-     *            Name of datatype to be deleted.
-     * @throws MetadataException
-     *             For example, if there are still datasets using the type to be
-     *             deleted.
-     * @throws RemoteException
-     */
-    public void dropDatatype(JobId jobId, String dataverseName, String datatypeName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Inserts a node group, acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param nodeGroup
-     *            Node group instance to insert.
-     * @throws MetadataException
-     *             For example, if the node group already exists.
-     * @throws RemoteException
-     */
-    public void addNodeGroup(JobId jobId, NodeGroup nodeGroup) throws MetadataException, RemoteException;
-
-    /**
-     * Retrieves a node group, acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param nodeGroupName
-     *            Name of node group to be retrieved.
-     * @throws MetadataException
-     *             For example, if the node group does not exist.
-     * @throws RemoteException
-     */
-    public NodeGroup getNodeGroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException;
-
-    /**
-     * Deletes a node group, acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param nodeGroupName
-     *            Name of node group to be deleted.
-     * @throws MetadataException
-     *             For example, there are still datasets partitioned on the node
-     *             group to be deleted.
-     * @throws RemoteException
-     */
-    public void dropNodegroup(JobId jobId, String nodeGroupName) throws MetadataException, RemoteException;
-
-    /**
-     * Inserts a node (compute node), acquiring local locks on behalf of the
-     * given transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param node
-     *            Node instance to be inserted.
-     * @throws MetadataException
-     *             For example, if the node already exists.
-     * @throws RemoteException
-     */
-    public void addNode(JobId jobId, Node node) throws MetadataException, RemoteException;
-
-    /**
-
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param functionSignature
-     *            An instance of functionSignature representing the function
-     * @return
-     * @throws MetadataException
-     * @throws RemoteException
-     */
-    public Function getFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Deletes a function, acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param functionSignature
-     *            An instance of functionSignature representing the function
-     * @throws MetadataException
-     *             For example, there are still datasets partitioned on the node
-     *             group to be deleted.
-     * @throws RemoteException
-     */
-    public void dropFunction(JobId jobId, FunctionSignature functionSignature) throws MetadataException, RemoteException;
-
-    /**
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param function
-     *            Function to be inserted
-     * @throws MetadataException
-     *             for example, if the function already exists or refers to an
-     *             unknown function
-     * @throws RemoteException
-     */
-    public void addFunction(JobId jobId, Function function) throws MetadataException, RemoteException;
-
-    /**
-     * @param ctx
-     * @param dataverseName
-     * @return List<Function> A list containing the functions in the specified dataverse
-     * @throws MetadataException
-     * @throws RemoteException
-     */
-    public List<Function> getDataverseFunctions(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * @param ctx
-     * @param dataverseName
-     * @return List<Adapter> A list containing the adapters in the specified dataverse
-     * @throws MetadataException
-     * @throws RemoteException
-     */
-    public List<DatasourceAdapter> getDataverseAdapters(JobId jobId, String dataverseName) throws MetadataException,
-            RemoteException;
-
-    public DatasourceAdapter getAdapter(JobId jobId, String dataverseName, String adapterName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * Deletes a adapter , acquiring local locks on behalf of the given
-     * transaction id.
-     * 
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param dataverseName
-     *            dataverse asociated with the adapter that is to be deleted.
-     * @param adapterName
-     *            Name of adapter to be deleted. MetadataException for example,
-     *            if the adapter does not exists.
-     * @throws RemoteException
-     */
-    public void dropAdapter(JobId jobId, String dataverseName, String adapterName) throws MetadataException,
-            RemoteException;
-
-    /**
-     * @param jobId
-     *            A globally unique id for an active metadata transaction.
-     * @param adapter
-     *            Adapter to be inserted
-     * @throws MetadataException
-     *             for example, if the adapter already exists.
-     * @throws RemoteException
-     */
-    public void addAdapter(JobId jobId, DatasourceAdapter adapter) throws MetadataException, RemoteException;
-
-    public void initializeDatasetIdFactory(JobId jobId) throws MetadataException, RemoteException;
-
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixProperties.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixProperties.java
deleted file mode 100644
index 71a7de3..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixProperties.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.bootstrap;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Serializable;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Properties;
-
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-
-/**
- * Holder for Asterix properties values typically set as Java Properties.
- * Intended to live in the AsterixStateProxy so it can be accessed remotely.
- */
-public class AsterixProperties implements Serializable {
-
-    private static final long serialVersionUID = 1L;
-    private static String metadataNodeName;
-    private static Boolean isNewUniverse;
-    private static HashSet<String> nodeNames;
-    private static Map<String, String[]> stores;
-    private static String outputDir;
-
-    public static AsterixProperties INSTANCE = new AsterixProperties();
-
-    private AsterixProperties() {
-        try {
-            initializeProperties();
-        } catch (Exception e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    @SuppressWarnings("unchecked")
-    private void initializeProperties() throws AlgebricksException {
-        Properties p = new Properties();
-        String fileName = System.getProperty(GlobalConfig.CONFIG_FILE_PROPERTY);
-        if (fileName == null) {
-            fileName = GlobalConfig.DEFAULT_CONFIG_FILE_NAME;
-        }
-
-        InputStream is = this.getClass().getClassLoader().getResourceAsStream(fileName);
-        if (is == null) {
-            try {
-                fileName = GlobalConfig.DEFAULT_CONFIG_FILE_NAME;
-                is = new FileInputStream(fileName);
-            } catch (FileNotFoundException fnf) {
-                throw new AlgebricksException("Could not find the configuration file " + fileName);
-            }
-        }
-        try {
-            p.load(is);
-            is.close();
-        } catch (IOException e) {
-            throw new AlgebricksException(e);
-        }
-        Enumeration<String> pNames = (Enumeration<String>) p.propertyNames();
-        stores = new HashMap<String, String[]>();
-        boolean newUniverseChosen = false;
-        String pn;
-        String val;
-        while (pNames.hasMoreElements()) {
-            pn = pNames.nextElement();
-            if (pn.equals("MetadataNode")) {
-                val = p.getProperty(pn);
-                metadataNodeName = val;
-            } else if (pn.equals("NewUniverse")) {
-                val = p.getProperty(pn);
-                newUniverseChosen = true;
-                isNewUniverse = Boolean.parseBoolean(val);
-            } else if (pn.equals("OutputDir")) {
-                val = p.getProperty(pn);
-                outputDir = val;
-            } else {
-                String ncName = pn.substring(0, pn.indexOf('.'));
-                val = p.getProperty(pn);
-                String[] folderNames = val.split("\\s*,\\s*");
-                int i = 0;
-                for (String store : folderNames) {
-                    boolean needsStartSep = !store.startsWith(File.separator);
-                    boolean needsEndSep = !store.endsWith(File.separator);
-                    if (needsStartSep && needsEndSep) {
-                        folderNames[i] = File.separator + store + File.separator;
-                    } else if (needsStartSep) {
-                        folderNames[i] = File.separator + store;
-                    } else if (needsEndSep) {
-                        folderNames[i] = store + File.separator;
-                    }
-                    i++;
-                }
-                stores.put(ncName, folderNames);
-                nodeNames = new HashSet<String>();
-                nodeNames.addAll(stores.keySet());
-            }
-        }
-        if (metadataNodeName == null)
-            throw new AlgebricksException("You need to specify the metadata node!");
-        if (!newUniverseChosen)
-            throw new AlgebricksException("You need to specify whether or not you want to start a new universe!");
-    }
-
-    public Boolean isNewUniverse() {
-        return isNewUniverse;
-    }
-
-    public String getMetadataNodeName() {
-        return metadataNodeName;
-    }
-
-    public String getMetadataStore() {
-        return stores.get(metadataNodeName)[0];
-    }
-
-    public Map<String, String[]> getStores() {
-        return stores;
-    }
-
-    public HashSet<String> getNodeNames() {
-        return nodeNames;
-    }
-
-    public String getOutputDir() {
-        return outputDir;
-    }
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixStateProxy.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixStateProxy.java
deleted file mode 100644
index 3946fa6..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/AsterixStateProxy.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.bootstrap;
-
-import java.rmi.RemoteException;
-import java.rmi.server.UnicastRemoteObject;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.metadata.api.IAsterixStateProxy;
-import edu.uci.ics.asterix.metadata.api.IMetadataNode;
-
-/**
- * Contains Asterix distributed state such as the AsterixProperties.
- */
-public class AsterixStateProxy implements IAsterixStateProxy {
-    private static final long serialVersionUID = 1L;
-    private static final Logger LOGGER = Logger.getLogger(AsterixStateProxy.class.getName());
-
-    private IMetadataNode metadataNode;
-    private AsterixProperties asterixProperties;
-    private static final IAsterixStateProxy cc = new AsterixStateProxy();
-
-    public static IAsterixStateProxy registerRemoteObject() throws RemoteException {
-        IAsterixStateProxy stub = (IAsterixStateProxy) UnicastRemoteObject.exportObject(cc, 0);
-        LOGGER.info("Asterix Distributed State Proxy Bound");
-        return stub;
-    }
-
-    public static void unregisterRemoteObject() throws RemoteException {
-        UnicastRemoteObject.unexportObject(cc, true);
-        LOGGER.info("Asterix Distributed State Proxy Unbound");
-    }
-
-    @Override
-    public void setMetadataNode(IMetadataNode metadataNode) throws RemoteException {
-        this.metadataNode = metadataNode;
-    }
-
-    @Override
-    public IMetadataNode getMetadataNode() throws RemoteException {
-        return this.metadataNode;
-    }
-
-    @Override
-    public void setAsterixProperties(AsterixProperties asterixProperity) throws RemoteException {
-        this.asterixProperties = asterixProperity;
-    }
-
-    @Override
-    public AsterixProperties getAsterixProperties() throws RemoteException {
-        return this.asterixProperties;
-    }
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataBootstrap.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataBootstrap.java
deleted file mode 100644
index 805a550..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/bootstrap/MetadataBootstrap.java
+++ /dev/null
@@ -1,424 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.bootstrap;
-
-import java.io.File;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.common.context.AsterixAppRuntimeContext;
-import edu.uci.ics.asterix.common.context.AsterixRuntimeComponentsProvider;
-import edu.uci.ics.asterix.external.adapter.factory.IAdapterFactory;
-import edu.uci.ics.asterix.external.dataset.adapter.AdapterIdentifier;
-import edu.uci.ics.asterix.metadata.IDatasetDetails;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
-import edu.uci.ics.asterix.metadata.api.IMetadataIndex;
-import edu.uci.ics.asterix.metadata.entities.AsterixBuiltinTypeMap;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails.FileStructure;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails.PartitioningStrategy;
-import edu.uci.ics.asterix.metadata.entities.Node;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat;
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.resource.ILocalResourceMetadata;
-import edu.uci.ics.asterix.transaction.management.resource.LSMBTreeLocalResourceMetadata;
-import edu.uci.ics.asterix.transaction.management.resource.PersistentLocalResourceFactoryProvider;
-import edu.uci.ics.asterix.transaction.management.resource.TransactionalResourceManagerRepository;
-import edu.uci.ics.asterix.transaction.management.service.logging.IndexResourceManager;
-import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
-import edu.uci.ics.hyracks.api.application.INCApplicationContext;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.api.io.IIOManager;
-import edu.uci.ics.hyracks.storage.am.common.api.IInMemoryFreePageManager;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexLifecycleManager;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.frames.LIFOMetaDataFrameFactory;
-import edu.uci.ics.hyracks.storage.am.lsm.btree.impls.LSMBTree;
-import edu.uci.ics.hyracks.storage.am.lsm.btree.util.LSMBTreeUtils;
-import edu.uci.ics.hyracks.storage.am.lsm.common.api.IInMemoryBufferCache;
-import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryBufferCache;
-import edu.uci.ics.hyracks.storage.am.lsm.common.freepage.InMemoryFreePageManager;
-import edu.uci.ics.hyracks.storage.common.buffercache.HeapBufferAllocator;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.file.IFileMapProvider;
-import edu.uci.ics.hyracks.storage.common.file.ILocalResourceFactory;
-import edu.uci.ics.hyracks.storage.common.file.ILocalResourceFactoryProvider;
-import edu.uci.ics.hyracks.storage.common.file.ILocalResourceRepository;
-import edu.uci.ics.hyracks.storage.common.file.LocalResource;
-import edu.uci.ics.hyracks.storage.common.file.TransientFileMapManager;
-
-/**
- * Initializes the remote metadata storage facilities ("universe") using a
- * MetadataManager that is assumed to be co-located in the same JVM. The
- * metadata universe can be bootstrapped from an existing set of metadata files,
- * or it can be started from scratch, creating all the necessary persistent
- * state. The startUniverse() method is intended to be called as part of
- * application deployment (i.e., inside an NC bootstrap), and similarly
- * stopUniverse() should be called upon application undeployment.
- */
-public class MetadataBootstrap {
-    private static final Logger LOGGER = Logger.getLogger(MetadataBootstrap.class.getName());
-    private static final int DEFAULT_MEM_PAGE_SIZE = 32768;
-    private static final int DEFAULT_MEM_NUM_PAGES = 100;
-
-    private static AsterixAppRuntimeContext runtimeContext;
-
-    private static IBufferCache bufferCache;
-    private static IFileMapProvider fileMapProvider;
-    private static IIndexLifecycleManager indexLifecycleManager;
-    private static ILocalResourceRepository localResourceRepository;
-    private static IIOManager ioManager;
-
-    private static String metadataNodeName;
-    private static String metadataStore;
-    private static HashSet<String> nodeNames;
-    private static String outputDir;
-
-    private static IMetadataIndex[] primaryIndexes;
-    private static IMetadataIndex[] secondaryIndexes;
-
-    private static void initLocalIndexArrays() {
-        primaryIndexes = new IMetadataIndex[] { MetadataPrimaryIndexes.DATAVERSE_DATASET,
-                MetadataPrimaryIndexes.DATASET_DATASET, MetadataPrimaryIndexes.DATATYPE_DATASET,
-                MetadataPrimaryIndexes.INDEX_DATASET, MetadataPrimaryIndexes.NODE_DATASET,
-                MetadataPrimaryIndexes.NODEGROUP_DATASET, MetadataPrimaryIndexes.FUNCTION_DATASET,
-                MetadataPrimaryIndexes.DATASOURCE_ADAPTER_DATASET };
-        secondaryIndexes = new IMetadataIndex[] { MetadataSecondaryIndexes.GROUPNAME_ON_DATASET_INDEX,
-                MetadataSecondaryIndexes.DATATYPENAME_ON_DATASET_INDEX,
-                MetadataSecondaryIndexes.DATATYPENAME_ON_DATATYPE_INDEX };
-    }
-
-    public static void startUniverse(AsterixProperties asterixProperties, INCApplicationContext ncApplicationContext, boolean isNewUniverse)
-            throws Exception {
-        runtimeContext = (AsterixAppRuntimeContext) ncApplicationContext.getApplicationObject();
-
-        // Initialize static metadata objects, such as record types and metadata
-        // index descriptors.
-        // The order of these calls is important because the index descriptors
-        // rely on the type type descriptors.
-        MetadataRecordTypes.init();
-        MetadataPrimaryIndexes.init();
-        MetadataSecondaryIndexes.init();
-        initLocalIndexArrays();
-
-        TransactionalResourceManagerRepository resourceRepository = runtimeContext.getTransactionSubsystem()
-                .getTransactionalResourceRepository();
-        resourceRepository.registerTransactionalResourceManager(ResourceType.LSM_BTREE, new IndexResourceManager(
-                ResourceType.LSM_BTREE, runtimeContext.getTransactionSubsystem()));
-        resourceRepository.registerTransactionalResourceManager(ResourceType.LSM_RTREE, new IndexResourceManager(
-                ResourceType.LSM_RTREE, runtimeContext.getTransactionSubsystem()));
-        resourceRepository.registerTransactionalResourceManager(ResourceType.LSM_INVERTED_INDEX,
-                new IndexResourceManager(ResourceType.LSM_INVERTED_INDEX, runtimeContext.getTransactionSubsystem()));
-
-        metadataNodeName = asterixProperties.getMetadataNodeName();
-        metadataStore = asterixProperties.getMetadataStore();
-        nodeNames = asterixProperties.getNodeNames();
-        // nodeStores = asterixProperity.getStores();
-
-        outputDir = asterixProperties.getOutputDir();
-        if (outputDir != null) {
-            (new File(outputDir)).mkdirs();
-        }
-
-        indexLifecycleManager = runtimeContext.getIndexLifecycleManager();
-        localResourceRepository = runtimeContext.getLocalResourceRepository();
-        bufferCache = runtimeContext.getBufferCache();
-        fileMapProvider = runtimeContext.getFileMapManager();
-        ioManager = ncApplicationContext.getRootContext().getIOManager();
-
-        if (isNewUniverse) {
-            MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-            try {
-                // Begin a transaction against the metadata.
-                // Lock the metadata in X mode.
-                MetadataManager.INSTANCE.lock(mdTxnCtx, LockMode.X);
-
-                for (int i = 0; i < primaryIndexes.length; i++) {
-                    enlistMetadataDataset(primaryIndexes[i], true);
-                }
-                for (int i = 0; i < secondaryIndexes.length; i++) {
-                    enlistMetadataDataset(secondaryIndexes[i], true);
-                }
-                insertInitialDataverses(mdTxnCtx);
-                insertInitialDatasets(mdTxnCtx);
-                insertInitialDatatypes(mdTxnCtx);
-                insertInitialIndexes(mdTxnCtx);
-                insertNodes(mdTxnCtx);
-                insertInitialGroups(mdTxnCtx);
-                insertInitialAdapters(mdTxnCtx);
-
-                MetadataManager.INSTANCE.initializeDatasetIdFactory(mdTxnCtx);
-                MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            } catch (Exception e) {
-                MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-                throw e;
-            }
-            LOGGER.info("FINISHED CREATING METADATA B-TREES.");
-        } else {
-            for (int i = 0; i < primaryIndexes.length; i++) {
-                enlistMetadataDataset(primaryIndexes[i], false);
-            }
-            for (int i = 0; i < secondaryIndexes.length; i++) {
-                enlistMetadataDataset(secondaryIndexes[i], false);
-            }
-            LOGGER.info("FINISHED ENLISTMENT OF METADATA B-TREES.");
-        }
-
-    }
-
-    public static void stopUniverse() throws HyracksDataException {
-        // Close all BTree files in BufferCache.
-        for (int i = 0; i < primaryIndexes.length; i++) {
-            long resourceID = localResourceRepository
-                    .getResourceByName(primaryIndexes[i].getFile().getFile().getPath()).getResourceId();
-            indexLifecycleManager.close(resourceID);
-            indexLifecycleManager.unregister(resourceID);
-        }
-        for (int i = 0; i < secondaryIndexes.length; i++) {
-            long resourceID = localResourceRepository.getResourceByName(
-                    secondaryIndexes[i].getFile().getFile().getPath()).getResourceId();
-            indexLifecycleManager.close(resourceID);
-            indexLifecycleManager.unregister(resourceID);
-        }
-    }
-
-    public static void insertInitialDataverses(MetadataTransactionContext mdTxnCtx) throws Exception {
-        String dataverseName = MetadataPrimaryIndexes.DATAVERSE_DATASET.getDataverseName();
-        String dataFormat = NonTaggedDataFormat.NON_TAGGED_DATA_FORMAT;
-        MetadataManager.INSTANCE.addDataverse(mdTxnCtx, new Dataverse(dataverseName, dataFormat,
-                IMetadataEntity.PENDING_NO_OP));
-    }
-
-    public static void insertInitialDatasets(MetadataTransactionContext mdTxnCtx) throws Exception {
-        for (int i = 0; i < primaryIndexes.length; i++) {
-            IDatasetDetails id = new InternalDatasetDetails(FileStructure.BTREE, PartitioningStrategy.HASH,
-                    primaryIndexes[i].getPartitioningExpr(), primaryIndexes[i].getPartitioningExpr(),
-                    primaryIndexes[i].getNodeGroupName());
-            MetadataManager.INSTANCE.addDataset(mdTxnCtx, new Dataset(primaryIndexes[i].getDataverseName(),
-                    primaryIndexes[i].getIndexedDatasetName(), primaryIndexes[i].getPayloadRecordType().getTypeName(),
-                    id, new HashMap<String,String>(), DatasetType.INTERNAL, primaryIndexes[i].getDatasetId().getId(), IMetadataEntity.PENDING_NO_OP));
-        }
-    }
-
-    public static void getBuiltinTypes(ArrayList<IAType> types) throws Exception {
-        Collection<BuiltinType> builtinTypes = AsterixBuiltinTypeMap.getBuiltinTypes().values();
-        Iterator<BuiltinType> iter = builtinTypes.iterator();
-        while (iter.hasNext())
-            types.add(iter.next());
-    }
-
-    public static void getMetadataTypes(ArrayList<IAType> types) throws Exception {
-        for (int i = 0; i < primaryIndexes.length; i++)
-            types.add(primaryIndexes[i].getPayloadRecordType());
-    }
-
-    public static void insertInitialDatatypes(MetadataTransactionContext mdTxnCtx) throws Exception {
-        String dataverseName = MetadataPrimaryIndexes.DATAVERSE_DATASET.getDataverseName();
-        ArrayList<IAType> types = new ArrayList<IAType>();
-        getBuiltinTypes(types);
-        getMetadataTypes(types);
-        for (int i = 0; i < types.size(); i++) {
-            MetadataManager.INSTANCE.addDatatype(mdTxnCtx, new Datatype(dataverseName, types.get(i).getTypeName(),
-                    types.get(i), false));
-        }
-    }
-
-    public static void insertInitialIndexes(MetadataTransactionContext mdTxnCtx) throws Exception {
-        for (int i = 0; i < secondaryIndexes.length; i++) {
-            MetadataManager.INSTANCE.addIndex(mdTxnCtx, new Index(secondaryIndexes[i].getDataverseName(),
-                    secondaryIndexes[i].getIndexedDatasetName(), secondaryIndexes[i].getIndexName(), IndexType.BTREE,
-                    secondaryIndexes[i].getPartitioningExpr(), false, IMetadataEntity.PENDING_NO_OP));
-        }
-    }
-
-    public static void insertNodes(MetadataTransactionContext mdTxnCtx) throws Exception {
-        Iterator<String> iter = nodeNames.iterator();
-        // Set<Entry<String, String[]>> set = nodeStores.entrySet();
-        // Iterator<Entry<String, String[]>> im = set.iterator();
-
-        while (iter.hasNext()) {
-            // Map.Entry<String, String[]> me = (Map.Entry<String,
-            // String[]>)im.next();
-            MetadataManager.INSTANCE.addNode(mdTxnCtx, new Node(iter.next(), 0, 0/*
-                                                                                 * , me . getValue ( )
-                                                                                 */));
-        }
-    }
-
-    public static void insertInitialGroups(MetadataTransactionContext mdTxnCtx) throws Exception {
-        String groupName = MetadataPrimaryIndexes.DATAVERSE_DATASET.getNodeGroupName();
-        List<String> metadataGroupNodeNames = new ArrayList<String>();
-        metadataGroupNodeNames.add(metadataNodeName);
-        NodeGroup groupRecord = new NodeGroup(groupName, metadataGroupNodeNames);
-        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, groupRecord);
-
-        List<String> nodes = new ArrayList<String>();
-        nodes.addAll(nodeNames);
-        NodeGroup defaultGroup = new NodeGroup(MetadataConstants.METADATA_DEFAULT_NODEGROUP_NAME, nodes);
-        MetadataManager.INSTANCE.addNodegroup(mdTxnCtx, defaultGroup);
-
-    }
-
-    private static void insertInitialAdapters(MetadataTransactionContext mdTxnCtx) throws Exception {
-        String[] builtInAdapterClassNames = new String[] {
-                "edu.uci.ics.asterix.external.adapter.factory.NCFileSystemAdapterFactory",
-                "edu.uci.ics.asterix.external.adapter.factory.HDFSAdapterFactory",
-                "edu.uci.ics.asterix.external.adapter.factory.HiveAdapterFactory",
-                "edu.uci.ics.asterix.external.adapter.factory.PullBasedTwitterAdapterFactory",
-                "edu.uci.ics.asterix.external.adapter.factory.RSSFeedAdapterFactory",
-                "edu.uci.ics.asterix.external.adapter.factory.CNNFeedAdapterFactory", };
-        DatasourceAdapter adapter;
-        for (String adapterClassName : builtInAdapterClassNames) {
-            adapter = getAdapter(adapterClassName);
-            MetadataManager.INSTANCE.addAdapter(mdTxnCtx, adapter);
-        }
-    }
-
-    private static DatasourceAdapter getAdapter(String adapterFactoryClassName) throws Exception {
-        String adapterName = ((IAdapterFactory) (Class.forName(adapterFactoryClassName).newInstance())).getName();
-        return new DatasourceAdapter(new AdapterIdentifier(MetadataConstants.METADATA_DATAVERSE_NAME, adapterName),
-                adapterFactoryClassName, DatasourceAdapter.AdapterType.INTERNAL);
-    }
-
-    public static void enlistMetadataDataset(IMetadataIndex index, boolean create) throws Exception {
-        String filePath = metadataStore + index.getFileNameRelativePath();
-        FileReference file = new FileReference(new File(filePath));
-        IInMemoryBufferCache memBufferCache = new InMemoryBufferCache(new HeapBufferAllocator(), DEFAULT_MEM_PAGE_SIZE,
-                DEFAULT_MEM_NUM_PAGES, new TransientFileMapManager());
-        ITypeTraits[] typeTraits = index.getTypeTraits();
-        IBinaryComparatorFactory[] comparatorFactories = index.getKeyBinaryComparatorFactory();
-        int[] bloomFilterKeyFields = index.getBloomFilterKeyFields();
-        ITreeIndexMetaDataFrameFactory metaDataFrameFactory = new LIFOMetaDataFrameFactory();
-        IInMemoryFreePageManager memFreePageManager = new InMemoryFreePageManager(DEFAULT_MEM_NUM_PAGES,
-                metaDataFrameFactory);
-        LSMBTree lsmBtree = null;
-        long resourceID = -1;
-        if (create) {
-            lsmBtree = LSMBTreeUtils.createLSMTree(memBufferCache, memFreePageManager, ioManager, file,
-                    bufferCache, fileMapProvider, typeTraits, comparatorFactories, bloomFilterKeyFields,
-                    runtimeContext.getLSMMergePolicy(), runtimeContext.getLSMBTreeOperationTrackerFactory(),
-                    runtimeContext.getLSMIOScheduler(), AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER);
-            lsmBtree.create();
-            resourceID = runtimeContext.getResourceIdFactory().createId();
-            indexLifecycleManager.register(resourceID, lsmBtree);
-
-            ILocalResourceMetadata localResourceMetadata = new LSMBTreeLocalResourceMetadata(typeTraits,
-                    comparatorFactories, bloomFilterKeyFields, index.isPrimaryIndex(),
-                    GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES);
-            ILocalResourceFactoryProvider localResourceFactoryProvider = new PersistentLocalResourceFactoryProvider(
-                    localResourceMetadata, LocalResource.LSMBTreeResource);
-            ILocalResourceFactory localResourceFactory = localResourceFactoryProvider.getLocalResourceFactory();
-            localResourceRepository.insert(localResourceFactory.createLocalResource(resourceID, file.getFile()
-                    .getPath(), 0));
-        } else {
-            resourceID = localResourceRepository.getResourceByName(file.getFile().getPath()).getResourceId();
-            lsmBtree = (LSMBTree) indexLifecycleManager.getIndex(resourceID);
-            if (lsmBtree == null) {
-                lsmBtree = LSMBTreeUtils.createLSMTree(memBufferCache, memFreePageManager, ioManager, file,
-                        bufferCache, fileMapProvider, typeTraits, comparatorFactories, bloomFilterKeyFields,
-                        runtimeContext.getLSMMergePolicy(), runtimeContext.getLSMBTreeOperationTrackerFactory(),
-                        runtimeContext.getLSMIOScheduler(), AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER);
-                indexLifecycleManager.register(resourceID, lsmBtree);
-            }
-        }
-        
-        index.setResourceID(resourceID);
-        index.setFile(file);
-        indexLifecycleManager.open(resourceID);
-    }
-    
-    
-
-    public static String getOutputDir() {
-        return outputDir;
-    }
-
-    public static String getMetadataNodeName() {
-        return metadataNodeName;
-    }
-
-    public static void startDDLRecovery() throws RemoteException, ACIDException, MetadataException {
-        //#. clean up any record which has pendingAdd/DelOp flag 
-        //   as traversing all records from DATAVERSE_DATASET to DATASET_DATASET, and then to INDEX_DATASET.
-        String dataverseName = null;
-        String datasetName = null;
-        String indexName = null;
-        MetadataTransactionContext mdTxnCtx = null;
-        
-        MetadataManager.INSTANCE.acquireWriteLatch();
-        
-        try {
-            mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-
-            List<Dataverse> dataverses = MetadataManager.INSTANCE.getDataverses(mdTxnCtx);
-            for (Dataverse dataverse : dataverses) {
-                dataverseName = dataverse.getDataverseName();
-                if (dataverse.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
-                    //drop pending dataverse
-                    MetadataManager.INSTANCE.dropDataverse(mdTxnCtx, dataverseName);
-                } else {
-                    List<Dataset> datasets = MetadataManager.INSTANCE.getDataverseDatasets(mdTxnCtx, dataverseName);
-                    for (Dataset dataset : datasets) {
-                        datasetName = dataset.getDatasetName();
-                        if (dataset.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
-                            //drop pending dataset
-                            MetadataManager.INSTANCE.dropDataset(mdTxnCtx, dataverseName, datasetName);
-                        } else {
-                            List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName,
-                                    datasetName);
-                            for (Index index : indexes) {
-                                indexName = index.getIndexName();
-                                if (index.getPendingOp() != IMetadataEntity.PENDING_NO_OP) {
-                                    //drop pending index
-                                    MetadataManager.INSTANCE.dropIndex(mdTxnCtx, dataverseName, datasetName, indexName);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        } catch (Exception e) {
-            MetadataManager.INSTANCE.abortTransaction(mdTxnCtx);
-            throw new MetadataException(e);
-        } finally {
-            MetadataManager.INSTANCE.releaseWriteLatch();
-        }
-    }
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlCompiledMetadataDeclarations.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlCompiledMetadataDeclarations.java
deleted file mode 100644
index 35a9b83..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlCompiledMetadataDeclarations.java
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.declared;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.common.annotations.TypeDataGen;
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.api.IMetadataManager;
-import edu.uci.ics.asterix.metadata.bootstrap.AsterixProperties;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.NodeGroup;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
-import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.data.IAWriterFactory;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.dataflow.std.file.ConstantFileSplitProvider;
-import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
-import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
-
-public class AqlCompiledMetadataDeclarations {
-    private static Logger LOGGER = Logger.getLogger(AqlCompiledMetadataDeclarations.class.getName());
-
-    // We are assuming that there is a one AqlCompiledMetadataDeclarations per
-    // transaction.
-    private final MetadataTransactionContext mdTxnCtx;
-    private String dataverseName = null;
-    private FileSplit outputFile;
-    private Map<String, String[]> stores;
-    private IDataFormat format;
-    private Map<String, String> config;
-
-    private final Map<String, IAType> types;
-    private final Map<String, TypeDataGen> typeDataGenMap;
-    private final IAWriterFactory writerFactory;
-
-    private IMetadataManager metadataManager = MetadataManager.INSTANCE;
-    private boolean isConnected = false;
-
-    public AqlCompiledMetadataDeclarations(MetadataTransactionContext mdTxnCtx, String dataverseName,
-            FileSplit outputFile, Map<String, String> config, Map<String, String[]> stores, Map<String, IAType> types,
-            Map<String, TypeDataGen> typeDataGenMap, IAWriterFactory writerFactory, boolean online) {
-        this.mdTxnCtx = mdTxnCtx;
-        this.dataverseName = dataverseName;
-        this.outputFile = outputFile;
-        this.config = config;
-        if (stores == null && online) {
-            this.stores = AsterixProperties.INSTANCE.getStores();
-        } else {
-            this.stores = stores;
-        }
-        this.types = types;
-        this.typeDataGenMap = typeDataGenMap;
-        this.writerFactory = writerFactory;
-    }
-
-    public void connectToDataverse(String dvName) throws AlgebricksException, AsterixException {
-        if (isConnected) {
-            throw new AlgebricksException("You are already connected to " + dataverseName + " dataverse");
-        }
-        Dataverse dv;
-        try {
-            dv = metadataManager.getDataverse(mdTxnCtx, dvName);
-        } catch (Exception e) {
-            throw new AsterixException(e);
-        }
-        if (dv == null) {
-            throw new AlgebricksException("There is no dataverse with this name " + dvName + " to connect to.");
-        }
-        dataverseName = dvName;
-        isConnected = true;
-        try {
-            format = (IDataFormat) Class.forName(dv.getDataFormat()).newInstance();
-        } catch (Exception e) {
-            throw new AsterixException(e);
-        }
-    }
-
-    public void disconnectFromDataverse() throws AlgebricksException {
-        if (!isConnected) {
-            throw new AlgebricksException("You are not connected to any dataverse");
-        }
-        dataverseName = null;
-        format = null;
-        isConnected = false;
-    }
-
-    public boolean isConnectedToDataverse() {
-        return isConnected;
-    }
-
-    public String getDataverseName() {
-        return dataverseName;
-    }
-
-    public FileSplit getOutputFile() {
-        return outputFile;
-    }
-
-    public IDataFormat getFormat() throws AlgebricksException {
-        if (!isConnected) {
-            throw new AlgebricksException("You need first to connect to a dataverse.");
-        }
-        return format;
-    }
-
-    public String getPropertyValue(String propertyName) {
-        return config.get(propertyName);
-    }
-
-    public IAType findType(String typeName) {
-        Datatype type;
-        try {
-            type = metadataManager.getDatatype(mdTxnCtx, dataverseName, typeName);
-        } catch (Exception e) {
-            throw new IllegalStateException();
-        }
-        if (type == null) {
-            throw new IllegalStateException();
-        }
-        return type.getDatatype();
-    }
-
-    public List<String> findNodeGroupNodeNames(String nodeGroupName) throws AlgebricksException {
-        NodeGroup ng;
-        try {
-            ng = metadataManager.getNodegroup(mdTxnCtx, nodeGroupName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-        if (ng == null) {
-            throw new AlgebricksException("No node group with this name " + nodeGroupName);
-        }
-        return ng.getNodeNames();
-    }
-
-    public Map<String, String[]> getAllStores() {
-        return stores;
-    }
-
-    public Dataset findDataset(String datasetName) throws AlgebricksException {
-        try {
-            return metadataManager.getDataset(mdTxnCtx, dataverseName, datasetName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public List<Index> getDatasetIndexes(String dataverseName, String datasetName) throws AlgebricksException {
-        try {
-            return metadataManager.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public Index getDatasetPrimaryIndex(String dataverseName, String datasetName) throws AlgebricksException {
-        try {
-            return metadataManager.getIndex(mdTxnCtx, dataverseName, datasetName, datasetName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public Index getIndex(String dataverseName, String datasetName, String indexName) throws AlgebricksException {
-        try {
-            return metadataManager.getIndex(mdTxnCtx, dataverseName, datasetName, indexName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public void setOutputFile(FileSplit outputFile) {
-        this.outputFile = outputFile;
-    }
-
-    public Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-            String datasetName, String targetIdxName) throws AlgebricksException {
-        FileSplit[] splits = splitsForInternalOrFeedDataset(datasetName, targetIdxName);
-        IFileSplitProvider splitProvider = new ConstantFileSplitProvider(splits);
-        String[] loc = new String[splits.length];
-        for (int p = 0; p < splits.length; p++) {
-            loc[p] = splits[p].getNodeName();
-        }
-        AlgebricksPartitionConstraint pc = new AlgebricksAbsolutePartitionConstraint(loc);
-        return new Pair<IFileSplitProvider, AlgebricksPartitionConstraint>(splitProvider, pc);
-    }
-
-    private FileSplit[] splitsForInternalOrFeedDataset(String datasetName, String targetIdxName)
-            throws AlgebricksException {
-
-        File relPathFile = new File(getRelativePath(datasetName + "_idx_" + targetIdxName));
-        Dataset dataset = findDataset(datasetName);
-        if (dataset.getDatasetType() != DatasetType.INTERNAL & dataset.getDatasetType() != DatasetType.FEED) {
-            throw new AlgebricksException("Not an internal or feed dataset");
-        }
-        InternalDatasetDetails datasetDetails = (InternalDatasetDetails) dataset.getDatasetDetails();
-        List<String> nodeGroup = findNodeGroupNodeNames(datasetDetails.getNodeGroupName());
-        if (nodeGroup == null) {
-            throw new AlgebricksException("Couldn't find node group " + datasetDetails.getNodeGroupName());
-        }
-
-        List<FileSplit> splitArray = new ArrayList<FileSplit>();
-        for (String nd : nodeGroup) {
-            String[] nodeStores = stores.get(nd);
-            if (nodeStores == null) {
-                LOGGER.warning("Node " + nd + " has no stores.");
-                throw new AlgebricksException("Node " + nd + " has no stores.");
-            } else {
-                for (int j = 0; j < nodeStores.length; j++) {
-                    File f = new File(nodeStores[j] + File.separator + relPathFile);
-                    splitArray.add(new FileSplit(nd, new FileReference(f)));
-                }
-            }
-        }
-        FileSplit[] splits = new FileSplit[splitArray.size()];
-        int i = 0;
-        for (FileSplit fs : splitArray) {
-            splits[i++] = fs;
-        }
-        return splits;
-    }
-
-    public String getRelativePath(String fileName) {
-        return dataverseName + File.separator + fileName;
-    }
-
-    public Map<String, TypeDataGen> getTypeDataGenMap() {
-        return typeDataGenMap;
-    }
-
-    public Map<String, IAType> getTypeDeclarations() {
-        return types;
-    }
-
-    public IAWriterFactory getWriterFactory() {
-        return writerFactory;
-    }
-
-    public MetadataTransactionContext getMetadataTransactionContext() {
-        return mdTxnCtx;
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
deleted file mode 100644
index e1f707c..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/AqlMetadataProvider.java
+++ /dev/null
@@ -1,1442 +0,0 @@
-/*
- * Copyright 2009-2013 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.declared;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.common.context.AsterixRuntimeComponentsProvider;
-import edu.uci.ics.asterix.common.context.TransactionSubsystemProvider;
-import edu.uci.ics.asterix.common.dataflow.IAsterixApplicationContextInfo;
-import edu.uci.ics.asterix.common.parse.IParseFileSplitsDecl;
-import edu.uci.ics.asterix.dataflow.data.nontagged.valueproviders.AqlPrimitiveValueProviderFactory;
-import edu.uci.ics.asterix.external.adapter.factory.IAdapterFactory;
-import edu.uci.ics.asterix.external.adapter.factory.IGenericDatasetAdapterFactory;
-import edu.uci.ics.asterix.external.adapter.factory.ITypedDatasetAdapterFactory;
-import edu.uci.ics.asterix.external.data.operator.ExternalDataScanOperatorDescriptor;
-import edu.uci.ics.asterix.external.data.operator.FeedIntakeOperatorDescriptor;
-import edu.uci.ics.asterix.external.data.operator.FeedMessageOperatorDescriptor;
-import edu.uci.ics.asterix.external.dataset.adapter.IDatasourceAdapter;
-import edu.uci.ics.asterix.external.dataset.adapter.ITypedDatasourceAdapter;
-import edu.uci.ics.asterix.external.feed.lifecycle.FeedId;
-import edu.uci.ics.asterix.external.feed.lifecycle.IFeedMessage;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.formats.nontagged.AqlBinaryComparatorFactoryProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlTypeTraitProvider;
-import edu.uci.ics.asterix.metadata.MetadataException;
-import edu.uci.ics.asterix.metadata.MetadataManager;
-import edu.uci.ics.asterix.metadata.MetadataTransactionContext;
-import edu.uci.ics.asterix.metadata.bootstrap.AsterixProperties;
-import edu.uci.ics.asterix.metadata.bootstrap.MetadataConstants;
-import edu.uci.ics.asterix.metadata.dataset.hints.DatasetHints.DatasetCardinalityHint;
-import edu.uci.ics.asterix.metadata.entities.Dataset;
-import edu.uci.ics.asterix.metadata.entities.DatasourceAdapter;
-import edu.uci.ics.asterix.metadata.entities.Datatype;
-import edu.uci.ics.asterix.metadata.entities.Dataverse;
-import edu.uci.ics.asterix.metadata.entities.ExternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.FeedDatasetDetails;
-import edu.uci.ics.asterix.metadata.entities.Index;
-import edu.uci.ics.asterix.metadata.entities.InternalDatasetDetails;
-import edu.uci.ics.asterix.metadata.utils.DatasetUtils;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
-import edu.uci.ics.asterix.runtime.base.AsterixTupleFilterFactory;
-import edu.uci.ics.asterix.runtime.formats.FormatUtils;
-import edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat;
-import edu.uci.ics.asterix.runtime.job.listener.JobEventListenerFactory;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexInstantSearchOperationCallbackFactory;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexModificationOperationCallbackFactory;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.PrimaryIndexSearchOperationCallbackFactory;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.SecondaryIndexModificationOperationCallbackFactory;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.SecondaryIndexSearchOperationCallbackFactory;
-import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
-import edu.uci.ics.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionRuntimeProvider;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSink;
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSource;
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSourceIndex;
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
-import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
-import edu.uci.ics.hyracks.algebricks.core.jobgen.impl.JobGenContext;
-import edu.uci.ics.hyracks.algebricks.core.jobgen.impl.JobGenHelper;
-import edu.uci.ics.hyracks.algebricks.data.IAWriterFactory;
-import edu.uci.ics.hyracks.algebricks.data.IPrinterFactory;
-import edu.uci.ics.hyracks.algebricks.data.IResultSerializerFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.operators.std.SinkWriterRuntimeFactory;
-import edu.uci.ics.hyracks.api.dataflow.IOperatorDescriptor;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ILinearizeComparatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.IResultSerializerFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.dataflow.value.ITypeTraits;
-import edu.uci.ics.hyracks.api.dataflow.value.RecordDescriptor;
-import edu.uci.ics.hyracks.api.dataset.ResultSetId;
-import edu.uci.ics.hyracks.api.io.FileReference;
-import edu.uci.ics.hyracks.api.job.JobSpecification;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import edu.uci.ics.hyracks.data.std.primitive.ShortPointable;
-import edu.uci.ics.hyracks.dataflow.std.file.ConstantFileSplitProvider;
-import edu.uci.ics.hyracks.dataflow.std.file.FileScanOperatorDescriptor;
-import edu.uci.ics.hyracks.dataflow.std.file.FileSplit;
-import edu.uci.ics.hyracks.dataflow.std.file.IFileSplitProvider;
-import edu.uci.ics.hyracks.dataflow.std.file.ITupleParserFactory;
-import edu.uci.ics.hyracks.dataflow.std.result.ResultWriterOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.btree.dataflow.BTreeSearchOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.btree.frames.BTreeNSMInteriorFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.IPrimitiveValueProviderFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallbackFactory;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexFrameFactory;
-import edu.uci.ics.hyracks.storage.am.common.dataflow.TreeIndexBulkLoadOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallbackFactory;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOperation;
-import edu.uci.ics.hyracks.storage.am.common.tuples.TypeAwareTupleWriterFactory;
-import edu.uci.ics.hyracks.storage.am.lsm.btree.dataflow.LSMBTreeDataflowHelperFactory;
-import edu.uci.ics.hyracks.storage.am.lsm.common.dataflow.LSMTreeIndexInsertUpdateDeleteOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.dataflow.LSMInvertedIndexDataflowHelperFactory;
-import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.dataflow.LSMInvertedIndexInsertUpdateDeleteOperator;
-import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.tokenizers.IBinaryTokenizerFactory;
-import edu.uci.ics.hyracks.storage.am.lsm.rtree.dataflow.LSMRTreeDataflowHelperFactory;
-import edu.uci.ics.hyracks.storage.am.rtree.dataflow.RTreeSearchOperatorDescriptor;
-import edu.uci.ics.hyracks.storage.am.rtree.frames.RTreePolicyType;
-import edu.uci.ics.hyracks.storage.am.rtree.linearize.HilbertDoubleComparatorFactory;
-import edu.uci.ics.hyracks.storage.am.rtree.linearize.ZCurveDoubleComparatorFactory;
-import edu.uci.ics.hyracks.storage.am.rtree.linearize.ZCurveIntComparatorFactory;
-
-public class AqlMetadataProvider implements IMetadataProvider<AqlSourceId, String> {
-    private static Logger LOGGER = Logger.getLogger(AqlMetadataProvider.class.getName());
-    private MetadataTransactionContext mdTxnCtx;
-    private boolean isWriteTransaction;
-    private Map<String, String[]> stores;
-    private Map<String, String> config;
-    private IAWriterFactory writerFactory;
-    private FileSplit outputFile;
-    private ResultSetId resultSetId;
-    private IResultSerializerFactoryProvider resultSerializerFactoryProvider;
-
-    private final Dataverse defaultDataverse;
-    private JobId jobId;
-
-    private static final Map<String, String> adapterFactoryMapping = initializeAdapterFactoryMapping();
-
-    public String getPropertyValue(String propertyName) {
-        return config.get(propertyName);
-    }
-
-    public void setConfig(Map<String, String> config) {
-        this.config = config;
-    }
-
-    public Map<String, String[]> getAllStores() {
-        return stores;
-    }
-
-    public Map<String, String> getConfig() {
-        return config;
-    }
-
-    public AqlMetadataProvider(Dataverse defaultDataverse) {
-        this.defaultDataverse = defaultDataverse;
-        this.stores = AsterixProperties.INSTANCE.getStores();
-    }
-
-    public void setJobId(JobId jobId) {
-        this.jobId = jobId;
-    }
-
-    public Dataverse getDefaultDataverse() {
-        return defaultDataverse;
-    }
-
-    public String getDefaultDataverseName() {
-        return defaultDataverse == null ? null : defaultDataverse.getDataverseName();
-    }
-
-    public void setWriteTransaction(boolean writeTransaction) {
-        this.isWriteTransaction = writeTransaction;
-    }
-
-    public void setWriterFactory(IAWriterFactory writerFactory) {
-        this.writerFactory = writerFactory;
-    }
-
-    public void setMetadataTxnContext(MetadataTransactionContext mdTxnCtx) {
-        this.mdTxnCtx = mdTxnCtx;
-    }
-
-    public MetadataTransactionContext getMetadataTxnContext() {
-        return mdTxnCtx;
-    }
-
-    public IAWriterFactory getWriterFactory() {
-        return this.writerFactory;
-    }
-
-    public FileSplit getOutputFile() {
-        return outputFile;
-    }
-
-    public void setOutputFile(FileSplit outputFile) {
-        this.outputFile = outputFile;
-    }
-
-    public ResultSetId getResultSetId() {
-        return resultSetId;
-    }
-
-    public void setResultSetId(ResultSetId resultSetId) {
-        this.resultSetId = resultSetId;
-    }
-
-    public void setResultSerializerFactoryProvider(IResultSerializerFactoryProvider rafp) {
-        this.resultSerializerFactoryProvider = rafp;
-    }
-
-    public IResultSerializerFactoryProvider getResultSerializerFactoryProvider() {
-        return resultSerializerFactoryProvider;
-    }
-
-    @Override
-    public AqlDataSource findDataSource(AqlSourceId id) throws AlgebricksException {
-        AqlSourceId aqlId = (AqlSourceId) id;
-        try {
-            return lookupSourceInMetadata(aqlId);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public boolean isWriteTransaction() {
-        return isWriteTransaction;
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getScannerRuntime(
-            IDataSource<AqlSourceId> dataSource, List<LogicalVariable> scanVariables,
-            List<LogicalVariable> projectVariables, boolean projectPushed, IOperatorSchema opSchema,
-            IVariableTypeEnvironment typeEnv, JobGenContext context, JobSpecification jobSpec, Object implConfig)
-            throws AlgebricksException {
-        Dataset dataset;
-        try {
-            dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataSource.getId().getDataverseName(), dataSource
-                    .getId().getDatasetName());
-
-            if (dataset == null) {
-                throw new AlgebricksException("Unknown dataset " + dataSource.getId().getDatasetName()
-                        + " in dataverse " + dataSource.getId().getDataverseName());
-            }
-            switch (dataset.getDatasetType()) {
-                case FEED:
-                    if (dataSource instanceof ExternalFeedDataSource) {
-                        return buildExternalDatasetScan(jobSpec, dataset, dataSource);
-                    } else {
-                        return buildInternalDatasetScan(jobSpec, scanVariables, opSchema, typeEnv, dataset, dataSource,
-                                context, implConfig);
-
-                    }
-                case INTERNAL: {
-                    return buildInternalDatasetScan(jobSpec, scanVariables, opSchema, typeEnv, dataset, dataSource,
-                            context, implConfig);
-                }
-                case EXTERNAL: {
-                    return buildExternalDatasetScan(jobSpec, dataset, dataSource);
-                }
-                default: {
-                    throw new IllegalArgumentException();
-                }
-            }
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildInternalDatasetScan(JobSpecification jobSpec,
-            List<LogicalVariable> outputVars, IOperatorSchema opSchema, IVariableTypeEnvironment typeEnv,
-            Dataset dataset, IDataSource<AqlSourceId> dataSource, JobGenContext context, Object implConfig)
-            throws AlgebricksException, MetadataException {
-        AqlSourceId asid = dataSource.getId();
-        String dataverseName = asid.getDataverseName();
-        String datasetName = asid.getDatasetName();
-        Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataverseName, datasetName, datasetName);
-        return buildBtreeRuntime(jobSpec, outputVars, opSchema, typeEnv, context, false, dataset,
-                primaryIndex.getIndexName(), null, null, true, true, implConfig);
-    }
-
-    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildExternalDatasetScan(JobSpecification jobSpec,
-            Dataset dataset, IDataSource<AqlSourceId> dataSource) throws AlgebricksException, MetadataException {
-        String itemTypeName = dataset.getItemTypeName();
-        IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(), itemTypeName)
-                .getDatatype();
-        if (dataSource instanceof ExternalFeedDataSource) {
-            return buildFeedIntakeRuntime(jobSpec, dataset);
-        } else {
-            return buildExternalDataScannerRuntime(jobSpec, itemType,
-                    (ExternalDatasetDetails) dataset.getDatasetDetails(), NonTaggedDataFormat.INSTANCE);
-        }
-    }
-
-    @SuppressWarnings("rawtypes")
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildExternalDataScannerRuntime(
-            JobSpecification jobSpec, IAType itemType, ExternalDatasetDetails datasetDetails, IDataFormat format)
-            throws AlgebricksException {
-        if (itemType.getTypeTag() != ATypeTag.RECORD) {
-            throw new AlgebricksException("Can only scan datasets of records.");
-        }
-
-        IGenericDatasetAdapterFactory adapterFactory;
-        IDatasourceAdapter adapter;
-        String adapterName;
-        DatasourceAdapter adapterEntity;
-        String adapterFactoryClassname;
-        try {
-            adapterName = datasetDetails.getAdapter();
-            adapterEntity = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, MetadataConstants.METADATA_DATAVERSE_NAME,
-                    adapterName);
-            if (adapterEntity != null) {
-                adapterFactoryClassname = adapterEntity.getClassname();
-                adapterFactory = (IGenericDatasetAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
-            } else {
-                adapterFactoryClassname = adapterFactoryMapping.get(adapterName);
-                if (adapterFactoryClassname == null) {
-                    throw new AlgebricksException(" Unknown adapter :" + adapterName);
-                }
-                adapterFactory = (IGenericDatasetAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
-            }
-
-            adapter = ((IGenericDatasetAdapterFactory) adapterFactory).createAdapter(datasetDetails.getProperties(),
-                    itemType);
-        } catch (AlgebricksException ae) {
-            throw ae;
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new AlgebricksException("Unable to create adapter " + e);
-        }
-
-        if (!(adapter.getAdapterType().equals(IDatasourceAdapter.AdapterType.READ) || adapter.getAdapterType().equals(
-                IDatasourceAdapter.AdapterType.READ_WRITE))) {
-            throw new AlgebricksException("external dataset adapter does not support read operation");
-        }
-        ARecordType rt = (ARecordType) itemType;
-
-        ISerializerDeserializer payloadSerde = format.getSerdeProvider().getSerializerDeserializer(itemType);
-        RecordDescriptor scannerDesc = new RecordDescriptor(new ISerializerDeserializer[] { payloadSerde });
-
-        ExternalDataScanOperatorDescriptor dataScanner = new ExternalDataScanOperatorDescriptor(jobSpec,
-                adapterFactoryClassname, datasetDetails.getProperties(), rt, scannerDesc);
-
-        AlgebricksPartitionConstraint constraint;
-        try {
-            constraint = adapter.getPartitionConstraint();
-        } catch (Exception e) {
-            throw new AlgebricksException(e);
-        }
-
-        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(dataScanner, constraint);
-    }
-
-    @SuppressWarnings("rawtypes")
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildScannerRuntime(JobSpecification jobSpec,
-            IAType itemType, IParseFileSplitsDecl decl, IDataFormat format) throws AlgebricksException {
-        if (itemType.getTypeTag() != ATypeTag.RECORD) {
-            throw new AlgebricksException("Can only scan datasets of records.");
-        }
-        ARecordType rt = (ARecordType) itemType;
-        ITupleParserFactory tupleParser = format.createTupleParser(rt, decl);
-        FileSplit[] splits = decl.getSplits();
-        IFileSplitProvider scannerSplitProvider = new ConstantFileSplitProvider(splits);
-        ISerializerDeserializer payloadSerde = format.getSerdeProvider().getSerializerDeserializer(itemType);
-        RecordDescriptor scannerDesc = new RecordDescriptor(new ISerializerDeserializer[] { payloadSerde });
-        IOperatorDescriptor scanner = new FileScanOperatorDescriptor(jobSpec, scannerSplitProvider, tupleParser,
-                scannerDesc);
-        String[] locs = new String[splits.length];
-        for (int i = 0; i < splits.length; i++) {
-            locs[i] = splits[i].getNodeName();
-        }
-        AlgebricksPartitionConstraint apc = new AlgebricksAbsolutePartitionConstraint(locs);
-        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(scanner, apc);
-    }
-
-    @SuppressWarnings("rawtypes")
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildFeedIntakeRuntime(JobSpecification jobSpec,
-            Dataset dataset) throws AlgebricksException {
-
-        FeedDatasetDetails datasetDetails = (FeedDatasetDetails) dataset.getDatasetDetails();
-        DatasourceAdapter adapterEntity;
-        IDatasourceAdapter adapter;
-        IAdapterFactory adapterFactory;
-        IAType adapterOutputType;
-        String adapterName;
-        String adapterFactoryClassname;
-
-        try {
-            adapterName = datasetDetails.getAdapterFactory();
-            adapterEntity = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, MetadataConstants.METADATA_DATAVERSE_NAME,
-                    adapterName);
-            if (adapterEntity != null) {
-                adapterFactoryClassname = adapterEntity.getClassname();
-                adapterFactory = (IAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
-            } else {
-                adapterFactoryClassname = adapterFactoryMapping.get(adapterName);
-                if (adapterFactoryClassname != null) {
-                } else {
-                    // adapterName has been provided as a fully qualified classname 
-                    adapterFactoryClassname = adapterName;
-                }
-                adapterFactory = (IAdapterFactory) Class.forName(adapterFactoryClassname).newInstance();
-            }
-
-            if (adapterFactory instanceof ITypedDatasetAdapterFactory) {
-                adapter = ((ITypedDatasetAdapterFactory) adapterFactory).createAdapter(datasetDetails.getProperties());
-                adapterOutputType = ((ITypedDatasourceAdapter) adapter).getAdapterOutputType();
-            } else if (adapterFactory instanceof IGenericDatasetAdapterFactory) {
-                String outputTypeName = datasetDetails.getProperties().get(IGenericDatasetAdapterFactory.KEY_TYPE_NAME);
-                adapterOutputType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(),
-                        outputTypeName).getDatatype();
-                adapter = ((IGenericDatasetAdapterFactory) adapterFactory).createAdapter(
-                        datasetDetails.getProperties(), adapterOutputType);
-            } else {
-                throw new IllegalStateException(" Unknown factory type for " + adapterFactoryClassname);
-            }
-        } catch (AlgebricksException ae) {
-            throw ae;
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new AlgebricksException("unable to create adapter  " + e);
-        }
-
-        ISerializerDeserializer payloadSerde = NonTaggedDataFormat.INSTANCE.getSerdeProvider()
-                .getSerializerDeserializer(adapterOutputType);
-        RecordDescriptor feedDesc = new RecordDescriptor(new ISerializerDeserializer[] { payloadSerde });
-
-        FeedIntakeOperatorDescriptor feedIngestor = new FeedIntakeOperatorDescriptor(jobSpec, new FeedId(
-                dataset.getDataverseName(), dataset.getDatasetName()), adapterFactoryClassname,
-                datasetDetails.getProperties(), (ARecordType) adapterOutputType, feedDesc);
-
-        AlgebricksPartitionConstraint constraint = null;
-        try {
-            constraint = adapter.getPartitionConstraint();
-        } catch (Exception e) {
-            throw new AlgebricksException(e);
-        }
-        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(feedIngestor, constraint);
-    }
-
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildFeedMessengerRuntime(
-            AqlMetadataProvider metadataProvider, JobSpecification jobSpec, FeedDatasetDetails datasetDetails,
-            String dataverse, String dataset, List<IFeedMessage> feedMessages) throws AlgebricksException {
-        Pair<IFileSplitProvider, AlgebricksPartitionConstraint> spPc = metadataProvider
-                .splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataverse, dataset, dataset);
-        FeedMessageOperatorDescriptor feedMessenger = new FeedMessageOperatorDescriptor(jobSpec, dataverse, dataset,
-                feedMessages);
-        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(feedMessenger, spPc.second);
-    }
-
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildBtreeRuntime(JobSpecification jobSpec,
-            List<LogicalVariable> outputVars, IOperatorSchema opSchema, IVariableTypeEnvironment typeEnv,
-            JobGenContext context, boolean retainInput, Dataset dataset, String indexName, int[] lowKeyFields,
-            int[] highKeyFields, boolean lowKeyInclusive, boolean highKeyInclusive, Object implConfig)
-            throws AlgebricksException {
-        boolean isSecondary = true;
-        try {
-            Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), dataset.getDatasetName());
-            if (primaryIndex != null) {
-                isSecondary = !indexName.equals(primaryIndex.getIndexName());
-            }
-            int numPrimaryKeys = DatasetUtils.getPartitioningKeys(dataset).size();
-            RecordDescriptor outputRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv, opSchema, context);
-            int numKeys = numPrimaryKeys;
-            int keysStartIndex = outputRecDesc.getFieldCount() - numKeys - 1;
-            ITypeTraits[] typeTraits = null;
-            int[] bloomFilterKeyFields;
-            if (isSecondary) {
-                Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                        dataset.getDatasetName(), indexName);
-                int numSecondaryKeys = secondaryIndex.getKeyFieldNames().size();
-                numKeys += numSecondaryKeys;
-                keysStartIndex = outputVars.size() - numKeys;
-                typeTraits = JobGenHelper.variablesToTypeTraits(outputVars, keysStartIndex, numKeys, typeEnv, context);
-                bloomFilterKeyFields = new int[numSecondaryKeys];
-                for (int i = 0; i < numSecondaryKeys; i++) {
-                    bloomFilterKeyFields[i] = i;
-                }
-            } else {
-                typeTraits = JobGenHelper.variablesToTypeTraits(outputVars, keysStartIndex, numKeys + 1, typeEnv,
-                        context);
-                bloomFilterKeyFields = new int[numPrimaryKeys];
-                for (int i = 0; i < numPrimaryKeys; i++) {
-                    bloomFilterKeyFields[i] = i;
-                }
-            }
-            IBinaryComparatorFactory[] comparatorFactories = JobGenHelper.variablesToAscBinaryComparatorFactories(
-                    outputVars, keysStartIndex, numKeys, typeEnv, context);
-
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> spPc;
-            try {
-                spPc = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(dataset.getDataverseName(),
-                        dataset.getDatasetName(), indexName);
-            } catch (Exception e) {
-                throw new AlgebricksException(e);
-            }
-
-            ISearchOperationCallbackFactory searchCallbackFactory = null;
-            if (isSecondary) {
-                searchCallbackFactory = new SecondaryIndexSearchOperationCallbackFactory();
-            } else {
-                JobId jobId = ((JobEventListenerFactory) jobSpec.getJobletEventListenerFactory()).getJobId();
-                int datasetId = dataset.getDatasetId();
-                int[] primaryKeyFields = new int[numPrimaryKeys];
-                for (int i = 0; i < numPrimaryKeys; i++) {
-                    primaryKeyFields[i] = i;
-                }
-
-                AqlMetadataImplConfig aqlMetadataImplConfig = (AqlMetadataImplConfig) implConfig;
-                TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
-                if (aqlMetadataImplConfig != null && aqlMetadataImplConfig.isInstantLock()) {
-                    searchCallbackFactory = new PrimaryIndexInstantSearchOperationCallbackFactory(jobId, datasetId,
-                            primaryKeyFields, txnSubsystemProvider, ResourceType.LSM_BTREE);
-                } else {
-                    searchCallbackFactory = new PrimaryIndexSearchOperationCallbackFactory(jobId, datasetId,
-                            primaryKeyFields, txnSubsystemProvider, ResourceType.LSM_BTREE);
-                }
-            }
-            BTreeSearchOperatorDescriptor btreeSearchOp = new BTreeSearchOperatorDescriptor(jobSpec, outputRecDesc,
-                    appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), spPc.first,
-                    typeTraits, comparatorFactories, bloomFilterKeyFields, lowKeyFields, highKeyFields,
-                    lowKeyInclusive, highKeyInclusive, new LSMBTreeDataflowHelperFactory(
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
-                    retainInput, searchCallbackFactory);
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeSearchOp, spPc.second);
-
-        } catch (MetadataException me) {
-            throw new AlgebricksException(me);
-        }
-    }
-
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> buildRtreeRuntime(JobSpecification jobSpec,
-            List<LogicalVariable> outputVars, IOperatorSchema opSchema, IVariableTypeEnvironment typeEnv,
-            JobGenContext context, boolean retainInput, Dataset dataset, String indexName, int[] keyFields)
-            throws AlgebricksException {
-        try {
-            ARecordType recType = (ARecordType) findType(dataset.getDataverseName(), dataset.getItemTypeName());
-            int numPrimaryKeys = DatasetUtils.getPartitioningKeys(dataset).size();
-
-            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), indexName);
-            if (secondaryIndex == null) {
-                throw new AlgebricksException("Code generation error: no index " + indexName + " for dataset "
-                        + dataset.getDatasetName());
-            }
-            List<String> secondaryKeyFields = secondaryIndex.getKeyFieldNames();
-            int numSecondaryKeys = secondaryKeyFields.size();
-            if (numSecondaryKeys != 1) {
-                throw new AlgebricksException(
-                        "Cannot use "
-                                + numSecondaryKeys
-                                + " fields as a key for the R-tree index. There can be only one field as a key for the R-tree index.");
-            }
-            Pair<IAType, Boolean> keyTypePair = Index.getNonNullableKeyFieldType(secondaryKeyFields.get(0), recType);
-            IAType keyType = keyTypePair.first;
-            if (keyType == null) {
-                throw new AlgebricksException("Could not find field " + secondaryKeyFields.get(0) + " in the schema.");
-            }
-            int numDimensions = NonTaggedFormatUtil.getNumDimensions(keyType.getTypeTag());
-            int numNestedSecondaryKeyFields = numDimensions * 2;
-            IPrimitiveValueProviderFactory[] valueProviderFactories = new IPrimitiveValueProviderFactory[numNestedSecondaryKeyFields];
-            for (int i = 0; i < numNestedSecondaryKeyFields; i++) {
-                valueProviderFactories[i] = AqlPrimitiveValueProviderFactory.INSTANCE;
-            }
-
-            RecordDescriptor outputRecDesc = JobGenHelper.mkRecordDescriptor(typeEnv, opSchema, context);
-            int keysStartIndex = outputRecDesc.getFieldCount() - numNestedSecondaryKeyFields - numPrimaryKeys;
-            if (retainInput) {
-                keysStartIndex -= numNestedSecondaryKeyFields;
-            }
-            IBinaryComparatorFactory[] comparatorFactories = JobGenHelper.variablesToAscBinaryComparatorFactories(
-                    outputVars, keysStartIndex, numNestedSecondaryKeyFields, typeEnv, context);
-            ITypeTraits[] typeTraits = JobGenHelper.variablesToTypeTraits(outputVars, keysStartIndex,
-                    numNestedSecondaryKeyFields, typeEnv, context);
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> spPc = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-                    dataset.getDataverseName(), dataset.getDatasetName(), indexName);
-
-            IBinaryComparatorFactory[] primaryComparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(
-                    dataset, recType, context.getBinaryComparatorFactoryProvider());
-            IAType nestedKeyType = NonTaggedFormatUtil.getNestedSpatialType(keyType.getTypeTag());
-            ISearchOperationCallbackFactory searchCallbackFactory = new SecondaryIndexSearchOperationCallbackFactory();
-            RTreeSearchOperatorDescriptor rtreeSearchOp = new RTreeSearchOperatorDescriptor(jobSpec, outputRecDesc,
-                    appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(), spPc.first,
-                    typeTraits, comparatorFactories, keyFields, new LSMRTreeDataflowHelperFactory(
-                            valueProviderFactories, RTreePolicyType.RTREE, primaryComparatorFactories,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER, proposeLinearizer(
-                                    nestedKeyType.getTypeTag(), comparatorFactories.length),
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
-                    retainInput, searchCallbackFactory);
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(rtreeSearchOp, spPc.second);
-
-        } catch (MetadataException me) {
-            throw new AlgebricksException(me);
-        }
-    }
-
-    @Override
-    public Pair<IPushRuntimeFactory, AlgebricksPartitionConstraint> getWriteFileRuntime(IDataSink sink,
-            int[] printColumns, IPrinterFactory[] printerFactories, RecordDescriptor inputDesc) {
-        FileSplitDataSink fsds = (FileSplitDataSink) sink;
-        FileSplitSinkId fssi = (FileSplitSinkId) fsds.getId();
-        FileSplit fs = fssi.getFileSplit();
-        File outFile = fs.getLocalFile().getFile();
-        String nodeId = fs.getNodeName();
-
-        SinkWriterRuntimeFactory runtime = new SinkWriterRuntimeFactory(printColumns, printerFactories, outFile,
-                getWriterFactory(), inputDesc);
-        AlgebricksPartitionConstraint apc = new AlgebricksAbsolutePartitionConstraint(new String[] { nodeId });
-        return new Pair<IPushRuntimeFactory, AlgebricksPartitionConstraint>(runtime, apc);
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getResultHandleRuntime(IDataSink sink,
-            int[] printColumns, IPrinterFactory[] printerFactories, RecordDescriptor inputDesc, boolean ordered,
-            JobSpecification spec) throws AlgebricksException {
-        ResultSetDataSink rsds = (ResultSetDataSink) sink;
-        ResultSetSinkId rssId = (ResultSetSinkId) rsds.getId();
-        ResultSetId rsId = rssId.getResultSetId();
-        String nodeName = rssId.getResultNodeName();
-
-        ResultWriterOperatorDescriptor resultWriter = null;
-        try {
-            IResultSerializerFactory resultSerializedAppenderFactory = resultSerializerFactoryProvider
-                    .getAqlResultSerializerFactoryProvider(printColumns, printerFactories, getWriterFactory());
-            resultWriter = new ResultWriterOperatorDescriptor(spec, rsId, ordered, resultSerializedAppenderFactory);
-        } catch (IOException e) {
-            throw new AlgebricksException(e);
-        }
-
-        AlgebricksPartitionConstraint apc = new AlgebricksAbsolutePartitionConstraint(new String[] { nodeName });
-        return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(resultWriter, apc);
-    }
-
-    @Override
-    public IDataSourceIndex<String, AqlSourceId> findDataSourceIndex(String indexId, AqlSourceId dataSourceId)
-            throws AlgebricksException {
-        AqlDataSource ads = findDataSource(dataSourceId);
-        Dataset dataset = ads.getDataset();
-        if (dataset.getDatasetType() == DatasetType.EXTERNAL) {
-            throw new AlgebricksException("No index for external dataset " + dataSourceId);
-        }
-        try {
-            String indexName = (String) indexId;
-            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), indexName);
-            if (secondaryIndex != null) {
-                return new AqlIndex(secondaryIndex, dataset.getDataverseName(), dataset.getDatasetName(), this);
-            } else {
-                Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                        dataset.getDatasetName(), dataset.getDatasetName());
-                if (primaryIndex.getIndexName().equals(indexId)) {
-                    return new AqlIndex(primaryIndex, dataset.getDataverseName(), dataset.getDatasetName(), this);
-                } else {
-                    return null;
-                }
-            }
-        } catch (MetadataException me) {
-            throw new AlgebricksException(me);
-        }
-    }
-
-    public AqlDataSource lookupSourceInMetadata(AqlSourceId aqlId) throws AlgebricksException, MetadataException {
-        Dataset dataset = findDataset(aqlId.getDataverseName(), aqlId.getDatasetName());
-        if (dataset == null) {
-            throw new AlgebricksException("Datasource with id " + aqlId + " was not found.");
-        }
-        String tName = dataset.getItemTypeName();
-        IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, aqlId.getDataverseName(), tName).getDatatype();
-        return new AqlDataSource(aqlId, dataset, itemType);
-    }
-
-    @Override
-    public boolean scannerOperatorIsLeaf(IDataSource<AqlSourceId> dataSource) {
-        AqlSourceId asid = dataSource.getId();
-        String dataverseName = asid.getDataverseName();
-        String datasetName = asid.getDatasetName();
-        Dataset dataset = null;
-        try {
-            dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
-        } catch (MetadataException e) {
-            throw new IllegalStateException(e);
-        }
-
-        if (dataset == null) {
-            throw new IllegalArgumentException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-        return dataset.getDatasetType() == DatasetType.EXTERNAL;
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getWriteResultRuntime(
-            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, List<LogicalVariable> keys,
-            LogicalVariable payload, JobGenContext context, JobSpecification spec) throws AlgebricksException {
-        String dataverseName = dataSource.getId().getDataverseName();
-        String datasetName = dataSource.getId().getDatasetName();
-        int numKeys = keys.size();
-        // move key fields to front
-        int[] fieldPermutation = new int[numKeys + 1];
-        int[] bloomFilterKeyFields = new int[numKeys];
-        // System.arraycopy(keys, 0, fieldPermutation, 0, numKeys);
-        int i = 0;
-        for (LogicalVariable varKey : keys) {
-            int idx = propagatedSchema.findVariable(varKey);
-            fieldPermutation[i] = idx;
-            bloomFilterKeyFields[i] = i;
-            i++;
-        }
-        fieldPermutation[numKeys] = propagatedSchema.findVariable(payload);
-
-        Dataset dataset = findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-
-        try {
-            Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), dataset.getDatasetName());
-            String indexName = primaryIndex.getIndexName();
-
-            String itemTypeName = dataset.getItemTypeName();
-            ARecordType itemType = (ARecordType) MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
-                    dataset.getDataverseName(), itemTypeName).getDatatype();
-            ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
-            IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
-                    itemType, context.getBinaryComparatorFactoryProvider());
-
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-                    dataSource.getId().getDataverseName(), datasetName, indexName);
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-
-            String numElementsHintString = dataset.getHints().get("CARDINALITY");
-            long numElementsHint;
-            if (numElementsHintString == null) {
-                numElementsHint = DatasetCardinalityHint.DEFAULT;
-            } else {
-                numElementsHint = Long.parseLong(dataset.getHints().get("CARDINALITY"));
-            }
-
-            //TODO
-            //figure out the right behavior of the bulkload and then give the right callback
-            //(ex. what's the expected behavior when there is an error during bulkload?)
-            TreeIndexBulkLoadOperatorDescriptor btreeBulkLoad = new TreeIndexBulkLoadOperatorDescriptor(spec,
-                    appContext.getStorageManagerInterface(), appContext.getIndexLifecycleManagerProvider(),
-                    splitsAndConstraint.first, typeTraits, comparatorFactories, bloomFilterKeyFields, fieldPermutation,
-                    GlobalConfig.DEFAULT_BTREE_FILL_FACTOR, false, numElementsHint, new LSMBTreeDataflowHelperFactory(
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
-                    NoOpOperationCallbackFactory.INSTANCE);
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeBulkLoad,
-                    splitsAndConstraint.second);
-        } catch (MetadataException me) {
-            throw new AlgebricksException(me);
-        }
-    }
-
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInsertOrDeleteRuntime(IndexOperation indexOp,
-            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> keys, LogicalVariable payload, RecordDescriptor recordDesc, JobGenContext context,
-            JobSpecification spec) throws AlgebricksException {
-        String datasetName = dataSource.getId().getDatasetName();
-        int numKeys = keys.size();
-        // Move key fields to front.
-        int[] fieldPermutation = new int[numKeys + 1];
-        int[] bloomFilterKeyFields = new int[numKeys];
-        int i = 0;
-        for (LogicalVariable varKey : keys) {
-            int idx = propagatedSchema.findVariable(varKey);
-            fieldPermutation[i] = idx;
-            bloomFilterKeyFields[i] = i;
-            i++;
-        }
-        fieldPermutation[numKeys] = propagatedSchema.findVariable(payload);
-
-        Dataset dataset = findDataset(dataSource.getId().getDataverseName(), datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse "
-                    + dataSource.getId().getDataverseName());
-        }
-        try {
-            Index primaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), dataset.getDatasetName());
-            String indexName = primaryIndex.getIndexName();
-
-            String itemTypeName = dataset.getItemTypeName();
-            ARecordType itemType = (ARecordType) MetadataManager.INSTANCE.getDatatype(mdTxnCtx,
-                    dataSource.getId().getDataverseName(), itemTypeName).getDatatype();
-
-            ITypeTraits[] typeTraits = DatasetUtils.computeTupleTypeTraits(dataset, itemType);
-
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-            IBinaryComparatorFactory[] comparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(dataset,
-                    itemType, context.getBinaryComparatorFactoryProvider());
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-                    dataSource.getId().getDataverseName(), datasetName, indexName);
-
-            //prepare callback
-            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
-            int datasetId = dataset.getDatasetId();
-            int[] primaryKeyFields = new int[numKeys];
-            for (i = 0; i < numKeys; i++) {
-                primaryKeyFields[i] = i;
-            }
-            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
-            PrimaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new PrimaryIndexModificationOperationCallbackFactory(
-                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE);
-
-            LSMTreeIndexInsertUpdateDeleteOperatorDescriptor btreeBulkLoad = new LSMTreeIndexInsertUpdateDeleteOperatorDescriptor(
-                    spec, recordDesc, appContext.getStorageManagerInterface(),
-                    appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits,
-                    comparatorFactories, bloomFilterKeyFields, fieldPermutation, indexOp,
-                    new LSMBTreeDataflowHelperFactory(AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES), null,
-                    modificationCallbackFactory);
-
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeBulkLoad,
-                    splitsAndConstraint.second);
-
-        } catch (MetadataException me) {
-            throw new AlgebricksException(me);
-        }
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInsertRuntime(
-            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> keys, LogicalVariable payload, RecordDescriptor recordDesc, JobGenContext context,
-            JobSpecification spec) throws AlgebricksException {
-        return getInsertOrDeleteRuntime(IndexOperation.INSERT, dataSource, propagatedSchema, typeEnv, keys, payload,
-                recordDesc, context, spec);
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getDeleteRuntime(
-            IDataSource<AqlSourceId> dataSource, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> keys, LogicalVariable payload, RecordDescriptor recordDesc, JobGenContext context,
-            JobSpecification spec) throws AlgebricksException {
-        return getInsertOrDeleteRuntime(IndexOperation.DELETE, dataSource, propagatedSchema, typeEnv, keys, payload,
-                recordDesc, context, spec);
-    }
-
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexInsertOrDeleteRuntime(
-            IndexOperation indexOp, IDataSourceIndex<String, AqlSourceId> dataSourceIndex,
-            IOperatorSchema propagatedSchema, IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys, ILogicalExpression filterExpr,
-            RecordDescriptor recordDesc, JobGenContext context, JobSpecification spec) throws AlgebricksException {
-        String indexName = dataSourceIndex.getId();
-        String dataverseName = dataSourceIndex.getDataSource().getId().getDataverseName();
-        String datasetName = dataSourceIndex.getDataSource().getId().getDatasetName();
-
-        Dataset dataset = findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName);
-        }
-        Index secondaryIndex;
-        try {
-            secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), indexName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-        AsterixTupleFilterFactory filterFactory = createTupleFilterFactory(inputSchemas, typeEnv, filterExpr, context);
-        switch (secondaryIndex.getIndexType()) {
-            case BTREE: {
-                return getBTreeDmlRuntime(dataverseName, datasetName, indexName, propagatedSchema, typeEnv,
-                        primaryKeys, secondaryKeys, filterFactory, recordDesc, context, spec, indexOp);
-            }
-            case RTREE: {
-                return getRTreeDmlRuntime(dataverseName, datasetName, indexName, propagatedSchema, typeEnv,
-                        primaryKeys, secondaryKeys, filterFactory, recordDesc, context, spec, indexOp);
-            }
-            case WORD_INVIX:
-            case NGRAM_INVIX:
-            case FUZZY_WORD_INVIX:
-            case FUZZY_NGRAM_INVIX: {
-                return getInvertedIndexDmlRuntime(dataverseName, datasetName, indexName, propagatedSchema, typeEnv,
-                        primaryKeys, secondaryKeys, filterFactory, recordDesc, context, spec, indexOp,
-                        secondaryIndex.getIndexType());
-            }
-            default: {
-                throw new AlgebricksException("Insert and delete not implemented for index type: "
-                        + secondaryIndex.getIndexType());
-            }
-        }
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexInsertRuntime(
-            IDataSourceIndex<String, AqlSourceId> dataSourceIndex, IOperatorSchema propagatedSchema,
-            IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv, List<LogicalVariable> primaryKeys,
-            List<LogicalVariable> secondaryKeys, ILogicalExpression filterExpr, RecordDescriptor recordDesc,
-            JobGenContext context, JobSpecification spec) throws AlgebricksException {
-        return getIndexInsertOrDeleteRuntime(IndexOperation.INSERT, dataSourceIndex, propagatedSchema, inputSchemas,
-                typeEnv, primaryKeys, secondaryKeys, filterExpr, recordDesc, context, spec);
-    }
-
-    @Override
-    public Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getIndexDeleteRuntime(
-            IDataSourceIndex<String, AqlSourceId> dataSourceIndex, IOperatorSchema propagatedSchema,
-            IOperatorSchema[] inputSchemas, IVariableTypeEnvironment typeEnv, List<LogicalVariable> primaryKeys,
-            List<LogicalVariable> secondaryKeys, ILogicalExpression filterExpr, RecordDescriptor recordDesc,
-            JobGenContext context, JobSpecification spec) throws AlgebricksException {
-        return getIndexInsertOrDeleteRuntime(IndexOperation.DELETE, dataSourceIndex, propagatedSchema, inputSchemas,
-                typeEnv, primaryKeys, secondaryKeys, filterExpr, recordDesc, context, spec);
-    }
-
-    private AsterixTupleFilterFactory createTupleFilterFactory(IOperatorSchema[] inputSchemas,
-            IVariableTypeEnvironment typeEnv, ILogicalExpression filterExpr, JobGenContext context)
-            throws AlgebricksException {
-        // No filtering condition.
-        if (filterExpr == null) {
-            return null;
-        }
-        IExpressionRuntimeProvider expressionRuntimeProvider = context.getExpressionRuntimeProvider();
-        IScalarEvaluatorFactory filterEvalFactory = expressionRuntimeProvider.createEvaluatorFactory(filterExpr,
-                typeEnv, inputSchemas, context);
-        return new AsterixTupleFilterFactory(filterEvalFactory, context.getBinaryBooleanInspectorFactory());
-    }
-
-    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getBTreeDmlRuntime(String dataverseName,
-            String datasetName, String indexName, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys,
-            AsterixTupleFilterFactory filterFactory, RecordDescriptor recordDesc, JobGenContext context,
-            JobSpecification spec, IndexOperation indexOp) throws AlgebricksException {
-
-        int numKeys = primaryKeys.size() + secondaryKeys.size();
-        // generate field permutations
-        int[] fieldPermutation = new int[numKeys];
-        int[] bloomFilterKeyFields = new int[secondaryKeys.size()];
-        int i = 0;
-        for (LogicalVariable varKey : secondaryKeys) {
-            int idx = propagatedSchema.findVariable(varKey);
-            fieldPermutation[i] = idx;
-            bloomFilterKeyFields[i] = i;
-            i++;
-        }
-        for (LogicalVariable varKey : primaryKeys) {
-            int idx = propagatedSchema.findVariable(varKey);
-            fieldPermutation[i] = idx;
-            i++;
-        }
-
-        Dataset dataset = findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-        String itemTypeName = dataset.getItemTypeName();
-        IAType itemType;
-        try {
-            itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(), itemTypeName)
-                    .getDatatype();
-
-            if (itemType.getTypeTag() != ATypeTag.RECORD) {
-                throw new AlgebricksException("Only record types can be indexed.");
-            }
-
-            ARecordType recType = (ARecordType) itemType;
-
-            // Index parameters.
-            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), indexName);
-
-            List<String> secondaryKeyExprs = secondaryIndex.getKeyFieldNames();
-            ITypeTraits[] typeTraits = new ITypeTraits[numKeys];
-            IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[numKeys];
-            for (i = 0; i < secondaryKeys.size(); ++i) {
-                Pair<IAType, Boolean> keyPairType = Index.getNonNullableKeyFieldType(secondaryKeyExprs.get(i)
-                        .toString(), recType);
-                IAType keyType = keyPairType.first;
-                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
-                        keyType, true);
-                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
-            }
-            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
-            for (String partitioningKey : partitioningKeys) {
-                IAType keyType = recType.getFieldType(partitioningKey);
-                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
-                        keyType, true);
-                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
-                ++i;
-            }
-
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-                    dataverseName, datasetName, indexName);
-
-            //prepare callback
-            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
-            int datasetId = dataset.getDatasetId();
-            int[] primaryKeyFields = new int[primaryKeys.size()];
-            i = 0;
-            for (LogicalVariable varKey : primaryKeys) {
-                int idx = propagatedSchema.findVariable(varKey);
-                primaryKeyFields[i] = idx;
-                i++;
-            }
-            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
-            SecondaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new SecondaryIndexModificationOperationCallbackFactory(
-                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_BTREE);
-
-            LSMTreeIndexInsertUpdateDeleteOperatorDescriptor btreeBulkLoad = new LSMTreeIndexInsertUpdateDeleteOperatorDescriptor(
-                    spec, recordDesc, appContext.getStorageManagerInterface(),
-                    appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits,
-                    comparatorFactories, bloomFilterKeyFields, fieldPermutation, indexOp,
-                    new LSMBTreeDataflowHelperFactory(AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMBTREE_PROVIDER,
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
-                    filterFactory, modificationCallbackFactory);
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(btreeBulkLoad,
-                    splitsAndConstraint.second);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        } catch (IOException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getInvertedIndexDmlRuntime(String dataverseName,
-            String datasetName, String indexName, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys,
-            AsterixTupleFilterFactory filterFactory, RecordDescriptor recordDesc, JobGenContext context,
-            JobSpecification spec, IndexOperation indexOp, IndexType indexType) throws AlgebricksException {
-
-        // Sanity checks.
-        if (primaryKeys.size() > 1) {
-            throw new AlgebricksException("Cannot create inverted index on dataset with composite primary key.");
-        }
-        if (secondaryKeys.size() > 1) {
-            throw new AlgebricksException("Cannot create composite inverted index on multiple fields.");
-        }
-
-        int numKeys = primaryKeys.size() + secondaryKeys.size();
-        // generate field permutations
-        int[] fieldPermutation = new int[numKeys];
-        int i = 0;
-        for (LogicalVariable varKey : secondaryKeys) {
-            int idx = propagatedSchema.findVariable(varKey);
-            fieldPermutation[i] = idx;
-            i++;
-        }
-        for (LogicalVariable varKey : primaryKeys) {
-            int idx = propagatedSchema.findVariable(varKey);
-            fieldPermutation[i] = idx;
-            i++;
-        }
-
-        boolean isPartitioned;
-        if (indexType == IndexType.FUZZY_WORD_INVIX || indexType == IndexType.FUZZY_NGRAM_INVIX) {
-            isPartitioned = true;
-        } else {
-            isPartitioned = false;
-        }
-
-        Dataset dataset = findDataset(dataverseName, datasetName);
-        if (dataset == null) {
-            throw new AlgebricksException("Unknown dataset " + datasetName + " in dataverse " + dataverseName);
-        }
-        String itemTypeName = dataset.getItemTypeName();
-        IAType itemType;
-        try {
-            itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataset.getDataverseName(), itemTypeName)
-                    .getDatatype();
-
-            if (itemType.getTypeTag() != ATypeTag.RECORD) {
-                throw new AlgebricksException("Only record types can be indexed.");
-            }
-
-            ARecordType recType = (ARecordType) itemType;
-
-            // Index parameters.
-            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), indexName);
-
-            List<String> secondaryKeyExprs = secondaryIndex.getKeyFieldNames();
-
-            int numTokenFields = (!isPartitioned) ? secondaryKeys.size() : secondaryKeys.size() + 1;
-            ITypeTraits[] tokenTypeTraits = new ITypeTraits[numTokenFields];
-            ITypeTraits[] invListsTypeTraits = new ITypeTraits[primaryKeys.size()];
-            IBinaryComparatorFactory[] tokenComparatorFactories = new IBinaryComparatorFactory[numTokenFields];
-            IBinaryComparatorFactory[] invListComparatorFactories = new IBinaryComparatorFactory[primaryKeys.size()];
-
-            IAType secondaryKeyType = null;
-            for (i = 0; i < secondaryKeys.size(); ++i) {
-                Pair<IAType, Boolean> keyPairType = Index.getNonNullableKeyFieldType(secondaryKeyExprs.get(i)
-                        .toString(), recType);
-                secondaryKeyType = keyPairType.first;
-            }
-            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
-            i = 0;
-            for (String partitioningKey : partitioningKeys) {
-                IAType keyType = recType.getFieldType(partitioningKey);
-                invListsTypeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
-                ++i;
-            }
-
-            tokenComparatorFactories[0] = NonTaggedFormatUtil.getTokenBinaryComparatorFactory(secondaryKeyType);
-            tokenTypeTraits[0] = NonTaggedFormatUtil.getTokenTypeTrait(secondaryKeyType);
-            if (isPartitioned) {
-                // The partitioning field is hardcoded to be a short *without* an Asterix type tag.
-                tokenComparatorFactories[1] = PointableBinaryComparatorFactory.of(ShortPointable.FACTORY);
-                tokenTypeTraits[1] = ShortPointable.TYPE_TRAITS;
-            }
-            IBinaryTokenizerFactory tokenizerFactory = NonTaggedFormatUtil.getBinaryTokenizerFactory(
-                    secondaryKeyType.getTypeTag(), indexType, secondaryIndex.getGramLength());
-
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-                    dataverseName, datasetName, indexName);
-
-            //prepare callback
-            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
-            int datasetId = dataset.getDatasetId();
-            int[] primaryKeyFields = new int[primaryKeys.size()];
-            i = 0;
-            for (LogicalVariable varKey : primaryKeys) {
-                int idx = propagatedSchema.findVariable(varKey);
-                primaryKeyFields[i] = idx;
-                i++;
-            }
-            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
-            SecondaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new SecondaryIndexModificationOperationCallbackFactory(
-                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_INVERTED_INDEX);
-
-            LSMInvertedIndexInsertUpdateDeleteOperator insertDeleteOp = new LSMInvertedIndexInsertUpdateDeleteOperator(
-                    spec, recordDesc, appContext.getStorageManagerInterface(), splitsAndConstraint.first,
-                    appContext.getIndexLifecycleManagerProvider(), tokenTypeTraits, tokenComparatorFactories,
-                    invListsTypeTraits, invListComparatorFactories, tokenizerFactory, fieldPermutation, indexOp,
-                    new LSMInvertedIndexDataflowHelperFactory(
-                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMINVERTEDINDEX_PROVIDER,
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
-                    filterFactory, modificationCallbackFactory);
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(insertDeleteOp,
-                    splitsAndConstraint.second);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        } catch (IOException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    private Pair<IOperatorDescriptor, AlgebricksPartitionConstraint> getRTreeDmlRuntime(String dataverseName,
-            String datasetName, String indexName, IOperatorSchema propagatedSchema, IVariableTypeEnvironment typeEnv,
-            List<LogicalVariable> primaryKeys, List<LogicalVariable> secondaryKeys,
-            AsterixTupleFilterFactory filterFactory, RecordDescriptor recordDesc, JobGenContext context,
-            JobSpecification spec, IndexOperation indexOp) throws AlgebricksException {
-        try {
-            Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
-            String itemTypeName = dataset.getItemTypeName();
-            IAType itemType = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverseName, itemTypeName).getDatatype();
-            if (itemType.getTypeTag() != ATypeTag.RECORD) {
-                throw new AlgebricksException("Only record types can be indexed.");
-            }
-            ARecordType recType = (ARecordType) itemType;
-            Index secondaryIndex = MetadataManager.INSTANCE.getIndex(mdTxnCtx, dataset.getDataverseName(),
-                    dataset.getDatasetName(), indexName);
-            List<String> secondaryKeyExprs = secondaryIndex.getKeyFieldNames();
-            Pair<IAType, Boolean> keyPairType = Index.getNonNullableKeyFieldType(secondaryKeyExprs.get(0), recType);
-            IAType spatialType = keyPairType.first;
-            int dimension = NonTaggedFormatUtil.getNumDimensions(spatialType.getTypeTag());
-            int numSecondaryKeys = dimension * 2;
-            int numPrimaryKeys = primaryKeys.size();
-            int numKeys = numSecondaryKeys + numPrimaryKeys;
-            ITypeTraits[] typeTraits = new ITypeTraits[numKeys];
-            IBinaryComparatorFactory[] comparatorFactories = new IBinaryComparatorFactory[numKeys];
-            int[] fieldPermutation = new int[numKeys];
-            int i = 0;
-
-            for (LogicalVariable varKey : secondaryKeys) {
-                int idx = propagatedSchema.findVariable(varKey);
-                fieldPermutation[i] = idx;
-                i++;
-            }
-            for (LogicalVariable varKey : primaryKeys) {
-                int idx = propagatedSchema.findVariable(varKey);
-                fieldPermutation[i] = idx;
-                i++;
-            }
-            IAType nestedKeyType = NonTaggedFormatUtil.getNestedSpatialType(spatialType.getTypeTag());
-            IPrimitiveValueProviderFactory[] valueProviderFactories = new IPrimitiveValueProviderFactory[numSecondaryKeys];
-            for (i = 0; i < numSecondaryKeys; i++) {
-                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
-                        nestedKeyType, true);
-                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(nestedKeyType);
-                valueProviderFactories[i] = AqlPrimitiveValueProviderFactory.INSTANCE;
-            }
-            List<String> partitioningKeys = DatasetUtils.getPartitioningKeys(dataset);
-            for (String partitioningKey : partitioningKeys) {
-                IAType keyType = recType.getFieldType(partitioningKey);
-                comparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
-                        keyType, true);
-                typeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
-                ++i;
-            }
-
-            IBinaryComparatorFactory[] primaryComparatorFactories = DatasetUtils.computeKeysBinaryComparatorFactories(
-                    dataset, recType, context.getBinaryComparatorFactoryProvider());
-            IAsterixApplicationContextInfo appContext = (IAsterixApplicationContextInfo) context.getAppContext();
-            Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitsAndConstraint = splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-                    dataverseName, datasetName, indexName);
-
-            //prepare callback
-            JobId jobId = ((JobEventListenerFactory) spec.getJobletEventListenerFactory()).getJobId();
-            int datasetId = dataset.getDatasetId();
-            int[] primaryKeyFields = new int[numPrimaryKeys];
-            i = 0;
-            for (LogicalVariable varKey : primaryKeys) {
-                int idx = propagatedSchema.findVariable(varKey);
-                primaryKeyFields[i] = idx;
-                i++;
-            }
-            TransactionSubsystemProvider txnSubsystemProvider = new TransactionSubsystemProvider();
-            SecondaryIndexModificationOperationCallbackFactory modificationCallbackFactory = new SecondaryIndexModificationOperationCallbackFactory(
-                    jobId, datasetId, primaryKeyFields, txnSubsystemProvider, indexOp, ResourceType.LSM_RTREE);
-
-            LSMTreeIndexInsertUpdateDeleteOperatorDescriptor rtreeUpdate = new LSMTreeIndexInsertUpdateDeleteOperatorDescriptor(
-                    spec, recordDesc, appContext.getStorageManagerInterface(),
-                    appContext.getIndexLifecycleManagerProvider(), splitsAndConstraint.first, typeTraits,
-                    comparatorFactories, null, fieldPermutation, indexOp, new LSMRTreeDataflowHelperFactory(
-                            valueProviderFactories, RTreePolicyType.RTREE, primaryComparatorFactories,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER,
-                            AsterixRuntimeComponentsProvider.LSMRTREE_PROVIDER, proposeLinearizer(
-                                    nestedKeyType.getTypeTag(), comparatorFactories.length),
-                            GlobalConfig.DEFAULT_INDEX_MEM_PAGE_SIZE, GlobalConfig.DEFAULT_INDEX_MEM_NUM_PAGES),
-                    filterFactory, modificationCallbackFactory);
-            return new Pair<IOperatorDescriptor, AlgebricksPartitionConstraint>(rtreeUpdate, splitsAndConstraint.second);
-        } catch (MetadataException | IOException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public JobId getJobId() {
-        return jobId;
-    }
-
-    public static ITreeIndexFrameFactory createBTreeNSMInteriorFrameFactory(ITypeTraits[] typeTraits) {
-        return new BTreeNSMInteriorFrameFactory(new TypeAwareTupleWriterFactory(typeTraits));
-    }
-
-    public static ILinearizeComparatorFactory proposeLinearizer(ATypeTag keyType, int numKeyFields)
-            throws AlgebricksException {
-        if (numKeyFields / 2 == 2 && (keyType == ATypeTag.DOUBLE)) {
-            return new HilbertDoubleComparatorFactory(2);
-        } else if (keyType == ATypeTag.DOUBLE) {
-            return new ZCurveDoubleComparatorFactory(numKeyFields / 2);
-        } else if (keyType == ATypeTag.INT8 || keyType == ATypeTag.INT16 || keyType == ATypeTag.INT32
-                || keyType == ATypeTag.INT64) {
-            return new ZCurveIntComparatorFactory(numKeyFields / 2);
-        } else {
-            throw new AlgebricksException("Cannot propose linearizer for key with type " + keyType + ".");
-        }
-    }
-
-    @Override
-    public IFunctionInfo lookupFunction(FunctionIdentifier fid) {
-        return AsterixBuiltinFunctions.lookupFunction(fid);
-    }
-
-    public Pair<IFileSplitProvider, AlgebricksPartitionConstraint> splitProviderAndPartitionConstraintsForInternalOrFeedDataset(
-            String dataverseName, String datasetName, String targetIdxName) throws AlgebricksException {
-        FileSplit[] splits = splitsForInternalOrFeedDataset(mdTxnCtx, dataverseName, datasetName, targetIdxName);
-        IFileSplitProvider splitProvider = new ConstantFileSplitProvider(splits);
-        String[] loc = new String[splits.length];
-        for (int p = 0; p < splits.length; p++) {
-            loc[p] = splits[p].getNodeName();
-        }
-        AlgebricksPartitionConstraint pc = new AlgebricksAbsolutePartitionConstraint(loc);
-        return new Pair<IFileSplitProvider, AlgebricksPartitionConstraint>(splitProvider, pc);
-    }
-
-    private FileSplit[] splitsForInternalOrFeedDataset(MetadataTransactionContext mdTxnCtx, String dataverseName,
-            String datasetName, String targetIdxName) throws AlgebricksException {
-
-        try {
-            File relPathFile = new File(getRelativePath(dataverseName, datasetName + "_idx_" + targetIdxName));
-            Dataset dataset = MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverseName, datasetName);
-            if (dataset.getDatasetType() != DatasetType.INTERNAL & dataset.getDatasetType() != DatasetType.FEED) {
-                throw new AlgebricksException("Not an internal or feed dataset");
-            }
-            InternalDatasetDetails datasetDetails = (InternalDatasetDetails) dataset.getDatasetDetails();
-            List<String> nodeGroup = MetadataManager.INSTANCE.getNodegroup(mdTxnCtx, datasetDetails.getNodeGroupName())
-                    .getNodeNames();
-            if (nodeGroup == null) {
-                throw new AlgebricksException("Couldn't find node group " + datasetDetails.getNodeGroupName());
-            }
-
-            List<FileSplit> splitArray = new ArrayList<FileSplit>();
-            for (String nd : nodeGroup) {
-                String[] nodeStores = stores.get(nd);
-                if (nodeStores == null) {
-                    LOGGER.warning("Node " + nd + " has no stores.");
-                    throw new AlgebricksException("Node " + nd + " has no stores.");
-                } else {
-                    for (int j = 0; j < nodeStores.length; j++) {
-                        File f = new File(nodeStores[j] + File.separator + relPathFile);
-                        splitArray.add(new FileSplit(nd, new FileReference(f)));
-                    }
-                }
-            }
-            FileSplit[] splits = new FileSplit[splitArray.size()];
-            int i = 0;
-            for (FileSplit fs : splitArray) {
-                splits[i++] = fs;
-            }
-            return splits;
-        } catch (MetadataException me) {
-            throw new AlgebricksException(me);
-        }
-    }
-
-    private static Map<String, String> initializeAdapterFactoryMapping() {
-        Map<String, String> adapterFactoryMapping = new HashMap<String, String>();
-        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.NCFileSystemAdapter",
-                "edu.uci.ics.asterix.external.adapter.factory.NCFileSystemAdapterFactory");
-        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.HDFSAdapter",
-                "edu.uci.ics.asterix.external.adapter.factory.HDFSAdapterFactory");
-        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.PullBasedTwitterAdapter",
-                "edu.uci.ics.asterix.external.dataset.adapter.PullBasedTwitterAdapterFactory");
-        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.RSSFeedAdapter",
-                "edu.uci.ics.asterix.external.dataset.adapter..RSSFeedAdapterFactory");
-        adapterFactoryMapping.put("edu.uci.ics.asterix.external.dataset.adapter.CNNFeedAdapter",
-                "edu.uci.ics.asterix.external.dataset.adapter.CNNFeedAdapterFactory");
-        return adapterFactoryMapping;
-    }
-
-    public DatasourceAdapter getAdapter(MetadataTransactionContext mdTxnCtx, String dataverseName, String adapterName)
-            throws MetadataException {
-        DatasourceAdapter adapter = null;
-        // search in default namespace (built-in adapter)
-        adapter = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, MetadataConstants.METADATA_DATAVERSE_NAME, adapterName);
-
-        // search in dataverse (user-defined adapter)
-        if (adapter == null) {
-            adapter = MetadataManager.INSTANCE.getAdapter(mdTxnCtx, dataverseName, adapterName);
-        }
-        return adapter;
-    }
-
-    private static String getRelativePath(String dataverseName, String fileName) {
-        return dataverseName + File.separator + fileName;
-    }
-
-    public Pair<IFileSplitProvider, IFileSplitProvider> getInvertedIndexFileSplitProviders(
-            IFileSplitProvider splitProvider) {
-        int numSplits = splitProvider.getFileSplits().length;
-        FileSplit[] btreeSplits = new FileSplit[numSplits];
-        FileSplit[] invListsSplits = new FileSplit[numSplits];
-        for (int i = 0; i < numSplits; i++) {
-            String nodeName = splitProvider.getFileSplits()[i].getNodeName();
-            String path = splitProvider.getFileSplits()[i].getLocalFile().getFile().getPath();
-            btreeSplits[i] = new FileSplit(nodeName, path + "_$btree");
-            invListsSplits[i] = new FileSplit(nodeName, path + "_$invlists");
-        }
-        return new Pair<IFileSplitProvider, IFileSplitProvider>(new ConstantFileSplitProvider(btreeSplits),
-                new ConstantFileSplitProvider(invListsSplits));
-    }
-
-    public Dataset findDataset(String dataverse, String dataset) throws AlgebricksException {
-        try {
-            return MetadataManager.INSTANCE.getDataset(mdTxnCtx, dataverse, dataset);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public IAType findType(String dataverse, String typeName) {
-        Datatype type;
-        try {
-            type = MetadataManager.INSTANCE.getDatatype(mdTxnCtx, dataverse, typeName);
-        } catch (Exception e) {
-            throw new IllegalStateException();
-        }
-        if (type == null) {
-            throw new IllegalStateException();
-        }
-        return type.getDatatype();
-    }
-
-    public List<Index> getDatasetIndexes(String dataverseName, String datasetName) throws AlgebricksException {
-        try {
-            return MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseName, datasetName);
-        } catch (MetadataException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    public AlgebricksPartitionConstraint getClusterLocations() {
-        ArrayList<String> locs = new ArrayList<String>();
-        for (String k : stores.keySet()) {
-            String[] nodeStores = stores.get(k);
-            for (int j = 0; j < nodeStores.length; j++) {
-                locs.add(k);
-            }
-        }
-        String[] cluster = new String[locs.size()];
-        cluster = locs.toArray(cluster);
-        return new AlgebricksAbsolutePartitionConstraint(cluster);
-    }
-
-    public IDataFormat getFormat() {
-        return FormatUtils.getDefaultFormat();
-    }
-
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetDataSink.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetDataSink.java
deleted file mode 100644
index 53513d2..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetDataSink.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.declared;
-
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IDataSink;
-import edu.uci.ics.hyracks.algebricks.core.algebra.properties.IPartitioningProperty;
-
-public class ResultSetDataSink implements IDataSink {
-
-    private ResultSetSinkId id;
-    private Object[] schemaTypes;
-
-    public ResultSetDataSink(ResultSetSinkId id, Object[] schemaTypes) {
-        this.id = id;
-        this.schemaTypes = schemaTypes;
-    }
-
-    @Override
-    public ResultSetSinkId getId() {
-        return id;
-    }
-
-    @Override
-    public Object[] getSchemaTypes() {
-        return schemaTypes;
-    }
-
-    @Override
-    public IPartitioningProperty getPartitioningProperty() {
-        return IPartitioningProperty.UNPARTITIONED;
-    }
-
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetSinkId.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetSinkId.java
deleted file mode 100644
index fc5152f..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/declared/ResultSetSinkId.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.metadata.declared;
-
-import edu.uci.ics.hyracks.api.dataset.ResultSetId;
-
-public class ResultSetSinkId {
-
-    private final ResultSetId resultSetId;
-
-    private final String resultNodeName;
-
-    public ResultSetSinkId(ResultSetId resultSetId, String resultNodeName) {
-        this.resultSetId = resultSetId;
-        this.resultNodeName = resultNodeName;
-    }
-
-    @Override
-    public String toString() {
-        return "ResultSetId: " + resultSetId + "@" + resultNodeName;
-    }
-
-    public ResultSetId getResultSetId() {
-        return resultSetId;
-    }
-
-    public String getResultNodeName() {
-        return resultNodeName;
-    }
-}
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataset.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataset.java
deleted file mode 100644
index 91a18f3..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Dataset.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.entities;
-
-import java.util.Map;
-
-import edu.uci.ics.asterix.common.config.DatasetConfig.DatasetType;
-import edu.uci.ics.asterix.metadata.IDatasetDetails;
-import edu.uci.ics.asterix.metadata.MetadataCache;
-import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
-
-/**
- * Metadata describing a dataset.
- */
-public class Dataset implements IMetadataEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String dataverseName;
-    // Enforced to be unique within a dataverse.
-    private final String datasetName;
-    // Type of items stored in this dataset.
-    private final String itemTypeName;
-    private final DatasetType datasetType;
-    private final IDatasetDetails datasetDetails;
-    // Hints related to cardinatlity of dataset, avg size of tuples etc.
-    private final Map<String, String> hints;
-    private final int datasetId;
-    // Type of pending operations with respect to atomic DDL operation
-    private final int pendingOp;
-
-    public Dataset(String dataverseName, String datasetName, String itemTypeName, IDatasetDetails datasetDetails,
-            Map<String, String> hints, DatasetType datasetType, int datasetId, int pendingOp) {
-        this.dataverseName = dataverseName;
-        this.datasetName = datasetName;
-        this.itemTypeName = itemTypeName;
-        this.datasetType = datasetType;
-        this.datasetDetails = datasetDetails;
-        this.datasetId = datasetId;
-        this.pendingOp = pendingOp;
-        this.hints = hints;
-    }
-
-    public String getDataverseName() {
-        return dataverseName;
-    }
-
-    public String getDatasetName() {
-        return datasetName;
-    }
-
-    public String getItemTypeName() {
-        return itemTypeName;
-    }
-
-    public DatasetType getDatasetType() {
-        return datasetType;
-    }
-
-    public IDatasetDetails getDatasetDetails() {
-        return datasetDetails;
-    }
-
-    public Map<String, String> getHints() {
-        return hints;
-    }
-
-    public int getDatasetId() {
-        return datasetId;
-    }
-
-    public int getPendingOp() {
-        return pendingOp;
-    }
-
-    @Override
-    public Object addToCache(MetadataCache cache) {
-        return cache.addDatasetIfNotExists(this);
-    }
-
-    @Override
-    public Object dropFromCache(MetadataCache cache) {
-        return cache.dropDataset(this);
-    }
-
-    @Override
-    public boolean equals(Object other) {
-        if (this == other) {
-            return true;
-        }
-        if (!(other instanceof Dataset)) {
-            return false;
-        }
-        Dataset otherDataset = (Dataset) other;
-        if (!otherDataset.dataverseName.equals(dataverseName)) {
-            return false;
-        }
-        if (!otherDataset.datasetName.equals(datasetName)) {
-            return false;
-        }
-        return true;
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Index.java b/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Index.java
deleted file mode 100644
index 6d65730..0000000
--- a/asterix/asterix-metadata/src/main/java/edu/uci/ics/asterix/metadata/entities/Index.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.metadata.entities;
-
-import java.io.Serializable;
-import java.util.List;
-
-import edu.uci.ics.asterix.common.config.DatasetConfig.IndexType;
-import edu.uci.ics.asterix.metadata.MetadataCache;
-import edu.uci.ics.asterix.metadata.api.IMetadataEntity;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Pair;
-
-/**
- * Metadata describing an index.
- */
-public class Index implements IMetadataEntity {
-
-    private static final long serialVersionUID = 1L;
-
-    private final String dataverseName;
-    // Enforced to be unique within a dataverse.
-    private final String datasetName;
-    // Enforced to be unique within a dataverse, dataset combination.
-    private final String indexName;
-    private final IndexType indexType;
-    private final List<String> keyFieldNames;
-    private final boolean isPrimaryIndex;
-    // Specific to NGRAM indexes.
-    private final int gramLength;
-    // Type of pending operations with respect to atomic DDL operation
-    private final int pendingOp;
-
-    public Index(String dataverseName, String datasetName, String indexName, IndexType indexType,
-            List<String> keyFieldNames, int gramLength, boolean isPrimaryIndex, int pendingOp) {
-        this.dataverseName = dataverseName;
-        this.datasetName = datasetName;
-        this.indexName = indexName;
-        this.indexType = indexType;
-        this.keyFieldNames = keyFieldNames;
-        this.gramLength = gramLength;
-        this.isPrimaryIndex = isPrimaryIndex;
-        this.pendingOp = pendingOp;
-    }
-
-    public Index(String dataverseName, String datasetName, String indexName, IndexType indexType,
-            List<String> keyFieldNames, boolean isPrimaryIndex, int pendingOp) {
-        this.dataverseName = dataverseName;
-        this.datasetName = datasetName;
-        this.indexName = indexName;
-        this.indexType = indexType;
-        this.keyFieldNames = keyFieldNames;
-        this.gramLength = -1;
-        this.isPrimaryIndex = isPrimaryIndex;
-        this.pendingOp = pendingOp;
-    }
-
-    public String getDataverseName() {
-        return dataverseName;
-    }
-
-    public String getDatasetName() {
-        return datasetName;
-    }
-
-    public String getIndexName() {
-        return indexName;
-    }
-
-    public List<String> getKeyFieldNames() {
-        return keyFieldNames;
-    }
-
-    public int getGramLength() {
-        return gramLength;
-    }
-
-    public IndexType getIndexType() {
-        return indexType;
-    }
-
-    public boolean isPrimaryIndex() {
-        return isPrimaryIndex;
-    }
-    
-    public int getPendingOp() {
-        return pendingOp;
-    }
-
-    public boolean isSecondaryIndex() {
-        return !isPrimaryIndex();
-    }
-
-    public static Pair<IAType, Boolean> getNonNullableKeyFieldType(String expr, ARecordType recType)
-            throws AlgebricksException {
-        IAType keyType = Index.keyFieldType(expr, recType);
-        boolean nullable = false;
-        if (keyType.getTypeTag() == ATypeTag.UNION) {
-            AUnionType unionType = (AUnionType) keyType;
-            if (unionType.isNullableType()) {
-                // The non-null type is always at index 1.
-                keyType = unionType.getUnionList().get(1);
-                nullable = true;
-            }
-        }
-        return new Pair<IAType, Boolean>(keyType, nullable);
-    }
-
-    private static IAType keyFieldType(String expr, ARecordType recType) throws AlgebricksException {
-        String[] names = recType.getFieldNames();
-        int n = names.length;
-        for (int i = 0; i < n; i++) {
-            if (names[i].equals(expr)) {
-                return recType.getFieldTypes()[i];
-            }
-        }
-        throw new AlgebricksException("Could not find field " + expr + " in the schema.");
-    }
-
-    @Override
-    public int hashCode() {
-        return indexName.hashCode() ^ datasetName.hashCode() ^ dataverseName.hashCode();
-    }
-
-    @Override
-    public boolean equals(Object other) {
-        if (!(other instanceof Index)) {
-            return false;
-        }
-        Index otherIndex = (Index) other;
-        if (!indexName.equals(otherIndex.getIndexName())) {
-            return false;
-        }
-        if (!datasetName.equals(otherIndex.getDatasetName())) {
-            return false;
-        }
-        if (!dataverseName.equals(otherIndex.getDataverseName())) {
-            return false;
-        }
-        return true;
-    }
-
-    @Override
-    public Object addToCache(MetadataCache cache) {
-        return cache.addIndexIfNotExists(this);
-    }
-
-    @Override
-    public Object dropFromCache(MetadataCache cache) {
-        return cache.dropIndex(this);
-    }
-}
diff --git a/asterix/asterix-om/pom.xml b/asterix/asterix-om/pom.xml
deleted file mode 100644
index 276d848..0000000
--- a/asterix/asterix-om/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-om</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-common</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
-		</dependency>
-        <dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>algebricks-compiler</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
-		</dependency>
-	</dependencies>
-</project>
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinter.java b/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinter.java
deleted file mode 100644
index 0618f28..0000000
--- a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/printers/ARectanglePrinter.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package edu.uci.ics.asterix.dataflow.data.nontagged.printers;
-
-import java.io.PrintStream;
-
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADoubleSerializerDeserializer;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.data.IPrinter;
-
-public class ARectanglePrinter implements IPrinter {
-
-    public static final ARectanglePrinter INSTANCE = new ARectanglePrinter();
-
-    @Override
-    public void init() {
-
-    }
-
-    @Override
-    public void print(byte[] b, int s, int l, PrintStream ps) throws AlgebricksException {
-        ps.print("rectangle(\"" + ADoubleSerializerDeserializer.getDouble(b, s + 1) + ",");
-        ps.print(ADoubleSerializerDeserializer.getDouble(b, s + 9));
-        ps.print(" | " + ADoubleSerializerDeserializer.getDouble(b, s + 17) + ",");
-        ps.print(ADoubleSerializerDeserializer.getDouble(b, s + 25) + "\")");
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java b/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
deleted file mode 100644
index b5b7303..0000000
--- a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/AObjectSerializerDeserializer.java
+++ /dev/null
@@ -1,229 +0,0 @@
-package edu.uci.ics.asterix.dataflow.data.nontagged.serde;
-
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.om.base.ABoolean;
-import edu.uci.ics.asterix.om.base.ACircle;
-import edu.uci.ics.asterix.om.base.ADate;
-import edu.uci.ics.asterix.om.base.ADateTime;
-import edu.uci.ics.asterix.om.base.ADouble;
-import edu.uci.ics.asterix.om.base.ADuration;
-import edu.uci.ics.asterix.om.base.AFloat;
-import edu.uci.ics.asterix.om.base.AInt16;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AInt64;
-import edu.uci.ics.asterix.om.base.AInt8;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.ALine;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.AOrderedList;
-import edu.uci.ics.asterix.om.base.APoint;
-import edu.uci.ics.asterix.om.base.APoint3D;
-import edu.uci.ics.asterix.om.base.APolygon;
-import edu.uci.ics.asterix.om.base.ARecord;
-import edu.uci.ics.asterix.om.base.AString;
-import edu.uci.ics.asterix.om.base.ATime;
-import edu.uci.ics.asterix.om.base.AUnorderedList;
-import edu.uci.ics.asterix.om.base.IAObject;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-
-public class AObjectSerializerDeserializer implements ISerializerDeserializer<IAObject> {
-
-    private static final long serialVersionUID = 1L;
-
-    public static final AObjectSerializerDeserializer INSTANCE = new AObjectSerializerDeserializer();
-
-    private AObjectSerializerDeserializer() {
-    }
-
-    @Override
-    public IAObject deserialize(DataInput in) throws HyracksDataException {
-        ATypeTag typeTag = SerializerDeserializerUtil.deserializeTag(in);
-        switch (typeTag) {
-            case NULL: {
-                return ANullSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case BOOLEAN: {
-                return ABooleanSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case INT8: {
-                return AInt8SerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case INT16: {
-                return AInt16SerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case INT32: {
-                return AInt32SerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case INT64: {
-                return AInt64SerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case FLOAT: {
-                return AFloatSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case DOUBLE: {
-                return ADoubleSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case STRING: {
-                return AStringSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case DATE: {
-                return ADateSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case TIME: {
-                return ATimeSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case DATETIME: {
-                return ADateTimeSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case DURATION: {
-                return ADurationSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case INTERVAL: {
-                return AIntervalSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case POINT: {
-                return APointSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case POINT3D: {
-                return APoint3DSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case LINE: {
-                return ALineSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case POLYGON: {
-                return APolygonSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case CIRCLE: {
-                return ACircleSerializerDeserializer.INSTANCE.deserialize(in);
-            }
-            case RECORD: {
-                return ARecordSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
-            }
-            case ORDEREDLIST: {
-                return AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
-            }
-            case UNORDEREDLIST: {
-                return AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.deserialize(in);
-            }
-            // case TYPE: {
-            // return AUnorderedListBytesConverter.INSTANCE.deserialize(in);
-            // }
-            default: {
-                throw new NotImplementedException("No serializer/deserializer implemented for type " + typeTag + " .");
-            }
-        }
-    }
-
-    @Override
-    public void serialize(IAObject instance, DataOutput out) throws HyracksDataException {
-        IAType t = instance.getType();
-        ATypeTag tag = t.getTypeTag();
-        try {
-            out.writeByte(tag.serialize());
-        } catch (IOException e) {
-            throw new HyracksDataException(e);
-        }
-        switch (tag) {
-            case NULL: {
-                ANullSerializerDeserializer.INSTANCE.serialize((ANull) instance, out);
-                break;
-            }
-            case BOOLEAN: {
-                ABooleanSerializerDeserializer.INSTANCE.serialize((ABoolean) instance, out);
-                break;
-            }
-            case INT8: {
-                AInt8SerializerDeserializer.INSTANCE.serialize((AInt8) instance, out);
-                break;
-            }
-            case INT16: {
-                AInt16SerializerDeserializer.INSTANCE.serialize((AInt16) instance, out);
-                break;
-            }
-            case INT32: {
-                AInt32SerializerDeserializer.INSTANCE.serialize((AInt32) instance, out);
-                break;
-            }
-            case INT64: {
-                AInt64SerializerDeserializer.INSTANCE.serialize((AInt64) instance, out);
-                break;
-            }
-            case FLOAT: {
-                AFloatSerializerDeserializer.INSTANCE.serialize((AFloat) instance, out);
-                break;
-            }
-            case DOUBLE: {
-                ADoubleSerializerDeserializer.INSTANCE.serialize((ADouble) instance, out);
-                break;
-            }
-            case STRING: {
-                AStringSerializerDeserializer.INSTANCE.serialize((AString) instance, out);
-                break;
-            }
-            case DATE: {
-                ADateSerializerDeserializer.INSTANCE.serialize((ADate) instance, out);
-                break;
-            }
-            case TIME: {
-                ATimeSerializerDeserializer.INSTANCE.serialize((ATime) instance, out);
-                break;
-            }
-            case DATETIME: {
-                ADateTimeSerializerDeserializer.INSTANCE.serialize((ADateTime) instance, out);
-                break;
-            }
-            case DURATION: {
-                ADurationSerializerDeserializer.INSTANCE.serialize((ADuration) instance, out);
-                break;
-            }
-            case INTERVAL: {
-                AIntervalSerializerDeserializer.INSTANCE.serialize((AInterval) instance, out);
-                break;
-            }
-            case POINT: {
-                APointSerializerDeserializer.INSTANCE.serialize((APoint) instance, out);
-                break;
-            }
-            case POINT3D: {
-                APoint3DSerializerDeserializer.INSTANCE.serialize((APoint3D) instance, out);
-                break;
-            }
-            case LINE: {
-                ALineSerializerDeserializer.INSTANCE.serialize((ALine) instance, out);
-                break;
-            }
-            case POLYGON: {
-                APolygonSerializerDeserializer.INSTANCE.serialize((APolygon) instance, out);
-                break;
-            }
-            case CIRCLE: {
-                ACircleSerializerDeserializer.INSTANCE.serialize((ACircle) instance, out);
-                break;
-            }
-            case RECORD: {
-                ARecordSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((ARecord) instance, out);
-                break;
-            }
-            case ORDEREDLIST: {
-                AOrderedListSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((AOrderedList) instance, out);
-            }
-            case UNORDEREDLIST: {
-                AUnorderedListSerializerDeserializer.SCHEMALESS_INSTANCE.serialize((AUnorderedList) instance, out);
-            }
-            case TYPE: {
-                ATypeSerializerDeserializer.INSTANCE.serialize((IAType) instance, out);
-            }
-            default: {
-                throw new NotImplementedException("No serializer/deserializer implemented for type " + t.getTypeTag()
-                        + " .");
-            }
-        }
-    }
-}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java b/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
deleted file mode 100644
index 24649d9..0000000
--- a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/functions/AsterixBuiltinFunctions.java
+++ /dev/null
@@ -1,1040 +0,0 @@
-package edu.uci.ics.asterix.om.functions;
-
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.commons.lang3.mutable.Mutable;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ABooleanTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ACircleTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ADateTimeTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ADateTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ADoubleTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.AFloatTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.AInt32TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ALineTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ANullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.APointTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.APolygonTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ARectangleTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.AStringTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ATimeTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.BinaryBooleanOrNullFunctionTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.BinaryStringBoolOrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.BinaryStringStringOrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.CastRecordResultTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ClosedRecordConstructorResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.FieldAccessByIndexResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.InjectFailureTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedCollectionMemberResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedFieldAccessByNameResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedGetItemResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedLocalAvgTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedNumericAddSubMulDivTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedNumericRoundHalfToEven2TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedNumericUnaryFunctionTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedSumTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedSwitchCaseComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NonTaggedUnaryMinusTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.NotNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OpenRecordConstructorResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalABooleanTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalACircleTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADateTimeTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADateTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADoubleTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalADurationTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAFloatTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt16TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt32TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt64TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAInt8TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAIntervalTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalALineTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAPoint3DTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAPointTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAPolygonTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalARectangleTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalAStringTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OptionalATimeTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListConstructorResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAInt32TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAPointTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAStringTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.OrderedListOfAnyTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.QuadStringStringOrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.ScalarVersionOfAggregateResultType;
-import edu.uci.ics.asterix.om.typecomputer.impl.Substring2TypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.SubstringTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.TripleStringBoolOrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.TripleStringStringOrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.UnaryBooleanOrNullFunctionTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.UnaryStringInt32OrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.UnaryStringOrNullTypeComputer;
-import edu.uci.ics.asterix.om.typecomputer.impl.UnorderedListConstructorResultType;
-import edu.uci.ics.asterix.om.types.AOrderedListType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.AbstractCollectionType;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.types.TypeHelper;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
-
-public class AsterixBuiltinFunctions {
-
-    public enum SpatialFilterKind {
-        SI
-    }
-
-    private static final FunctionInfoRepository finfoRepo = new FunctionInfoRepository();
-
-    // it is supposed to be an identity mapping
-    private final static Map<IFunctionInfo, IFunctionInfo> builtinFunctionsSet = new HashMap<IFunctionInfo, IFunctionInfo>();
-    private final static Map<IFunctionInfo, IResultTypeComputer> funTypeComputer = new HashMap<IFunctionInfo, IResultTypeComputer>();
-
-    private final static Set<IFunctionInfo> builtinAggregateFunctions = new HashSet<IFunctionInfo>();
-    private static final Set<IFunctionInfo> datasetFunctions = new HashSet<IFunctionInfo>();
-    private static final Map<IFunctionInfo, IFunctionInfo> aggregateToLocalAggregate = new HashMap<IFunctionInfo, IFunctionInfo>();
-    private static final Map<IFunctionInfo, IFunctionInfo> aggregateToGlobalAggregate = new HashMap<IFunctionInfo, IFunctionInfo>();
-    private static final Map<IFunctionInfo, IFunctionInfo> aggregateToSerializableAggregate = new HashMap<IFunctionInfo, IFunctionInfo>();
-    private final static Map<IFunctionInfo, Boolean> builtinUnnestingFunctions = new HashMap<IFunctionInfo, Boolean>();
-    private final static Map<IFunctionInfo, IFunctionInfo> scalarToAggregateFunctionMap = new HashMap<IFunctionInfo, IFunctionInfo>();
-    private static final Map<IFunctionInfo, SpatialFilterKind> spatialFilterFunctions = new HashMap<IFunctionInfo, SpatialFilterKind>();
-
-    public final static FunctionIdentifier TYPE_OF = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "type-of", 1);
-    public final static FunctionIdentifier GET_HANDLE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "get-handle", 2);
-    public final static FunctionIdentifier GET_DATA = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-data",
-            2);
-    public final static FunctionIdentifier EMBED_TYPE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "embed-type", 1);
-
-    public final static FunctionIdentifier GET_ITEM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-item",
-            2);
-    public final static FunctionIdentifier ANY_COLLECTION_MEMBER = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "any-collection-member", 1);
-    public final static FunctionIdentifier LISTIFY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "listify", 1);
-    // public final static FunctionIdentifier BAGIFY = new
-    // FunctionIdentifier(ASTERIX_NS, "bagify", 1, true);
-    public final static FunctionIdentifier LEN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "len", 1);
-
-    public final static FunctionIdentifier CONCAT_NON_NULL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "concat-non-null", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier EMPTY_STREAM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "empty-stream", 0);
-    public final static FunctionIdentifier NON_EMPTY_STREAM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "non-empty-stream", 0);
-    public final static FunctionIdentifier ORDERED_LIST_CONSTRUCTOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "ordered-list-constructor", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier UNORDERED_LIST_CONSTRUCTOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "unordered-list-constructor", FunctionIdentifier.VARARGS);
-
-    // records
-    public final static FunctionIdentifier CLOSED_RECORD_CONSTRUCTOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "closed-record-constructor", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier OPEN_RECORD_CONSTRUCTOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "open-record-constructor", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier RECORD_TYPE_CONSTRUCTOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "record-type-constructor", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier FIELD_ACCESS_BY_INDEX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "field-access-by-index", 2);
-    public final static FunctionIdentifier FIELD_ACCESS_BY_NAME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "field-access-by-name", 2);
-
-    public final static FunctionIdentifier NUMERIC_UNARY_MINUS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-unary-minus", 1);
-
-    public final static FunctionIdentifier NUMERIC_SUBTRACT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-subtract", 2);
-    public final static FunctionIdentifier NUMERIC_MULTIPLY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-multiply", 2);
-    public final static FunctionIdentifier NUMERIC_DIVIDE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-divide", 2);
-    public final static FunctionIdentifier NUMERIC_MOD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-mod", 2);
-    public final static FunctionIdentifier NUMERIC_IDIV = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-idiv", 2);
-    public final static FunctionIdentifier CARET = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "caret", 2);
-
-    public final static FunctionIdentifier NUMERIC_ABS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-abs", 1);
-    public final static FunctionIdentifier NUMERIC_CEILING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-ceiling", 1);
-    public final static FunctionIdentifier NUMERIC_FLOOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-floor", 1);
-    public final static FunctionIdentifier NUMERIC_ROUND = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "numeric-round", 1);
-    public final static FunctionIdentifier NUMERIC_ROUND_HALF_TO_EVEN = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "numeric-round-half-to-even", 1);
-    public final static FunctionIdentifier NUMERIC_ROUND_HALF_TO_EVEN2 = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "numeric-round-half-to-even", 2);
-    // String funcitons
-    public final static FunctionIdentifier STRING_EQUAL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "string-equal", 2);
-    public final static FunctionIdentifier STRING_START_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "start-with", 2);
-    public final static FunctionIdentifier STRING_END_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "end-with", 2);
-    public final static FunctionIdentifier STRING_MATCHES = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "matches", 2);
-    public final static FunctionIdentifier STRING_MATCHES_WITH_FLAG = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "matches", 3);
-    public final static FunctionIdentifier STRING_LOWERCASE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "lowercase", 1);
-    public final static FunctionIdentifier STRING_REPLACE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "replace", 3);
-    public final static FunctionIdentifier STRING_REPLACE_WITH_FLAG = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "replace", 4);
-    public final static FunctionIdentifier STRING_LENGTH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "string-length", 1);
-    public final static FunctionIdentifier SUBSTRING2 = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "substring", 2);
-    public final static FunctionIdentifier SUBSTRING_BEFORE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "substring-before", 2);
-    public final static FunctionIdentifier SUBSTRING_AFTER = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "substring-after", 2);
-    public final static FunctionIdentifier STRING_TO_CODEPOINT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "string-to-codepoint", 1);
-    public final static FunctionIdentifier CODEPOINT_TO_STRING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "codepoint-to-string", 1);
-    public final static FunctionIdentifier STRING_CONCAT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "string-concat", 1);
-    public final static FunctionIdentifier STRING_JOIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "string-join", 2);
-
-    public final static FunctionIdentifier DATASET = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "dataset", 1);
-    public final static FunctionIdentifier FEED_INGEST = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "feed-ingest", 1);
-
-    public final static FunctionIdentifier INDEX_SEARCH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "index-search", FunctionIdentifier.VARARGS);
-
-    public final static FunctionIdentifier MAKE_FIELD_INDEX_HANDLE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "make-field-index-handle", 2);
-    public final static FunctionIdentifier MAKE_FIELD_NAME_HANDLE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "make-field-name-handle", 1);
-
-    public final static FunctionIdentifier SUBSTRING = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "substring", 3);
-    public final static FunctionIdentifier LIKE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "like", 2);
-    public final static FunctionIdentifier CONTAINS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "contains",
-            2);
-    public final static FunctionIdentifier STARTS_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "starts-with", 2);
-    public final static FunctionIdentifier ENDS_WITH = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "ends-with", 2);
-
-    public final static FunctionIdentifier AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-avg", 1);
-    public final static FunctionIdentifier COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-count", 1);
-    public final static FunctionIdentifier SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-sum", 1);
-    public final static FunctionIdentifier LOCAL_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "agg-local-sum", 1);
-    public final static FunctionIdentifier MAX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-max", 1);
-    public final static FunctionIdentifier LOCAL_MAX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "agg-local-max", 1);
-    public final static FunctionIdentifier MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "agg-min", 1);
-    public final static FunctionIdentifier LOCAL_MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "agg-local-min", 1);
-    public final static FunctionIdentifier GLOBAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "agg-global-avg", 1);
-    public final static FunctionIdentifier LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "agg-local-avg", 1);
-
-    public final static FunctionIdentifier SCALAR_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "avg", 1);
-    public final static FunctionIdentifier SCALAR_COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "count",
-            1);
-    public final static FunctionIdentifier SCALAR_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "sum", 1);
-    public final static FunctionIdentifier SCALAR_MAX = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "max", 1);
-    public final static FunctionIdentifier SCALAR_MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "min", 1);
-    public final static FunctionIdentifier SCALAR_GLOBAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "global-avg", 1);
-    public final static FunctionIdentifier SCALAR_LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "local-avg", 1);
-
-    // serializable aggregate functions
-    public final static FunctionIdentifier SERIAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "avg-serial", 1);
-    public final static FunctionIdentifier SERIAL_COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "count-serial", 1);
-    public final static FunctionIdentifier SERIAL_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "sum-serial", 1);
-    public final static FunctionIdentifier SERIAL_LOCAL_SUM = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "local-sum-serial", 1);
-    public final static FunctionIdentifier SERIAL_GLOBAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "global-avg-serial", 1);
-    public final static FunctionIdentifier SERIAL_LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "local-avg-serial", 1);
-
-    public final static FunctionIdentifier SCAN_COLLECTION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "scan-collection", 1);
-    public final static FunctionIdentifier SUBSET_COLLECTION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "subset-collection", 3);
-
-    public final static FunctionIdentifier RANGE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "range", 2);
-
-    // fuzzy functions:
-    public final static FunctionIdentifier FUZZY_EQ = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "fuzzy-eq",
-            2);
-
-    public final static FunctionIdentifier PREFIX_LEN_JACCARD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "prefix-len-jaccard", 2);
-
-    public final static FunctionIdentifier SIMILARITY_JACCARD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "similarity-jaccard", 2);
-    public final static FunctionIdentifier SIMILARITY_JACCARD_CHECK = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "similarity-jaccard-check", 3);
-    public final static FunctionIdentifier SIMILARITY_JACCARD_SORTED = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "similarity-jaccard-sorted", 2);
-    public final static FunctionIdentifier SIMILARITY_JACCARD_SORTED_CHECK = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "similarity-jaccard-sorted-check", 3);
-    public final static FunctionIdentifier SIMILARITY_JACCARD_PREFIX = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "similarity-jaccard-prefix", 6);
-    public final static FunctionIdentifier SIMILARITY_JACCARD_PREFIX_CHECK = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "similarity-jaccard-prefix-check", 6);
-
-    public final static FunctionIdentifier EDIT_DISTANCE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "edit-distance", 2);
-    public final static FunctionIdentifier EDIT_DISTANCE_CHECK = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "edit-distance-check", 3);
-    public final static FunctionIdentifier EDIT_DISTANCE_LIST_IS_FILTERABLE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "edit-distance-list-is-filterable", 2);
-    public final static FunctionIdentifier EDIT_DISTANCE_STRING_IS_FILTERABLE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "edit-distance-string-is-filterable", 4);
-
-    // tokenizers:
-    public final static FunctionIdentifier WORD_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "word-tokens", 1);
-    public final static FunctionIdentifier HASHED_WORD_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "hashed-word-tokens", 1);
-    public final static FunctionIdentifier COUNTHASHED_WORD_TOKENS = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "counthashed-word-tokens", 1);
-    public final static FunctionIdentifier GRAM_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "gram-tokens", 3);
-    public final static FunctionIdentifier HASHED_GRAM_TOKENS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "hashed-gram-tokens", 3);
-    public final static FunctionIdentifier COUNTHASHED_GRAM_TOKENS = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "counthashed-gram-tokens", 3);
-
-    public final static FunctionIdentifier TID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "tid", 0);
-
-    // constructors:
-    public final static FunctionIdentifier BOOLEAN_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "boolean", 1);
-    public final static FunctionIdentifier NULL_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "null", 1);
-    public final static FunctionIdentifier STRING_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "string", 1);
-    public final static FunctionIdentifier INT8_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "int8", 1);
-    public final static FunctionIdentifier INT16_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "int16", 1);
-    public final static FunctionIdentifier INT32_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "int32", 1);
-    public final static FunctionIdentifier INT64_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "int64", 1);
-    public final static FunctionIdentifier FLOAT_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "float", 1);
-    public final static FunctionIdentifier DOUBLE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "double", 1);
-    public final static FunctionIdentifier POINT_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "point", 1);
-    public final static FunctionIdentifier POINT3D_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "point3d", 1);
-    public final static FunctionIdentifier LINE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "line", 1);
-    public final static FunctionIdentifier CIRCLE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "circle", 1);
-    public final static FunctionIdentifier RECTANGLE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "rectangle", 1);
-    public final static FunctionIdentifier POLYGON_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "polygon", 1);
-    public final static FunctionIdentifier TIME_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "time", 1);
-    public final static FunctionIdentifier DATE_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "date", 1);
-    public final static FunctionIdentifier DATETIME_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "datetime", 1);
-    public final static FunctionIdentifier DURATION_CONSTRUCTOR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "duration", 1);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-from-date", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_TIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-from-time", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_DATETIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-from-datetime", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_DATE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-start-from-date", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_TIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-start-from-time", 2);
-    public final static FunctionIdentifier INTERVAL_CONSTRUCTOR_START_FROM_DATETIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-start-from-datetime", 2);
-    public final static FunctionIdentifier INTERVAL_BEFORE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-before", 2);
-    public final static FunctionIdentifier INTERVAL_AFTER = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-after", 2);
-    public final static FunctionIdentifier INTERVAL_MEETS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-meets", 2);
-    public final static FunctionIdentifier INTERVAL_MET_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-met-by", 2);
-    public final static FunctionIdentifier INTERVAL_OVERLAPS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-overlaps", 2);
-    public final static FunctionIdentifier INTERVAL_OVERLAPPED_BY = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "interval-overlapped-by", 2);
-    public final static FunctionIdentifier OVERLAP = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "overlap", 2);
-    public final static FunctionIdentifier INTERVAL_STARTS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-starts", 2);
-    public final static FunctionIdentifier INTERVAL_STARTED_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-started-by", 2);
-    public final static FunctionIdentifier INTERVAL_COVERS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-covers", 2);
-    public final static FunctionIdentifier INTERVAL_COVERED_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-covered-by", 2);
-    public final static FunctionIdentifier INTERVAL_ENDS = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-ends", 2);
-    public final static FunctionIdentifier INTERVAL_ENDED_BY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-ended-by", 2);
-    public final static FunctionIdentifier CURRENT_TIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "current-time", 0);
-    public final static FunctionIdentifier CURRENT_DATE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "current-date", 0);
-    public final static FunctionIdentifier CURRENT_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "current-datetime", 0);
-
-    // spatial
-    public final static FunctionIdentifier CREATE_POINT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "create-point", 2);
-    public final static FunctionIdentifier CREATE_LINE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "create-line", 2);
-    public final static FunctionIdentifier CREATE_POLYGON = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "create-polygon", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier CREATE_CIRCLE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "create-circle", 2);
-    public final static FunctionIdentifier CREATE_RECTANGLE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "create-rectangle", 2);
-    public final static FunctionIdentifier SPATIAL_INTERSECT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "spatial-intersect", 2);
-    public final static FunctionIdentifier SPATIAL_AREA = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "spatial-area", 1);
-    public final static FunctionIdentifier SPATIAL_DISTANCE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "spatial-distance", 2);
-    public final static FunctionIdentifier CREATE_MBR = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "create-mbr", 3);
-    public final static FunctionIdentifier SPATIAL_CELL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "spatial-cell", 4);
-    public final static FunctionIdentifier SWITCH_CASE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "switch-case", FunctionIdentifier.VARARGS);
-    public final static FunctionIdentifier REG_EXP = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "reg-exp", 2);
-
-    public final static FunctionIdentifier INJECT_FAILURE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "inject-failure", 2);
-    public final static FunctionIdentifier CAST_RECORD = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "cast-record", 1);
-
-    // Spatial and temporal type accessors
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_YEAR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "year", 1);
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_MONTH = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "month", 1);
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_DAY = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "day", 1);
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_HOUR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "hour", 1);
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_MIN = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "minute", 1);
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_SEC = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "second", 1);
-    public static final FunctionIdentifier ACCESSOR_TEMPORAL_MILLISEC = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "millisecond", 1);
-
-    // Temporal functions
-    public static final FunctionIdentifier DATE_FROM_UNIX_TIME_IN_DAYS = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "date-from-unix-time-in-days", 1);
-    public static final FunctionIdentifier DATE_FROM_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "date-from-datetime", 1);
-    public final static FunctionIdentifier ADD_DATE_DURATION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "add-date-duration", 2);
-    public final static FunctionIdentifier SUBTRACT_DATE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "subtract-date", 2);
-    public final static FunctionIdentifier TIME_FROM_UNIX_TIME_IN_MS = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "time-from-unix-time-in-ms", 1);
-    public final static FunctionIdentifier TIME_FROM_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "time-from-datetime", 1);
-    public final static FunctionIdentifier SUBTRACT_TIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "subtract-time", 2);
-    public final static FunctionIdentifier ADD_TIME_DURATION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "add-time-duration", 2);
-    public final static FunctionIdentifier DATETIME_FROM_UNIX_TIME_IN_MS = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "datetime-from-unix-time-in-ms", 1);
-    public final static FunctionIdentifier DATETIME_FROM_DATE_TIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "datetime-from-date-time", 2);
-    public final static FunctionIdentifier SUBTRACT_DATETIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "subtract-datetime", 2);
-    public final static FunctionIdentifier ADD_DATETIME_DURATION = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "add-datetime-duration", 2);
-    public final static FunctionIdentifier CALENDAR_DURATION_FROM_DATETIME = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "calendar-duration-from-datetime", 2);
-    public final static FunctionIdentifier CALENDAR_DURATION_FROM_DATE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "calendar-duration-from-date", 2);
-    public final static FunctionIdentifier ADJUST_TIME_FOR_TIMEZONE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "adjust-time-for-timezone", 2);
-    public final static FunctionIdentifier ADJUST_DATETIME_FOR_TIMEZONE = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "adjust-datetime-for-timezone", 2);
-
-    public final static FunctionIdentifier GET_POINT_X_COORDINATE_ACCESSOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "get-x", 1);
-    public final static FunctionIdentifier GET_POINT_Y_COORDINATE_ACCESSOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "get-y", 1);
-    public final static FunctionIdentifier GET_CIRCLE_RADIUS_ACCESSOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "get-radius", 1);
-    public final static FunctionIdentifier GET_CIRCLE_CENTER_ACCESSOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "get-center", 1);
-    public final static FunctionIdentifier GET_POINTS_LINE_RECTANGLE_POLYGON_ACCESSOR = new FunctionIdentifier(
-            FunctionConstants.ASTERIX_NS, "get-points", 1);
-
-    public static final FunctionIdentifier EQ = AlgebricksBuiltinFunctions.EQ;
-    public static final FunctionIdentifier LE = AlgebricksBuiltinFunctions.LE;
-    public static final FunctionIdentifier GE = AlgebricksBuiltinFunctions.GE;
-    public static final FunctionIdentifier LT = AlgebricksBuiltinFunctions.LT;
-    public static final FunctionIdentifier GT = AlgebricksBuiltinFunctions.GT;
-    public static final FunctionIdentifier NEQ = AlgebricksBuiltinFunctions.NEQ;
-    public static final FunctionIdentifier AND = AlgebricksBuiltinFunctions.AND;
-    public static final FunctionIdentifier OR = AlgebricksBuiltinFunctions.OR;
-    public static final FunctionIdentifier NOT = AlgebricksBuiltinFunctions.NOT;
-    public static final FunctionIdentifier NUMERIC_ADD = AlgebricksBuiltinFunctions.NUMERIC_ADD;
-    public static final FunctionIdentifier IS_NULL = AlgebricksBuiltinFunctions.IS_NULL;
-
-    public static final FunctionIdentifier NOT_NULL = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "not-null",
-            1);
-
-    public static IFunctionInfo getAsterixFunctionInfo(FunctionIdentifier fid) {
-        IFunctionInfo finfo = finfoRepo.get(fid);;
-        if (finfo == null) {
-            finfo = new AsterixFunctionInfo(fid);
-        }
-        return finfo;
-    }
-
-    public static AsterixFunctionInfo lookupFunction(FunctionIdentifier fid) {
-        return (AsterixFunctionInfo) finfoRepo.get(fid);
-    }
-
-    static {
-
-        // first, take care of Algebricks builtin functions
-        add(EQ, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(LE, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(GE, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(LT, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(GT, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(IS_NULL, ABooleanTypeComputer.INSTANCE);
-        add(AND, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(NEQ, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(NOT, UnaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(OR, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(NUMERIC_ADD, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
-
-        // and then, Asterix builtin functions
-        add(NOT_NULL, NotNullTypeComputer.INSTANCE);
-        add(ANY_COLLECTION_MEMBER, NonTaggedCollectionMemberResultType.INSTANCE);
-        addPrivateFunction(AVG, OptionalADoubleTypeComputer.INSTANCE);
-        add(BOOLEAN_CONSTRUCTOR, UnaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(CARET, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
-        add(CIRCLE_CONSTRUCTOR, OptionalACircleTypeComputer.INSTANCE);
-        add(CLOSED_RECORD_CONSTRUCTOR, ClosedRecordConstructorResultType.INSTANCE);
-        add(CONCAT_NON_NULL, new IResultTypeComputer() {
-            @Override
-            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
-                    IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
-                AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expression;
-                if (f.getArguments().size() < 1) {
-                    return BuiltinType.ANULL;
-                }
-                ILogicalExpression a0 = f.getArguments().get(0).getValue();
-                IAType t0 = (IAType) env.getType(a0);
-                if (TypeHelper.canBeNull(t0)) {
-                    return t0;
-                }
-                return AUnionType.createNullableType(t0);
-            }
-        });
-        add(CONTAINS, ABooleanTypeComputer.INSTANCE);
-        addPrivateFunction(COUNT, AInt32TypeComputer.INSTANCE);
-        add(COUNTHASHED_GRAM_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
-        add(COUNTHASHED_WORD_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
-        add(CREATE_CIRCLE, ACircleTypeComputer.INSTANCE);
-        add(CREATE_LINE, ALineTypeComputer.INSTANCE);
-        add(CREATE_MBR, ADoubleTypeComputer.INSTANCE);
-        add(CREATE_POINT, APointTypeComputer.INSTANCE);
-        add(CREATE_POLYGON, APolygonTypeComputer.INSTANCE);
-        add(CREATE_RECTANGLE, ARectangleTypeComputer.INSTANCE);
-
-        add(DATE_CONSTRUCTOR, OptionalADateTypeComputer.INSTANCE);
-        add(DATETIME_CONSTRUCTOR, OptionalADateTimeTypeComputer.INSTANCE);
-        add(DOUBLE_CONSTRUCTOR, OptionalADoubleTypeComputer.INSTANCE);
-        add(DURATION_CONSTRUCTOR, OptionalADurationTypeComputer.INSTANCE);
-        add(EDIT_DISTANCE, AInt32TypeComputer.INSTANCE);
-        add(EDIT_DISTANCE_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
-        add(EDIT_DISTANCE_STRING_IS_FILTERABLE, ABooleanTypeComputer.INSTANCE);
-        add(EDIT_DISTANCE_LIST_IS_FILTERABLE, ABooleanTypeComputer.INSTANCE);
-        add(EMBED_TYPE, new IResultTypeComputer() {
-            @Override
-            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
-                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
-                return (IAType) BuiltinType.ANY;
-            }
-        });
-        add(EMPTY_STREAM, ABooleanTypeComputer.INSTANCE);
-        add(ENDS_WITH, ABooleanTypeComputer.INSTANCE);
-        // add(FIELD_ACCESS, NonTaggedFieldAccessByNameResultType.INSTANCE);
-        add(FIELD_ACCESS_BY_INDEX, FieldAccessByIndexResultType.INSTANCE);
-        add(FIELD_ACCESS_BY_NAME, NonTaggedFieldAccessByNameResultType.INSTANCE);
-        add(FLOAT_CONSTRUCTOR, OptionalAFloatTypeComputer.INSTANCE);
-        add(FUZZY_EQ, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(GET_HANDLE, null); // TODO
-        add(GET_ITEM, NonTaggedGetItemResultType.INSTANCE);
-        add(GET_DATA, null); // TODO
-        addPrivateFunction(GLOBAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
-        add(GRAM_TOKENS, OrderedListOfAStringTypeComputer.INSTANCE);
-        add(GLOBAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
-        add(HASHED_GRAM_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
-        add(HASHED_WORD_TOKENS, OrderedListOfAInt32TypeComputer.INSTANCE);
-        add(INDEX_SEARCH, new IResultTypeComputer() {
-
-            @Override
-            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
-                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
-                return BuiltinType.ANY; // TODO
-            }
-        });
-        add(INT8_CONSTRUCTOR, OptionalAInt8TypeComputer.INSTANCE);
-        add(INT16_CONSTRUCTOR, OptionalAInt16TypeComputer.INSTANCE);
-        add(INT32_CONSTRUCTOR, OptionalAInt32TypeComputer.INSTANCE);
-        add(INT64_CONSTRUCTOR, OptionalAInt64TypeComputer.INSTANCE);
-        add(LEN, OptionalAInt32TypeComputer.INSTANCE);
-        add(LIKE, BinaryBooleanOrNullFunctionTypeComputer.INSTANCE);
-        add(LINE_CONSTRUCTOR, OptionalALineTypeComputer.INSTANCE);
-        add(LISTIFY, OrderedListConstructorResultType.INSTANCE);
-        addPrivateFunction(LOCAL_AVG, NonTaggedLocalAvgTypeComputer.INSTANCE);
-        add(MAKE_FIELD_INDEX_HANDLE, null); // TODO
-        add(MAKE_FIELD_NAME_HANDLE, null); // TODO
-        add(MAX, NonTaggedSumTypeComputer.INSTANCE);
-        add(LOCAL_MAX, NonTaggedSumTypeComputer.INSTANCE);
-        add(MIN, NonTaggedSumTypeComputer.INSTANCE);
-        add(LOCAL_MIN, NonTaggedSumTypeComputer.INSTANCE);
-        add(NON_EMPTY_STREAM, ABooleanTypeComputer.INSTANCE);
-        add(NULL_CONSTRUCTOR, ANullTypeComputer.INSTANCE);
-        add(NUMERIC_UNARY_MINUS, NonTaggedUnaryMinusTypeComputer.INSTANCE);
-        add(NUMERIC_SUBTRACT, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
-        add(NUMERIC_MULTIPLY, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
-        add(NUMERIC_DIVIDE, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
-        add(NUMERIC_MOD, NonTaggedNumericAddSubMulDivTypeComputer.INSTANCE);
-        add(NUMERIC_IDIV, AInt32TypeComputer.INSTANCE);
-
-        add(NUMERIC_ABS, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
-        add(NUMERIC_CEILING, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
-        add(NUMERIC_FLOOR, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
-        add(NUMERIC_ROUND, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
-        add(NUMERIC_ROUND_HALF_TO_EVEN, NonTaggedNumericUnaryFunctionTypeComputer.INSTANCE);
-        add(NUMERIC_ROUND_HALF_TO_EVEN2, NonTaggedNumericRoundHalfToEven2TypeComputer.INSTANCE);
-
-        add(STRING_TO_CODEPOINT, OrderedListOfAInt32TypeComputer.INSTANCE);
-        add(CODEPOINT_TO_STRING, AStringTypeComputer.INSTANCE);
-        add(STRING_CONCAT, OptionalAStringTypeComputer.INSTANCE);
-        add(SUBSTRING2, Substring2TypeComputer.INSTANCE);
-        add(STRING_LENGTH, UnaryStringInt32OrNullTypeComputer.INSTANCE);
-        add(STRING_LOWERCASE, UnaryStringOrNullTypeComputer.INSTANCE);
-        add(STRING_START_WITH, BinaryStringBoolOrNullTypeComputer.INSTANCE);
-        add(STRING_END_WITH, BinaryStringBoolOrNullTypeComputer.INSTANCE);
-        add(STRING_MATCHES, BinaryStringBoolOrNullTypeComputer.INSTANCE);
-        add(STRING_MATCHES_WITH_FLAG, TripleStringBoolOrNullTypeComputer.INSTANCE);
-        add(STRING_REPLACE, TripleStringStringOrNullTypeComputer.INSTANCE);
-        add(STRING_REPLACE_WITH_FLAG, QuadStringStringOrNullTypeComputer.INSTANCE);
-        add(SUBSTRING_BEFORE, BinaryStringStringOrNullTypeComputer.INSTANCE);
-        add(SUBSTRING_AFTER, BinaryStringStringOrNullTypeComputer.INSTANCE);
-        add(STRING_EQUAL, BinaryStringBoolOrNullTypeComputer.INSTANCE);
-        add(STRING_JOIN, AStringTypeComputer.INSTANCE);
-
-        add(OPEN_RECORD_CONSTRUCTOR, OpenRecordConstructorResultType.INSTANCE);
-        add(ORDERED_LIST_CONSTRUCTOR, OrderedListConstructorResultType.INSTANCE);
-        add(POINT_CONSTRUCTOR, OptionalAPointTypeComputer.INSTANCE);
-        add(POINT3D_CONSTRUCTOR, OptionalAPoint3DTypeComputer.INSTANCE);
-        add(POLYGON_CONSTRUCTOR, OptionalAPolygonTypeComputer.INSTANCE);
-        add(PREFIX_LEN_JACCARD, AInt32TypeComputer.INSTANCE);
-        add(RANGE, AInt32TypeComputer.INSTANCE);
-        add(RECTANGLE_CONSTRUCTOR, OptionalARectangleTypeComputer.INSTANCE);
-        // add(RECORD_TYPE_CONSTRUCTOR, null);
-        add(SCALAR_AVG, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCALAR_COUNT, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCALAR_GLOBAL_AVG, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCALAR_LOCAL_AVG, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCALAR_MAX, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCALAR_MIN, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCALAR_SUM, ScalarVersionOfAggregateResultType.INSTANCE);
-        add(SCAN_COLLECTION, NonTaggedCollectionMemberResultType.INSTANCE);
-        add(SERIAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
-        add(SERIAL_COUNT, AInt32TypeComputer.INSTANCE);
-        add(SERIAL_GLOBAL_AVG, OptionalADoubleTypeComputer.INSTANCE);
-        add(SERIAL_LOCAL_AVG, NonTaggedLocalAvgTypeComputer.INSTANCE);
-        add(SERIAL_SUM, NonTaggedSumTypeComputer.INSTANCE);
-        add(SERIAL_LOCAL_SUM, NonTaggedSumTypeComputer.INSTANCE);
-        add(SIMILARITY_JACCARD, AFloatTypeComputer.INSTANCE);
-        add(SIMILARITY_JACCARD_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
-        add(SIMILARITY_JACCARD_SORTED, AFloatTypeComputer.INSTANCE);
-        add(SIMILARITY_JACCARD_SORTED_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
-        add(SIMILARITY_JACCARD_PREFIX, AFloatTypeComputer.INSTANCE);
-        add(SIMILARITY_JACCARD_PREFIX_CHECK, OrderedListOfAnyTypeComputer.INSTANCE);
-        add(SPATIAL_AREA, ADoubleTypeComputer.INSTANCE);
-        add(SPATIAL_CELL, ARectangleTypeComputer.INSTANCE);
-        add(SPATIAL_DISTANCE, ADoubleTypeComputer.INSTANCE);
-        add(SPATIAL_INTERSECT, ABooleanTypeComputer.INSTANCE);
-        add(GET_POINT_X_COORDINATE_ACCESSOR, ADoubleTypeComputer.INSTANCE);
-        add(GET_POINT_Y_COORDINATE_ACCESSOR, ADoubleTypeComputer.INSTANCE);
-        add(GET_CIRCLE_RADIUS_ACCESSOR, ADoubleTypeComputer.INSTANCE);
-        add(GET_CIRCLE_CENTER_ACCESSOR, APointTypeComputer.INSTANCE);
-        add(GET_POINTS_LINE_RECTANGLE_POLYGON_ACCESSOR, OrderedListOfAPointTypeComputer.INSTANCE);
-        add(STARTS_WITH, ABooleanTypeComputer.INSTANCE);
-        add(STRING_CONSTRUCTOR, OptionalAStringTypeComputer.INSTANCE);
-        add(SUBSET_COLLECTION, new IResultTypeComputer() {
-
-            @Override
-            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
-                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
-                AbstractFunctionCallExpression fun = (AbstractFunctionCallExpression) expression;
-                IAType t;
-                try {
-                    t = (IAType) env.getType(fun.getArguments().get(0).getValue());
-                } catch (AlgebricksException e) {
-                    throw new AlgebricksException(e);
-                }
-                switch (t.getTypeTag()) {
-                    case UNORDEREDLIST:
-                    case ORDEREDLIST: {
-                        AbstractCollectionType act = (AbstractCollectionType) t;
-                        return act.getItemType();
-                    }
-                    case UNION: {
-                        AUnionType ut = (AUnionType) t;
-                        if (!ut.isNullableType()) {
-                            throw new AlgebricksException("Expecting collection type. Found " + t);
-                        }
-                        IAType t2 = ut.getUnionList().get(1);
-                        ATypeTag tag2 = t2.getTypeTag();
-                        if (tag2 == ATypeTag.UNORDEREDLIST || tag2 == ATypeTag.ORDEREDLIST) {
-                            AbstractCollectionType act = (AbstractCollectionType) t2;
-                            return act.getItemType();
-                        }
-                        throw new AlgebricksException("Expecting collection type. Found " + t);
-                    }
-                    default: {
-                        throw new AlgebricksException("Expecting collection type. Found " + t);
-                    }
-                }
-            }
-        });
-        add(SUBSTRING, SubstringTypeComputer.INSTANCE);
-        addPrivateFunction(SUM, NonTaggedSumTypeComputer.INSTANCE);
-        add(LOCAL_SUM, NonTaggedSumTypeComputer.INSTANCE);
-        add(SWITCH_CASE, NonTaggedSwitchCaseComputer.INSTANCE);
-        add(REG_EXP, ABooleanTypeComputer.INSTANCE);
-        add(INJECT_FAILURE, InjectFailureTypeComputer.INSTANCE);
-        add(CAST_RECORD, CastRecordResultTypeComputer.INSTANCE);
-
-        add(TID, AInt32TypeComputer.INSTANCE);
-        add(TIME_CONSTRUCTOR, OptionalATimeTypeComputer.INSTANCE);
-        add(TYPE_OF, null); // TODO
-        add(UNORDERED_LIST_CONSTRUCTOR, UnorderedListConstructorResultType.INSTANCE);
-        add(WORD_TOKENS, new IResultTypeComputer() {
-
-            @Override
-            public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
-                    IMetadataProvider<?, ?> mp) throws AlgebricksException {
-                return new AOrderedListType(BuiltinType.ASTRING, "string");
-            }
-        });
-
-        // temporal type accessors
-        add(ACCESSOR_TEMPORAL_YEAR, OptionalAInt32TypeComputer.INSTANCE);
-        add(ACCESSOR_TEMPORAL_MONTH, OptionalAInt32TypeComputer.INSTANCE);
-        add(ACCESSOR_TEMPORAL_DAY, OptionalAInt32TypeComputer.INSTANCE);
-        add(ACCESSOR_TEMPORAL_HOUR, OptionalAInt32TypeComputer.INSTANCE);
-        add(ACCESSOR_TEMPORAL_MIN, OptionalAInt32TypeComputer.INSTANCE);
-        add(ACCESSOR_TEMPORAL_SEC, OptionalAInt32TypeComputer.INSTANCE);
-        add(ACCESSOR_TEMPORAL_MILLISEC, OptionalAInt32TypeComputer.INSTANCE);
-
-        // temporal functions
-        add(DATE_FROM_UNIX_TIME_IN_DAYS, OptionalADateTypeComputer.INSTANCE);
-        add(DATE_FROM_DATETIME, OptionalADateTypeComputer.INSTANCE);
-        add(ADD_DATE_DURATION, OptionalADateTypeComputer.INSTANCE);
-        add(SUBTRACT_DATE, OptionalADurationTypeComputer.INSTANCE);
-        add(TIME_FROM_UNIX_TIME_IN_MS, OptionalATimeTypeComputer.INSTANCE);
-        add(TIME_FROM_DATETIME, OptionalATimeTypeComputer.INSTANCE);
-        add(SUBTRACT_TIME, OptionalADurationTypeComputer.INSTANCE);
-        add(ADD_TIME_DURATION, OptionalATimeTypeComputer.INSTANCE);
-        add(DATETIME_FROM_DATE_TIME, OptionalADateTimeTypeComputer.INSTANCE);
-        add(DATETIME_FROM_UNIX_TIME_IN_MS, OptionalADateTimeTypeComputer.INSTANCE);
-        add(SUBTRACT_DATETIME, OptionalADurationTypeComputer.INSTANCE);
-        add(ADD_DATETIME_DURATION, OptionalADateTimeTypeComputer.INSTANCE);
-        add(CALENDAR_DURATION_FROM_DATETIME, OptionalADurationTypeComputer.INSTANCE);
-        add(CALENDAR_DURATION_FROM_DATE, OptionalADurationTypeComputer.INSTANCE);
-        add(ADJUST_DATETIME_FOR_TIMEZONE, OptionalAStringTypeComputer.INSTANCE);
-        add(ADJUST_TIME_FOR_TIMEZONE, OptionalAStringTypeComputer.INSTANCE);
-        add(INTERVAL_BEFORE, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_AFTER, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_MEETS, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_MET_BY, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_OVERLAPS, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_OVERLAPPED_BY, OptionalABooleanTypeComputer.INSTANCE);
-        add(OVERLAP, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_STARTS, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_STARTED_BY, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_COVERS, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_COVERED_BY, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_ENDS, OptionalABooleanTypeComputer.INSTANCE);
-        add(INTERVAL_ENDED_BY, OptionalABooleanTypeComputer.INSTANCE);
-        add(CURRENT_DATE, ADateTypeComputer.INSTANCE);
-        add(CURRENT_TIME, ATimeTypeComputer.INSTANCE);
-        add(CURRENT_DATETIME, ADateTimeTypeComputer.INSTANCE);
-
-        // interval constructors
-        add(INTERVAL_CONSTRUCTOR_DATE, OptionalAIntervalTypeComputer.INSTANCE);
-        add(INTERVAL_CONSTRUCTOR_TIME, OptionalAIntervalTypeComputer.INSTANCE);
-        add(INTERVAL_CONSTRUCTOR_DATETIME, OptionalAIntervalTypeComputer.INSTANCE);
-        add(INTERVAL_CONSTRUCTOR_START_FROM_DATE, OptionalAIntervalTypeComputer.INSTANCE);
-        add(INTERVAL_CONSTRUCTOR_START_FROM_DATETIME, OptionalAIntervalTypeComputer.INSTANCE);
-        add(INTERVAL_CONSTRUCTOR_START_FROM_TIME, OptionalAIntervalTypeComputer.INSTANCE);
-
-        String metadataFunctionLoaderClassName = "edu.uci.ics.asterix.metadata.functions.MetadataBuiltinFunctions";
-        try {
-            Class.forName(metadataFunctionLoaderClassName);
-        } catch (ClassNotFoundException e) {
-            throw new RuntimeException(e);
-        }
-
-    }
-
-    static {
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_AVG), getAsterixFunctionInfo(AVG));
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_COUNT), getAsterixFunctionInfo(COUNT));
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_GLOBAL_AVG), getAsterixFunctionInfo(GLOBAL_AVG));
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_LOCAL_AVG), getAsterixFunctionInfo(LOCAL_AVG));
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_MAX), getAsterixFunctionInfo(MAX));
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_MIN), getAsterixFunctionInfo(MIN));
-        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_SUM), getAsterixFunctionInfo(SUM));
-    }
-
-    static {
-        addAgg(AVG);
-        addAgg(LOCAL_AVG);
-        addAgg(GLOBAL_AVG);
-        addLocalAgg(AVG, LOCAL_AVG);
-        addGlobalAgg(AVG, GLOBAL_AVG);
-
-        addAgg(COUNT);
-        addLocalAgg(COUNT, COUNT);
-        addGlobalAgg(COUNT, SUM);
-
-        addAgg(MAX);
-        addAgg(LOCAL_MAX);
-        addLocalAgg(MAX, LOCAL_MAX);
-        addGlobalAgg(MAX, MAX);
-
-        addAgg(MIN);
-        addLocalAgg(MIN, LOCAL_MIN);
-        addGlobalAgg(MIN, MIN);
-
-        addAgg(SUM);
-        addAgg(LOCAL_SUM);
-        addLocalAgg(SUM, LOCAL_SUM);
-        addGlobalAgg(SUM, SUM);
-
-        addAgg(LISTIFY);
-
-        // serializable aggregate functions
-        addSerialAgg(AVG, SERIAL_AVG);
-        addSerialAgg(COUNT, SERIAL_COUNT);
-        addSerialAgg(SUM, SERIAL_SUM);
-        addSerialAgg(LOCAL_SUM, SERIAL_LOCAL_SUM);
-        addSerialAgg(LOCAL_AVG, SERIAL_LOCAL_AVG);
-        addSerialAgg(GLOBAL_AVG, SERIAL_GLOBAL_AVG);
-
-        addAgg(SERIAL_COUNT);
-        addLocalAgg(SERIAL_COUNT, SERIAL_COUNT);
-        addGlobalAgg(SERIAL_COUNT, SERIAL_SUM);
-
-        addAgg(SERIAL_AVG);
-        addAgg(SERIAL_LOCAL_AVG);
-        addAgg(SERIAL_GLOBAL_AVG);
-        addLocalAgg(SERIAL_AVG, SERIAL_LOCAL_AVG);
-        addGlobalAgg(SERIAL_AVG, SERIAL_GLOBAL_AVG);
-
-        addAgg(SERIAL_SUM);
-        addAgg(SERIAL_LOCAL_SUM);
-        addLocalAgg(SERIAL_SUM, SERIAL_LOCAL_SUM);
-        addGlobalAgg(SERIAL_SUM, SERIAL_SUM);
-    }
-
-    static {
-        datasetFunctions.add(getAsterixFunctionInfo(DATASET));
-        datasetFunctions.add(getAsterixFunctionInfo(FEED_INGEST));
-        datasetFunctions.add(getAsterixFunctionInfo(INDEX_SEARCH));
-    }
-
-    static {
-        addUnnestFun(DATASET, false);
-        addUnnestFun(RANGE, true);
-        addUnnestFun(SCAN_COLLECTION, false);
-        addUnnestFun(SUBSET_COLLECTION, false);
-    }
-
-    public static void addDatasetFunction(FunctionIdentifier fi) {
-        datasetFunctions.add(getAsterixFunctionInfo(fi));
-    }
-
-    public static boolean isDatasetFunction(FunctionIdentifier fi) {
-        return datasetFunctions.contains(getAsterixFunctionInfo(fi));
-    }
-
-    public static boolean isBuiltinCompilerFunction(FunctionIdentifier fi) {
-        return builtinFunctionsSet.keySet().contains(getAsterixFunctionInfo(fi));
-    }
-
-    public static boolean isBuiltinAggregateFunction(FunctionIdentifier fi) {
-        return builtinAggregateFunctions.contains(getAsterixFunctionInfo(fi));
-    }
-
-    public static boolean isBuiltinUnnestingFunction(FunctionIdentifier fi) {
-        return builtinUnnestingFunctions.get(getAsterixFunctionInfo(fi)) != null;
-    }
-
-    public static boolean returnsUniqueValues(FunctionIdentifier fi) {
-        Boolean ruv = builtinUnnestingFunctions.get(getAsterixFunctionInfo(fi));
-        if (ruv != null && ruv.booleanValue()) {
-            return true;
-        } else {
-            return false;
-        }
-    }
-
-    public static FunctionIdentifier getLocalAggregateFunction(FunctionIdentifier fi) {
-        return aggregateToLocalAggregate.get(getAsterixFunctionInfo(fi)).getFunctionIdentifier();
-    }
-
-    public static FunctionIdentifier getGlobalAggregateFunction(FunctionIdentifier fi) {
-        return aggregateToGlobalAggregate.get(getAsterixFunctionInfo(fi)).getFunctionIdentifier();
-    }
-
-    public static FunctionIdentifier getBuiltinFunctionIdentifier(FunctionIdentifier fi) {
-        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
-        return finfo == null ? null : finfo.getFunctionIdentifier();
-    }
-
-    public static AggregateFunctionCallExpression makeAggregateFunctionExpression(FunctionIdentifier fi,
-            List<Mutable<ILogicalExpression>> args) {
-        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
-        IFunctionInfo fiLocal = aggregateToLocalAggregate.get(finfo);
-        IFunctionInfo fiGlobal = aggregateToGlobalAggregate.get(finfo);
-
-        if (fiLocal != null && fiGlobal != null) {
-            AggregateFunctionCallExpression fun = new AggregateFunctionCallExpression(finfo, true, args);
-            fun.setStepTwoAggregate(fiGlobal);
-            fun.setStepOneAggregate(fiLocal);
-            return fun;
-        } else {
-            return new AggregateFunctionCallExpression(finfo, false, args);
-        }
-    }
-
-    public static boolean isAggregateFunctionSerializable(FunctionIdentifier fi) {
-        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
-        return aggregateToSerializableAggregate.get(finfo) != null;
-    }
-
-    public static AggregateFunctionCallExpression makeSerializableAggregateFunctionExpression(FunctionIdentifier fi,
-            List<Mutable<ILogicalExpression>> args) {
-
-        IFunctionInfo finfo = getAsterixFunctionInfo(fi);
-        IFunctionInfo serializableFinfo = aggregateToSerializableAggregate.get(finfo);
-        if (serializableFinfo == null)
-            throw new IllegalStateException("no serializable implementation for aggregate function "
-                    + serializableFinfo);
-
-        IFunctionInfo fiLocal = aggregateToLocalAggregate.get(serializableFinfo);
-        IFunctionInfo fiGlobal = aggregateToGlobalAggregate.get(serializableFinfo);
-
-        if (fiLocal != null && fiGlobal != null) {
-            AggregateFunctionCallExpression fun = new AggregateFunctionCallExpression(serializableFinfo, true, args);
-            fun.setStepTwoAggregate(fiGlobal);
-            fun.setStepOneAggregate(fiLocal);
-            return fun;
-        } else {
-            return new AggregateFunctionCallExpression(serializableFinfo, false, args);
-        }
-    }
-
-    public static IResultTypeComputer getResultTypeComputer(FunctionIdentifier fi) {
-        return funTypeComputer.get(getAsterixFunctionInfo(fi));
-    }
-
-    public static FunctionIdentifier getAggregateFunction(FunctionIdentifier scalarVersionOfAggregate) {
-        IFunctionInfo finfo = scalarToAggregateFunctionMap.get(getAsterixFunctionInfo(scalarVersionOfAggregate));
-        return finfo == null ? null : finfo.getFunctionIdentifier();
-    }
-
-    public static void add(FunctionIdentifier fi, IResultTypeComputer typeComputer) {
-        IFunctionInfo functionInfo = getAsterixFunctionInfo(fi);
-        builtinFunctionsSet.put(functionInfo, functionInfo);
-        funTypeComputer.put(functionInfo, typeComputer);
-        finfoRepo.put(fi);
-    }
-
-    private static IFunctionInfo addPrivateFunction(FunctionIdentifier fi, IResultTypeComputer typeComputer) {
-        IFunctionInfo functionInfo = getAsterixFunctionInfo(fi);
-        builtinFunctionsSet.put(functionInfo, functionInfo);
-        funTypeComputer.put(functionInfo, typeComputer);
-        return functionInfo;
-    }
-
-    private static void addAgg(FunctionIdentifier fi) {
-        builtinAggregateFunctions.add(getAsterixFunctionInfo(fi));
-    }
-
-    private static void addLocalAgg(FunctionIdentifier fi, FunctionIdentifier localfi) {
-        aggregateToLocalAggregate.put(getAsterixFunctionInfo(fi), getAsterixFunctionInfo(localfi));
-    }
-
-    private static void addGlobalAgg(FunctionIdentifier fi, FunctionIdentifier globalfi) {
-        aggregateToGlobalAggregate.put(getAsterixFunctionInfo(fi), getAsterixFunctionInfo(globalfi));
-    }
-
-    public static void addUnnestFun(FunctionIdentifier fi, boolean returnsUniqueValues) {
-        builtinUnnestingFunctions.put(getAsterixFunctionInfo(fi), returnsUniqueValues);
-    }
-
-    private static void addSerialAgg(FunctionIdentifier fi, FunctionIdentifier serialfi) {
-        aggregateToSerializableAggregate.put(getAsterixFunctionInfo(fi), getAsterixFunctionInfo(serialfi));
-    }
-
-    static {
-        spatialFilterFunctions.put(getAsterixFunctionInfo(AsterixBuiltinFunctions.SPATIAL_INTERSECT),
-                SpatialFilterKind.SI);
-    }
-
-    public static boolean isSpatialFilterFunction(FunctionIdentifier fi) {
-        return spatialFilterFunctions.get(getAsterixFunctionInfo(fi)) != null;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AListPointable.java b/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AListPointable.java
deleted file mode 100644
index ab32b6b..0000000
--- a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/pointables/AListPointable.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.om.pointables;
-
-import java.io.DataOutputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.om.pointables.base.IVisitablePointable;
-import edu.uci.ics.asterix.om.pointables.visitor.IVisitablePointableVisitor;
-import edu.uci.ics.asterix.om.types.AOrderedListType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AbstractCollectionType;
-import edu.uci.ics.asterix.om.types.EnumDeserializer;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
-import edu.uci.ics.asterix.om.util.ResettableByteArrayOutputStream;
-import edu.uci.ics.asterix.om.util.container.IObjectFactory;
-
-/**
- * This class interprets the binary data representation of a list, one can
- * call getItems and getItemTags to get pointable objects for items and item
- * type tags.
- */
-public class AListPointable extends AbstractVisitablePointable {
-
-    /**
-     * DO NOT allow to create AListPointable object arbitrarily, force to use
-     * object pool based allocator, in order to have object reuse.
-     */
-    static IObjectFactory<IVisitablePointable, IAType> FACTORY = new IObjectFactory<IVisitablePointable, IAType>() {
-        public IVisitablePointable create(IAType type) {
-            return new AListPointable((AbstractCollectionType) type);
-        }
-    };
-
-    private final List<IVisitablePointable> items = new ArrayList<IVisitablePointable>();
-    private final List<IVisitablePointable> itemTags = new ArrayList<IVisitablePointable>();
-    private final PointableAllocator allocator = new PointableAllocator();
-
-    private final ResettableByteArrayOutputStream dataBos = new ResettableByteArrayOutputStream();
-    private final DataOutputStream dataDos = new DataOutputStream(dataBos);
-
-    private IAType itemType;
-    private ATypeTag itemTag;
-    private boolean typedItemList = false;
-    private boolean ordered = false;
-
-    /**
-     * private constructor, to prevent constructing it arbitrarily
-     * 
-     * @param inputType
-     */
-    private AListPointable(AbstractCollectionType inputType) {
-        if (inputType instanceof AOrderedListType) {
-            ordered = true;
-        }
-        if (inputType != null && inputType.getItemType() != null) {
-            itemType = inputType.getItemType();
-            if (itemType.getTypeTag() == ATypeTag.ANY) {
-                typedItemList = false;
-            } else {
-                typedItemList = true;
-                itemTag = inputType.getItemType().getTypeTag();
-            }
-        } else {
-            this.typedItemList = false;
-        }
-    }
-
-    private void reset() {
-        allocator.reset();
-        items.clear();
-        itemTags.clear();
-        dataBos.reset();
-    }
-
-    @Override
-    public void set(byte[] b, int s, int len) {
-        reset();
-
-        int numberOfitems = AInt32SerializerDeserializer.getInt(b, s + 6);
-        int itemOffset;
-        if (typedItemList) {
-            switch (itemTag) {
-                case STRING:
-                case RECORD:
-                case ORDEREDLIST:
-                case UNORDEREDLIST:
-                case ANY:
-                    itemOffset = s + 10 + (numberOfitems * 4);
-                    break;
-                default:
-                    itemOffset = s + 10;
-            }
-        } else {
-            itemOffset = s + 10 + (numberOfitems * 4);
-        }
-        int itemLength = 0;
-        try {
-            if (typedItemList) {
-                for (int i = 0; i < numberOfitems; i++) {
-                    itemLength = NonTaggedFormatUtil.getFieldValueLength(b, itemOffset, itemTag, false);
-                    IVisitablePointable tag = allocator.allocateEmpty();
-                    IVisitablePointable item = allocator.allocateFieldValue(itemType);
-
-                    // set item type tag
-                    int start = dataBos.size();
-                    dataDos.writeByte(itemTag.serialize());
-                    int end = dataBos.size();
-                    tag.set(dataBos.getByteArray(), start, end - start);
-                    itemTags.add(tag);
-
-                    // set item value
-                    start = dataBos.size();
-                    dataDos.writeByte(itemTag.serialize());
-                    dataDos.write(b, itemOffset, itemLength);
-                    end = dataBos.size();
-                    item.set(dataBos.getByteArray(), start, end - start);
-                    itemOffset += itemLength;
-                    items.add(item);
-                }
-            } else {
-                for (int i = 0; i < numberOfitems; i++) {
-                    itemTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[itemOffset]);
-                    itemLength = NonTaggedFormatUtil.getFieldValueLength(b, itemOffset, itemTag, true) + 1;
-                    IVisitablePointable tag = allocator.allocateEmpty();
-                    IVisitablePointable item = allocator.allocateFieldValue(itemTag);
-
-                    // set item type tag
-                    int start = dataBos.size();
-                    dataDos.writeByte(itemTag.serialize());
-                    int end = dataBos.size();
-                    tag.set(dataBos.getByteArray(), start, end - start);
-                    itemTags.add(tag);
-
-                    // open part field already include the type tag
-                    item.set(b, itemOffset, itemLength);
-                    itemOffset += itemLength;
-                    items.add(item);
-                }
-            }
-        } catch (Exception e) {
-            throw new IllegalStateException(e);
-        }
-    }
-
-    @Override
-    public <R, T> R accept(IVisitablePointableVisitor<R, T> vistor, T tag) throws AsterixException {
-        return vistor.visit(this, tag);
-    }
-
-    public List<IVisitablePointable> getItems() {
-        return items;
-    }
-
-    public List<IVisitablePointable> getItemTags() {
-        return itemTags;
-    }
-
-    public boolean ordered() {
-        return ordered;
-    }
-}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java b/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
deleted file mode 100644
index c8ba938..0000000
--- a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package edu.uci.ics.asterix.om.typecomputer.impl;
-
-
-import edu.uci.ics.asterix.om.typecomputer.base.IResultTypeComputer;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.AbstractCollectionType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.types.TypeHelper;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.metadata.IMetadataProvider;
-
-public class ScalarVersionOfAggregateResultType implements IResultTypeComputer {
-
-    public static final ScalarVersionOfAggregateResultType INSTANCE = new ScalarVersionOfAggregateResultType();
-
-    private ScalarVersionOfAggregateResultType() {
-    }
-
-    @Override
-    public IAType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
-            IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
-        AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expression;
-        ILogicalExpression arg1 = fce.getArguments().get(0).getValue();
-        IAType t1 = (IAType) env.getType(arg1);
-        IAType nonOpt = TypeHelper.getNonOptionalType(t1);
-        ATypeTag tag1 = nonOpt.getTypeTag();
-        if (tag1 != ATypeTag.ORDEREDLIST && tag1 != ATypeTag.UNORDEREDLIST) {
-            throw new AlgebricksException("Type of argument in " + expression
-                    + " should be a collection type instead of " + t1);
-        }
-        AbstractCollectionType act = (AbstractCollectionType) nonOpt;
-        IAType t = act.getItemType();
-        if (TypeHelper.canBeNull(t)) {
-            return t;
-        } else {
-            return AUnionType.createNullableType(t);
-        }
-    }
-
-}
diff --git a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java b/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
deleted file mode 100644
index dc0afcd..0000000
--- a/asterix/asterix-om/src/main/java/edu/uci/ics/asterix/om/types/ARecordType.java
+++ /dev/null
@@ -1,296 +0,0 @@
-/*
- * Copyright 2009-2013 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.om.types;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import edu.uci.ics.asterix.common.annotations.IRecordTypeAnnotation;
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.om.base.IAObject;
-import edu.uci.ics.asterix.om.visitors.IOMVisitor;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
-import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunction;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
-import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
-import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
-import edu.uci.ics.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
-import edu.uci.ics.hyracks.dataflow.common.data.marshalling.UTF8StringSerializerDeserializer;
-
-public class ARecordType extends AbstractComplexType {
-
-    private static final long serialVersionUID = 1L;
-    private String[] fieldNames;
-    private IAType[] fieldTypes;
-    private boolean isOpen;
-    private final List<IRecordTypeAnnotation> annotations = new ArrayList<IRecordTypeAnnotation>();
-
-    private transient IBinaryHashFunction fieldNameHashFunction;
-    private transient IBinaryComparator fieldNameComparator;
-    private final byte serializedFieldNames[];
-    private final int serializedFieldNameOffsets[];
-    private final long hashCodeIndexPairs[];
-
-    /**
-     * @param typeName
-     *            the name of the type
-     * @param fieldNames
-     *            the names of the closed fields
-     * @param fieldTypes
-     *            the types of the closed fields
-     * @param isOpen
-     *            whether the record is open
-     * @throws AsterixException
-     *             if there are duplicate field names or if there is an error serializing the field names
-     */
-    public ARecordType(String typeName, String[] fieldNames, IAType[] fieldTypes, boolean isOpen)
-            throws AsterixException {
-        super(typeName);
-        this.fieldNames = fieldNames;
-        this.fieldTypes = fieldTypes;
-        this.isOpen = isOpen;
-
-        fieldNameComparator = new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY)
-                .createBinaryComparator();
-        fieldNameHashFunction = new PointableBinaryHashFunctionFactory(UTF8StringPointable.FACTORY)
-                .createBinaryHashFunction();
-        ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
-        DataOutputStream dos = new DataOutputStream(baaos);
-        serializedFieldNameOffsets = new int[fieldNames.length];
-        hashCodeIndexPairs = new long[fieldNames.length];
-
-        int length = 0;
-        for (int i = 0; i < fieldNames.length; i++) {
-            serializedFieldNameOffsets[i] = baaos.size();
-            try {
-                dos.writeUTF(fieldNames[i]);
-            } catch (IOException e) {
-                throw new AsterixException(e);
-            }
-            length = baaos.size() - serializedFieldNameOffsets[i];
-            hashCodeIndexPairs[i] = fieldNameHashFunction.hash(baaos.getByteArray(), serializedFieldNameOffsets[i],
-                    length);
-            hashCodeIndexPairs[i] = hashCodeIndexPairs[i] << 32;
-            hashCodeIndexPairs[i] = hashCodeIndexPairs[i] | i;
-        }
-        serializedFieldNames = baaos.getByteArray();
-
-        Arrays.sort(hashCodeIndexPairs);
-        int j;
-        for (int i = 0; i < fieldNames.length; i++) {
-            j = findFieldPosition(serializedFieldNames, serializedFieldNameOffsets[i],
-                    UTF8StringPointable.getStringLength(serializedFieldNames, serializedFieldNameOffsets[i]));
-            if (j != i) {
-                throw new AsterixException("Closed fields " + j + " and " + i + " have the same field name \""
-                        + fieldNames[i] + "\"");
-            }
-        }
-    }
-
-    private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
-        ois.defaultReadObject();
-        fieldNameComparator = new PointableBinaryComparatorFactory(UTF8StringPointable.FACTORY)
-                .createBinaryComparator();
-        fieldNameHashFunction = new PointableBinaryHashFunctionFactory(UTF8StringPointable.FACTORY)
-                .createBinaryHashFunction();
-    }
-
-    /**
-     * Returns the position of the field in the closed schema or -1 if the field does not exist.
-     * 
-     * @param bytes
-     *            the serialized bytes of the field name
-     * @param start
-     *            the starting offset of the field name in bytes
-     * @param length
-     *            the length of the field name in bytes
-     * @return the position of the field in the closed schema or -1 if the field does not exist.
-     */
-    public int findFieldPosition(byte[] bytes, int start, int length) {
-        if (hashCodeIndexPairs.length == 0) {
-            return -1;
-        }
-
-        int fIndex;
-        int probeFieldHash = fieldNameHashFunction.hash(bytes, start, length);
-        int i = Arrays.binarySearch(hashCodeIndexPairs, ((long) probeFieldHash) << 32);
-        i = (i < 0) ? (i = -1 * (i + 1)) : i;
-
-        while (i < hashCodeIndexPairs.length && (int) (hashCodeIndexPairs[i] >>> 32) == probeFieldHash) {
-            fIndex = (int) hashCodeIndexPairs[i];
-            int cFieldLength = UTF8StringPointable.getStringLength(serializedFieldNames,
-                    serializedFieldNameOffsets[fIndex]);
-            if (fieldNameComparator.compare(serializedFieldNames, serializedFieldNameOffsets[fIndex], cFieldLength,
-                    bytes, start, length) == 0) {
-                return fIndex;
-            }
-            i++;
-        }
-
-        return -1;
-    }
-
-    public final String[] getFieldNames() {
-        return fieldNames;
-    }
-
-    public final IAType[] getFieldTypes() {
-        return fieldTypes;
-    }
-
-    public List<IRecordTypeAnnotation> getAnnotations() {
-        return annotations;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        if (isOpen) {
-            sb.append("open ");
-        } else {
-            sb.append("closed ");
-        }
-        sb.append("{\n");
-        int n = fieldNames.length;
-        for (int i = 0; i < n; i++) {
-            sb.append("  " + fieldNames[i] + ": " + fieldTypes[i].toString());
-            if (i < n - 1) {
-                sb.append(",\n");
-            } else {
-                sb.append("\n");
-            }
-        }
-        sb.append("}\n");
-        return sb.toString();
-    }
-
-    @Override
-    public ATypeTag getTypeTag() {
-        return ATypeTag.RECORD;
-    }
-
-    public boolean isOpen() {
-        return isOpen;
-    }
-
-    /**
-     * Returns the position of the field in the closed schema or -1 if the field does not exist.
-     * 
-     * @param fieldName
-     *            the name of the field whose position is sought
-     * @return the position of the field in the closed schema or -1 if the field does not exist.
-     */
-    public int findFieldPosition(String fieldName) throws IOException {
-        ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
-        DataOutputStream dos = new DataOutputStream(baaos);
-        UTF8StringSerializerDeserializer.INSTANCE.serialize(fieldName, dos);
-        return findFieldPosition(baaos.getByteArray(), 0, baaos.getByteArray().length);
-    }
-
-    /**
-     * Returns the field type of the field name if it exists, otherwise null.
-     * 
-     * @param fieldName
-     *            the fieldName whose type is sought
-     * @return the field type of the field name if it exists, otherwise null
-     * @throws IOException
-     *             if an error occurs while serializing the field name
-     */
-    public IAType getFieldType(String fieldName) throws IOException {
-        int fieldPos = findFieldPosition(fieldName);
-        if (fieldPos < 0 || fieldPos >= fieldTypes.length) {
-            return null;
-        }
-        return fieldTypes[fieldPos];
-    }
-
-    /**
-     * Returns true or false indicating whether or not a field is closed.
-     * 
-     * @param fieldName
-     *            the name of the field to check
-     * @return true if fieldName is a closed field, otherwise false
-     * @throws IOException
-     *             if an error occurs while serializing fieldName
-     */
-    public boolean isClosedField(String fieldName) throws IOException {
-        return findFieldPosition(fieldName) != -1;
-    }
-
-    @Override
-    public String getDisplayName() {
-        return "ARecord";
-    }
-
-    @Override
-    public void accept(IOMVisitor visitor) throws AsterixException {
-        visitor.visitAType(this);
-    }
-
-    @Override
-    public IAType getType() {
-        return BuiltinType.ASTERIX_TYPE;
-    }
-
-    @Override
-    public boolean deepEqual(IAObject obj) {
-        if (!(obj instanceof ARecordType)) {
-            return false;
-        }
-        ARecordType rt = (ARecordType) obj;
-        return isOpen == rt.isOpen && Arrays.deepEquals(fieldNames, rt.fieldNames)
-                && Arrays.deepEquals(fieldTypes, rt.fieldTypes);
-    }
-
-    @Override
-    public int hash() {
-        int h = 0;
-        for (int i = 0; i < fieldNames.length; i++) {
-            h += 31 * h + (int) (hashCodeIndexPairs[i] >> 32);
-        }
-        for (int i = 0; i < fieldTypes.length; i++) {
-            h += 31 * h + fieldTypes[i].hashCode();
-        }
-        return h;
-    }
-    @Override
-    public JSONObject toJSON() throws JSONException {
-        JSONObject type = new JSONObject();
-        if (isOpen) {
-            type.put("open", true);
-        } else {
-            type.put("open", false);
-        }
-
-        JSONArray fields = new JSONArray();
-        for (int i = 0; i < fieldNames.length; i++) {
-            JSONObject field = new JSONObject();
-            field.put(fieldNames[i], fieldTypes[i].toJSON());
-            fields.put(field);
-        }
-
-        type.put("fields", fields);
-        return type;
-    }
-}
diff --git a/asterix/asterix-runtime/pom.xml b/asterix/asterix-runtime/pom.xml
deleted file mode 100644
index 3e03a32..0000000
--- a/asterix/asterix-runtime/pom.xml
+++ /dev/null
@@ -1,160 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-runtime</artifactId>
-
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-	      	<plugin>
-	        	<groupId>edu.uci.ics.asterix</groupId>
-	        	<artifactId>lexer-generator-maven-plugin</artifactId>
-	        	<version>0.0.5-SNAPSHOT</version>
-	        	<configuration>
-	        	  	<grammarFile>src/main/resources/adm.grammar</grammarFile>
-	        	  	<outputDir>${project.build.directory}/generated-sources/edu/uci/ics/asterix/runtime/operators/file/adm</outputDir>
-	        	</configuration>
-	        	<executions>
-		          	<execution>
-		          		<id>generate-lexer</id>
-            			<phase>generate-sources</phase>
-			            <goals>
-	              			<goal>generate-lexer</goal>
-	            		</goals>
-	          		</execution>
-	        	</executions>
-	      	</plugin>
-	      	 <plugin>
-			    <groupId>org.codehaus.mojo</groupId>
-			    <artifactId>build-helper-maven-plugin</artifactId>
-			    <executions>
-			        <execution>
-			            <id>add-source</id>
-			            <phase>generate-sources</phase>
-			            <goals>
-			                <goal>add-source</goal>
-			            </goals>
-			            <configuration>
-			                <sources>
-			                    <source>${project.build.directory}/generated-sources/</source>
-			                </sources>
-			            </configuration>
-			        </execution>
-			    </executions>
- 			</plugin>
-	    </plugins>
-		<pluginManagement>
-			<plugins>
-				<!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											edu.uci.ics.asterix
-										</groupId>
-										<artifactId>
-											lexer-generator-maven-plugin
-										</artifactId>
-										<versionRange>
-											[0.1,)
-										</versionRange>
-										<goals>
-											<goal>generate-lexer</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<execute>
-											<runOnIncremental>false</runOnIncremental>
-										</execute>
-									</action>
-								</pluginExecution>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.codehaus.mojo
-										</groupId>
-										<artifactId>
-											build-helper-maven-plugin
-										</artifactId>
-										<versionRange>
-											[1.7,)
-										</versionRange>
-										<goals>
-											<goal>add-source</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore />
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-om</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.fuzzyjoin</groupId>
-			<artifactId>fuzzyjoin-core</artifactId>
-			<version>0.0.3</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-btree</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-transactions</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.twitter4j</groupId>
-			<artifactId>twitter4j-core</artifactId>
-			<version>2.2.3</version>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.hadoop</groupId>
-			<artifactId>hadoop-core</artifactId>
-			<version>0.20.2</version>
-			<type>jar</type>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-		         <groupId>edu.uci.ics.hyracks</groupId>
-		         <artifactId>hyracks-api</artifactId>
-	        </dependency>
-	</dependencies>
-
-</project>
-
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateFunction.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateFunction.java
deleted file mode 100644
index e4d015b..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/CountAggregateFunction.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package edu.uci.ics.asterix.runtime.aggregates.std;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.EnumDeserializer;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyAggregateFunction;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-/**
- * count(NULL) returns NULL.
- */
-public class CountAggregateFunction implements ICopyAggregateFunction {
-    private AMutableInt32 result = new AMutableInt32(-1);
-    @SuppressWarnings("unchecked")
-    private ISerializerDeserializer<AInt32> int32Serde = AqlSerializerDeserializerProvider.INSTANCE
-            .getSerializerDeserializer(BuiltinType.AINT32);
-    @SuppressWarnings("unchecked")
-    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-            .getSerializerDeserializer(BuiltinType.ANULL);
-    private ArrayBackedValueStorage inputVal = new ArrayBackedValueStorage();
-    private ICopyEvaluator eval;
-    private boolean metNull;
-    private int cnt;
-    private DataOutput out;
-
-    public CountAggregateFunction(ICopyEvaluatorFactory[] args, IDataOutputProvider output) throws AlgebricksException {
-        eval = args[0].createEvaluator(inputVal);
-        out = output.getDataOutput();
-    }
-
-    @Override
-    public void init() {
-        cnt = 0;
-        metNull = false;
-    }
-
-    @Override
-    public void step(IFrameTupleReference tuple) throws AlgebricksException {
-        inputVal.reset();
-        eval.evaluate(tuple);
-        ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(inputVal.getByteArray()[0]);
-        // Ignore SYSTEM_NULL.
-        if (typeTag == ATypeTag.NULL) {
-            metNull = true;
-        } else {
-            cnt++;
-        }
-    }
-
-    @Override
-    public void finish() throws AlgebricksException {
-        try {
-            if (metNull) {
-                nullSerde.serialize(ANull.NULL, out);
-            } else {
-                result.setValue(cnt);
-                int32Serde.serialize(result, out);
-            }
-        } catch (IOException e) {
-            throw new AlgebricksException(e);
-        }
-    }
-
-    @Override
-    public void finishPartial() throws AlgebricksException {
-        finish();
-    }
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
deleted file mode 100644
index 05391de..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalDayAccessor.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalDayAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "day", 1);
-
-    // allowed input types
-    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalDayAccessor();
-        }
-    };
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
-     */
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationDay(ADurationSerializerDeserializer
-                                        .getDayTime(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_DATE_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1)
-                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int year = calSystem.getYear(chrononTimeInMs);
-                            int month = calSystem.getMonthOfYear(chrononTimeInMs, year);
-                            int day = calSystem.getDayOfMonthYear(chrononTimeInMs, year, month);
-
-                            aMutableInt32.setValue(day);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
-     */
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
deleted file mode 100644
index eba012f..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalHourAccessor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalHourAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "hour", 1);
-
-    // allowed input types
-    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalHourAccessor();
-        }
-
-    };
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
-     */
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationHour(ADurationSerializerDeserializer
-                                        .getDayTime(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_TIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int hour = calSystem.getHourOfDay(chrononTimeInMs);
-
-                            aMutableInt32.setValue(hour);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
-     */
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
deleted file mode 100644
index ecc1a35..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMillisecondAccessor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalMillisecondAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "millisecond", 1);
-
-    // allowed input types
-    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalMillisecondAccessor();
-        }
-
-    };
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
-     */
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationMillisecond(ADurationSerializerDeserializer
-                                        .getDayTime(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_TIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int ms = calSystem.getMillisOfSec(chrononTimeInMs);
-
-                            aMutableInt32.setValue(ms);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
-     */
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
deleted file mode 100644
index f436016..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMinuteAccessor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalMinuteAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "minute", 1);
-
-    // allowed input types
-    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalMinuteAccessor();
-        }
-
-    };
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
-     */
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationMinute(ADurationSerializerDeserializer
-                                        .getDayTime(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_TIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int min = calSystem.getMinOfHour(chrononTimeInMs);
-
-                            aMutableInt32.setValue(min);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
-     */
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
deleted file mode 100644
index fb68f7d..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalMonthAccessor.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalMonthAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "month", 1);
-
-    // allowed input types
-    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalMonthAccessor();
-        }
-
-    };
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
-     */
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationMonth(ADurationSerializerDeserializer
-                                        .getYearMonth(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_DATE_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1)
-                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int year = calSystem.getYear(chrononTimeInMs);
-                            int month = calSystem.getMonthOfYear(chrononTimeInMs, year);
-
-                            aMutableInt32.setValue(month);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
-     */
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
deleted file mode 100644
index 3b9ee95..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalSecondAccessor.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalSecondAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "second", 1);
-
-    // allowed input types
-    private static final byte SER_TIME_TYPE_TAG = ATypeTag.TIME.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalSecondAccessor();
-        }
-
-    };
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.runtime.base.IScalarFunctionDynamicDescriptor#createEvaluatorFactory(edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory[])
-     */
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationSecond(ADurationSerializerDeserializer
-                                        .getDayTime(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_TIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1);
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int sec = calSystem.getSecOfMin(chrononTimeInMs);
-
-                            aMutableInt32.setValue(sec);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    /* (non-Javadoc)
-     * @see edu.uci.ics.asterix.om.functions.IFunctionDescriptor#getIdentifier()
-     */
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
deleted file mode 100644
index 41dacfd..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/accessors/TemporalYearAccessor.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.accessors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt64SerializerDeserializer;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.AMutableInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class TemporalYearAccessor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-
-    private static final FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "year", 1);
-
-    // allowed input types
-    private static final byte SER_DATE_TYPE_TAG = ATypeTag.DATE.serialize();
-    private static final byte SER_DATETIME_TYPE_TAG = ATypeTag.DATETIME.serialize();
-    private static final byte SER_DURATION_TYPE_TAG = ATypeTag.DURATION.serialize();
-    private static final byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private static final byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-
-        @Override
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new TemporalYearAccessor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) throws AlgebricksException {
-        return new ICopyEvaluatorFactory() {
-
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut = new ArrayBackedValueStorage();
-
-                    private ICopyEvaluator eval = args[0].createEvaluator(argOut);
-
-                    private GregorianCalendarSystem calSystem = GregorianCalendarSystem.getInstance();
-
-                    // for output: type integer
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInt32> intSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINT32);
-                    private AMutableInt32 aMutableInt32 = new AMutableInt32(0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-                        argOut.reset();
-                        eval.evaluate(tuple);
-                        byte[] bytes = argOut.getByteArray();
-
-                        try {
-
-                            if (bytes[0] == SER_DURATION_TYPE_TAG) {
-                                aMutableInt32.setValue(calSystem.getDurationYear(ADurationSerializerDeserializer
-                                        .getYearMonth(bytes, 1)));
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            }
-
-                            long chrononTimeInMs = 0;
-                            if (bytes[0] == SER_DATE_TYPE_TAG) {
-                                chrononTimeInMs = AInt32SerializerDeserializer.getInt(bytes, 1)
-                                        * GregorianCalendarSystem.CHRONON_OF_DAY;
-                            } else if (bytes[0] == SER_DATETIME_TYPE_TAG) {
-                                chrononTimeInMs = AInt64SerializerDeserializer.getLong(bytes, 1);
-                            } else if (bytes[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                                return;
-                            } else if (bytes[0] == SER_STRING_TYPE_TAG) {
-                                int year;
-                                if (UTF8StringPointable.charAt(bytes, 3) == '-') {
-                                    // in case of a negative year
-                                    year = -1
-                                            * ((UTF8StringPointable.charAt(bytes, 4) - '0') * 1000
-                                                    + (UTF8StringPointable.charAt(bytes, 5) - '0') * 100
-                                                    + (UTF8StringPointable.charAt(bytes, 6) - '0') * 10 + (UTF8StringPointable
-                                                    .charAt(bytes, 7) - '0'));
-                                } else {
-                                    year = (UTF8StringPointable.charAt(bytes, 3) - '0') * 1000
-                                            + (UTF8StringPointable.charAt(bytes, 4) - '0') * 100
-                                            + (UTF8StringPointable.charAt(bytes, 5) - '0') * 10
-                                            + (UTF8StringPointable.charAt(bytes, 6) - '0');
-                                }
-                                aMutableInt32.setValue(year);
-                                intSerde.serialize(aMutableInt32, out);
-                                return;
-                            } else {
-                                throw new AlgebricksException("Inapplicable input type: " + bytes[0]);
-                            }
-
-                            int year = calSystem.getYear(chrononTimeInMs);
-
-                            aMutableInt32.setValue(year);
-                            intSerde.serialize(aMutableInt32, out);
-
-                        } catch (IOException e) {
-                            throw new AlgebricksException(e);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
deleted file mode 100644
index 0414874..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateConstructorDescriptor.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.AMutableInterval;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalFromDateConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-from-date", 2);
-    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalFromDateConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-                    //TODO: Where to move and fix these?
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
-                                    && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-
-                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                        + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                                // start date
-                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
-                                        stringLength) / GregorianCalendarSystem.CHRONON_OF_DAY;
-
-                                // end date
-                                stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                        + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                                long intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), 3,
-                                        stringLength) / GregorianCalendarSystem.CHRONON_OF_DAY;
-
-                                if (intervalEnd < intervalStart) {
-                                    throw new AlgebricksException(
-                                            "Interval end must not be less than the interval start.");
-                                }
-
-                                aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATE.serialize());
-                                intervalSerde.serialize(aInterval, out);
-                            } else {
-                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
-                            }
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
deleted file mode 100644
index 6b3e2b6..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromDateTimeConstructorDescriptor.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.AMutableInterval;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalFromDateTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-from-datetime", 2);
-    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalFromDateTimeConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-                    //TODO: Where to move and fix these?
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
-                                    && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-                                // start datetime
-                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                        + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                                // get offset for time part: +1 if it is negative (-)
-                                short timeOffset = (short) ((argOut0.getByteArray()[3] == '-') ? 1 : 0);
-                                timeOffset += 8;
-                                if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
-                                    timeOffset += 2;
-                                    if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
-                                        throw new AlgebricksException(errorMessage + ": missing T");
-                                    }
-                                }
-
-                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
-                                        timeOffset);
-                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
-                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
-
-                                // end datetime
-                                stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                        + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                                // get offset for time part: +1 if it is negative (-)
-                                timeOffset = (short) ((argOut1.getByteArray()[3] == '-') ? 1 : 0);
-                                timeOffset += 8;
-                                if (argOut1.getByteArray()[3 + timeOffset] != 'T') {
-                                    timeOffset += 2;
-                                    if (argOut1.getByteArray()[3 + timeOffset] != 'T') {
-                                        throw new AlgebricksException(errorMessage + ": missing T");
-                                    }
-                                }
-
-                                long intervalEnd = ADateParserFactory.parseDatePart(argOut1.getByteArray(), 3,
-                                        timeOffset);
-                                intervalEnd += ATimeParserFactory.parseTimePart(argOut1.getByteArray(),
-                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
-
-                                if (intervalEnd < intervalStart) {
-                                    throw new AlgebricksException(
-                                            "Interval end must not be less than the interval start.");
-                                }
-
-                                aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATETIME.serialize());
-                                intervalSerde.serialize(aInterval, out);
-                            } else {
-                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
-                            }
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
deleted file mode 100644
index 042a33b..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalFromTimeConstructorDescriptor.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.AMutableInterval;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalFromTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-from-time", 2);
-    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalFromTimeConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-                    //TODO: Where to move and fix these?
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
-                                    && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-                                // start date
-                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                        + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                                long intervalStart = ATimeParserFactory.parseTimePart(argOut0.getByteArray(), 3,
-                                        stringLength);
-                                if (intervalStart < 0) {
-                                    intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
-                                }
-
-                                // end date
-                                stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                        + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                                long intervalEnd = ATimeParserFactory.parseTimePart(argOut1.getByteArray(), 3,
-                                        stringLength);
-                                if (intervalEnd < 0) {
-                                    intervalEnd += GregorianCalendarSystem.CHRONON_OF_DAY;
-                                }
-
-                                if (intervalEnd < intervalStart) {
-                                    throw new AlgebricksException(
-                                            "Interval end must not be less than the interval start.");
-                                }
-
-                                aInterval.setValue(intervalStart, intervalEnd, ATypeTag.TIME.serialize());
-                                intervalSerde.serialize(aInterval, out);
-                            } else {
-                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
-                            }
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
deleted file mode 100644
index d5a0db9..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateConstructorDescriptor.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.AMutableDuration;
-import edu.uci.ics.asterix.om.base.AMutableInterval;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalStartFromDateConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-start-from-date", 2);
-    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalStartFromDateConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    private AMutableDuration aDuration = new AMutableDuration(0, 0L);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
-                                    && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-
-                                // start date
-                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                        + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
-                                        stringLength);
-
-                                // duration
-                                stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                        + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                                ADurationParserFactory
-                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
-
-                                long intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
-                                        aDuration.getMonths(), aDuration.getMilliseconds());
-
-                                intervalStart = GregorianCalendarSystem.getChrononInDays(intervalStart);
-                                intervalEnd = GregorianCalendarSystem.getChrononInDays(intervalEnd);
-
-                                if (intervalEnd < intervalStart) {
-                                    throw new AlgebricksException(
-                                            "Interval end must not be less than the interval start.");
-                                }
-
-                                aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATE.serialize());
-                                intervalSerde.serialize(aInterval, out);
-                            } else {
-                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
-                            }
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
deleted file mode 100644
index d821fc3..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromDateTimeConstructorDescriptor.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.AMutableDuration;
-import edu.uci.ics.asterix.om.base.AMutableInterval;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.ADateParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalStartFromDateTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-start-from-datetime", 2);
-    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalStartFromDateTimeConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    private AMutableDuration aDuration = new AMutableDuration(0, 0L);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
-                                    && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-                                // start date
-
-                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                        + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                                // get offset for time part: +1 if it is negative (-)
-                                short timeOffset = (short) ((argOut0.getByteArray()[3] == '-') ? 1 : 0);
-
-                                timeOffset += 8;
-
-                                if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
-                                    timeOffset += 2;
-                                    if (argOut0.getByteArray()[3 + timeOffset] != 'T') {
-                                        throw new AlgebricksException(errorMessage + ": missing T");
-                                    }
-                                }
-
-                                long intervalStart = ADateParserFactory.parseDatePart(argOut0.getByteArray(), 3,
-                                        timeOffset);
-                                intervalStart += ATimeParserFactory.parseTimePart(argOut0.getByteArray(),
-                                        3 + timeOffset + 1, stringLength - timeOffset - 1);
-
-                                // duration
-                                stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                        + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                                ADurationParserFactory
-                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
-
-                                long intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
-                                        aDuration.getMonths(), aDuration.getMilliseconds());
-
-                                if (intervalEnd < intervalStart) {
-                                    throw new AlgebricksException(
-                                            "Interval end must not be less than the interval start.");
-                                }
-
-                                aInterval.setValue(intervalStart, intervalEnd, ATypeTag.DATETIME.serialize());
-                                intervalSerde.serialize(aInterval, out);
-                            } else {
-                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
-                            }
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
deleted file mode 100644
index 8135598..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AIntervalStartFromTimeConstructorDescriptor.java
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright 2009-2011 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.runtime.evaluators.constructors;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.functions.FunctionConstants;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.om.base.AInterval;
-import edu.uci.ics.asterix.om.base.AMutableDuration;
-import edu.uci.ics.asterix.om.base.AMutableInterval;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.temporal.ADurationParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.ATimeParserFactory;
-import edu.uci.ics.asterix.om.base.temporal.DurationArithmeticOperations;
-import edu.uci.ics.asterix.om.base.temporal.GregorianCalendarSystem;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.ISerializerDeserializer;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class AIntervalStartFromTimeConstructorDescriptor extends AbstractScalarFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public final static FunctionIdentifier FID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
-            "interval-start-from-time", 2);
-    private final static byte SER_STRING_TYPE_TAG = ATypeTag.STRING.serialize();
-    private final static byte SER_NULL_TYPE_TAG = ATypeTag.NULL.serialize();
-
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new AIntervalStartFromTimeConstructorDescriptor();
-        }
-    };
-
-    @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(final ICopyEvaluatorFactory[] args) {
-        return new ICopyEvaluatorFactory() {
-            private static final long serialVersionUID = 1L;
-
-            @Override
-            public ICopyEvaluator createEvaluator(final IDataOutputProvider output) throws AlgebricksException {
-                return new ICopyEvaluator() {
-
-                    private DataOutput out = output.getDataOutput();
-
-                    private ArrayBackedValueStorage argOut0 = new ArrayBackedValueStorage();
-                    private ArrayBackedValueStorage argOut1 = new ArrayBackedValueStorage();
-                    private ICopyEvaluator eval0 = args[0].createEvaluator(argOut0);
-                    private ICopyEvaluator eval1 = args[1].createEvaluator(argOut1);
-                    private String errorMessage = "This can not be an instance of interval (from Date)";
-
-                    private AMutableInterval aInterval = new AMutableInterval(0L, 0L, (byte) 0);
-                    private AMutableDuration aDuration = new AMutableDuration(0, 0L);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<AInterval> intervalSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.AINTERVAL);
-                    @SuppressWarnings("unchecked")
-                    private ISerializerDeserializer<ANull> nullSerde = AqlSerializerDeserializerProvider.INSTANCE
-                            .getSerializerDeserializer(BuiltinType.ANULL);
-
-                    @Override
-                    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
-
-                        argOut0.reset();
-                        argOut1.reset();
-                        eval0.evaluate(tuple);
-                        eval1.evaluate(tuple);
-
-                        try {
-
-                            if (argOut0.getByteArray()[0] == SER_NULL_TYPE_TAG
-                                    || argOut1.getByteArray()[0] == SER_NULL_TYPE_TAG) {
-                                nullSerde.serialize(ANull.NULL, out);
-                            } else if (argOut0.getByteArray()[0] == SER_STRING_TYPE_TAG
-                                    && argOut1.getByteArray()[0] == SER_STRING_TYPE_TAG) {
-                                // start time
-
-                                int stringLength = (argOut0.getByteArray()[1] & 0xff << 8)
-                                        + (argOut0.getByteArray()[2] & 0xff << 0);
-
-                                int intervalStart = ATimeParserFactory.parseTimePart(argOut0.getByteArray(), 3,
-                                        stringLength);
-
-                                if (intervalStart < 0) {
-                                    intervalStart += GregorianCalendarSystem.CHRONON_OF_DAY;
-                                }
-
-                                // duration
-
-                                stringLength = (argOut1.getByteArray()[1] & 0xff << 8)
-                                        + (argOut1.getByteArray()[2] & 0xff << 0);
-
-                                ADurationParserFactory
-                                        .parseDuration(argOut1.getByteArray(), 3, stringLength, aDuration);
-
-                                if (aDuration.getMonths() != 0) {
-                                    throw new AlgebricksException("Cannot add a year-month duration to a time value.");
-                                }
-
-                                int intervalEnd = DurationArithmeticOperations.addDuration(intervalStart,
-                                        aDuration.getMilliseconds());
-
-                                if (intervalEnd > GregorianCalendarSystem.CHRONON_OF_DAY) {
-
-                                    intervalEnd = intervalEnd - (int) (GregorianCalendarSystem.CHRONON_OF_DAY);
-                                }
-
-                                if (intervalEnd < intervalStart) {
-                                    throw new AlgebricksException(
-                                            "Interval end must not be less than the interval start.");
-                                }
-
-                                aInterval.setValue(intervalStart, intervalEnd, ATypeTag.TIME.serialize());
-                                intervalSerde.serialize(aInterval, out);
-                            } else {
-                                throw new AlgebricksException("Wrong format for interval constructor from dates.");
-                            }
-
-                        } catch (IOException e1) {
-                            throw new AlgebricksException(errorMessage);
-                        } catch (Exception e2) {
-                            throw new AlgebricksException(e2);
-                        }
-                    }
-                };
-            }
-        };
-    }
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return FID;
-    }
-
-}
\ No newline at end of file
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
deleted file mode 100644
index f12ea91..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
+++ /dev/null
@@ -1,890 +0,0 @@
-package edu.uci.ics.asterix.runtime.formats;
-
-import java.io.DataOutput;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-
-import edu.uci.ics.asterix.common.config.GlobalConfig;
-import edu.uci.ics.asterix.common.exceptions.AsterixRuntimeException;
-import edu.uci.ics.asterix.common.parse.IParseFileSplitsDecl;
-import edu.uci.ics.asterix.dataflow.data.nontagged.AqlNullWriterFactory;
-import edu.uci.ics.asterix.formats.base.IDataFormat;
-import edu.uci.ics.asterix.formats.nontagged.AqlBinaryBooleanInspectorImpl;
-import edu.uci.ics.asterix.formats.nontagged.AqlBinaryComparatorFactoryProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlBinaryHashFunctionFactoryProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlBinaryHashFunctionFamilyProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlBinaryIntegerInspector;
-import edu.uci.ics.asterix.formats.nontagged.AqlJSONPrinterFactoryProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlNormalizedKeyComputerFactoryProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlPrinterFactoryProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
-import edu.uci.ics.asterix.formats.nontagged.AqlTypeTraitProvider;
-import edu.uci.ics.asterix.om.base.ABoolean;
-import edu.uci.ics.asterix.om.base.AInt32;
-import edu.uci.ics.asterix.om.base.ANull;
-import edu.uci.ics.asterix.om.base.AString;
-import edu.uci.ics.asterix.om.base.IAObject;
-import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.functions.FunctionManagerHolder;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.om.functions.IFunctionManager;
-import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
-import edu.uci.ics.asterix.om.types.AOrderedListType;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.AUnorderedListType;
-import edu.uci.ics.asterix.om.types.BuiltinType;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.runtime.aggregates.collections.ListifyAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarAvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarCountAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarMaxAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarMinAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.scalar.ScalarSumAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableAvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableCountAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableGlobalAvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableLocalAvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableLocalSumAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.serializable.std.SerializableSumAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.AvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.CountAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.GlobalAvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.LocalAvgAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.LocalMaxAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.LocalMinAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.LocalSumAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.MaxAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.MinAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.std.SumAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.stream.EmptyStreamAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.aggregates.stream.NonEmptyStreamAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalDayAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalHourAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalMillisecondAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalMinuteAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalMonthAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalSecondAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.TemporalYearAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.CircleCenterAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.CircleRadiusAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.LineRectanglePolygonAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.PointXCoordinateAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.accessors.PointYCoordinateAccessor;
-import edu.uci.ics.asterix.runtime.evaluators.common.CreateMBREvalFactory;
-import edu.uci.ics.asterix.runtime.evaluators.common.FieldAccessByIndexEvalFactory;
-import edu.uci.ics.asterix.runtime.evaluators.common.FunctionManagerImpl;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ABooleanConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ACircleConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ADateConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ADateTimeConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ADoubleConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ADurationConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AFloatConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt16ConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt32ConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt64ConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AInt8ConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalFromDateConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalFromDateTimeConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalFromTimeConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalStartFromDateConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalStartFromDateTimeConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AIntervalStartFromTimeConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ALineConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ANullConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.APoint3DConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.APointConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.APolygonConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ARectangleConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.AStringConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.constructors.ATimeConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.AndDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.AnyCollectionMemberDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CastRecordDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.ClosedRecordConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CodePointToStringDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.ContainsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CountHashedGramTokensDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CountHashedWordTokensDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CreateCircleDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CreateLineDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CreateMBRDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CreatePointDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CreatePolygonDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.CreateRectangleDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceCheckDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceListIsFilterable;
-import edu.uci.ics.asterix.runtime.evaluators.functions.EditDistanceStringIsFilterable;
-import edu.uci.ics.asterix.runtime.evaluators.functions.EmbedTypeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.EndsWithDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.FieldAccessByIndexDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.FieldAccessByNameDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.FuzzyEqDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.GetItemDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.GramTokensDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.HashedGramTokensDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.HashedWordTokensDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.InjectFailureDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.IsNullDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.LenDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.LikeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NotDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NotNullDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericAbsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericAddDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericCeilingDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericDivideDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericFloorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericModuloDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericMultiplyDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericRoundDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericRoundHalfToEven2Descriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericRoundHalfToEvenDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericSubtractDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.NumericUnaryMinusDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.OpenRecordConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.OrDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.OrderedListConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.PrefixLenJaccardDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.RegExpDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardCheckDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardPrefixCheckDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardPrefixDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardSortedCheckDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SimilarityJaccardSortedDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialAreaDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialCellDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialDistanceDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SpatialIntersectDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StartsWithDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SubstringDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SwitchCaseDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.UnorderedListConstructorDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.WordTokensDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringConcatDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringEndWithDescrtiptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringEqualDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringJoinDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringLengthDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringLowerCaseDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringMatchesDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringMatchesWithFlagDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringReplaceDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringReplaceWithFlagsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringStartWithDescrtiptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.StringToCodePointDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.Substring2Descriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SubstringAfterDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.SubstringBeforeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AddDateDurationDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AddDatetimeDurationDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AddTimeDurationDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AdjustDateTimeForTimeZoneDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.AdjustTimeForTimeZoneDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CalendarDuartionFromDateDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CalendarDurationFromDateTimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CurrentDateDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CurrentDateTimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.CurrentTimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DateFromDatetimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DateFromUnixTimeInDaysDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DatetimeFromDateAndTimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.DatetimeFromUnixTimeInMsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalAfterDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalBeforeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalCoveredByDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalCoversDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalEndedByDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalEndsDecriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalMeetsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalMetByDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.OverlapDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalOverlappedByDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalOverlapsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalStartedByDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.IntervalStartsDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.SubtractDateDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.SubtractDatetimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.SubtractTimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.TimeFromDatetimeDescriptor;
-import edu.uci.ics.asterix.runtime.evaluators.functions.temporal.TimeFromUnixTimeInMsDescriptor;
-import edu.uci.ics.asterix.runtime.operators.file.AdmSchemafullRecordParserFactory;
-import edu.uci.ics.asterix.runtime.operators.file.NtDelimitedDataTupleParserFactory;
-import edu.uci.ics.asterix.runtime.runningaggregates.std.TidRunningAggregateDescriptor;
-import edu.uci.ics.asterix.runtime.unnestingfunctions.std.RangeDescriptor;
-import edu.uci.ics.asterix.runtime.unnestingfunctions.std.ScanCollectionDescriptor;
-import edu.uci.ics.asterix.runtime.unnestingfunctions.std.SubsetCollectionDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.NotImplementedException;
-import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
-import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IExpressionEvalSizeComputer;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableEvalSizeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
-import edu.uci.ics.hyracks.algebricks.data.IBinaryBooleanInspectorFactory;
-import edu.uci.ics.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.data.IBinaryHashFunctionFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.data.IBinaryHashFunctionFamilyProvider;
-import edu.uci.ics.hyracks.algebricks.data.IBinaryIntegerInspectorFactory;
-import edu.uci.ics.hyracks.algebricks.data.INormalizedKeyComputerFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.data.IPrinterFactoryProvider;
-import edu.uci.ics.hyracks.algebricks.data.ISerializerDeserializerProvider;
-import edu.uci.ics.hyracks.algebricks.data.ITypeTraitProvider;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.evaluators.ColumnAccessEvalFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.evaluators.ConstantEvalFactory;
-import edu.uci.ics.hyracks.api.dataflow.value.INullWriterFactory;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.parsers.DoubleParserFactory;
-import edu.uci.ics.hyracks.dataflow.common.data.parsers.FloatParserFactory;
-import edu.uci.ics.hyracks.dataflow.common.data.parsers.IValueParserFactory;
-import edu.uci.ics.hyracks.dataflow.common.data.parsers.IntegerParserFactory;
-import edu.uci.ics.hyracks.dataflow.common.data.parsers.LongParserFactory;
-import edu.uci.ics.hyracks.dataflow.common.data.parsers.UTF8StringParserFactory;
-import edu.uci.ics.hyracks.dataflow.std.file.ITupleParserFactory;
-
-public class NonTaggedDataFormat implements IDataFormat {
-
-    private static boolean registered = false;
-
-    public static final NonTaggedDataFormat INSTANCE = new NonTaggedDataFormat();
-
-    private static LogicalVariable METADATA_DUMMY_VAR = new LogicalVariable(-1);
-
-    private static final HashMap<ATypeTag, IValueParserFactory> typeToValueParserFactMap = new HashMap<ATypeTag, IValueParserFactory>();
-
-    public static final String NON_TAGGED_DATA_FORMAT = "edu.uci.ics.asterix.runtime.formats.NonTaggedDataFormat";
-
-    static {
-        typeToValueParserFactMap.put(ATypeTag.INT32, IntegerParserFactory.INSTANCE);
-        typeToValueParserFactMap.put(ATypeTag.FLOAT, FloatParserFactory.INSTANCE);
-        typeToValueParserFactMap.put(ATypeTag.DOUBLE, DoubleParserFactory.INSTANCE);
-        typeToValueParserFactMap.put(ATypeTag.INT64, LongParserFactory.INSTANCE);
-        typeToValueParserFactMap.put(ATypeTag.STRING, UTF8StringParserFactory.INSTANCE);
-    }
-
-    public NonTaggedDataFormat() {
-    }
-
-    public void registerRuntimeFunctions() throws AlgebricksException {
-
-        if (registered) {
-            return;
-        }
-        registered = true;
-
-        if (FunctionManagerHolder.getFunctionManager() != null) {
-            return;
-        }
-
-        List<IFunctionDescriptorFactory> temp = new ArrayList<IFunctionDescriptorFactory>();
-
-        // format-independent
-        temp.add(ContainsDescriptor.FACTORY);
-        temp.add(EndsWithDescriptor.FACTORY);
-        temp.add(StartsWithDescriptor.FACTORY);
-        temp.add(SubstringDescriptor.FACTORY);
-        temp.add(TidRunningAggregateDescriptor.FACTORY);
-
-        // format-dependent
-        temp.add(AndDescriptor.FACTORY);
-        temp.add(OrDescriptor.FACTORY);
-        temp.add(LikeDescriptor.FACTORY);
-        temp.add(ScanCollectionDescriptor.FACTORY);
-        temp.add(AnyCollectionMemberDescriptor.FACTORY);
-        temp.add(ClosedRecordConstructorDescriptor.FACTORY);
-        temp.add(FieldAccessByIndexDescriptor.FACTORY);
-        temp.add(FieldAccessByNameDescriptor.FACTORY);
-        temp.add(GetItemDescriptor.FACTORY);
-        temp.add(NumericUnaryMinusDescriptor.FACTORY);
-        temp.add(OpenRecordConstructorDescriptor.FACTORY);
-        temp.add(OrderedListConstructorDescriptor.FACTORY);
-        temp.add(UnorderedListConstructorDescriptor.FACTORY);
-        temp.add(EmbedTypeDescriptor.FACTORY);
-
-        temp.add(NumericAddDescriptor.FACTORY);
-        temp.add(NumericDivideDescriptor.FACTORY);
-        temp.add(NumericMultiplyDescriptor.FACTORY);
-        temp.add(NumericSubtractDescriptor.FACTORY);
-        temp.add(NumericModuloDescriptor.FACTORY);
-        temp.add(IsNullDescriptor.FACTORY);
-        temp.add(NotDescriptor.FACTORY);
-        temp.add(LenDescriptor.FACTORY);
-        temp.add(EmptyStreamAggregateDescriptor.FACTORY);
-        temp.add(NonEmptyStreamAggregateDescriptor.FACTORY);
-        temp.add(RangeDescriptor.FACTORY);
-
-        temp.add(NumericAbsDescriptor.FACTORY);
-        temp.add(NumericCeilingDescriptor.FACTORY);
-        temp.add(NumericFloorDescriptor.FACTORY);
-        temp.add(NumericRoundDescriptor.FACTORY);
-        temp.add(NumericRoundHalfToEvenDescriptor.FACTORY);
-        temp.add(NumericRoundHalfToEven2Descriptor.FACTORY);
-        // String functions
-        temp.add(StringEqualDescriptor.FACTORY);
-        temp.add(StringStartWithDescrtiptor.FACTORY);
-        temp.add(StringEndWithDescrtiptor.FACTORY);
-        temp.add(StringMatchesDescriptor.FACTORY);
-        temp.add(StringLowerCaseDescriptor.FACTORY);
-        temp.add(StringMatchesWithFlagDescriptor.FACTORY);
-        temp.add(StringReplaceDescriptor.FACTORY);
-        temp.add(StringReplaceWithFlagsDescriptor.FACTORY);
-        temp.add(StringLengthDescriptor.FACTORY);
-        temp.add(Substring2Descriptor.FACTORY);
-        temp.add(SubstringBeforeDescriptor.FACTORY);
-        temp.add(SubstringAfterDescriptor.FACTORY);
-        temp.add(StringToCodePointDescriptor.FACTORY);
-        temp.add(CodePointToStringDescriptor.FACTORY);
-        temp.add(StringConcatDescriptor.FACTORY);
-        temp.add(StringJoinDescriptor.FACTORY);
-
-        // aggregates
-        temp.add(ListifyAggregateDescriptor.FACTORY);
-        temp.add(CountAggregateDescriptor.FACTORY);
-        temp.add(AvgAggregateDescriptor.FACTORY);
-        temp.add(LocalAvgAggregateDescriptor.FACTORY);
-        temp.add(GlobalAvgAggregateDescriptor.FACTORY);
-        temp.add(SumAggregateDescriptor.FACTORY);
-        temp.add(LocalSumAggregateDescriptor.FACTORY);
-        temp.add(MaxAggregateDescriptor.FACTORY);
-        temp.add(LocalMaxAggregateDescriptor.FACTORY);
-        temp.add(MinAggregateDescriptor.FACTORY);
-        temp.add(LocalMinAggregateDescriptor.FACTORY);
-
-        // serializable aggregates
-        temp.add(SerializableCountAggregateDescriptor.FACTORY);
-        temp.add(SerializableAvgAggregateDescriptor.FACTORY);
-        temp.add(SerializableLocalAvgAggregateDescriptor.FACTORY);
-        temp.add(SerializableGlobalAvgAggregateDescriptor.FACTORY);
-        temp.add(SerializableSumAggregateDescriptor.FACTORY);
-        temp.add(SerializableLocalSumAggregateDescriptor.FACTORY);
-
-        // scalar aggregates
-        temp.add(ScalarCountAggregateDescriptor.FACTORY);
-        temp.add(ScalarAvgAggregateDescriptor.FACTORY);
-        temp.add(ScalarSumAggregateDescriptor.FACTORY);
-        temp.add(ScalarMaxAggregateDescriptor.FACTORY);
-        temp.add(ScalarMinAggregateDescriptor.FACTORY);
-
-        // new functions - constructors
-        temp.add(ABooleanConstructorDescriptor.FACTORY);
-        temp.add(ANullConstructorDescriptor.FACTORY);
-        temp.add(AStringConstructorDescriptor.FACTORY);
-        temp.add(AInt8ConstructorDescriptor.FACTORY);
-        temp.add(AInt16ConstructorDescriptor.FACTORY);
-        temp.add(AInt32ConstructorDescriptor.FACTORY);
-        temp.add(AInt64ConstructorDescriptor.FACTORY);
-        temp.add(AFloatConstructorDescriptor.FACTORY);
-        temp.add(ADoubleConstructorDescriptor.FACTORY);
-        temp.add(APointConstructorDescriptor.FACTORY);
-        temp.add(APoint3DConstructorDescriptor.FACTORY);
-        temp.add(ALineConstructorDescriptor.FACTORY);
-        temp.add(APolygonConstructorDescriptor.FACTORY);
-        temp.add(ACircleConstructorDescriptor.FACTORY);
-        temp.add(ARectangleConstructorDescriptor.FACTORY);
-        temp.add(ATimeConstructorDescriptor.FACTORY);
-        temp.add(ADateConstructorDescriptor.FACTORY);
-        temp.add(ADateTimeConstructorDescriptor.FACTORY);
-        temp.add(ADurationConstructorDescriptor.FACTORY);
-
-        // Spatial
-        temp.add(CreatePointDescriptor.FACTORY);
-        temp.add(CreateLineDescriptor.FACTORY);
-        temp.add(CreatePolygonDescriptor.FACTORY);
-        temp.add(CreateCircleDescriptor.FACTORY);
-        temp.add(CreateRectangleDescriptor.FACTORY);
-        temp.add(SpatialAreaDescriptor.FACTORY);
-        temp.add(SpatialDistanceDescriptor.FACTORY);
-        temp.add(SpatialIntersectDescriptor.FACTORY);
-        temp.add(CreateMBRDescriptor.FACTORY);
-        temp.add(SpatialCellDescriptor.FACTORY);
-        temp.add(PointXCoordinateAccessor.FACTORY);
-        temp.add(PointYCoordinateAccessor.FACTORY);
-        temp.add(CircleRadiusAccessor.FACTORY);
-        temp.add(CircleCenterAccessor.FACTORY);
-        temp.add(LineRectanglePolygonAccessor.FACTORY);
-
-        // fuzzyjoin function
-        temp.add(FuzzyEqDescriptor.FACTORY);
-        temp.add(SubsetCollectionDescriptor.FACTORY);
-        temp.add(PrefixLenJaccardDescriptor.FACTORY);
-
-        temp.add(WordTokensDescriptor.FACTORY);
-        temp.add(HashedWordTokensDescriptor.FACTORY);
-        temp.add(CountHashedWordTokensDescriptor.FACTORY);
-
-        temp.add(GramTokensDescriptor.FACTORY);
-        temp.add(HashedGramTokensDescriptor.FACTORY);
-        temp.add(CountHashedGramTokensDescriptor.FACTORY);
-
-        temp.add(EditDistanceDescriptor.FACTORY);
-        temp.add(EditDistanceCheckDescriptor.FACTORY);
-        temp.add(EditDistanceStringIsFilterable.FACTORY);
-        temp.add(EditDistanceListIsFilterable.FACTORY);
-
-        temp.add(SimilarityJaccardDescriptor.FACTORY);
-        temp.add(SimilarityJaccardCheckDescriptor.FACTORY);
-        temp.add(SimilarityJaccardSortedDescriptor.FACTORY);
-        temp.add(SimilarityJaccardSortedCheckDescriptor.FACTORY);
-        temp.add(SimilarityJaccardPrefixDescriptor.FACTORY);
-        temp.add(SimilarityJaccardPrefixCheckDescriptor.FACTORY);
-
-        temp.add(SwitchCaseDescriptor.FACTORY);
-        temp.add(RegExpDescriptor.FACTORY);
-        temp.add(InjectFailureDescriptor.FACTORY);
-        temp.add(CastRecordDescriptor.FACTORY);
-        temp.add(NotNullDescriptor.FACTORY);
-
-        // Spatial and temporal type accessors
-        temp.add(TemporalYearAccessor.FACTORY);
-        temp.add(TemporalMonthAccessor.FACTORY);
-        temp.add(TemporalDayAccessor.FACTORY);
-        temp.add(TemporalHourAccessor.FACTORY);
-        temp.add(TemporalMinuteAccessor.FACTORY);
-        temp.add(TemporalSecondAccessor.FACTORY);
-        temp.add(TemporalMillisecondAccessor.FACTORY);
-
-        // Temporal functions
-        temp.add(DateFromUnixTimeInDaysDescriptor.FACTORY);
-        temp.add(DateFromDatetimeDescriptor.FACTORY);
-        temp.add(AddDateDurationDescriptor.FACTORY);
-        temp.add(SubtractDateDescriptor.FACTORY);
-        temp.add(TimeFromUnixTimeInMsDescriptor.FACTORY);
-        temp.add(TimeFromDatetimeDescriptor.FACTORY);
-        temp.add(SubtractTimeDescriptor.FACTORY);
-        temp.add(AddTimeDurationDescriptor.FACTORY);
-        temp.add(DatetimeFromUnixTimeInMsDescriptor.FACTORY);
-        temp.add(DatetimeFromDateAndTimeDescriptor.FACTORY);
-        temp.add(SubtractDatetimeDescriptor.FACTORY);
-        temp.add(AddDatetimeDurationDescriptor.FACTORY);
-        temp.add(CalendarDurationFromDateTimeDescriptor.FACTORY);
-        temp.add(CalendarDuartionFromDateDescriptor.FACTORY);
-        temp.add(AdjustDateTimeForTimeZoneDescriptor.FACTORY);
-        temp.add(AdjustTimeForTimeZoneDescriptor.FACTORY);
-        temp.add(IntervalBeforeDescriptor.FACTORY);
-        temp.add(IntervalAfterDescriptor.FACTORY);
-        temp.add(IntervalMeetsDescriptor.FACTORY);
-        temp.add(IntervalMetByDescriptor.FACTORY);
-        temp.add(IntervalOverlapsDescriptor.FACTORY);
-        temp.add(IntervalOverlappedByDescriptor.FACTORY);
-        temp.add(OverlapDescriptor.FACTORY);
-        temp.add(IntervalStartsDescriptor.FACTORY);
-        temp.add(IntervalStartedByDescriptor.FACTORY);
-        temp.add(IntervalCoversDescriptor.FACTORY);
-        temp.add(IntervalCoveredByDescriptor.FACTORY);
-        temp.add(IntervalEndsDecriptor.FACTORY);
-        temp.add(IntervalEndedByDescriptor.FACTORY);
-        temp.add(CurrentDateDescriptor.FACTORY);
-        temp.add(CurrentTimeDescriptor.FACTORY);
-        temp.add(CurrentDateTimeDescriptor.FACTORY);
-
-        // Interval constructor
-        temp.add(AIntervalFromDateConstructorDescriptor.FACTORY);
-        temp.add(AIntervalFromTimeConstructorDescriptor.FACTORY);
-        temp.add(AIntervalFromDateTimeConstructorDescriptor.FACTORY);
-        temp.add(AIntervalStartFromDateConstructorDescriptor.FACTORY);
-        temp.add(AIntervalStartFromDateTimeConstructorDescriptor.FACTORY);
-        temp.add(AIntervalStartFromTimeConstructorDescriptor.FACTORY);
-
-        IFunctionManager mgr = new FunctionManagerImpl();
-        for (IFunctionDescriptorFactory fdFactory : temp) {
-            mgr.registerFunction(fdFactory);
-        }
-        FunctionManagerHolder.setFunctionManager(mgr);
-    }
-
-    @Override
-    public IBinaryBooleanInspectorFactory getBinaryBooleanInspectorFactory() {
-        return AqlBinaryBooleanInspectorImpl.FACTORY;
-    }
-
-    @Override
-    public IBinaryComparatorFactoryProvider getBinaryComparatorFactoryProvider() {
-        return AqlBinaryComparatorFactoryProvider.INSTANCE;
-    }
-
-    @Override
-    public IBinaryHashFunctionFactoryProvider getBinaryHashFunctionFactoryProvider() {
-        return AqlBinaryHashFunctionFactoryProvider.INSTANCE;
-    }
-
-    @Override
-    public ISerializerDeserializerProvider getSerdeProvider() {
-        return AqlSerializerDeserializerProvider.INSTANCE; // done
-    }
-
-    @Override
-    public ITypeTraitProvider getTypeTraitProvider() {
-        return AqlTypeTraitProvider.INSTANCE;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public ICopyEvaluatorFactory getFieldAccessEvaluatorFactory(ARecordType recType, String fldName, int recordColumn)
-            throws AlgebricksException {
-        String[] names = recType.getFieldNames();
-        int n = names.length;
-        for (int i = 0; i < n; i++) {
-            if (names[i].equals(fldName)) {
-                ICopyEvaluatorFactory recordEvalFactory = new ColumnAccessEvalFactory(recordColumn);
-                ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-                DataOutput dos = abvs.getDataOutput();
-                try {
-                    AInt32 ai = new AInt32(i);
-                    AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai,
-                            dos);
-                } catch (HyracksDataException e) {
-                    throw new AlgebricksException(e);
-                }
-                ICopyEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(),
-                        abvs.getLength()));
-                ICopyEvaluatorFactory evalFactory = new FieldAccessByIndexEvalFactory(recordEvalFactory,
-                        fldIndexEvalFactory, recType);
-                return evalFactory;
-            }
-        }
-        throw new AlgebricksException("Could not find field " + fldName + " in the schema.");
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public ICopyEvaluatorFactory[] createMBRFactory(ARecordType recType, String fldName, int recordColumn, int dimension)
-            throws AlgebricksException {
-        ICopyEvaluatorFactory evalFactory = getFieldAccessEvaluatorFactory(recType, fldName, recordColumn);
-        int numOfFields = dimension * 2;
-        ICopyEvaluatorFactory[] evalFactories = new ICopyEvaluatorFactory[numOfFields];
-
-        ArrayBackedValueStorage abvs1 = new ArrayBackedValueStorage();
-        DataOutput dos1 = abvs1.getDataOutput();
-        try {
-            AInt32 ai = new AInt32(dimension);
-            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai, dos1);
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
-        }
-        ICopyEvaluatorFactory dimensionEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs1.getByteArray(),
-                abvs1.getLength()));
-
-        for (int i = 0; i < numOfFields; i++) {
-            ArrayBackedValueStorage abvs2 = new ArrayBackedValueStorage();
-            DataOutput dos2 = abvs2.getDataOutput();
-            try {
-                AInt32 ai = new AInt32(i);
-                AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai, dos2);
-            } catch (HyracksDataException e) {
-                throw new AlgebricksException(e);
-            }
-            ICopyEvaluatorFactory coordinateEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs2.getByteArray(),
-                    abvs2.getLength()));
-
-            evalFactories[i] = new CreateMBREvalFactory(evalFactory, dimensionEvalFactory, coordinateEvalFactory);
-        }
-        return evalFactories;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioningEvaluatorFactory(
-            ARecordType recType, String fldName) throws AlgebricksException {
-        String[] names = recType.getFieldNames();
-        int n = names.length;
-        for (int i = 0; i < n; i++) {
-            if (names[i].equals(fldName)) {
-                ICopyEvaluatorFactory recordEvalFactory = new ColumnAccessEvalFactory(
-                        GlobalConfig.DEFAULT_INPUT_DATA_COLUMN);
-                ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-                DataOutput dos = abvs.getDataOutput();
-                try {
-                    AInt32 ai = new AInt32(i);
-                    AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(ai.getType()).serialize(ai,
-                            dos);
-                } catch (HyracksDataException e) {
-                    throw new AlgebricksException(e);
-                }
-                ICopyEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(),
-                        abvs.getLength()));
-                ICopyEvaluatorFactory evalFactory = new FieldAccessByIndexEvalFactory(recordEvalFactory,
-                        fldIndexEvalFactory, recType);
-                IFunctionInfo finfoAccess = AsterixBuiltinFunctions
-                        .getAsterixFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX);
-
-                ScalarFunctionCallExpression partitionFun = new ScalarFunctionCallExpression(finfoAccess,
-                        new MutableObject<ILogicalExpression>(new VariableReferenceExpression(METADATA_DUMMY_VAR)),
-                        new MutableObject<ILogicalExpression>(new ConstantExpression(new AsterixConstantValue(
-                                new AInt32(i)))));
-                return new Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType>(evalFactory,
-                        partitionFun, recType.getFieldTypes()[i]);
-            }
-        }
-        throw new AlgebricksException("Could not find field " + fldName + " in the schema.");
-    }
-
-    @Override
-    public IFunctionDescriptor resolveFunction(ILogicalExpression expr, IVariableTypeEnvironment context)
-            throws AlgebricksException {
-        FunctionIdentifier fnId = ((AbstractFunctionCallExpression) expr).getFunctionIdentifier();
-        IFunctionManager mgr = FunctionManagerHolder.getFunctionManager();
-        IFunctionDescriptor fd = mgr.lookupFunction(fnId);
-        if (fd == null) {
-            throw new AsterixRuntimeException("Unresolved function " + fnId);
-        }
-        typeInference(expr, fd, context);
-        return fd;
-    }
-
-    private void typeInference(ILogicalExpression expr, IFunctionDescriptor fd, IVariableTypeEnvironment context)
-            throws AlgebricksException {
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.LISTIFY)) {
-            AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
-            if (f.getArguments().size() == 0) {
-                ((ListifyAggregateDescriptor) fd).reset(new AOrderedListType(null, null));
-            } else {
-                IAType itemType = (IAType) context.getType(f.getArguments().get(0).getValue());
-                // Convert UNION types into ANY.
-                if (itemType instanceof AUnionType) {
-                    itemType = BuiltinType.ANY;
-                }
-                ((ListifyAggregateDescriptor) fd).reset(new AOrderedListType(itemType, null));
-            }
-        }
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.CAST_RECORD)) {
-            ARecordType rt = (ARecordType) TypeComputerUtilities.getRequiredType((AbstractFunctionCallExpression) expr);
-            ARecordType it = (ARecordType) TypeComputerUtilities.getInputType((AbstractFunctionCallExpression) expr);
-            ((CastRecordDescriptor) fd).reset(rt, it);
-        }
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR)) {
-            ARecordType rt = (ARecordType) context.getType(expr);
-            ((OpenRecordConstructorDescriptor) fd).reset(rt,
-                    computeOpenFields((AbstractFunctionCallExpression) expr, rt));
-        }
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.CLOSED_RECORD_CONSTRUCTOR)) {
-            ((ClosedRecordConstructorDescriptor) fd).reset((ARecordType) context.getType(expr));
-        }
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR)) {
-            ((OrderedListConstructorDescriptor) fd).reset((AOrderedListType) context.getType(expr));
-        }
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR)) {
-            ((UnorderedListConstructorDescriptor) fd).reset((AUnorderedListType) context.getType(expr));
-        }
-        if (fd.getIdentifier().equals(AsterixBuiltinFunctions.FIELD_ACCESS_BY_INDEX)) {
-            AbstractFunctionCallExpression fce = (AbstractFunctionCallExpression) expr;
-            IAType t = (IAType) context.getType(fce.getArguments().get(0).getValue());
-            switch (t.getTypeTag()) {
-                case RECORD: {
-                    ARecordType recType = (ARecordType) t;
-                    ((FieldAccessByIndexDescriptor) fd).reset(recType);
-                    break;
-                }
-                case UNION: {
-                    AUnionType unionT = (AUnionType) t;
-                    if (unionT.isNullableType()) {
-                        IAType t2 = unionT.getUnionList().get(1);
-                        if (t2.getTypeTag() == ATypeTag.RECORD) {
-                            ARecordType recType = (ARecordType) t2;
-                            ((FieldAccessByIndexDescriptor) fd).reset(recType);
-                            break;
-                        }
-                    }
-                    throw new NotImplementedException("field-access-by-index for data of type " + t);
-                }
-                default: {
-                    throw new NotImplementedException("field-access-by-index for data of type " + t);
-                }
-            }
-        }
-    }
-
-    private boolean[] computeOpenFields(AbstractFunctionCallExpression expr, ARecordType recType) {
-        int n = expr.getArguments().size() / 2;
-        boolean[] open = new boolean[n];
-        for (int i = 0; i < n; i++) {
-            Mutable<ILogicalExpression> argRef = expr.getArguments().get(2 * i);
-            ILogicalExpression arg = argRef.getValue();
-            if (arg.getExpressionTag() == LogicalExpressionTag.CONSTANT) {
-                String fn = ((AString) ((AsterixConstantValue) ((ConstantExpression) arg).getValue()).getObject())
-                        .getStringValue();
-                open[i] = true;
-                for (String s : recType.getFieldNames()) {
-                    if (s.equals(fn)) {
-                        open[i] = false;
-                        break;
-                    }
-                }
-            } else {
-                open[i] = true;
-            }
-        }
-        return open;
-    }
-
-    @Override
-    public IPrinterFactoryProvider getPrinterFactoryProvider() {
-        return AqlPrinterFactoryProvider.INSTANCE;
-    }
-
-    @Override
-    public IPrinterFactoryProvider getJSONPrinterFactoryProvider() {
-        return AqlJSONPrinterFactoryProvider.INSTANCE;
-    }
-
-    @SuppressWarnings("unchecked")
-    @Override
-    public ICopyEvaluatorFactory getConstantEvalFactory(IAlgebricksConstantValue value) throws AlgebricksException {
-        IAObject obj = null;
-        if (value.isNull()) {
-            obj = ANull.NULL;
-        } else if (value.isTrue()) {
-            obj = ABoolean.TRUE;
-        } else if (value.isFalse()) {
-            obj = ABoolean.FALSE;
-        } else {
-            AsterixConstantValue acv = (AsterixConstantValue) value;
-            obj = acv.getObject();
-        }
-        ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
-        DataOutput dos = abvs.getDataOutput();
-        try {
-            AqlSerializerDeserializerProvider.INSTANCE.getSerializerDeserializer(obj.getType()).serialize(obj, dos);
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
-        }
-        return new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength()));
-    }
-
-    @Override
-    public IBinaryIntegerInspectorFactory getBinaryIntegerInspectorFactory() {
-        return AqlBinaryIntegerInspector.FACTORY;
-    }
-
-    @Override
-    public ITupleParserFactory createTupleParser(ARecordType recType, IParseFileSplitsDecl decl) {
-        if (decl.isDelimitedFileFormat()) {
-            int n = recType.getFieldTypes().length;
-            IValueParserFactory[] fieldParserFactories = new IValueParserFactory[n];
-            for (int i = 0; i < n; i++) {
-                ATypeTag tag = recType.getFieldTypes()[i].getTypeTag();
-                IValueParserFactory vpf = typeToValueParserFactMap.get(tag);
-                if (vpf == null) {
-                    throw new NotImplementedException("No value parser factory for delimited fields of type " + tag);
-                }
-                fieldParserFactories[i] = vpf;
-            }
-            return new NtDelimitedDataTupleParserFactory(recType, fieldParserFactories, decl.getDelimChar());
-        } else {
-            return new AdmSchemafullRecordParserFactory(recType);
-        }
-    }
-
-    @Override
-    public ITupleParserFactory createTupleParser(ARecordType recType, boolean delimitedFormat, Character delimiter) {
-        if (delimitedFormat) {
-            int n = recType.getFieldTypes().length;
-            IValueParserFactory[] fieldParserFactories = new IValueParserFactory[n];
-            for (int i = 0; i < n; i++) {
-                ATypeTag tag = recType.getFieldTypes()[i].getTypeTag();
-                IValueParserFactory vpf = typeToValueParserFactMap.get(tag);
-                if (vpf == null) {
-                    throw new NotImplementedException("No value parser factory for delimited fields of type " + tag);
-                }
-                fieldParserFactories[i] = vpf;
-            }
-            return new NtDelimitedDataTupleParserFactory(recType, fieldParserFactories, delimiter);
-        } else {
-            return new AdmSchemafullRecordParserFactory(recType);
-        }
-    }
-
-    @Override
-    public INullWriterFactory getNullWriterFactory() {
-        return AqlNullWriterFactory.INSTANCE;
-    }
-
-    @Override
-    public IExpressionEvalSizeComputer getExpressionEvalSizeComputer() {
-        return new IExpressionEvalSizeComputer() {
-            @Override
-            public int getEvalSize(ILogicalExpression expr, IVariableEvalSizeEnvironment env)
-                    throws AlgebricksException {
-                switch (expr.getExpressionTag()) {
-                    case CONSTANT: {
-                        ConstantExpression c = (ConstantExpression) expr;
-                        if (c == ConstantExpression.NULL) {
-                            return 1;
-                        } else if (c == ConstantExpression.FALSE || c == ConstantExpression.TRUE) {
-                            return 2;
-                        } else {
-                            AsterixConstantValue acv = (AsterixConstantValue) c.getValue();
-                            IAObject o = acv.getObject();
-                            switch (o.getType().getTypeTag()) {
-                                case DOUBLE: {
-                                    return 9;
-                                }
-                                case BOOLEAN: {
-                                    return 2;
-                                }
-                                case NULL: {
-                                    return 1;
-                                }
-                                case INT32: {
-                                    return 5;
-                                }
-                                case INT64: {
-                                    return 9;
-                                }
-                                default: {
-                                    // TODO
-                                    return -1;
-                                }
-                            }
-                        }
-                    }
-                    case FUNCTION_CALL: {
-                        AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expr;
-                        if (f.getFunctionIdentifier().equals(AsterixBuiltinFunctions.TID)) {
-                            return 5;
-                        } else {
-                            // TODO
-                            return -1;
-                        }
-                    }
-                    default: {
-                        // TODO
-                        return -1;
-                    }
-                }
-            }
-        };
-    }
-
-    @Override
-    public INormalizedKeyComputerFactoryProvider getNormalizedKeyComputerFactoryProvider() {
-        return AqlNormalizedKeyComputerFactoryProvider.INSTANCE;
-    }
-
-    @Override
-    public IBinaryHashFunctionFamilyProvider getBinaryHashFunctionFamilyProvider() {
-        return AqlBinaryHashFunctionFamilyProvider.INSTANCE;
-    }
-
-}
diff --git a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java b/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
deleted file mode 100644
index c70cdf8..0000000
--- a/asterix/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.runtime.unnestingfunctions.std;
-
-import java.io.DataOutput;
-import java.io.IOException;
-
-import edu.uci.ics.asterix.common.exceptions.AsterixException;
-import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
-import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
-import edu.uci.ics.asterix.runtime.evaluators.common.AsterixListAccessor;
-import edu.uci.ics.asterix.runtime.unnestingfunctions.base.AbstractUnnestingFunctionDynamicDescriptor;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyUnnestingFunction;
-import edu.uci.ics.hyracks.algebricks.runtime.base.ICopyUnnestingFunctionFactory;
-import edu.uci.ics.hyracks.data.std.api.IDataOutputProvider;
-import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
-
-public class ScanCollectionDescriptor extends AbstractUnnestingFunctionDynamicDescriptor {
-
-    private static final long serialVersionUID = 1L;
-    public static final IFunctionDescriptorFactory FACTORY = new IFunctionDescriptorFactory() {
-        public IFunctionDescriptor createFunctionDescriptor() {
-            return new ScanCollectionDescriptor();
-        }
-    };
-
-    @Override
-    public FunctionIdentifier getIdentifier() {
-        return AsterixBuiltinFunctions.SCAN_COLLECTION;
-    }
-
-    @Override
-    public ICopyUnnestingFunctionFactory createUnnestingFunctionFactory(final ICopyEvaluatorFactory[] args) {
-        return new ScanCollectionUnnestingFunctionFactory(args[0]);
-    }
-
-    public static class ScanCollectionUnnestingFunctionFactory implements ICopyUnnestingFunctionFactory {
-
-        private static final long serialVersionUID = 1L;
-        private ICopyEvaluatorFactory listEvalFactory;
-
-        public ScanCollectionUnnestingFunctionFactory(ICopyEvaluatorFactory arg) {
-            this.listEvalFactory = arg;
-        }
-
-        @Override
-        public ICopyUnnestingFunction createUnnestingFunction(IDataOutputProvider provider) throws AlgebricksException {
-
-            final DataOutput out = provider.getDataOutput();
-
-            return new ICopyUnnestingFunction() {
-
-                private final AsterixListAccessor listAccessor = new AsterixListAccessor();
-                private ArrayBackedValueStorage inputVal = new ArrayBackedValueStorage();
-                private ICopyEvaluator argEval = listEvalFactory.createEvaluator(inputVal);
-                private int itemIndex;
-
-                @Override
-                public void init(IFrameTupleReference tuple) throws AlgebricksException {
-                    try {
-                        inputVal.reset();
-                        argEval.evaluate(tuple);
-                        listAccessor.reset(inputVal.getByteArray(), 0);
-                        itemIndex = 0;
-                    } catch (AsterixException e) {
-                        throw new AlgebricksException(e);
-                    }
-                }
-
-                @Override
-                public boolean step() throws AlgebricksException {
-                    try {
-                        if (itemIndex < listAccessor.size()) {
-                            listAccessor.writeItem(itemIndex, out);
-                            ++itemIndex;
-                            return true;
-                        }
-                    } catch (IOException e) {
-                        throw new AlgebricksException(e);
-                    } catch (AsterixException e) {
-                        throw new AlgebricksException(e);
-                    }
-                    return false;
-                }
-
-            };
-        }
-
-    }
-}
diff --git a/asterix/asterix-server/pom.xml b/asterix/asterix-server/pom.xml
deleted file mode 100644
index 3c52104..0000000
--- a/asterix/asterix-server/pom.xml
+++ /dev/null
@@ -1,86 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-  <artifactId>asterix-server</artifactId>
-  <name>asterix-server</name>
-  <parent>
-    <groupId>edu.uci.ics.asterix</groupId>
-    <artifactId>asterix</artifactId>
-    <version>0.0.5-SNAPSHOT</version>
-  </parent>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>appassembler-maven-plugin</artifactId>
-        <version>1.3</version>
-        <executions>
-          <execution>
-            <configuration>
-              <programs>
-                <program>
-                  <mainClass>edu.uci.ics.hyracks.control.cc.CCDriver</mainClass>
-                  <name>asterixcc</name>
-                  <commandLineArguments>
-                    <commandLineArgument>-app-cc-main-class</commandLineArgument>
-                    <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.CCApplicationEntryPoint</commandLineArgument>
-                  </commandLineArguments>
-                </program>
-                <program>
-                  <mainClass>edu.uci.ics.hyracks.control.nc.NCDriver</mainClass>
-                  <name>asterixnc</name>
-                  <commandLineArguments>
-                    <commandLineArgument>-app-nc-main-class</commandLineArgument>
-                    <commandLineArgument>edu.uci.ics.asterix.hyracks.bootstrap.NCApplicationEntryPoint</commandLineArgument>
-                  </commandLineArguments>
-                </program>
-              </programs>
-              <repositoryLayout>flat</repositoryLayout>
-              <repositoryName>lib</repositoryName>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>assemble</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-      <plugin>
-        <artifactId>maven-assembly-plugin</artifactId>
-        <version>2.2-beta-5</version>
-        <executions>
-          <execution>
-            <configuration>
-              <descriptors>
-                <descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-              </descriptors>
-            </configuration>
-            <phase>package</phase>
-            <goals>
-              <goal>attached</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-  <dependencies>
-  	<dependency>
-  		<groupId>edu.uci.ics.hyracks</groupId>
-  		<artifactId>hyracks-control-cc</artifactId>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
-  		<groupId>edu.uci.ics.hyracks</groupId>
-  		<artifactId>hyracks-control-nc</artifactId>
-  		<type>jar</type>
-  		<scope>compile</scope>
-  	</dependency>
-  	<dependency>
-  		<groupId>edu.uci.ics.asterix</groupId>
-  		<artifactId>asterix-app</artifactId>
-  		<version>0.0.5-SNAPSHOT</version>
-  	</dependency>
-  </dependencies>
-</project>
\ No newline at end of file
diff --git a/asterix/asterix-test-framework/pom.xml b/asterix/asterix-test-framework/pom.xml
deleted file mode 100755
index a9c3292..0000000
--- a/asterix/asterix-test-framework/pom.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-test-framework</artifactId>
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.jvnet.jaxb2.maven2</groupId>
-				<artifactId>maven-jaxb2-plugin</artifactId>
-				<executions>
-					<execution>
-						<goals>
-							<goal>generate</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-	</dependencies>
-</project>
diff --git a/asterix/asterix-tools/pom.xml b/asterix/asterix-tools/pom.xml
deleted file mode 100644
index bc2a7ca..0000000
--- a/asterix/asterix-tools/pom.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-tools</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-			<plugin>
-				<artifactId>maven-jar-plugin</artifactId>
-				<executions>
-					<execution>
-						<id>aqlclient</id>
-						<goals>
-							<goal>jar</goal>
-						</goals>
-						<phase>package</phase>
-						<configuration>
-							<classifier>aqlclient</classifier>
-							<archive>
-								<manifest>
-									<MainClass>edu.uci.ics.asterix.tools.aqlclient.AqlClient</MainClass>
-								</manifest>
-							</archive>
-							<includes>
-								<include>**/uci/ics/asterix/tools/aqlclient/*</include>
-							</includes>
-						</configuration>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<artifactId>maven-surefire-plugin</artifactId>
-				<version>2.7.2</version>
-				<executions>
-					<execution>
-						<id>default-test</id>
-						<phase>test</phase>
-						<goals>
-							<goal>test</goal>
-						</goals>
-						<configuration>
-							<forkMode>pertest</forkMode>
-							<argLine>-enableassertions -Xmx1024m -Dfile.encoding=UTF-8
-								-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
-							<includes>
-								<include>**/*TestSuite.java</include>
-								<include>**/*Test.java</include>
-							</includes>
-						</configuration>
-					</execution>
-				</executions>
-				<configuration>
-					<forkMode>pertest</forkMode>
-					<argLine>-enableassertions -Xmx1536m -Dfile.encoding=UTF-8
-						-Djava.util.logging.config.file=src/test/resources/logging.properties</argLine>
-					<includes>
-						<include>**/*TestSuite.java</include>
-						<include>**/*Test.java</include>
-					</includes>
-				</configuration>
-			</plugin>
-			<plugin>
-				<groupId>org.codehaus.mojo</groupId>
-				<artifactId>appassembler-maven-plugin</artifactId>
-				<version>1.0</version>
-				<executions>
-					<execution>
-						<configuration>
-							<programs>
-								<program>
-									<mainClass>edu.uci.ics.asterix.tools.TblToAdm</mainClass>
-									<name>tbl2adm</name>
-								</program>
-								<program>
-									<mainClass>edu.uci.ics.asterix.tools.datagen.AdgClientDriver</mainClass>
-									<name>adg</name>
-								</program>
-							</programs>
-							<repositoryLayout>flat</repositoryLayout>
-							<repositoryName>lib</repositoryName>
-						</configuration>
-						<phase>package</phase>
-						<goals>
-							<goal>assemble</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-			<plugin>
-				<artifactId>maven-assembly-plugin</artifactId>
-				<version>2.2-beta-5</version>
-				<executions>
-					<execution>
-						<configuration>
-							<descriptors>
-								<descriptor>src/main/assembly/binary-assembly.xml</descriptor>
-							</descriptors>
-						</configuration>
-						<phase>package</phase>
-						<goals>
-							<goal>attached</goal>
-						</goals>
-					</execution>
-				</executions>
-			</plugin>
-		</plugins>
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-aql</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.asterix</groupId>
-			<artifactId>asterix-algebra</artifactId>
-			<version>0.0.5-SNAPSHOT</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpclient</artifactId>
-			<version>4.2.2</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>org.apache.httpcomponents</groupId>
-			<artifactId>httpcore</artifactId>
-			<version>4.2.2</version>
-			<scope>compile</scope>
-		</dependency>
-		<dependency>
-			<groupId>junit</groupId>
-			<artifactId>junit</artifactId>
-			<version>4.8.1</version>
-			<scope>test</scope>
-		</dependency>
-	</dependencies>
-
-</project>
diff --git a/asterix/asterix-transactions/pom.xml b/asterix/asterix-transactions/pom.xml
deleted file mode 100644
index 9777d1f..0000000
--- a/asterix/asterix-transactions/pom.xml
+++ /dev/null
@@ -1,45 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<parent>
-		<artifactId>asterix</artifactId>
-		<groupId>edu.uci.ics.asterix</groupId>
-		<version>0.0.5-SNAPSHOT</version>
-	</parent>
-	<artifactId>asterix-transactions</artifactId>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-compiler-plugin</artifactId>
-				<version>2.0.2</version>
-				<configuration>
-					<source>1.7</source>
-					<target>1.7</target>
-					<fork>true</fork>
-				</configuration>
-			</plugin>
-		</plugins>
-
-	</build>
-
-	<dependencies>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-common</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-btree</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
-		</dependency>
-	</dependencies>
-
-</project>
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
deleted file mode 100644
index 718ea3f..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexInstantSearchOperationCallback.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.opcallbacks;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.locking.ILockManager;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
-
-/**
- * Assumes LSM-BTrees as primary indexes. Implements try/locking and unlocking on primary keys.
- */
-public class PrimaryIndexInstantSearchOperationCallback extends AbstractOperationCallback implements
-        ISearchOperationCallback {
-
-    public PrimaryIndexInstantSearchOperationCallback(int datasetId, int[] entityIdFields, ILockManager lockManager,
-            TransactionContext txnCtx) {
-        super(datasetId, entityIdFields, txnCtx, lockManager);
-    }
-
-    @Override
-    public boolean proceed(ITupleReference tuple) throws HyracksDataException {
-        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
-        try {
-            return lockManager.instantTryLock(datasetId, pkHash, LockMode.S, txnCtx);
-        } catch (ACIDException e) {
-            throw new HyracksDataException(e);
-        }
-    }
-
-    @Override
-    public void reconcile(ITupleReference tuple) throws HyracksDataException {
-        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
-        try {
-            lockManager.instantLock(datasetId, pkHash, LockMode.S, txnCtx);
-        } catch (ACIDException e) {
-            throw new HyracksDataException(e);
-        }
-    }
-
-    @Override
-    public void cancel(ITupleReference tuple) throws HyracksDataException {
-        //no op
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
deleted file mode 100644
index 4760307..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/PrimaryIndexSearchOperationCallback.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.opcallbacks;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.locking.ILockManager;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
-
-/**
- * Assumes LSM-BTrees as primary indexes. Implements try/locking and unlocking on primary keys.
- */
-public class PrimaryIndexSearchOperationCallback extends AbstractOperationCallback implements ISearchOperationCallback {
-
-    public PrimaryIndexSearchOperationCallback(int datasetId, int[] entityIdFields,
-            ILockManager lockManager, TransactionContext txnCtx) {
-        super(datasetId, entityIdFields, txnCtx, lockManager);
-    }
-
-    @Override
-    public boolean proceed(ITupleReference tuple) throws HyracksDataException {
-        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
-        try {
-            return lockManager.tryLock(datasetId, pkHash, LockMode.S, txnCtx);
-        } catch (ACIDException e) {
-            throw new HyracksDataException(e);
-        }
-    }
-
-    @Override
-    public void reconcile(ITupleReference tuple) throws HyracksDataException {
-        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
-        try {
-            lockManager.lock(datasetId, pkHash, LockMode.S, txnCtx);
-        } catch (ACIDException e) {
-            throw new HyracksDataException(e);
-        }
-    }
-
-    @Override
-    public void cancel(ITupleReference tuple) throws HyracksDataException {
-        int pkHash = computePrimaryKeyHashValue(tuple, primaryKeyFields);
-        try {
-            lockManager.unlock(datasetId, pkHash, txnCtx);
-        } catch (ACIDException e) {
-            throw new HyracksDataException(e);
-        }
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java
deleted file mode 100644
index 092f99c..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexModificationOperationCallback.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.opcallbacks;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.locking.ILockManager;
-import edu.uci.ics.asterix.transaction.management.service.logging.IndexLogger;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.storage.am.common.api.IModificationOperationCallback;
-import edu.uci.ics.hyracks.storage.am.common.ophelpers.IndexOperation;
-
-/**
- * Secondary-index modifications do not require any locking.
- * We assume that the modification of the corresponding primary index has already taken an appropriate lock.
- * This callback performs logging of the before and/or after images for secondary indexes.
- */
-public class SecondaryIndexModificationOperationCallback extends AbstractOperationCallback implements
-        IModificationOperationCallback {
-
-    protected final long resourceId;
-    protected final byte resourceType;
-    protected final IndexOperation indexOp;
-    protected final IndexOperation oldOp;
-    protected final TransactionSubsystem txnSubsystem;
-
-    public SecondaryIndexModificationOperationCallback(int datasetId, int[] primaryKeyFields,
-            TransactionContext txnCtx, ILockManager lockManager,
-            TransactionSubsystem txnSubsystem, long resourceId, byte resourceType, IndexOperation indexOp) {
-        super(datasetId, primaryKeyFields, txnCtx, lockManager);
-        this.resourceId = resourceId;
-        this.resourceType = resourceType;
-        this.indexOp = indexOp;
-        oldOp = (indexOp == IndexOperation.DELETE) ? IndexOperation.INSERT : IndexOperation.DELETE;
-        this.txnSubsystem = txnSubsystem;
-    }
-
-    @Override
-    public void before(ITupleReference tuple) throws HyracksDataException {
-        // Do nothing.
-    }
-
-    @Override
-    public void found(ITupleReference before, ITupleReference after) throws HyracksDataException {
-        IndexLogger logger = txnSubsystem.getTreeLoggerRepository().getIndexLogger(resourceId, resourceType);
-        int pkHash = computePrimaryKeyHashValue(after, primaryKeyFields);
-        try {
-            logger.generateLogRecord(txnSubsystem, txnCtx, datasetId.getId(), pkHash, resourceId, indexOp, after,
-                    oldOp, before);
-        } catch (ACIDException e) {
-            throw new HyracksDataException(e);
-        }
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
deleted file mode 100644
index c53b651..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/opcallbacks/SecondaryIndexSearchOperationCallback.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.opcallbacks;
-
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.ITupleReference;
-import edu.uci.ics.hyracks.storage.am.common.api.ISearchOperationCallback;
-
-/**
- * Secondary index searches perform no locking at all.
- */
-public class SecondaryIndexSearchOperationCallback extends AbstractOperationCallback implements
-        ISearchOperationCallback {
-
-    public SecondaryIndexSearchOperationCallback() {
-        super(-1, null, null, null);
-    }
-
-    @Override
-    public boolean proceed(ITupleReference tuple) throws HyracksDataException {
-        return true;
-    }
-
-    @Override
-    public void reconcile(ITupleReference tuple) throws HyracksDataException {
-        // Do nothing.
-    }
-
-    @Override
-    public void cancel(ITupleReference tuple) throws HyracksDataException {
-        // Do nothing.
-    }
-
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepository.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
deleted file mode 100644
index 838dc6d..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/resource/PersistentLocalResourceRepository.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.transaction.management.resource;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.storage.common.file.ILocalResourceRepository;
-import edu.uci.ics.hyracks.storage.common.file.LocalResource;
-import edu.uci.ics.hyracks.storage.common.file.ResourceIdFactory;
-
-public class PersistentLocalResourceRepository implements ILocalResourceRepository {
-
-    private final String mountPoint;
-    private static final String ROOT_METADATA_DIRECTORY = "asterix_root_metadata/";
-    private static final String ROOT_METADATA_FILE_NAME_PREFIX = ".asterix_root_metadata_";
-    private static final long ROOT_LOCAL_RESOURCE_ID = -4321;
-    private static final String METADATA_FILE_NAME = ".metadata";
-    private Map<String, LocalResource> name2ResourceMap = new HashMap<String, LocalResource>();
-    private Map<Long, LocalResource> id2ResourceMap = new HashMap<Long, LocalResource>();
-    private String rootMetadataFileName;
-    private String rootDir;
-
-    public PersistentLocalResourceRepository(String mountPoint) throws HyracksDataException {
-        File mountPointDir = new File(mountPoint);
-        if (!mountPointDir.exists()) {
-            throw new HyracksDataException(mountPointDir.getAbsolutePath() + "doesn't exist.");
-        }
-        if (!mountPoint.endsWith(System.getProperty("file.separator"))) {
-            this.mountPoint = new String(mountPoint + System.getProperty("file.separator"));
-        } else {
-            this.mountPoint = new String(mountPoint);
-        }
-    }
-
-    public void initialize(String nodeId, String rootDir, boolean isNewUniverse, ResourceIdFactory resourceIdFactory)
-            throws HyracksDataException {
-        LocalResource rootLocalResource = null;
-
-        //#. if the rootMetadataFile doesn't exist, create it and return.
-        rootMetadataFileName = new String(mountPoint + ROOT_METADATA_DIRECTORY + ROOT_METADATA_FILE_NAME_PREFIX
-                + nodeId);
-        File rootMetadataFile = new File(rootMetadataFileName);
-        if (isNewUniverse) {
-            File rootMetadataDir = new File(mountPoint + ROOT_METADATA_DIRECTORY);
-            if (!rootMetadataDir.exists()) {
-                rootMetadataDir.mkdir();
-            }
-
-            rootMetadataFile.delete();
-            if (rootDir.startsWith(System.getProperty("file.separator"))) {
-                this.rootDir = new String(mountPoint + rootDir.substring(System.getProperty("file.separator").length()));
-            } else {
-                this.rootDir = new String(mountPoint + rootDir);
-            }
-            rootLocalResource = new LocalResource(ROOT_LOCAL_RESOURCE_ID, rootMetadataFileName, 0, 0, this.rootDir);
-            insert(rootLocalResource);
-            return;
-        }
-
-        //#. if the rootMetadataFile exists, read it and set this.rootDir.
-        rootLocalResource = readLocalResource(rootMetadataFile);
-        this.rootDir = (String) rootLocalResource.getResourceObject();
-
-        //#. load all local resources. 
-        File rootDirFile = new File(this.rootDir);
-        if (!rootDirFile.exists()) {
-            throw new HyracksDataException(rootDirFile.getAbsolutePath() + "doesn't exist.");
-        }
-
-        FilenameFilter filter = new FilenameFilter() {
-            public boolean accept(File dir, String name) {
-                if (name.equalsIgnoreCase(METADATA_FILE_NAME)) {
-                    return true;
-                } else {
-                    return false;
-                }
-            }
-        };
-
-        long maxResourceId = 0;
-        File[] dataverseFileList = rootDirFile.listFiles();
-        if (dataverseFileList == null) {
-            throw new HyracksDataException("Metadata dataverse doesn't exist.");
-        }
-        for (File dataverseFile : dataverseFileList) {
-            if (dataverseFile.isDirectory()) {
-                File[] indexFileList = dataverseFile.listFiles();
-                if (indexFileList != null) {
-                    for (File indexFile : indexFileList) {
-                        if (indexFile.isDirectory()) {
-                            File[] metadataFiles = indexFile.listFiles(filter);
-                            if (metadataFiles != null) {
-                                for (File metadataFile : metadataFiles) {
-                                    LocalResource localResource = readLocalResource(metadataFile);
-                                    id2ResourceMap.put(localResource.getResourceId(), localResource);
-                                    name2ResourceMap.put(localResource.getResourceName(), localResource);
-                                    maxResourceId = Math.max(localResource.getResourceId(), maxResourceId);
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        resourceIdFactory.initId(maxResourceId + 1);
-    }
-
-    @Override
-    public LocalResource getResourceById(long id) throws HyracksDataException {
-        return id2ResourceMap.get(id);
-    }
-
-    @Override
-    public LocalResource getResourceByName(String name) throws HyracksDataException {
-        return name2ResourceMap.get(name);
-    }
-
-    @Override
-    public synchronized void insert(LocalResource resource) throws HyracksDataException {
-        long id = resource.getResourceId();
-
-        if (id2ResourceMap.containsKey(id)) {
-            throw new HyracksDataException("Duplicate resource");
-        }
-
-        if (resource.getResourceId() != ROOT_LOCAL_RESOURCE_ID) {
-            id2ResourceMap.put(id, resource);
-            name2ResourceMap.put(resource.getResourceName(), resource);
-        }
-
-        FileOutputStream fos = null;
-        ObjectOutputStream oosToFos = null;
-        try {
-            fos = new FileOutputStream(getFileName(mountPoint, resource.getResourceName(), resource.getResourceId()));
-            oosToFos = new ObjectOutputStream(fos);
-            oosToFos.writeObject(resource);
-            oosToFos.flush();
-        } catch (IOException e) {
-            throw new HyracksDataException(e);
-        } finally {
-            if (oosToFos != null) {
-                try {
-                    oosToFos.close();
-                } catch (IOException e) {
-                    throw new HyracksDataException(e);
-                }
-            }
-            if (oosToFos == null && fos != null) {
-                try {
-                    fos.close();
-                } catch (IOException e) {
-                    throw new HyracksDataException(e);
-                }
-            }
-        }
-    }
-
-    @Override
-    public synchronized void deleteResourceById(long id) throws HyracksDataException {
-        LocalResource resource = id2ResourceMap.get(id);
-        if (resource == null) {
-            throw new HyracksDataException("Resource doesn't exist");
-        }
-        id2ResourceMap.remove(id);
-        name2ResourceMap.remove(resource.getResourceName());
-        File file = new File(getFileName(mountPoint, resource.getResourceName(), resource.getResourceId()));
-        file.delete();
-    }
-
-    @Override
-    public synchronized void deleteResourceByName(String name) throws HyracksDataException {
-        LocalResource resource = name2ResourceMap.get(name);
-        if (resource == null) {
-            throw new HyracksDataException("Resource doesn't exist");
-        }
-        id2ResourceMap.remove(resource.getResourceId());
-        name2ResourceMap.remove(name);
-        File file = new File(getFileName(mountPoint, resource.getResourceName(), resource.getResourceId()));
-        file.delete();
-    }
-
-    @Override
-    public List<LocalResource> getAllResources() throws HyracksDataException {
-        List<LocalResource> resources = new ArrayList<LocalResource>();
-        for (LocalResource resource : id2ResourceMap.values()) {
-            resources.add(resource);
-        }
-        return resources;
-    }
-
-    private String getFileName(String mountPoint, String baseDir, long resourceId) {
-
-        if (resourceId == ROOT_LOCAL_RESOURCE_ID) {
-            return baseDir;
-        } else {
-            String fileName = new String(mountPoint);
-            if (!baseDir.endsWith(System.getProperty("file.separator"))) {
-                baseDir += System.getProperty("file.separator");
-            }
-            fileName += baseDir + METADATA_FILE_NAME;
-            return fileName;
-        }
-    }
-
-    private LocalResource readLocalResource(File file) throws HyracksDataException {
-        FileInputStream fis = null;
-        ObjectInputStream oisFromFis = null;
-
-        try {
-            fis = new FileInputStream(file);
-            oisFromFis = new ObjectInputStream(fis);
-            LocalResource resource = (LocalResource) oisFromFis.readObject();
-            return resource;
-        } catch (Exception e) {
-            throw new HyracksDataException(e);
-        } finally {
-            if (oisFromFis != null) {
-                try {
-                    oisFromFis.close();
-                } catch (IOException e) {
-                    throw new HyracksDataException(e);
-                }
-            }
-            if (oisFromFis == null && fis != null) {
-                try {
-                    fis.close();
-                } catch (IOException e) {
-                    throw new HyracksDataException(e);
-                }
-            }
-        }
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityInfoManager.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityInfoManager.java
deleted file mode 100644
index b8820c4..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityInfoManager.java
+++ /dev/null
@@ -1,704 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.service.locking;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-
-/**
- * EntityInfoManager provides EntityInfo arrays backed by ByteBuffer.
- * The array grows when the slots are overflowed.
- * Also, the array shrinks according to the following shrink policy
- * : Shrink when the resource under-utilization lasts for a certain threshold time.
- * 
- * @author kisskys
- */
-public class EntityInfoManager {
-
-    public static final int SHRINK_TIMER_THRESHOLD = 120000; //2min
-
-    private ArrayList<ChildEntityInfoArrayManager> pArray;
-    private int allocChild; //used to allocate the next free EntityInfo slot.
-    private long shrinkTimer;
-    private boolean isShrinkTimerOn;
-    private int occupiedSlots;
-
-    //    ////////////////////////////////////////////////
-    //    // begin of unit test
-    //    ////////////////////////////////////////////////
-    //
-    //    public static final int SHRINK_TIMER_THRESHOLD = 0; //for unit test
-    //
-    //    /**
-    //     * @param args
-    //     */
-    //    public static void main(String[] args) {
-    //        final int DataSize = 5000;
-    //
-    //        int i, j;
-    //        int slots = ChildEntityInfoArrayManager.NUM_OF_SLOTS;
-    //        int data[] = new int[DataSize];
-    //        EntityInfoManager eiMgr = new EntityInfoManager();
-    //
-    //        //allocate: 50
-    //        System.out.println("allocate: 50");
-    //        for (i = 0; i < 5; i++) {
-    //            for (j = i * slots; j < i * slots + slots; j++) {
-    //                data[j] = eiMgr.allocate();
-    //            }
-    //
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //
-    //        //deallocate from the last child to the first child
-    //        System.out.println("deallocate from the last child to the first child");
-    //        for (i = 4; i >= 0; i--) {
-    //            for (j = i * slots + slots - 1; j >= i * slots; j--) {
-    //                eiMgr.deallocate(data[j]);
-    //            }
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //
-    //        //allocate: 50
-    //        System.out.println("allocate: 50");
-    //        for (i = 0; i < 5; i++) {
-    //            for (j = i * slots; j < i * slots + slots; j++) {
-    //                data[j] = eiMgr.allocate();
-    //            }
-    //
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //
-    //        //deallocate from the first child to last child
-    //        System.out.println("deallocate from the first child to last child");
-    //        for (i = 0; i < 5; i++) {
-    //            for (j = i * slots; j < i * slots + slots; j++) {
-    //                eiMgr.deallocate(data[j]);
-    //            }
-    //
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //
-    //        //allocate: 50
-    //        System.out.println("allocate: 50");
-    //        for (i = 0; i < 5; i++) {
-    //            for (j = i * slots; j < i * slots + slots; j++) {
-    //                data[j] = eiMgr.allocate();
-    //            }
-    //
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //
-    //        //deallocate from the first child to 4th child
-    //        System.out.println("deallocate from the first child to 4th child");
-    //        for (i = 0; i < 4; i++) {
-    //            for (j = i * slots; j < i * slots + slots; j++) {
-    //                eiMgr.deallocate(data[j]);
-    //            }
-    //
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //
-    //        //allocate: 40
-    //        System.out.println("allocate: 40");
-    //        for (i = 0; i < 4; i++) {
-    //            for (j = i * slots; j < i * slots + slots; j++) {
-    //                data[j] = eiMgr.allocate();
-    //            }
-    //
-    //            System.out.println(eiMgr.prettyPrint());
-    //        }
-    //    }
-    //    
-    //    ////////////////////////////////////////////////
-    //    // end of unit test
-    //    ////////////////////////////////////////////////
-
-    public EntityInfoManager() {
-        pArray = new ArrayList<ChildEntityInfoArrayManager>();
-        pArray.add(new ChildEntityInfoArrayManager());
-        allocChild = 0;
-        occupiedSlots = 0;
-        isShrinkTimerOn = false;
-    }
-
-    public int allocate(int jobId, int datasetId, int entityHashVal, byte lockMode) {
-        int slotNum = allocate();
-        initEntityInfo(slotNum, jobId, datasetId, entityHashVal, lockMode);
-        return slotNum;
-    }
-
-    public int allocate() {
-        if (pArray.get(allocChild).isFull()) {
-            int size = pArray.size();
-            boolean bAlloc = false;
-            ChildEntityInfoArrayManager child;
-
-            //find a deinitialized child and initialze it
-            for (int i = 0; i < size; i++) {
-                child = pArray.get(i);
-                if (child.isDeinitialized()) {
-                    child.initialize();
-                    allocChild = i;
-                    bAlloc = true;
-                    break;
-                }
-            }
-
-            //allocate new child when there is no deinitialized child
-            if (!bAlloc) {
-                pArray.add(new ChildEntityInfoArrayManager());
-                allocChild = pArray.size() - 1;
-            }
-        }
-        occupiedSlots++;
-        return pArray.get(allocChild).allocate() + allocChild * ChildEntityInfoArrayManager.NUM_OF_SLOTS;
-    }
-
-    void deallocate(int slotNum) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).deallocate(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-        occupiedSlots--;
-
-        if (needShrink()) {
-            shrink();
-        }
-    }
-
-    /**
-     * Shrink policy:
-     * Shrink when the resource under-utilization lasts for a certain amount of time.
-     * TODO Need to figure out which of the policies is better
-     * case1.
-     * pArray status : O x x x x x O (O is initialized, x is deinitialized)
-     * In the above status, 'CURRENT' needShrink() returns 'TRUE'
-     * even if there is nothing to shrink or deallocate.
-     * It doesn't distinguish the deinitialized children from initialized children
-     * by calculating totalNumOfSlots = pArray.size() * ChildEntityInfoArrayManager.NUM_OF_SLOTS.
-     * In other words, it doesn't subtract the deinitialized children's slots.
-     * case2.
-     * pArray status : O O x x x x x
-     * However, in the above case, if we subtract the deinitialized children's slots,
-     * needShrink() will return false even if we shrink the pArray at this case.
-     * 
-     * @return
-     */
-    private boolean needShrink() {
-        int size = pArray.size();
-        int usedSlots = occupiedSlots;
-        if (usedSlots == 0) {
-            usedSlots = 1;
-        }
-
-        if (size > 1 && size * ChildEntityInfoArrayManager.NUM_OF_SLOTS / usedSlots >= 3) {
-            if (isShrinkTimerOn) {
-                if (System.currentTimeMillis() - shrinkTimer >= SHRINK_TIMER_THRESHOLD) {
-                    isShrinkTimerOn = false;
-                    return true;
-                }
-            } else {
-                //turn on timer
-                isShrinkTimerOn = true;
-                shrinkTimer = System.currentTimeMillis();
-            }
-        } else {
-            //turn off timer
-            isShrinkTimerOn = false;
-        }
-
-        return false;
-    }
-
-    /**
-     * Shrink() may
-     * deinitialize(:deallocates ByteBuffer of child) Children(s) or
-     * shrink pArray according to the deinitialized children's contiguity status.
-     * It doesn't deinitialze or shrink more than half of children at a time.
-     */
-    private void shrink() {
-        int i;
-        boolean bContiguous = true;
-        int decreaseCount = 0;
-        int size = pArray.size();
-        int maxDecreaseCount = size / 2;
-        ChildEntityInfoArrayManager child;
-        for (i = size - 1; i >= 0; i--) {
-            child = pArray.get(i);
-            if (child.isEmpty() || child.isDeinitialized()) {
-                if (bContiguous) {
-                    pArray.remove(i);
-                    if (++decreaseCount == maxDecreaseCount) {
-                        break;
-                    }
-                } else {
-                    bContiguous = false;
-                    if (child.isEmpty()) {
-                        child.deinitialize();
-                        if (++decreaseCount == maxDecreaseCount) {
-                            break;
-                        }
-                    }
-                }
-            } else {
-                bContiguous = false;
-            }
-        }
-
-        //reset allocChild when the child is removed or deinitialized.
-        size = pArray.size();
-        if (allocChild >= size || pArray.get(allocChild).isDeinitialized()) {
-            //set allocChild to any initialized one.
-            //It is guaranteed that there is at least one initialized child.
-            for (i = 0; i < size; i++) {
-                if (!pArray.get(i).isDeinitialized()) {
-                    allocChild = i;
-                    break;
-                }
-            }
-        }
-    }
-
-    public String prettyPrint() {
-        StringBuilder s = new StringBuilder("\n########### EntityInfoManager Status #############\n");
-        int size = pArray.size();
-        ChildEntityInfoArrayManager child;
-
-        for (int i = 0; i < size; i++) {
-            child = pArray.get(i);
-            if (child.isDeinitialized()) {
-                continue;
-            }
-            s.append("child[" + i + "]: occupiedSlots:" + child.getNumOfOccupiedSlots());
-            s.append(" freeSlotNum:" + child.getFreeSlotNum() + "\n");
-            s.append("\tjid\t").append("did\t").append("PK\t").append("DLM\t").append("DLC\t").append("ELM\t")
-                    .append("ELC\t").append("NEA\t").append("PJR\t").append("NJR\n");
-            for (int j = 0; j < ChildEntityInfoArrayManager.NUM_OF_SLOTS; j++) {
-                s.append(j).append(": ");
-                s.append("\t" + child.getJobId(j));
-                s.append("\t" + child.getDatasetId(j));
-                s.append("\t" + child.getPKHashVal(j));
-                s.append("\t" + child.getDatasetLockMode(j));
-                s.append("\t" + child.getDatasetLockCount(j));
-                s.append("\t" + child.getEntityLockMode(j));
-                s.append("\t" + child.getEntityLockCount(j));
-                s.append("\t" + child.getNextEntityActor(j));
-                s.append("\t" + child.getPrevJobResource(j));
-                s.append("\t" + child.getNextJobResource(j));
-                //s.append("\t" + child.getNextDatasetActor(j));
-                s.append("\n");
-            }
-            s.append("\n");
-        }
-        return s.toString();
-    }
-
-    public void initEntityInfo(int slotNum, int jobId, int datasetId, int PKHashVal, byte lockMode) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).initEntityInfo(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, jobId, datasetId, PKHashVal, lockMode);
-    }
-
-    public boolean compareEntityInfo(int slotNum, int jobId, int datasetId, int PKHashVal) {
-        return getPKHashVal(slotNum) == PKHashVal && getDatasetId(slotNum) == datasetId && getJobId(slotNum) == jobId;
-    }
-
-    public void increaseDatasetLockCount(int slotNum) {
-        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) + 1));
-    }
-
-    public void decreaseDatasetLockCount(int slotNum) {
-        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) - 1));
-    }
-
-    public void increaseEntityLockCount(int slotNum) {
-        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) + 1));
-    }
-
-    public void decreaseEntityLockCount(int slotNum) {
-        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) - 1));
-    }
-
-    public void increaseDatasetLockCount(int slotNum, int count) {
-        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) + count));
-    }
-
-    public void decreaseDatasetLockCount(int slotNum, int count) {
-        setDatasetLockCount(slotNum, (byte) (getDatasetLockCount(slotNum) - count));
-    }
-
-    public void increaseEntityLockCount(int slotNum, int count) {
-        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) + count));
-    }
-
-    public void decreaseEntityLockCount(int slotNum, int count) {
-        setEntityLockCount(slotNum, (byte) (getEntityLockCount(slotNum) - count));
-    }
-
-    //////////////////////////////////////////////////////////////////
-    //   set/get method for each field of EntityInfo
-    //////////////////////////////////////////////////////////////////
-
-    public void setJobId(int slotNum, int id) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setJobId(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, id);
-    }
-
-    public int getJobId(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getJobId(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setDatasetId(int slotNum, int id) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setDatasetId(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, id);
-    }
-
-    public int getDatasetId(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getDatasetId(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setPKHashVal(int slotNum, int hashVal) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setPKHashVal(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, hashVal);
-    }
-
-    public int getPKHashVal(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getPKHashVal(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setDatasetLockMode(int slotNum, byte mode) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setDatasetLockMode(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, mode);
-    }
-
-    public byte getDatasetLockMode(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getDatasetLockMode(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setDatasetLockCount(int slotNum, byte count) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setDatasetLockCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
-    }
-
-    public byte getDatasetLockCount(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getDatasetLockCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setEntityLockMode(int slotNum, byte mode) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setEntityLockMode(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, mode);
-    }
-
-    public byte getEntityLockMode(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getEntityLockMode(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setEntityLockCount(int slotNum, byte count) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setEntityLockCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
-    }
-
-    public byte getEntityLockCount(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getEntityLockCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    //Used for Waiter/Upgrader
-    public void setNextEntityActor(int slotNum, int nextActorSlotNum) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setNextEntityActor(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextActorSlotNum);
-    }
-
-    //Used for Waiter/Upgrader
-    public int getNextEntityActor(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getNextEntityActor(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    //Used for Holder
-    public void setPrevEntityActor(int slotNum, int nextActorSlotNum) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setPrevEntityActor(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextActorSlotNum);
-    }
-
-    //Used for Holder
-    public int getPrevEntityActor(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getPrevEntityActor(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setPrevJobResource(int slotNum, int prevResourceSlotNum) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setPrevJobResource(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, prevResourceSlotNum);
-    }
-
-    public int getPrevJobResource(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getPrevJobResource(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setNextJobResource(int slotNum, int nextResourceSlotNum) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setNextJobResource(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextResourceSlotNum);
-    }
-
-    public int getNextJobResource(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getNextJobResource(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    //    public void setNextDatasetActor(int slotNum, int nextActorSlotNum) {
-    //        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setNextDatasetActor(
-    //                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, nextActorSlotNum);
-    //    }
-    //
-    //    public int getNextDatasetActor(int slotNum) {
-    //        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getNextDatasetActor(
-    //                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    //    }
-}
-
-/******************************************
- * EntityInfo (28 bytes)
- * ****************************************
- * int jobId
- * int datasetId
- * int PKHashValue
- * byte datasetLockMode
- * byte datasetLockCount
- * byte enitityLockMode
- * byte entityLockCount
- * int nextEntityActor : actor can be either holder/waiter/upgrader
- * int prevJobResource : resource can be either dataset or entity and a job is holding/waiting/upgrading lock(s) on it.
- * int nextJobResource : resource can be either dataset or entity and a job is holding/waiting/upgrading lock(s) on it.
- * (int nextDatasetActor : actor can be either holder/waiter/upgrader) --> not used.
- *******************************************/
-
-class ChildEntityInfoArrayManager {
-    public static final int ENTITY_INFO_SIZE = 28; //28bytes
-    public static final int NUM_OF_SLOTS = 1024; //number of entities in a buffer
-    //    public static final int NUM_OF_SLOTS = 10; //for unit test
-    public static final int BUFFER_SIZE = ENTITY_INFO_SIZE * NUM_OF_SLOTS;
-
-    //byte offset of each field of EntityInfo
-    public static final int JOB_ID_OFFSET = 0;
-    public static final int DATASET_ID_OFFSET = 4;
-    public static final int PKHASH_VAL_OFFSET = 8;
-    public static final int DATASET_LOCK_MODE_OFFSET = 12;
-    public static final int DATASET_LOCK_COUNT_OFFSET = 13;
-    public static final int ENTITY_LOCK_MODE_OFFSET = 14;
-    public static final int ENTITY_LOCK_COUNT_OFFSET = 15;
-    public static final int ENTITY_ACTOR_OFFSET = 16;
-    public static final int PREV_JOB_RESOURCE_OFFSET = 20;
-    public static final int NEXT_JOB_RESOURCE_OFFSET = 24;
-    //public static final int DATASET_ACTOR_OFFSET = 28;
-
-    //byte offset of nextFreeSlotNum which shares the same space of JobId
-    //If a slot is in use, the space is used for JobId. Otherwise, it is used for nextFreeSlotNum. 
-    public static final int NEXT_FREE_SLOT_OFFSET = 0;
-
-    private ByteBuffer buffer;
-    private int freeSlotNum;
-    private int occupiedSlots; //-1 represents 'deinitialized' state.
-
-    public ChildEntityInfoArrayManager() {
-        initialize();
-    }
-
-    public void initialize() {
-        this.buffer = ByteBuffer.allocate(BUFFER_SIZE);
-        this.freeSlotNum = 0;
-        this.occupiedSlots = 0;
-
-        for (int i = 0; i < NUM_OF_SLOTS - 1; i++) {
-            setNextFreeSlot(i, i + 1);
-        }
-        setNextFreeSlot(NUM_OF_SLOTS - 1, -1); //-1 represents EOL(end of link)
-    }
-
-    public int allocate() {
-        int currentSlot = freeSlotNum;
-        freeSlotNum = getNextFreeSlot(currentSlot);
-        occupiedSlots++;
-        if (LockManager.IS_DEBUG_MODE) {
-            System.out.println(Thread.currentThread().getName()+" entity allocate: "+currentSlot);
-        }
-        return currentSlot;
-    }
-
-    public void deallocate(int slotNum) {
-        setNextFreeSlot(slotNum, freeSlotNum);
-        freeSlotNum = slotNum;
-        occupiedSlots--;
-        if (LockManager.IS_DEBUG_MODE) {
-            System.out.println(Thread.currentThread().getName()+" entity deallocate: "+slotNum);
-        }
-    }
-
-    public void deinitialize() {
-        buffer = null;
-        occupiedSlots = -1;
-    }
-
-    public boolean isDeinitialized() {
-        return occupiedSlots == -1;
-    }
-
-    public boolean isFull() {
-        return occupiedSlots == NUM_OF_SLOTS;
-    }
-
-    public boolean isEmpty() {
-        return occupiedSlots == 0;
-    }
-
-    public int getNumOfOccupiedSlots() {
-        return occupiedSlots;
-    }
-
-    public int getFreeSlotNum() {
-        return freeSlotNum;
-    }
-
-    //////////////////////////////////////////////////////////////////
-    //   set/get method for each field of EntityInfo plus freeSlot
-    //////////////////////////////////////////////////////////////////
-    public void initEntityInfo(int slotNum, int jobId, int datasetId, int PKHashVal, byte lockMode) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + JOB_ID_OFFSET, jobId);
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ID_OFFSET, datasetId);
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PKHASH_VAL_OFFSET, PKHashVal);
-        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_MODE_OFFSET, lockMode);
-        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_COUNT_OFFSET, (byte) 0);
-        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_MODE_OFFSET, lockMode);
-        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_COUNT_OFFSET, (byte) 0);
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET, -1);
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PREV_JOB_RESOURCE_OFFSET, -1);
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + NEXT_JOB_RESOURCE_OFFSET, -1);
-        //buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET, -1);
-    }
-
-    public void setNextFreeSlot(int slotNum, int nextFreeSlot) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + NEXT_FREE_SLOT_OFFSET, nextFreeSlot);
-    }
-
-    public int getNextFreeSlot(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + NEXT_FREE_SLOT_OFFSET);
-    }
-
-    public void setJobId(int slotNum, int id) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + JOB_ID_OFFSET, id);
-    }
-
-    public int getJobId(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + JOB_ID_OFFSET);
-    }
-
-    public void setDatasetId(int slotNum, int id) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ID_OFFSET, id);
-    }
-
-    public int getDatasetId(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + DATASET_ID_OFFSET);
-    }
-
-    public void setPKHashVal(int slotNum, int hashVal) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PKHASH_VAL_OFFSET, hashVal);
-    }
-
-    public int getPKHashVal(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + PKHASH_VAL_OFFSET);
-    }
-
-    public void setDatasetLockMode(int slotNum, byte mode) {
-        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_MODE_OFFSET, mode);
-    }
-
-    public byte getDatasetLockMode(int slotNum) {
-        return buffer.get(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_MODE_OFFSET);
-    }
-
-    public void setDatasetLockCount(int slotNum, byte count) {
-        buffer.put(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_COUNT_OFFSET, count);
-    }
-
-    public byte getDatasetLockCount(int slotNum) {
-        return buffer.get(slotNum * ENTITY_INFO_SIZE + DATASET_LOCK_COUNT_OFFSET);
-    }
-
-    public void setEntityLockMode(int slotNum, byte mode) {
-        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_MODE_OFFSET, mode);
-    }
-
-    public byte getEntityLockMode(int slotNum) {
-        return buffer.get(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_MODE_OFFSET);
-    }
-
-    public void setEntityLockCount(int slotNum, byte count) {
-        buffer.put(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_COUNT_OFFSET, count);
-    }
-
-    public byte getEntityLockCount(int slotNum) {
-        return buffer.get(slotNum * ENTITY_INFO_SIZE + ENTITY_LOCK_COUNT_OFFSET);
-    }
-
-    //Used for Waiter/Upgrader
-    public void setNextEntityActor(int slotNum, int nextActorSlotNum) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET, nextActorSlotNum);
-    }
-
-    //Used for Waiter/Upgrader
-    public int getNextEntityActor(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET);
-    }
-
-    //Used for Holder
-    public void setPrevEntityActor(int slotNum, int nextActorSlotNum) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET, nextActorSlotNum);
-    }
-
-    //Used for Holder
-    public int getPrevEntityActor(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + ENTITY_ACTOR_OFFSET);
-    }
-
-    public void setPrevJobResource(int slotNum, int prevResourceSlotNum) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + PREV_JOB_RESOURCE_OFFSET, prevResourceSlotNum);
-    }
-
-    public int getPrevJobResource(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + PREV_JOB_RESOURCE_OFFSET);
-    }
-
-    public void setNextJobResource(int slotNum, int prevResourceSlotNum) {
-        buffer.putInt(slotNum * ENTITY_INFO_SIZE + NEXT_JOB_RESOURCE_OFFSET, prevResourceSlotNum);
-    }
-
-    public int getNextJobResource(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + NEXT_JOB_RESOURCE_OFFSET);
-    }
-
-    //    public void setNextDatasetActor(int slotNum, int nextActorSlotNum) {
-    //        buffer.putInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET, nextActorSlotNum);
-    //    }
-    //
-    //    public int getNextDatasetActor(int slotNum) {
-    //        return buffer.getInt(slotNum * ENTITY_INFO_SIZE + DATASET_ACTOR_OFFSET);
-    //    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityLockInfoManager.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityLockInfoManager.java
deleted file mode 100644
index 59c20f2..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/EntityLockInfoManager.java
+++ /dev/null
@@ -1,801 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.service.locking;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
-
-/**
- * EntityLockInfoManager provides EntityLockInfo arrays backed by ByteBuffer.
- * The array grows when the slots are overflowed.
- * Also, the array shrinks according to the following shrink policy
- * : Shrink when the resource under-utilization lasts for a certain threshold time.
- * 
- * @author kisskys
- */
-public class EntityLockInfoManager {
-
-    public static final int SHRINK_TIMER_THRESHOLD = 120000; //2min
-
-    private ArrayList<ChildEntityLockInfoArrayManager> pArray;
-    private int allocChild; //used to allocate the next free EntityInfo slot.
-    private long shrinkTimer;
-    private boolean isShrinkTimerOn;
-    private int occupiedSlots;
-    private EntityInfoManager entityInfoManager;
-    LockWaiterManager lockWaiterManager;
-
-    //        ////////////////////////////////////////////////
-    //        // begin of unit test
-    //        ////////////////////////////////////////////////
-    //    
-    //        public static final int SHRINK_TIMER_THRESHOLD = 0; //for unit test
-    //    
-    //        /**
-    //         * @param args
-    //         */
-    //        public static void main(String[] args) {
-    //            final int DataSize = 5000;
-    //    
-    //            int i, j;
-    //            int slots = ChildEntityLockInfoArrayManager.NUM_OF_SLOTS;
-    //            int data[] = new int[DataSize];
-    //            EntityLockInfoManager eliMgr = new EntityLockInfoManager();
-    //    
-    //            //allocate: 50
-    //            System.out.println("allocate: 50");
-    //            for (i = 0; i < 5; i++) {
-    //                for (j = i * slots; j < i * slots + slots; j++) {
-    //                    data[j] = eliMgr.allocate();
-    //                }
-    //    
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //    
-    //            //deallocate from the last child to the first child
-    //            System.out.println("deallocate from the last child to the first child");
-    //            for (i = 4; i >= 0; i--) {
-    //                for (j = i * slots + slots - 1; j >= i * slots; j--) {
-    //                    eliMgr.deallocate(data[j]);
-    //                }
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //    
-    //            //allocate: 50
-    //            System.out.println("allocate: 50");
-    //            for (i = 0; i < 5; i++) {
-    //                for (j = i * slots; j < i * slots + slots; j++) {
-    //                    data[j] = eliMgr.allocate();
-    //                }
-    //    
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //    
-    //            //deallocate from the first child to last child
-    //            System.out.println("deallocate from the first child to last child");
-    //            for (i = 0; i < 5; i++) {
-    //                for (j = i * slots; j < i * slots + slots; j++) {
-    //                    eliMgr.deallocate(data[j]);
-    //                }
-    //    
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //    
-    //            //allocate: 50
-    //            System.out.println("allocate: 50");
-    //            for (i = 0; i < 5; i++) {
-    //                for (j = i * slots; j < i * slots + slots; j++) {
-    //                    data[j] = eliMgr.allocate();
-    //                }
-    //    
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //    
-    //            //deallocate from the first child to 4th child
-    //            System.out.println("deallocate from the first child to 4th child");
-    //            for (i = 0; i < 4; i++) {
-    //                for (j = i * slots; j < i * slots + slots; j++) {
-    //                    eliMgr.deallocate(data[j]);
-    //                }
-    //    
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //    
-    //            //allocate: 40
-    //            System.out.println("allocate: 40");
-    //            for (i = 0; i < 4; i++) {
-    //                for (j = i * slots; j < i * slots + slots; j++) {
-    //                    data[j] = eliMgr.allocate();
-    //                }
-    //    
-    //                System.out.println(eliMgr.prettyPrint());
-    //            }
-    //        }
-    //        
-    //        ////////////////////////////////////////////////
-    //        // end of unit test
-    //        ////////////////////////////////////////////////
-
-    public EntityLockInfoManager(EntityInfoManager entityInfoManager, LockWaiterManager lockWaiterManager) {
-        pArray = new ArrayList<ChildEntityLockInfoArrayManager>();
-        pArray.add(new ChildEntityLockInfoArrayManager());
-        allocChild = 0;
-        occupiedSlots = 0;
-        isShrinkTimerOn = false;
-        this.entityInfoManager = entityInfoManager;
-        this.lockWaiterManager = lockWaiterManager;
-    }
-
-    public int allocate() {
-        if (pArray.get(allocChild).isFull()) {
-            int size = pArray.size();
-            boolean bAlloc = false;
-            ChildEntityLockInfoArrayManager child;
-
-            //find a deinitialized child and initialze it
-            for (int i = 0; i < size; i++) {
-                child = pArray.get(i);
-                if (child.isDeinitialized()) {
-                    child.initialize();
-                    allocChild = i;
-                    bAlloc = true;
-                    break;
-                }
-            }
-
-            //allocate new child when there is no deinitialized child
-            if (!bAlloc) {
-                pArray.add(new ChildEntityLockInfoArrayManager());
-                allocChild = pArray.size() - 1;
-            }
-        }
-        occupiedSlots++;
-        return pArray.get(allocChild).allocate() + allocChild * ChildEntityLockInfoArrayManager.NUM_OF_SLOTS;
-    }
-
-    void deallocate(int slotNum) {
-        pArray.get(slotNum / ChildEntityLockInfoArrayManager.NUM_OF_SLOTS).deallocate(
-                slotNum % ChildEntityLockInfoArrayManager.NUM_OF_SLOTS);
-        occupiedSlots--;
-
-        if (needShrink()) {
-            shrink();
-        }
-    }
-
-    /**
-     * Shrink policy:
-     * Shrink when the resource under-utilization lasts for a certain amount of time.
-     * TODO Need to figure out which of the policies is better
-     * case1.
-     * pArray status : O x x x x x O (O is initialized, x is deinitialized)
-     * In the above status, 'CURRENT' needShrink() returns 'TRUE'
-     * even if there is nothing to shrink or deallocate.
-     * It doesn't distinguish the deinitialized children from initialized children
-     * by calculating totalNumOfSlots = pArray.size() * ChildEntityLockInfoArrayManager.NUM_OF_SLOTS.
-     * In other words, it doesn't subtract the deinitialized children's slots.
-     * case2.
-     * pArray status : O O x x x x x
-     * However, in the above case, if we subtract the deinitialized children's slots,
-     * needShrink() will return false even if we shrink the pArray at this case.
-     * 
-     * @return
-     */
-    private boolean needShrink() {
-        int size = pArray.size();
-        int usedSlots = occupiedSlots;
-        if (usedSlots == 0) {
-            usedSlots = 1;
-        }
-
-        if (size > 1 && size * ChildEntityLockInfoArrayManager.NUM_OF_SLOTS / usedSlots >= 3) {
-            if (isShrinkTimerOn) {
-                if (System.currentTimeMillis() - shrinkTimer >= SHRINK_TIMER_THRESHOLD) {
-                    isShrinkTimerOn = false;
-                    return true;
-                }
-            } else {
-                //turn on timer
-                isShrinkTimerOn = true;
-                shrinkTimer = System.currentTimeMillis();
-            }
-        } else {
-            //turn off timer
-            isShrinkTimerOn = false;
-        }
-
-        return false;
-    }
-
-    /**
-     * Shrink() may
-     * deinitialize(:deallocates ByteBuffer of child) Children(s) or
-     * shrink pArray according to the deinitialized children's contiguity status.
-     * It doesn't deinitialze or shrink more than half of children at a time.
-     */
-    private void shrink() {
-        int i;
-        boolean bContiguous = true;
-        int decreaseCount = 0;
-        int size = pArray.size();
-        int maxDecreaseCount = size / 2;
-        ChildEntityLockInfoArrayManager child;
-        for (i = size - 1; i >= 0; i--) {
-            child = pArray.get(i);
-            if (child.isEmpty() || child.isDeinitialized()) {
-                if (bContiguous) {
-                    pArray.remove(i);
-                    if (++decreaseCount == maxDecreaseCount) {
-                        break;
-                    }
-                } else {
-                    bContiguous = false;
-                    if (child.isEmpty()) {
-                        child.deinitialize();
-                        if (++decreaseCount == maxDecreaseCount) {
-                            break;
-                        }
-                    }
-                }
-            } else {
-                bContiguous = false;
-            }
-        }
-
-        //reset allocChild when the child is removed or deinitialized.
-        size = pArray.size();
-        if (allocChild >= size || pArray.get(allocChild).isDeinitialized()) {
-            //set allocChild to any initialized one.
-            //It is guaranteed that there is at least one initialized child.
-            for (i = 0; i < size; i++) {
-                if (!pArray.get(i).isDeinitialized()) {
-                    allocChild = i;
-                    break;
-                }
-            }
-        }
-    }
-
-    public String prettyPrint() {
-        StringBuilder s = new StringBuilder("\n########### EntityLockInfoManager Status #############\n");
-        int size = pArray.size();
-        ChildEntityLockInfoArrayManager child;
-
-        for (int i = 0; i < size; i++) {
-            child = pArray.get(i);
-            if (child.isDeinitialized()) {
-                continue;
-            }
-            s.append("child[" + i + "]: occupiedSlots:" + child.getNumOfOccupiedSlots());
-            s.append(" freeSlotNum:" + child.getFreeSlotNum() + "\n");
-            s.append("\tX\t").append("S\t").append("LH\t").append("FW\t").append("UP\n");
-            for (int j = 0; j < ChildEntityLockInfoArrayManager.NUM_OF_SLOTS; j++) {
-                s.append(j).append(": ");
-                s.append("\t" + child.getXCount(j));
-                s.append("\t" + child.getSCount(j));
-                s.append("\t" + child.getLastHolder(j));
-                s.append("\t" + child.getFirstWaiter(j));
-                s.append("\t" + child.getUpgrader(j));
-                s.append("\n");
-            }
-            s.append("\n");
-        }
-        return s.toString();
-    }
-
-    //debugging method
-    public String printWaiters(int slotNum) {
-        StringBuilder s = new StringBuilder();
-        int waiterObjId;
-        LockWaiter waiterObj;
-        int entityInfo;
-
-        s.append("WID\tWCT\tEID\tJID\tDID\tPK\n");
-
-        waiterObjId = getFirstWaiter(slotNum);
-        while (waiterObjId != -1) {
-            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-            entityInfo = waiterObj.getEntityInfoSlot();
-            s.append(waiterObjId).append("\t").append(waiterObj.getWaiterCount()).append("\t").append(entityInfo)
-                    .append("\t").append(entityInfoManager.getJobId(entityInfo)).append("\t")
-                    .append(entityInfoManager.getDatasetId(entityInfo)).append("\t")
-                    .append(entityInfoManager.getPKHashVal(entityInfo)).append("\n");
-            waiterObjId = waiterObj.getNextWaiterObjId();
-        }
-
-        return s.toString();
-    }
-
-    public void addHolder(int slotNum, int holder) {
-        entityInfoManager.setPrevEntityActor(holder, getLastHolder(slotNum));
-        setLastHolder(slotNum, holder);
-    }
-
-    /**
-     * Remove holder from linked list of Actor.
-     * Also, remove the corresponding resource from linked list of resource
-     * in order to minimize JobInfo's resource link traversal.
-     * 
-     * @param slotNum
-     * @param holder
-     * @param jobInfo
-     */
-    public void removeHolder(int slotNum, int holder, JobInfo jobInfo) {
-        int prev = getLastHolder(slotNum);
-        int current = -1;
-        int next;
-
-        //remove holder from linked list of Actor
-        while (prev != holder) {
-            if (LockManager.IS_DEBUG_MODE) {
-                if (prev == -1) {
-                    //shouldn't occur: debugging purpose
-                    try {
-                        throw new Exception();
-                    } catch (Exception e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                }
-            }
-
-            current = prev;
-            prev = entityInfoManager.getPrevEntityActor(current);
-        }
-
-        if (current != -1) {
-            //current->prev = prev->prev
-            entityInfoManager.setPrevEntityActor(current, entityInfoManager.getPrevEntityActor(prev));
-        } else {
-            //lastHolder = prev->prev
-            setLastHolder(slotNum, entityInfoManager.getPrevEntityActor(prev));
-        }
-
-        //Notice!!
-        //remove the corresponding resource from linked list of resource.
-        prev = entityInfoManager.getPrevJobResource(holder);
-        next = entityInfoManager.getNextJobResource(holder);
-
-        if (prev != -1) {
-            entityInfoManager.setNextJobResource(prev, next);
-        }
-
-        if (next != -1) {
-            entityInfoManager.setPrevJobResource(next, prev);
-        } else {
-            //This entityInfo(i.e., holder) is the last resource held by this job.
-            jobInfo.setlastHoldingResource(prev);
-        }
-
-        //jobInfo.decreaseDatasetLockCount(holder);
-    }
-
-    public void addWaiter(int slotNum, int waiterObjId) {
-        int lastObjId;
-        LockWaiter lastObj = null;
-        int firstWaiter = getFirstWaiter(slotNum);
-
-        if (firstWaiter != -1) {
-            //find the lastWaiter
-            lastObjId = firstWaiter;
-            while (lastObjId != -1) {
-                lastObj = lockWaiterManager.getLockWaiter(lastObjId);
-                lastObjId = lastObj.getNextWaiterObjId();
-            }
-            //last->next = new_waiter
-            lastObj.setNextWaiterObjId(waiterObjId);
-        } else {
-            setFirstWaiter(slotNum, waiterObjId);
-        }
-        //new_waiter->next = -1
-        lastObj = lockWaiterManager.getLockWaiter(waiterObjId);
-        lastObj.setNextWaiterObjId(-1);
-    }
-
-    public void removeWaiter(int slotNum, int waiterObjId) {
-        int currentObjId = getFirstWaiter(slotNum);
-        LockWaiter currentObj;
-        LockWaiter prevObj = null;
-        int prevObjId = -1;
-        int nextObjId;
-
-        while (currentObjId != waiterObjId) {
-
-            if (LockManager.IS_DEBUG_MODE) {
-                if (currentObjId == -1) {
-                    //shouldn't occur: debugging purpose
-                    try {
-                        throw new Exception();
-                    } catch (Exception e) {
-                        // TODO Auto-generated catch block
-                        e.printStackTrace();
-                    }
-                }
-            }
-
-            prevObj = lockWaiterManager.getLockWaiter(currentObjId);
-            prevObjId = currentObjId;
-            currentObjId = prevObj.getNextWaiterObjId();
-        }
-
-        //get current waiter object
-        currentObj = lockWaiterManager.getLockWaiter(currentObjId);
-
-        //get next waiterObjId
-        nextObjId = currentObj.getNextWaiterObjId();
-
-        if (prevObjId != -1) {
-            //prev->next = next
-            prevObj.setNextWaiterObjId(nextObjId);
-        } else {
-            //removed first waiter. firstWaiter = current->next
-            setFirstWaiter(slotNum, nextObjId);
-        }
-    }
-
-    public void addUpgrader(int slotNum, int waiterObjId) {
-        //[Notice]
-        //Even if there are multiple threads in a job try to upgrade lock mode on same resource which is entity-granule,
-        //while the first upgrader is waiting, all the incoming upgrade requests from other threads should be rejected by aborting them.
-        //Therefore, there is no actual "ADD" upgrader method. Instead, it only has "SET" upgrader method.
-        if (LockManager.IS_DEBUG_MODE) {
-            if (getUpgrader(slotNum) != -1) {
-                throw new IllegalStateException("Invalid lock upgrade request. This call should be handled as deadlock");
-            }
-        }
-
-        setUpgrader(slotNum, waiterObjId);
-    }
-
-    public void removeUpgrader(int slotNum, int waiterObjId) {
-        setUpgrader(slotNum, -1);
-    }
-
-    public boolean isUpgradeCompatible(int slotNum, byte lockMode, int entityInfo) {
-        switch (lockMode) {
-            case LockMode.X:
-                return getSCount(slotNum) - entityInfoManager.getEntityLockCount(entityInfo) == 0;
-
-            default:
-                throw new IllegalStateException("Invalid upgrade lock mode");
-        }
-    }
-
-    public boolean isCompatible(int slotNum, byte lockMode) {
-        switch (lockMode) {
-            case LockMode.X:
-                return getSCount(slotNum) == 0 && getXCount(slotNum) == 0;
-
-            case LockMode.S:
-                return getXCount(slotNum) == 0;
-
-            default:
-                throw new IllegalStateException("Invalid upgrade lock mode");
-        }
-    }
-
-    public int findEntityInfoFromHolderList(int eLockInfo, int jobId, int hashVal) {
-        int entityInfo = getLastHolder(eLockInfo);
-
-        while (entityInfo != -1) {
-            if (jobId == entityInfoManager.getJobId(entityInfo)
-                    && hashVal == entityInfoManager.getPKHashVal(entityInfo)) {
-                return entityInfo;
-            }
-            //            if (LockManager.IS_DEBUG_MODE) {
-            //                System.out.println("eLockInfo(" + eLockInfo + "),entityInfo(" + entityInfo + "), Request[" + jobId
-            //                        + "," + hashVal + "]:Result[" + entityInfoManager.getJobId(entityInfo) + ","
-            //                        + entityInfoManager.getPKHashVal(entityInfo) + "]");
-            //            }
-            entityInfo = entityInfoManager.getPrevEntityActor(entityInfo);
-        }
-
-        return -1;
-    }
-
-    public int findWaiterFromWaiterList(int eLockInfo, int jobId, int hashVal) {
-        int waiterObjId = getFirstWaiter(eLockInfo);
-        LockWaiter waiterObj;
-        int entityInfo;
-
-        while (waiterObjId != -1) {
-            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-            entityInfo = waiterObj.getEntityInfoSlot();
-            if (jobId == entityInfoManager.getJobId(entityInfo)
-                    && hashVal == entityInfoManager.getPKHashVal(entityInfo)) {
-                return waiterObjId;
-            }
-            waiterObjId = waiterObj.getNextWaiterObjId();
-        }
-
-        return -1;
-    }
-
-    public int findUpgraderFromUpgraderList(int eLockInfo, int jobId, int hashVal) {
-        int waiterObjId = getUpgrader(eLockInfo);
-        LockWaiter waiterObj;
-        int entityInfo;
-
-        if (waiterObjId != -1) {
-            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-            entityInfo = waiterObj.getEntityInfoSlot();
-            if (jobId == entityInfoManager.getJobId(entityInfo)
-                    && hashVal == entityInfoManager.getPKHashVal(entityInfo)) {
-                return waiterObjId;
-            }
-        }
-
-        return -1;
-    }
-
-    public void increaseLockCount(int slotNum, byte lockMode) {
-        switch (lockMode) {
-            case LockMode.X:
-                setXCount(slotNum, (short) (getXCount(slotNum) + 1));
-                break;
-            case LockMode.S:
-                setSCount(slotNum, (short) (getSCount(slotNum) + 1));
-                break;
-            default:
-                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
-        }
-    }
-
-    public void decreaseLockCount(int slotNum, byte lockMode) {
-        switch (lockMode) {
-            case LockMode.X:
-                setXCount(slotNum, (short) (getXCount(slotNum) - 1));
-                break;
-            case LockMode.S:
-                setSCount(slotNum, (short) (getSCount(slotNum) - 1));
-                break;
-            default:
-                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
-        }
-    }
-
-    public void increaseLockCount(int slotNum, byte lockMode, short count) {
-        switch (lockMode) {
-            case LockMode.X:
-                setXCount(slotNum, (short) (getXCount(slotNum) + count));
-                break;
-            case LockMode.S:
-                setSCount(slotNum, (short) (getSCount(slotNum) + count));
-                break;
-            default:
-                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
-        }
-    }
-
-    public void decreaseLockCount(int slotNum, byte lockMode, short count) {
-        switch (lockMode) {
-            case LockMode.X:
-                setXCount(slotNum, (short) (getXCount(slotNum) - count));
-                break;
-            case LockMode.S:
-                setSCount(slotNum, (short) (getSCount(slotNum) - count));
-                break;
-            default:
-                throw new IllegalStateException("Invalid entity lock mode " + lockMode);
-        }
-    }
-
-    //////////////////////////////////////////////////////////////////
-    //   set/get method for each field of EntityLockInfo
-    //////////////////////////////////////////////////////////////////
-
-    public void setXCount(int slotNum, short count) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setXCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
-    }
-
-    public short getXCount(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getXCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setSCount(int slotNum, short count) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setSCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, count);
-    }
-
-    public short getSCount(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getSCount(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setLastHolder(int slotNum, int holder) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setLastHolder(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, holder);
-    }
-
-    public int getLastHolder(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getLastHolder(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setFirstWaiter(int slotNum, int waiter) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setFirstWaiter(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, waiter);
-    }
-
-    public int getFirstWaiter(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getFirstWaiter(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-    public void setUpgrader(int slotNum, int upgrader) {
-        pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).setUpgrader(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS, upgrader);
-    }
-
-    public int getUpgrader(int slotNum) {
-        return pArray.get(slotNum / ChildEntityInfoArrayManager.NUM_OF_SLOTS).getUpgrader(
-                slotNum % ChildEntityInfoArrayManager.NUM_OF_SLOTS);
-    }
-
-}
-
-/******************************************
- * EntityLockInfo (16 bytes)
- * ****************************************
- * short XCount : used to represent the count of X mode lock if it is allocated. Otherwise, it represents next free slot.
- * short SCount
- * int lastHolder
- * int firstWaiter
- * int upgrader : may exist only one since there are only S and X mode lock in Entity-level
- *******************************************/
-
-class ChildEntityLockInfoArrayManager {
-    public static final int ENTITY_LOCK_INFO_SIZE = 16; //16bytes
-    public static final int NUM_OF_SLOTS = 1024; //number of entityLockInfos in a buffer
-    //public static final int NUM_OF_SLOTS = 10; //for unit test
-    public static final int BUFFER_SIZE = ENTITY_LOCK_INFO_SIZE * NUM_OF_SLOTS;
-
-    //byte offset of each field of EntityLockInfo
-    public static final int XCOUNT_OFFSET = 0;
-    public static final int SCOUNT_OFFSET = 2;
-    public static final int LAST_HOLDER_OFFSET = 4;
-    public static final int FIRST_WAITER_OFFSET = 8;
-    public static final int UPGRADER_OFFSET = 12;
-
-    //byte offset of nextFreeSlotNum which shares the same space with LastHolder field
-    //If a slot is in use, the space is used for LastHolder. Otherwise, it is used for nextFreeSlotNum. 
-    public static final int NEXT_FREE_SLOT_OFFSET = 4;
-
-    private ByteBuffer buffer;
-    private int freeSlotNum;
-    private int occupiedSlots; //-1 represents 'deinitialized' state.
-
-    public ChildEntityLockInfoArrayManager() {
-        initialize();
-    }
-
-    public void initialize() {
-        this.buffer = ByteBuffer.allocate(BUFFER_SIZE);
-        this.freeSlotNum = 0;
-        this.occupiedSlots = 0;
-
-        for (int i = 0; i < NUM_OF_SLOTS - 1; i++) {
-            setNextFreeSlot(i, i + 1);
-        }
-        setNextFreeSlot(NUM_OF_SLOTS - 1, -1); //-1 represents EOL(end of link)
-    }
-
-    public int allocate() {
-        int currentSlot = freeSlotNum;
-        freeSlotNum = getNextFreeSlot(currentSlot);
-        //initialize values
-        setXCount(currentSlot, (short) 0);
-        setSCount(currentSlot, (short) 0);
-        setLastHolder(currentSlot, -1);
-        setFirstWaiter(currentSlot, -1);
-        setUpgrader(currentSlot, -1);
-        occupiedSlots++;
-        if (LockManager.IS_DEBUG_MODE) {
-            System.out.println(Thread.currentThread().getName() + " Allocated ELockInfo[" + currentSlot + "]");
-        }
-        return currentSlot;
-    }
-
-    public void deallocate(int slotNum) {
-        setNextFreeSlot(slotNum, freeSlotNum);
-        freeSlotNum = slotNum;
-        occupiedSlots--;
-        if (LockManager.IS_DEBUG_MODE) {
-            System.out.println(Thread.currentThread().getName() + " Deallocated ELockInfo[" + slotNum + "]");
-        }
-    }
-
-    public void deinitialize() {
-        buffer = null;
-        occupiedSlots = -1;
-    }
-
-    public boolean isDeinitialized() {
-        return occupiedSlots == -1;
-    }
-
-    public boolean isFull() {
-        return occupiedSlots == NUM_OF_SLOTS;
-    }
-
-    public boolean isEmpty() {
-        return occupiedSlots == 0;
-    }
-
-    public int getNumOfOccupiedSlots() {
-        return occupiedSlots;
-    }
-
-    public int getFreeSlotNum() {
-        return freeSlotNum;
-    }
-
-    //////////////////////////////////////////////////////////////////
-    //   set/get method for each field of EntityLockInfo plus freeSlot
-    //////////////////////////////////////////////////////////////////
-
-    public void setNextFreeSlot(int slotNum, int nextFreeSlot) {
-        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + NEXT_FREE_SLOT_OFFSET, nextFreeSlot);
-    }
-
-    public int getNextFreeSlot(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + NEXT_FREE_SLOT_OFFSET);
-    }
-
-    public void setXCount(int slotNum, short count) {
-        buffer.putShort(slotNum * ENTITY_LOCK_INFO_SIZE + XCOUNT_OFFSET, count);
-    }
-
-    public short getXCount(int slotNum) {
-        return buffer.getShort(slotNum * ENTITY_LOCK_INFO_SIZE + XCOUNT_OFFSET);
-    }
-
-    public void setSCount(int slotNum, short count) {
-        buffer.putShort(slotNum * ENTITY_LOCK_INFO_SIZE + SCOUNT_OFFSET, count);
-    }
-
-    public short getSCount(int slotNum) {
-        return buffer.getShort(slotNum * ENTITY_LOCK_INFO_SIZE + SCOUNT_OFFSET);
-    }
-
-    public void setLastHolder(int slotNum, int holder) {
-        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + LAST_HOLDER_OFFSET, holder);
-    }
-
-    public int getLastHolder(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + LAST_HOLDER_OFFSET);
-    }
-
-    public void setFirstWaiter(int slotNum, int waiter) {
-        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + FIRST_WAITER_OFFSET, waiter);
-    }
-
-    public int getFirstWaiter(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + FIRST_WAITER_OFFSET);
-    }
-
-    public void setUpgrader(int slotNum, int upgrader) {
-        buffer.putInt(slotNum * ENTITY_LOCK_INFO_SIZE + UPGRADER_OFFSET, upgrader);
-    }
-
-    public int getUpgrader(int slotNum) {
-        return buffer.getInt(slotNum * ENTITY_LOCK_INFO_SIZE + UPGRADER_OFFSET);
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
deleted file mode 100644
index aeb54b5..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/locking/LockManager.java
+++ /dev/null
@@ -1,1851 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-
-package edu.uci.ics.asterix.transaction.management.service.locking;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogType;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogUtil;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogicalLogLocator;
-import edu.uci.ics.asterix.transaction.management.service.transaction.DatasetId;
-import edu.uci.ics.asterix.transaction.management.service.transaction.ITransactionManager.TransactionState;
-import edu.uci.ics.asterix.transaction.management.service.transaction.JobId;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants.LockManagerConstants.LockMode;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
-
-/**
- * An implementation of the ILockManager interface for the
- * specific case of locking protocol with two lock modes: (S) and (X),
- * where S lock mode is shown by 0, and X lock mode is shown by 1.
- * 
- * @author pouria, kisskys
- */
-
-public class LockManager implements ILockManager {
-
-    public static final boolean IS_DEBUG_MODE = false;//true
-
-    public static final boolean ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET = true;
-    public static final int ESCALATE_TRHESHOLD_ENTITY_TO_DATASET = 1000;
-    private static final int DO_ESCALATE = 0;
-    private static final int ESCALATED = 1;
-    private static final int DONOT_ESCALATE = 2;
-
-    private TransactionSubsystem txnSubsystem;
-
-    //all threads accessing to LockManager's tables such as jobHT and datasetResourceHT
-    //are serialized through LockTableLatch. All threads waiting the latch will be fairly served
-    //in FIFO manner when the latch is available. 
-    private final ReadWriteLock lockTableLatch;
-    private final ReadWriteLock waiterLatch;
-    private HashMap<JobId, JobInfo> jobHT;
-    private HashMap<DatasetId, DatasetLockInfo> datasetResourceHT;
-
-    private EntityLockInfoManager entityLockInfoManager;
-    private EntityInfoManager entityInfoManager;
-    private LockWaiterManager lockWaiterManager;
-
-    private DeadlockDetector deadlockDetector;
-    private TimeOutDetector toutDetector;
-    private DatasetId tempDatasetIdObj; //temporary object to avoid object creation
-
-    private int tryLockDatasetGranuleRevertOperation;
-
-    private LockRequestTracker lockRequestTracker; //for debugging
-    private ConsecutiveWakeupContext consecutiveWakeupContext;
-
-    //TODO 
-    //This code should be taken care properly when there is a way to avoid doubling memory space for txnIds. 
-    private LogicalLogLocator logicalLogLocator;
-
-    public LockManager(TransactionSubsystem txnSubsystem) throws ACIDException {
-        this.txnSubsystem = txnSubsystem;
-        this.lockTableLatch = new ReentrantReadWriteLock(true);
-        this.waiterLatch = new ReentrantReadWriteLock(true);
-        this.jobHT = new HashMap<JobId, JobInfo>();
-        this.datasetResourceHT = new HashMap<DatasetId, DatasetLockInfo>();
-        this.entityInfoManager = new EntityInfoManager();
-        this.lockWaiterManager = new LockWaiterManager();
-        this.entityLockInfoManager = new EntityLockInfoManager(entityInfoManager, lockWaiterManager);
-        this.deadlockDetector = new DeadlockDetector(jobHT, datasetResourceHT, entityLockInfoManager,
-                entityInfoManager, lockWaiterManager);
-        this.toutDetector = new TimeOutDetector(this);
-        this.tempDatasetIdObj = new DatasetId(0);
-        this.consecutiveWakeupContext = new ConsecutiveWakeupContext();
-
-        this.logicalLogLocator = LogUtil.getDummyLogicalLogLocator(txnSubsystem.getLogManager());
-
-        if (IS_DEBUG_MODE) {
-            this.lockRequestTracker = new LockRequestTracker();
-        }
-    }
-
-    @Override
-    public void lock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
-            throws ACIDException {
-        internalLock(datasetId, entityHashValue, lockMode, txnContext);
-    }
-
-    private void internalLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
-            throws ACIDException {
-
-        JobId jobId = txnContext.getJobId();
-        int jId = jobId.getId(); //int-type jobId
-        int dId = datasetId.getId(); //int-type datasetId
-        int entityInfo;
-        int eLockInfo = -1;
-        DatasetLockInfo dLockInfo = null;
-        JobInfo jobInfo;
-        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-        boolean isEscalated = false;
-
-        latchLockTable();
-        validateJob(txnContext);
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Requested", RequestType.LOCK, datasetId, entityHashValue, lockMode, txnContext,
-                    dLockInfo, eLockInfo);
-        }
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-
-        if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-            if (datasetLockMode == LockMode.IS && jobInfo != null && dLockInfo != null) {
-                int upgradeStatus = needUpgradeFromEntityToDataset(jobInfo, dId, lockMode);
-                switch (upgradeStatus) {
-                    case DO_ESCALATE:
-                        entityHashValue = -1;
-                        isEscalated = true;
-                        break;
-
-                    case ESCALATED:
-                        unlatchLockTable();
-                        return;
-
-                    default:
-                        break;
-                }
-            }
-        }
-
-        //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
-        if (dLockInfo == null || dLockInfo.isNoHolder()) {
-            if (dLockInfo == null) {
-                dLockInfo = new DatasetLockInfo(entityLockInfoManager, entityInfoManager, lockWaiterManager);
-                datasetResourceHT.put(new DatasetId(dId), dLockInfo); //datsetId obj should be created
-            }
-            entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
-
-            //if dataset-granule lock
-            if (entityHashValue == -1) { //-1 stands for dataset-granule
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                dLockInfo.increaseLockCount(datasetLockMode);
-                dLockInfo.addHolder(entityInfo);
-            } else {
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                dLockInfo.increaseLockCount(datasetLockMode);
-                //add entityLockInfo
-                eLockInfo = entityLockInfoManager.allocate();
-                dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
-                entityInfoManager.increaseEntityLockCount(entityInfo);
-                entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
-                entityLockInfoManager.addHolder(eLockInfo, entityInfo);
-            }
-
-            if (jobInfo == null) {
-                jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
-                jobHT.put(jobId, jobInfo); //jobId obj doesn't have to be created
-            }
-            jobInfo.addHoldingResource(entityInfo);
-
-            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-                if (datasetLockMode == LockMode.IS) {
-                    jobInfo.increaseDatasetISLockCount(dId);
-                }
-            }
-
-            if (IS_DEBUG_MODE) {
-                trackLockRequest("Granted", RequestType.LOCK, datasetId, entityHashValue, lockMode, txnContext,
-                        dLockInfo, eLockInfo);
-            }
-
-            unlatchLockTable();
-            return;
-        }
-
-        //#. the datasetLockInfo exists in datasetResourceHT.
-        //1. handle dataset-granule lock
-        entityInfo = lockDatasetGranule(datasetId, entityHashValue, lockMode, txnContext);
-
-        //2. handle entity-granule lock
-        if (entityHashValue != -1) {
-            lockEntityGranule(datasetId, entityHashValue, lockMode, entityInfo, txnContext);
-        }
-
-        if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-            if (isEscalated) {
-                releaseDatasetISLocks(jobInfo, jobId, datasetId, txnContext);
-            }
-            if (jobInfo != null && datasetLockMode == LockMode.IS) {
-                jobInfo.increaseDatasetISLockCount(dId);
-            }
-        }
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Granted", RequestType.LOCK, datasetId, entityHashValue, lockMode, txnContext, dLockInfo,
-                    eLockInfo);
-        }
-        unlatchLockTable();
-        return;
-    }
-
-    private void releaseDatasetISLocks(JobInfo jobInfo, JobId jobId, DatasetId datasetId, TransactionContext txnContext)
-            throws ACIDException {
-        int entityInfo;
-        int prevEntityInfo;
-        int entityHashValue;
-        int did;//int-type dataset id
-
-        //while traversing all holding resources, 
-        //release IS locks on the escalated dataset and
-        //release S locks on the corresponding enttites
-        //by calling unlock() method.
-        entityInfo = jobInfo.getLastHoldingResource();
-        while (entityInfo != -1) {
-            prevEntityInfo = entityInfoManager.getPrevJobResource(entityInfo);
-
-            //release a lock only if the datset is the escalated dataset and
-            //the entityHashValue is not -1("not -1" means a non-dataset-level lock)
-            did = entityInfoManager.getDatasetId(entityInfo);
-            entityHashValue = entityInfoManager.getPKHashVal(entityInfo);
-            if (did == datasetId.getId() && entityHashValue != -1) {
-                this.unlock(datasetId, entityHashValue, txnContext);
-            }
-
-            entityInfo = prevEntityInfo;
-        }
-    }
-
-    private int needUpgradeFromEntityToDataset(JobInfo jobInfo, int datasetId, byte lockMode) {
-        //we currently allow upgrade only if the lockMode is S. 
-        if (lockMode != LockMode.S) {
-            return DONOT_ESCALATE;
-        }
-
-        int count = jobInfo.getDatasetISLockCount(datasetId);
-        if (count == ESCALATE_TRHESHOLD_ENTITY_TO_DATASET) {
-            return DO_ESCALATE;
-        } else if (count > ESCALATE_TRHESHOLD_ENTITY_TO_DATASET) {
-            return ESCALATED;
-        } else {
-            return DONOT_ESCALATE;
-        }
-    }
-
-    private void validateJob(TransactionContext txnContext) throws ACIDException {
-        if (txnContext.getTxnState() == TransactionState.ABORTED) {
-            unlatchLockTable();
-            throw new ACIDException("" + txnContext.getJobId() + " is in ABORTED state.");
-        } else if (txnContext.getStatus() == TransactionContext.TIMED_OUT_STATUS) {
-            try {
-                requestAbort(txnContext);
-            } finally {
-                unlatchLockTable();
-            }
-        }
-    }
-
-    private int lockDatasetGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
-            TransactionContext txnContext) throws ACIDException {
-        JobId jobId = txnContext.getJobId();
-        int jId = jobId.getId(); //int-type jobId
-        int dId = datasetId.getId(); //int-type datasetId
-        int waiterObjId;
-        int entityInfo = -1;
-        DatasetLockInfo dLockInfo;
-        JobInfo jobInfo;
-        boolean isUpgrade = false;
-        int weakerModeLockCount;
-        int waiterCount = 0;
-        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-
-        //check duplicated call
-
-        //1. lock request causing duplicated upgrading requests from different threads in a same job
-        waiterObjId = dLockInfo.findUpgraderFromUpgraderList(jId, entityHashValue);
-        if (waiterObjId != -1) {
-            //make the caller wait on the same LockWaiter object
-            entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
-            waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo, waiterObjId);
-
-            //Only for the first-get-up thread, the waiterCount will be more than 0 and
-            //the thread updates lock count on behalf of the all other waiting threads.
-            //Therefore, all the next-get-up threads will not update any lock count.
-            if (waiterCount > 0) {
-                //add ((the number of waiting upgrader) - 1) to entityInfo's dataset lock count and datasetLockInfo's lock count
-                //where -1 is for not counting the first upgrader's request since the lock count for the first upgrader's request
-                //is already counted.
-                weakerModeLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
-                entityInfoManager.setDatasetLockMode(entityInfo, lockMode);
-                entityInfoManager.increaseDatasetLockCount(entityInfo, waiterCount - 1);
-
-                if (entityHashValue == -1) { //dataset-granule lock
-                    dLockInfo.increaseLockCount(LockMode.X, weakerModeLockCount + waiterCount - 1);//new lock mode
-                    dLockInfo.decreaseLockCount(LockMode.S, weakerModeLockCount);//current lock mode
-                } else {
-                    dLockInfo.increaseLockCount(LockMode.IX, weakerModeLockCount + waiterCount - 1);
-                    dLockInfo.decreaseLockCount(LockMode.IS, weakerModeLockCount);
-                }
-            }
-
-            return entityInfo;
-        }
-
-        //2. lock request causing duplicated waiting requests from different threads in a same job
-        waiterObjId = dLockInfo.findWaiterFromWaiterList(jId, entityHashValue);
-        if (waiterObjId != -1) {
-            //make the caller wait on the same LockWaiter object
-            entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
-            waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, false, true, txnContext, jobInfo, waiterObjId);
-
-            if (waiterCount > 0) {
-                entityInfoManager.increaseDatasetLockCount(entityInfo, waiterCount);
-                if (entityHashValue == -1) {
-                    dLockInfo.increaseLockCount(datasetLockMode, waiterCount);
-                    dLockInfo.addHolder(entityInfo);
-                } else {
-                    dLockInfo.increaseLockCount(datasetLockMode, waiterCount);
-                    //IS and IX holders are implicitly handled.
-                }
-                //add entityInfo to JobInfo's holding-resource list
-                jobInfo.addHoldingResource(entityInfo);
-            }
-
-            return entityInfo;
-        }
-
-        //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
-        entityInfo = dLockInfo.findEntityInfoFromHolderList(jId, entityHashValue);
-        if (entityInfo == -1) {
-
-            entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
-            if (jobInfo == null) {
-                jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
-                jobHT.put(jobId, jobInfo);
-            }
-
-            //wait if any upgrader exists or upgrading lock mode is not compatible
-            if (dLockInfo.getFirstUpgrader() != -1 || dLockInfo.getFirstWaiter() != -1
-                    || !dLockInfo.isCompatible(datasetLockMode)) {
-
-                /////////////////////////////////////////////////////////////////////////////////////////////
-                //[Notice] Mimicking SIX mode
-                //When the lock escalation from IS to S in dataset-level is allowed, the following case occurs
-                //DatasetLockInfo's SCount = 1 and the same job who carried out the escalation tries to insert,
-                //then the job should be able to insert without being blocked by itself. 
-                //Our approach is to introduce SIX mode, but we don't have currently, 
-                //so I simply mimicking SIX by allowing S and IX coexist in the dataset level 
-                //only if their job id is identical for the requests. 
-                if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-                    if (datasetLockMode == LockMode.IX && dLockInfo.getSCount() == 1
-                            && jobInfo.isDatasetLockGranted(dId, LockMode.S)) {
-                        entityInfoManager.increaseDatasetLockCount(entityInfo);
-                        //IX holders are implicitly handled without adding holder
-                        dLockInfo.increaseLockCount(datasetLockMode);
-                        //add entityInfo to JobInfo's holding-resource list
-                        jobInfo.addHoldingResource(entityInfo);
-                        return entityInfo;
-                    }
-                }
-                ///////////////////////////////////////////////////////////////////////////////////////////////
-
-                /////////////////////////////////////////////////////////////////////////////////////////////
-                //[Notice]
-                //There has been no same caller as (jId, dId, entityHashValue) triplet.
-                //But there could be the same caller as (jId, dId) pair.
-                //For example, two requests (J1, D1, E1) and (J1, D1, E2) are considered as duplicated call in dataset-granule perspective.
-                //Therefore, the above duplicated call case is covered in the following code.
-                //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
-                //if (jobInfo.isDatasetLockGranted(dId, datasetLockMode)) {
-                if (jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
-                    if (dLockInfo.isCompatible(datasetLockMode)) {
-                        //this is duplicated call
-                        entityInfoManager.increaseDatasetLockCount(entityInfo);
-                        if (entityHashValue == -1) {
-                            dLockInfo.increaseLockCount(datasetLockMode);
-                            dLockInfo.addHolder(entityInfo);
-                        } else {
-                            dLockInfo.increaseLockCount(datasetLockMode);
-                            //IS and IX holders are implicitly handled.
-                        }
-                        //add entityInfo to JobInfo's holding-resource list
-                        jobInfo.addHoldingResource(entityInfo);
-
-                        return entityInfo;
-                    } else {
-                        //considered as upgrader
-                        waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo, -1);
-                        if (waiterCount > 0) {
-                            entityInfoManager.increaseDatasetLockCount(entityInfo);
-                            if (entityHashValue == -1) {
-                                dLockInfo.increaseLockCount(datasetLockMode);
-                                dLockInfo.addHolder(entityInfo);
-                            } else {
-                                dLockInfo.increaseLockCount(datasetLockMode);
-                                //IS and IX holders are implicitly handled.
-                            }
-                            //add entityInfo to JobInfo's holding-resource list
-                            jobInfo.addHoldingResource(entityInfo);
-                        }
-                        return entityInfo;
-                    }
-                }
-                /////////////////////////////////////////////////////////////////////////////////////////////
-
-                waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, false, true, txnContext, jobInfo, -1);
-            } else {
-                waiterCount = 1;
-            }
-
-            if (waiterCount > 0) {
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                if (entityHashValue == -1) {
-                    dLockInfo.increaseLockCount(datasetLockMode);
-                    dLockInfo.addHolder(entityInfo);
-                } else {
-                    dLockInfo.increaseLockCount(datasetLockMode);
-                    //IS and IX holders are implicitly handled.
-                }
-                //add entityInfo to JobInfo's holding-resource list
-                jobInfo.addHoldingResource(entityInfo);
-            }
-        } else {
-            isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
-            if (isUpgrade) { //upgrade call 
-                //wait if any upgrader exists or upgrading lock mode is not compatible
-                if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
-                    waiterCount = handleLockWaiter(dLockInfo, -1, entityInfo, true, true, txnContext, jobInfo, -1);
-                } else {
-                    waiterCount = 1;
-                }
-
-                if (waiterCount > 0) {
-                    //add ((the number of waiting upgrader) - 1) to entityInfo's dataset lock count and datasetLockInfo's lock count
-                    //where -1 is for not counting the first upgrader's request since the lock count for the first upgrader's request
-                    //is already counted.
-                    weakerModeLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
-                    entityInfoManager.setDatasetLockMode(entityInfo, lockMode);
-                    entityInfoManager.increaseDatasetLockCount(entityInfo, waiterCount - 1);
-
-                    if (entityHashValue == -1) { //dataset-granule lock
-                        dLockInfo.increaseLockCount(LockMode.X, weakerModeLockCount + waiterCount - 1);//new lock mode
-                        dLockInfo.decreaseLockCount(LockMode.S, weakerModeLockCount);//current lock mode
-                    } else {
-                        dLockInfo.increaseLockCount(LockMode.IX, weakerModeLockCount + waiterCount - 1);
-                        dLockInfo.decreaseLockCount(LockMode.IS, weakerModeLockCount);
-                    }
-                }
-            } else { //duplicated call
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo);
-
-                if (entityHashValue == -1) { //dataset-granule
-                    dLockInfo.increaseLockCount(datasetLockMode);
-                } else { //entity-granule
-                    datasetLockMode = datasetLockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-                    dLockInfo.increaseLockCount(datasetLockMode);
-                }
-            }
-        }
-
-        return entityInfo;
-    }
-
-    private void lockEntityGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
-            int entityInfoFromDLockInfo, TransactionContext txnContext) throws ACIDException {
-        JobId jobId = txnContext.getJobId();
-        int jId = jobId.getId(); //int-type jobId
-        int waiterObjId;
-        int eLockInfo = -1;
-        int entityInfo;
-        DatasetLockInfo dLockInfo;
-        JobInfo jobInfo;
-        boolean isUpgrade = false;
-        int waiterCount = 0;
-        int weakerModeLockCount;
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-        eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
-
-        if (eLockInfo != -1) {
-            //check duplicated call
-
-            //1. lock request causing duplicated upgrading requests from different threads in a same job
-            waiterObjId = entityLockInfoManager.findUpgraderFromUpgraderList(eLockInfo, jId, entityHashValue);
-            if (waiterObjId != -1) {
-                entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
-                waiterCount = handleLockWaiter(dLockInfo, eLockInfo, -1, true, false, txnContext, jobInfo, waiterObjId);
-
-                if (waiterCount > 0) {
-                    weakerModeLockCount = entityInfoManager.getEntityLockCount(entityInfo);
-                    entityInfoManager.setEntityLockMode(entityInfo, LockMode.X);
-                    entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount - 1);
-
-                    entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) (weakerModeLockCount
-                            + waiterCount - 1));//new lock mode
-                    entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode 
-                }
-                return;
-            }
-
-            //2. lock request causing duplicated waiting requests from different threads in a same job
-            waiterObjId = entityLockInfoManager.findWaiterFromWaiterList(eLockInfo, jId, entityHashValue);
-            if (waiterObjId != -1) {
-                entityInfo = lockWaiterManager.getLockWaiter(waiterObjId).getEntityInfoSlot();
-                waiterCount = handleLockWaiter(dLockInfo, eLockInfo, -1, false, false, txnContext, jobInfo, waiterObjId);
-
-                if (waiterCount > 0) {
-                    entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount);
-                    entityLockInfoManager.increaseLockCount(eLockInfo, lockMode, (short) waiterCount);
-                    entityLockInfoManager.addHolder(eLockInfo, entityInfo);
-                }
-                return;
-            }
-
-            //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
-            entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jId, entityHashValue);
-            if (entityInfo != -1) {//duplicated call or upgrader
-
-                isUpgrade = isLockUpgrade(entityInfoManager.getEntityLockMode(entityInfo), lockMode);
-                if (isUpgrade) {//upgrade call
-                    //wait if any upgrader exists or upgrading lock mode is not compatible
-                    if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
-                            || !entityLockInfoManager.isUpgradeCompatible(eLockInfo, lockMode, entityInfo)) {
-                        waiterCount = handleLockWaiter(dLockInfo, eLockInfo, entityInfo, true, false, txnContext,
-                                jobInfo, -1);
-                    } else {
-                        waiterCount = 1;
-                    }
-
-                    if (waiterCount > 0) {
-                        weakerModeLockCount = entityInfoManager.getEntityLockCount(entityInfo);
-                        entityInfoManager.setEntityLockMode(entityInfo, lockMode);
-                        entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount - 1);
-
-                        entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) (weakerModeLockCount
-                                + waiterCount - 1));//new lock mode
-                        entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode 
-                    }
-
-                } else {//duplicated call
-                    entityInfoManager.increaseEntityLockCount(entityInfo);
-                    entityLockInfoManager.increaseLockCount(eLockInfo, entityInfoManager.getEntityLockMode(entityInfo));
-                }
-            } else {//new call from this job, but still eLockInfo exists since other threads hold it or wait on it
-                entityInfo = entityInfoFromDLockInfo;
-                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
-                        || entityLockInfoManager.getFirstWaiter(eLockInfo) != -1
-                        || !entityLockInfoManager.isCompatible(eLockInfo, lockMode)) {
-                    waiterCount = handleLockWaiter(dLockInfo, eLockInfo, entityInfo, false, false, txnContext, jobInfo,
-                            -1);
-                } else {
-                    waiterCount = 1;
-                }
-
-                if (waiterCount > 0) {
-                    entityInfoManager.increaseEntityLockCount(entityInfo, waiterCount);
-                    entityLockInfoManager.increaseLockCount(eLockInfo, lockMode, (short) waiterCount);
-                    entityLockInfoManager.addHolder(eLockInfo, entityInfo);
-                }
-            }
-        } else {//eLockInfo doesn't exist, so this lock request is the first request and can be granted without waiting.
-            eLockInfo = entityLockInfoManager.allocate();
-            dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
-            entityInfoManager.increaseEntityLockCount(entityInfoFromDLockInfo);
-            entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
-            entityLockInfoManager.addHolder(eLockInfo, entityInfoFromDLockInfo);
-        }
-    }
-
-    @Override
-    public void unlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext) throws ACIDException {
-        internalUnlock(datasetId, entityHashValue, txnContext, false);
-    }
-
-    @Override
-    public void unlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext, boolean commitFlag)
-            throws ACIDException {
-        internalUnlock(datasetId, entityHashValue, txnContext, commitFlag);
-    }
-
-    private void internalUnlock(DatasetId datasetId, int entityHashValue, TransactionContext txnContext,
-            boolean commitFlag) throws ACIDException {
-        JobId jobId = txnContext.getJobId();
-        int eLockInfo = -1;
-        DatasetLockInfo dLockInfo = null;
-        JobInfo jobInfo;
-        int entityInfo = -1;
-        byte datasetLockMode;
-
-        if (IS_DEBUG_MODE) {
-            if (entityHashValue == -1) {
-                throw new UnsupportedOperationException(
-                        "Unsupported unlock request: dataset-granule unlock is not supported");
-            }
-        }
-
-        latchLockTable();
-        validateJob(txnContext);
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Requested", RequestType.UNLOCK, datasetId, entityHashValue, (byte) 0, txnContext,
-                    dLockInfo, eLockInfo);
-        }
-
-        //find the resource to be unlocked
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-        if (dLockInfo == null || jobInfo == null) {
-            unlatchLockTable();
-            throw new IllegalStateException("Invalid unlock request: Corresponding lock info doesn't exist.");
-        }
-
-        eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
-
-        if (eLockInfo == -1) {
-            unlatchLockTable();
-            throw new IllegalStateException("Invalid unlock request: Corresponding lock info doesn't exist.");
-        }
-
-        //find the corresponding entityInfo
-        entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jobId.getId(), entityHashValue);
-        if (entityInfo == -1) {
-            unlatchLockTable();
-            throw new IllegalStateException("Invalid unlock request[" + jobId.getId() + "," + datasetId.getId() + ","
-                    + entityHashValue + "]: Corresponding lock info doesn't exist.");
-        }
-
-        datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo) == LockMode.S ? LockMode.IS : LockMode.IX;
-
-        //decrease the corresponding count of dLockInfo/eLockInfo/entityInfo
-        dLockInfo.decreaseLockCount(datasetLockMode);
-        entityLockInfoManager.decreaseLockCount(eLockInfo, entityInfoManager.getEntityLockMode(entityInfo));
-        entityInfoManager.decreaseDatasetLockCount(entityInfo);
-        entityInfoManager.decreaseEntityLockCount(entityInfo);
-
-        if (entityInfoManager.getEntityLockCount(entityInfo) == 0
-                && entityInfoManager.getDatasetLockCount(entityInfo) == 0) {
-            int threadCount = 0; //number of threads(in the same job) waiting on the same resource 
-            int waiterObjId = jobInfo.getFirstWaitingResource();
-            int waitingEntityInfo;
-            LockWaiter waiterObj;
-
-            //TODO
-            //This code should be taken care properly when there is a way to avoid doubling memory space for txnIds.
-            //This commit log is written here in order to avoid increasing the memory space for managing transactionIds
-            if (commitFlag) {
-                if (txnContext.getTransactionType().equals(TransactionContext.TransactionType.READ_WRITE)) {
-                    try {
-                        txnSubsystem.getLogManager().log(LogType.ENTITY_COMMIT, txnContext, datasetId.getId(),
-                                entityHashValue, -1, (byte) 0, 0, null, null, logicalLogLocator);
-                    } catch (ACIDException e) {
-                        try {
-                            requestAbort(txnContext);
-                        } finally {
-                            unlatchLockTable();
-                        }
-                    }
-                }
-
-                txnContext.updateLastLSNForIndexes(logicalLogLocator.getLsn());
-            }
-
-            //1) wake up waiters and remove holder
-            //wake up waiters of dataset-granule lock
-            wakeUpDatasetLockWaiters(dLockInfo);
-            //wake up waiters of entity-granule lock
-            wakeUpEntityLockWaiters(eLockInfo);
-            //remove the holder from eLockInfo's holder list and remove the holding resource from jobInfo's holding resource list
-            //this can be done in the following single function call.
-            entityLockInfoManager.removeHolder(eLockInfo, entityInfo, jobInfo);
-
-            //2) if 
-            //      there is no waiting thread on the same resource (this can be checked through jobInfo)
-            //   then 
-            //      a) delete the corresponding entityInfo
-            //      b) write commit log for the unlocked resource(which is a committed txn).
-            while (waiterObjId != -1) {
-                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-                waitingEntityInfo = waiterObj.getEntityInfoSlot();
-                if (entityInfoManager.getDatasetId(waitingEntityInfo) == datasetId.getId()
-                        && entityInfoManager.getPKHashVal(waitingEntityInfo) == entityHashValue) {
-                    threadCount++;
-                    break;
-                }
-                waiterObjId = waiterObj.getNextWaiterObjId();
-            }
-            if (threadCount == 0) {
-                if (entityInfoManager.getEntityLockMode(entityInfo) == LockMode.X) {
-                    //TODO
-                    //write a commit log for the unlocked resource
-                    //need to figure out that instantLock() also needs to write a commit log. 
-                }
-                entityInfoManager.deallocate(entityInfo);
-            }
-        }
-
-        //deallocate entityLockInfo's slot if there is no txn referring to the entityLockInfo.
-        if (entityLockInfoManager.getFirstWaiter(eLockInfo) == -1
-                && entityLockInfoManager.getLastHolder(eLockInfo) == -1
-                && entityLockInfoManager.getUpgrader(eLockInfo) == -1) {
-            dLockInfo.getEntityResourceHT().remove(entityHashValue);
-            entityLockInfoManager.deallocate(eLockInfo);
-        }
-
-        //we don't deallocate datasetLockInfo even if there is no txn referring to the datasetLockInfo
-        //since the datasetLockInfo is likely to be referred to again.
-
-        if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-            if (datasetLockMode == LockMode.IS) {
-                jobInfo.decreaseDatasetISLockCount(datasetId.getId());
-            }
-        }
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Granted", RequestType.UNLOCK, datasetId, entityHashValue, (byte) 0, txnContext,
-                    dLockInfo, eLockInfo);
-        }
-        unlatchLockTable();
-    }
-
-    @Override
-    public void releaseLocks(TransactionContext txnContext) throws ACIDException {
-        LockWaiter waiterObj;
-        int entityInfo;
-        int prevEntityInfo;
-        int entityHashValue;
-        DatasetLockInfo dLockInfo = null;
-        int eLockInfo = -1;
-        int did;//int-type dataset id
-        int datasetLockCount;
-        int entityLockCount;
-        byte lockMode;
-        boolean existWaiter = false;
-
-        JobId jobId = txnContext.getJobId();
-
-        latchLockTable();
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Requested", RequestType.RELEASE_LOCKS, new DatasetId(0), 0, (byte) 0, txnContext,
-                    dLockInfo, eLockInfo);
-        }
-
-        JobInfo jobInfo = jobHT.get(jobId);
-        if (jobInfo == null) {
-            unlatchLockTable();
-            return;
-        }
-
-        //remove waiterObj of JobInfo 
-        //[Notice]
-        //waiterObjs may exist if aborted thread is the caller of this function.
-        //Even if there are the waiterObjs, there is no waiting thread on the objects. 
-        //If the caller of this function is an aborted thread, it is guaranteed that there is no waiting threads
-        //on the waiterObjs since when the aborted caller thread is waken up, all other waiting threads are
-        //also waken up at the same time through 'notifyAll()' call.
-        //In contrast, if the caller of this function is not an aborted thread, then there is no waiting object.
-        int waiterObjId = jobInfo.getFirstWaitingResource();
-        int nextWaiterObjId;
-        while (waiterObjId != -1) {
-            existWaiter = true;
-            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-            nextWaiterObjId = waiterObj.getNextWaitingResourceObjId();
-            entityInfo = waiterObj.getEntityInfoSlot();
-            if (IS_DEBUG_MODE) {
-                if (jobId.getId() != entityInfoManager.getJobId(entityInfo)) {
-                    throw new IllegalStateException("JobInfo(" + jobId + ") has diffrent Job(JID:"
-                            + entityInfoManager.getJobId(entityInfo) + "'s lock request!!!");
-                }
-            }
-
-            //1. remove from waiter(or upgrader)'s list of dLockInfo or eLockInfo.
-            did = entityInfoManager.getDatasetId(entityInfo);
-            tempDatasetIdObj.setId(did);
-            dLockInfo = datasetResourceHT.get(tempDatasetIdObj);
-
-            if (waiterObj.isWaitingOnEntityLock()) {
-                entityHashValue = entityInfoManager.getPKHashVal(entityInfo);
-                eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
-                if (waiterObj.isWaiter()) {
-                    entityLockInfoManager.removeWaiter(eLockInfo, waiterObjId);
-                } else {
-                    entityLockInfoManager.removeUpgrader(eLockInfo, waiterObjId);
-                }
-            } else {
-                if (waiterObj.isWaiter()) {
-                    dLockInfo.removeWaiter(waiterObjId);
-                } else {
-                    dLockInfo.removeUpgrader(waiterObjId);
-                }
-            }
-
-            //2. wake-up waiters
-            latchWaitNotify();
-            synchronized (waiterObj) {
-                unlatchWaitNotify();
-                waiterObj.setWait(false);
-                if (IS_DEBUG_MODE) {
-                    System.out.println("" + Thread.currentThread().getName() + "\twake-up(D): WID(" + waiterObjId
-                            + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
-                }
-                waiterObj.notifyAll();
-            }
-
-            //3. deallocate waiterObj
-            lockWaiterManager.deallocate(waiterObjId);
-
-            //4. deallocate entityInfo only if this waiter is not an upgrader
-            if (entityInfoManager.getDatasetLockCount(entityInfo) == 0
-                    && entityInfoManager.getEntityLockCount(entityInfo) == 0) {
-                entityInfoManager.deallocate(entityInfo);
-            }
-            waiterObjId = nextWaiterObjId;
-        }
-
-        //release holding resources
-        entityInfo = jobInfo.getLastHoldingResource();
-        while (entityInfo != -1) {
-            prevEntityInfo = entityInfoManager.getPrevJobResource(entityInfo);
-
-            //decrease lock count of datasetLock and entityLock
-            did = entityInfoManager.getDatasetId(entityInfo);
-            tempDatasetIdObj.setId(did);
-            dLockInfo = datasetResourceHT.get(tempDatasetIdObj);
-            entityHashValue = entityInfoManager.getPKHashVal(entityInfo);
-
-            if (entityHashValue == -1) {
-                //decrease datasetLockCount
-                lockMode = entityInfoManager.getDatasetLockMode(entityInfo);
-                datasetLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
-                if (datasetLockCount != 0) {
-                    dLockInfo.decreaseLockCount(lockMode, datasetLockCount);
-
-                    //wakeup waiters of datasetLock and remove holder from datasetLockInfo
-                    wakeUpDatasetLockWaiters(dLockInfo);
-
-                    //remove the holder from datasetLockInfo only if the lock is dataset-granule lock.
-                    //--> this also removes the holding resource from jobInfo               
-                    //(Because the IX and IS lock's holders are handled implicitly, 
-                    //those are not in the holder list of datasetLockInfo.)
-                    dLockInfo.removeHolder(entityInfo, jobInfo);
-                }
-            } else {
-                //decrease datasetLockCount
-                lockMode = entityInfoManager.getDatasetLockMode(entityInfo);
-                lockMode = lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-                datasetLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
-
-                if (datasetLockCount != 0) {
-                    dLockInfo.decreaseLockCount(lockMode, datasetLockCount);
-                }
-
-                //decrease entityLockCount
-                lockMode = entityInfoManager.getEntityLockMode(entityInfo);
-                entityLockCount = entityInfoManager.getEntityLockCount(entityInfo);
-                eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
-                if (IS_DEBUG_MODE) {
-                    if (eLockInfo < 0) {
-                        System.out.println("eLockInfo:" + eLockInfo);
-                    }
-                }
-
-                if (entityLockCount != 0) {
-                    entityLockInfoManager.decreaseLockCount(eLockInfo, lockMode, (short) entityLockCount);
-                }
-
-                if (datasetLockCount != 0) {
-                    //wakeup waiters of datasetLock and don't remove holder from datasetLockInfo
-                    wakeUpDatasetLockWaiters(dLockInfo);
-                }
-
-                if (entityLockCount != 0) {
-                    //wakeup waiters of entityLock
-                    wakeUpEntityLockWaiters(eLockInfo);
-
-                    //remove the holder from entityLockInfo 
-                    //--> this also removes the holding resource from jobInfo
-                    entityLockInfoManager.removeHolder(eLockInfo, entityInfo, jobInfo);
-                }
-
-                //deallocate entityLockInfo if there is no holder and waiter.
-                if (entityLockInfoManager.getLastHolder(eLockInfo) == -1
-                        && entityLockInfoManager.getFirstWaiter(eLockInfo) == -1
-                        && entityLockInfoManager.getUpgrader(eLockInfo) == -1) {
-                    dLockInfo.getEntityResourceHT().remove(entityHashValue);
-                    entityLockInfoManager.deallocate(eLockInfo);
-                    //                    if (IS_DEBUG_MODE) {
-                    //                        System.out.println("removed PK["+entityHashValue+"]");
-                    //                    }
-                }
-            }
-
-            //deallocate entityInfo
-            entityInfoManager.deallocate(entityInfo);
-            //            if (IS_DEBUG_MODE) {
-            //                System.out.println("dellocate EntityInfo["+entityInfo+"]");
-            //            }
-
-            entityInfo = prevEntityInfo;
-        }
-
-        //remove JobInfo
-        jobHT.remove(jobId);
-
-        if (existWaiter) {
-            txnContext.setStatus(TransactionContext.TIMED_OUT_STATUS);
-            txnContext.setTxnState(TransactionState.ABORTED);
-        }
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Granted", RequestType.RELEASE_LOCKS, new DatasetId(0), 0, (byte) 0, txnContext,
-                    dLockInfo, eLockInfo);
-        }
-        unlatchLockTable();
-    }
-
-    @Override
-    public void instantLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
-            throws ACIDException {
-
-        //        try {
-        //            internalLock(datasetId, entityHashValue, lockMode, txnContext);
-        //            return;
-        //        } finally {
-        //            unlock(datasetId, entityHashValue, txnContext);
-        //        }
-        internalLock(datasetId, entityHashValue, lockMode, txnContext);
-        unlock(datasetId, entityHashValue, txnContext);
-    }
-
-    @Override
-    public boolean tryLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
-            throws ACIDException {
-        return internalTryLock(datasetId, entityHashValue, lockMode, txnContext);
-    }
-
-    @Override
-    public boolean instantTryLock(DatasetId datasetId, int entityHashValue, byte lockMode, TransactionContext txnContext)
-            throws ACIDException {
-        boolean isGranted = false;
-        //        try {
-        //            isGranted = internalTryLock(datasetId, entityHashValue, lockMode, txnContext);
-        //            return isGranted;
-        //        } finally {
-        //            if (isGranted) {
-        //                unlock(datasetId, entityHashValue, txnContext);
-        //            }
-        //        }
-        isGranted = internalTryLock(datasetId, entityHashValue, lockMode, txnContext);
-        if (isGranted) {
-            unlock(datasetId, entityHashValue, txnContext);
-        }
-        return isGranted;
-    }
-
-    private boolean internalTryLock(DatasetId datasetId, int entityHashValue, byte lockMode,
-            TransactionContext txnContext) throws ACIDException {
-        JobId jobId = txnContext.getJobId();
-        int jId = jobId.getId(); //int-type jobId
-        int dId = datasetId.getId(); //int-type datasetId
-        int entityInfo;
-        int eLockInfo = -1;
-        DatasetLockInfo dLockInfo = null;
-        JobInfo jobInfo;
-        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-        boolean isSuccess = false;
-        boolean isEscalated = false;
-
-        latchLockTable();
-        validateJob(txnContext);
-
-        if (IS_DEBUG_MODE) {
-            trackLockRequest("Requested", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
-                    dLockInfo, eLockInfo);
-        }
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-
-        if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-            if (datasetLockMode == LockMode.IS && jobInfo != null && dLockInfo != null) {
-                int upgradeStatus = needUpgradeFromEntityToDataset(jobInfo, dId, lockMode);
-                switch (upgradeStatus) {
-                    case DO_ESCALATE:
-                        entityHashValue = -1;
-                        isEscalated = true;
-                        break;
-
-                    case ESCALATED:
-                        unlatchLockTable();
-                        return true;
-
-                    default:
-                        break;
-                }
-            }
-        }
-
-        //#. if the datasetLockInfo doesn't exist in datasetResourceHT 
-        if (dLockInfo == null || dLockInfo.isNoHolder()) {
-            if (dLockInfo == null) {
-                dLockInfo = new DatasetLockInfo(entityLockInfoManager, entityInfoManager, lockWaiterManager);
-                datasetResourceHT.put(new DatasetId(dId), dLockInfo); //datsetId obj should be created
-            }
-            entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
-
-            //if dataset-granule lock
-            if (entityHashValue == -1) { //-1 stands for dataset-granule
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                dLockInfo.increaseLockCount(datasetLockMode);
-                dLockInfo.addHolder(entityInfo);
-            } else {
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                dLockInfo.increaseLockCount(datasetLockMode);
-                //add entityLockInfo
-                eLockInfo = entityLockInfoManager.allocate();
-                dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
-                entityInfoManager.increaseEntityLockCount(entityInfo);
-                entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
-                entityLockInfoManager.addHolder(eLockInfo, entityInfo);
-            }
-
-            if (jobInfo == null) {
-                jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
-                jobHT.put(jobId, jobInfo); //jobId obj doesn't have to be created
-            }
-            jobInfo.addHoldingResource(entityInfo);
-
-            if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-                if (datasetLockMode == LockMode.IS) {
-                    jobInfo.increaseDatasetISLockCount(dId);
-                }
-            }
-
-            if (IS_DEBUG_MODE) {
-                trackLockRequest("Granted", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
-                        dLockInfo, eLockInfo);
-            }
-
-            unlatchLockTable();
-            return true;
-        }
-
-        //#. the datasetLockInfo exists in datasetResourceHT.
-        //1. handle dataset-granule lock
-        tryLockDatasetGranuleRevertOperation = 0;
-        entityInfo = tryLockDatasetGranule(datasetId, entityHashValue, lockMode, txnContext);
-        if (entityInfo == -2) {//-2 represents fail
-            isSuccess = false;
-        } else {
-            //2. handle entity-granule lock
-            if (entityHashValue != -1) {
-                isSuccess = tryLockEntityGranule(datasetId, entityHashValue, lockMode, entityInfo, txnContext);
-                if (!isSuccess) {
-                    revertTryLockDatasetGranuleOperation(datasetId, entityHashValue, lockMode, entityInfo, txnContext);
-                }
-            }
-        }
-
-        if (ALLOW_ESCALATE_FROM_ENTITY_TO_DATASET) {
-            if (isEscalated) {
-                releaseDatasetISLocks(jobInfo, jobId, datasetId, txnContext);
-            }
-            if (jobInfo != null && datasetLockMode == LockMode.IS) {
-                jobInfo.increaseDatasetISLockCount(dId);
-            }
-        }
-
-        if (IS_DEBUG_MODE) {
-            if (isSuccess) {
-                trackLockRequest("Granted", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
-                        dLockInfo, eLockInfo);
-            } else {
-                trackLockRequest("Failed", RequestType.TRY_LOCK, datasetId, entityHashValue, lockMode, txnContext,
-                        dLockInfo, eLockInfo);
-            }
-        }
-
-        unlatchLockTable();
-
-        return isSuccess;
-    }
-
-    private void trackLockRequest(String msg, int requestType, DatasetId datasetIdObj, int entityHashValue,
-            byte lockMode, TransactionContext txnContext, DatasetLockInfo dLockInfo, int eLockInfo) {
-        StringBuilder s = new StringBuilder();
-        LockRequest request = new LockRequest(Thread.currentThread().getName(), requestType, datasetIdObj,
-                entityHashValue, lockMode, txnContext);
-        s.append(Thread.currentThread().getId() + ":");
-        s.append(msg);
-        if (msg.equals("Granted")) {
-            if (dLockInfo != null) {
-                s.append("\t|D| ");
-                s.append(dLockInfo.getIXCount()).append(",");
-                s.append(dLockInfo.getISCount()).append(",");
-                s.append(dLockInfo.getXCount()).append(",");
-                s.append(dLockInfo.getSCount()).append(",");
-                if (dLockInfo.getFirstUpgrader() != -1) {
-                    s.append("+");
-                } else {
-                    s.append("-");
-                }
-                s.append(",");
-                if (dLockInfo.getFirstWaiter() != -1) {
-                    s.append("+");
-                } else {
-                    s.append("-");
-                }
-            }
-
-            if (eLockInfo != -1) {
-                s.append("\t|E| ");
-                s.append(entityLockInfoManager.getXCount(eLockInfo)).append(",");
-                s.append(entityLockInfoManager.getSCount(eLockInfo)).append(",");
-                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1) {
-                    s.append("+");
-                } else {
-                    s.append("-");
-                }
-                s.append(",");
-                if (entityLockInfoManager.getFirstWaiter(eLockInfo) != -1) {
-                    s.append("+");
-                } else {
-                    s.append("-");
-                }
-            }
-        }
-
-        lockRequestTracker.addEvent(s.toString(), request);
-        if (msg.equals("Requested")) {
-            lockRequestTracker.addRequest(request);
-        }
-        System.out.println(request.prettyPrint() + "--> " + s.toString());
-    }
-
-    public String getHistoryForAllJobs() {
-        if (IS_DEBUG_MODE) {
-            return lockRequestTracker.getHistoryForAllJobs();
-        }
-        return null;
-    }
-
-    public String getHistoryPerJob() {
-        if (IS_DEBUG_MODE) {
-            return lockRequestTracker.getHistoryPerJob();
-        }
-        return null;
-    }
-
-    public String getRequestHistoryForAllJobs() {
-        if (IS_DEBUG_MODE) {
-            return lockRequestTracker.getRequestHistoryForAllJobs();
-        }
-        return null;
-    }
-
-    private void revertTryLockDatasetGranuleOperation(DatasetId datasetId, int entityHashValue, byte lockMode,
-            int entityInfo, TransactionContext txnContext) {
-        JobId jobId = txnContext.getJobId();
-        DatasetLockInfo dLockInfo;
-        JobInfo jobInfo;
-        int lockCount;
-        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-
-        //see tryLockDatasetGranule() function to know the revert operation
-        switch (tryLockDatasetGranuleRevertOperation) {
-
-            case 1://[revertOperation1]: reverting 'adding a holder'
-
-                if (entityHashValue == -1) {
-                    dLockInfo.decreaseLockCount(datasetLockMode);
-                    dLockInfo.removeHolder(entityInfo, jobInfo); //--> this call removes entityInfo from JobInfo's holding-resource-list as well.
-                } else {
-                    dLockInfo.decreaseLockCount(datasetLockMode);
-                    jobInfo.removeHoldingResource(entityInfo);
-                }
-                entityInfoManager.decreaseDatasetLockCount(entityInfo);
-                if (jobInfo.getLastHoldingResource() == -1 && jobInfo.getFirstWaitingResource() == -1) {
-                    jobHT.remove(jobId);
-                }
-                entityInfoManager.deallocate(entityInfo);
-                break;
-
-            case 2://[revertOperation2]: reverting 'adding an upgrader'
-                lockCount = entityInfoManager.getDatasetLockCount(entityInfo);
-                if (entityHashValue == -1) { //dataset-granule lock
-                    dLockInfo.decreaseLockCount(LockMode.X, lockCount);
-                    dLockInfo.increaseLockCount(LockMode.S, lockCount);
-                } else {
-                    dLockInfo.decreaseLockCount(LockMode.IX, lockCount);
-                    dLockInfo.increaseLockCount(LockMode.IS, lockCount);
-                }
-                entityInfoManager.setDatasetLockMode(entityInfo, LockMode.S);
-                break;
-
-            case 3://[revertOperation3]: reverting 'adding a duplicated call'
-                entityInfoManager.decreaseDatasetLockCount(entityInfo);
-                datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo);
-                if (entityHashValue == -1) { //dataset-granule
-                    dLockInfo.decreaseLockCount(datasetLockMode);
-                } else { //entity-granule
-                    datasetLockMode = datasetLockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-                    dLockInfo.decreaseLockCount(datasetLockMode);
-                }
-
-                break;
-            default:
-                //do nothing;
-        }
-    }
-
-    private int tryLockDatasetGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
-            TransactionContext txnContext) throws ACIDException {
-        JobId jobId = txnContext.getJobId();
-        int jId = jobId.getId(); //int-type jobId
-        int dId = datasetId.getId(); //int-type datasetId
-        int waiterObjId;
-        int entityInfo = -1;
-        DatasetLockInfo dLockInfo;
-        JobInfo jobInfo;
-        boolean isUpgrade = false;
-        int weakerModeLockCount;
-        byte datasetLockMode = entityHashValue == -1 ? lockMode : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        jobInfo = jobHT.get(jobId);
-
-        //check duplicated call
-
-        //1. lock request causing duplicated upgrading requests from different threads in a same job
-        waiterObjId = dLockInfo.findUpgraderFromUpgraderList(jId, entityHashValue);
-        if (waiterObjId != -1) {
-            return -2;
-        }
-
-        //2. lock request causing duplicated waiting requests from different threads in a same job
-        waiterObjId = dLockInfo.findWaiterFromWaiterList(jId, entityHashValue);
-        if (waiterObjId != -1) {
-            return -2;
-        }
-
-        //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
-        entityInfo = dLockInfo.findEntityInfoFromHolderList(jId, entityHashValue);
-        if (entityInfo == -1) { //new call from this job -> doesn't mean that eLockInfo doesn't exist since another thread might have create the eLockInfo already.
-
-            //////////////////////////////////////////////////////////////////////////////////////
-            //[part of revertOperation1]
-            entityInfo = entityInfoManager.allocate(jId, dId, entityHashValue, lockMode);
-            if (jobInfo == null) {
-                jobInfo = new JobInfo(entityInfoManager, lockWaiterManager, txnContext);
-                jobHT.put(jobId, jobInfo);
-            }
-            //////////////////////////////////////////////////////////////////////////////////////
-
-            //return fail if any upgrader exists or upgrading lock mode is not compatible
-            if (dLockInfo.getFirstUpgrader() != -1 || dLockInfo.getFirstWaiter() != -1
-                    || !dLockInfo.isCompatible(datasetLockMode)) {
-
-                //[Notice]
-                //There has been no same caller as (jId, dId, entityHashValue) triplet.
-                //But there could be the same caller as (jId, dId) pair.
-                //For example, two requests (J1, D1, E1) and (J1, D1, E2) are considered as duplicated call in dataset-granule perspective.
-                //Therefore, the above duplicated call case is covered in the following code.
-                //find the same dataset-granule lock request, that is, (J1, D1) pair in the above example.
-                if (jobInfo.isDatasetLockGranted(dId, LockMode.IS)) {
-                    if (dLockInfo.isCompatible(datasetLockMode)) {
-                        //this is duplicated call
-                        entityInfoManager.increaseDatasetLockCount(entityInfo);
-                        if (entityHashValue == -1) {
-                            dLockInfo.increaseLockCount(datasetLockMode);
-                            dLockInfo.addHolder(entityInfo);
-                        } else {
-                            dLockInfo.increaseLockCount(datasetLockMode);
-                            //IS and IX holders are implicitly handled.
-                        }
-                        //add entityInfo to JobInfo's holding-resource list
-                        jobInfo.addHoldingResource(entityInfo);
-
-                        tryLockDatasetGranuleRevertOperation = 1;
-
-                        return entityInfo;
-                    }
-                }
-
-                //revert [part of revertOperation1] before return
-                if (jobInfo.getLastHoldingResource() == -1 && jobInfo.getFirstWaitingResource() == -1) {
-                    jobHT.remove(jobId);
-                }
-                entityInfoManager.deallocate(entityInfo);
-
-                return -2;
-            }
-
-            //////////////////////////////////////////////////////////////////////////////////////
-            //revert the following operations if the caller thread has to wait during this call.
-            //[revertOperation1]
-            entityInfoManager.increaseDatasetLockCount(entityInfo);
-            if (entityHashValue == -1) {
-                dLockInfo.increaseLockCount(datasetLockMode);
-                dLockInfo.addHolder(entityInfo);
-            } else {
-                dLockInfo.increaseLockCount(datasetLockMode);
-                //IS and IX holders are implicitly handled.
-            }
-            //add entityInfo to JobInfo's holding-resource list
-            jobInfo.addHoldingResource(entityInfo);
-
-            //set revert operation to be reverted when tryLock() fails
-            tryLockDatasetGranuleRevertOperation = 1;
-            //////////////////////////////////////////////////////////////////////////////////////
-
-        } else {
-            isUpgrade = isLockUpgrade(entityInfoManager.getDatasetLockMode(entityInfo), lockMode);
-            if (isUpgrade) { //upgrade call 
-                //return fail if any upgrader exists or upgrading lock mode is not compatible
-                if (dLockInfo.getFirstUpgrader() != -1 || !dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)) {
-                    return -2;
-                }
-
-                //update entityInfo's dataset lock count and datasetLockInfo's lock count
-                weakerModeLockCount = entityInfoManager.getDatasetLockCount(entityInfo);
-
-                //////////////////////////////////////////////////////////////////////////////////////
-                //revert the following operations if the caller thread has to wait during this call.
-                //[revertOperation2]
-                entityInfoManager.setDatasetLockMode(entityInfo, lockMode);
-
-                if (entityHashValue == -1) { //dataset-granule lock
-                    dLockInfo.increaseLockCount(LockMode.X, weakerModeLockCount);//new lock mode
-                    dLockInfo.decreaseLockCount(LockMode.S, weakerModeLockCount);//current lock mode
-                } else {
-                    dLockInfo.increaseLockCount(LockMode.IX, weakerModeLockCount);
-                    dLockInfo.decreaseLockCount(LockMode.IS, weakerModeLockCount);
-                }
-                tryLockDatasetGranuleRevertOperation = 2;
-                //////////////////////////////////////////////////////////////////////////////////////
-
-            } else { //duplicated call
-
-                //////////////////////////////////////////////////////////////////////////////////////
-                //revert the following operations if the caller thread has to wait during this call.
-                //[revertOperation3]
-                entityInfoManager.increaseDatasetLockCount(entityInfo);
-                datasetLockMode = entityInfoManager.getDatasetLockMode(entityInfo);
-
-                if (entityHashValue == -1) { //dataset-granule
-                    dLockInfo.increaseLockCount(datasetLockMode);
-                } else { //entity-granule
-                    datasetLockMode = datasetLockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-                    dLockInfo.increaseLockCount(datasetLockMode);
-                }
-
-                tryLockDatasetGranuleRevertOperation = 3;
-                //////////////////////////////////////////////////////////////////////////////////////
-
-            }
-        }
-
-        return entityInfo;
-    }
-
-    private boolean tryLockEntityGranule(DatasetId datasetId, int entityHashValue, byte lockMode,
-            int entityInfoFromDLockInfo, TransactionContext txnContext) throws ACIDException {
-        JobId jobId = txnContext.getJobId();
-        int jId = jobId.getId(); //int-type jobId
-        int waiterObjId;
-        int eLockInfo = -1;
-        int entityInfo;
-        DatasetLockInfo dLockInfo;
-        boolean isUpgrade = false;
-        int weakerModeLockCount;
-
-        dLockInfo = datasetResourceHT.get(datasetId);
-        eLockInfo = dLockInfo.getEntityResourceHT().get(entityHashValue);
-
-        if (eLockInfo != -1) {
-            //check duplicated call
-
-            //1. lock request causing duplicated upgrading requests from different threads in a same job
-            waiterObjId = entityLockInfoManager.findUpgraderFromUpgraderList(eLockInfo, jId, entityHashValue);
-            if (waiterObjId != -1) {
-                return false;
-            }
-
-            //2. lock request causing duplicated waiting requests from different threads in a same job
-            waiterObjId = entityLockInfoManager.findWaiterFromWaiterList(eLockInfo, jId, entityHashValue);
-            if (waiterObjId != -1) {
-                return false;
-            }
-
-            //3. lock request causing duplicated holding requests from different threads or a single thread in a same job
-            entityInfo = entityLockInfoManager.findEntityInfoFromHolderList(eLockInfo, jId, entityHashValue);
-            if (entityInfo != -1) {//duplicated call or upgrader
-
-                isUpgrade = isLockUpgrade(entityInfoManager.getEntityLockMode(entityInfo), lockMode);
-                if (isUpgrade) {//upgrade call
-                    //wait if any upgrader exists or upgrading lock mode is not compatible
-                    if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
-                            || !entityLockInfoManager.isUpgradeCompatible(eLockInfo, lockMode, entityInfo)) {
-                        return false;
-                    }
-
-                    weakerModeLockCount = entityInfoManager.getEntityLockCount(entityInfo);
-                    entityInfoManager.setEntityLockMode(entityInfo, lockMode);
-
-                    entityLockInfoManager.increaseLockCount(eLockInfo, LockMode.X, (short) weakerModeLockCount);//new lock mode
-                    entityLockInfoManager.decreaseLockCount(eLockInfo, LockMode.S, (short) weakerModeLockCount);//old lock mode
-
-                } else {//duplicated call
-                    entityInfoManager.increaseEntityLockCount(entityInfo);
-                    entityLockInfoManager.increaseLockCount(eLockInfo, entityInfoManager.getEntityLockMode(entityInfo));
-                }
-            } else {//new call from this job, but still eLockInfo exists since other threads hold it or wait on it
-                entityInfo = entityInfoFromDLockInfo;
-                if (entityLockInfoManager.getUpgrader(eLockInfo) != -1
-                        || entityLockInfoManager.getFirstWaiter(eLockInfo) != -1
-                        || !entityLockInfoManager.isCompatible(eLockInfo, lockMode)) {
-                    return false;
-                }
-
-                entityInfoManager.increaseEntityLockCount(entityInfo);
-                entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
-                entityLockInfoManager.addHolder(eLockInfo, entityInfo);
-            }
-        } else {//eLockInfo doesn't exist, so this lock request is the first request and can be granted without waiting.
-            eLockInfo = entityLockInfoManager.allocate();
-            dLockInfo.getEntityResourceHT().put(entityHashValue, eLockInfo);
-            entityInfoManager.increaseEntityLockCount(entityInfoFromDLockInfo);
-            entityLockInfoManager.increaseLockCount(eLockInfo, lockMode);
-            entityLockInfoManager.addHolder(eLockInfo, entityInfoFromDLockInfo);
-        }
-
-        return true;
-    }
-
-    private void latchLockTable() {
-        lockTableLatch.writeLock().lock();
-    }
-
-    private void unlatchLockTable() {
-        lockTableLatch.writeLock().unlock();
-    }
-
-    private void latchWaitNotify() {
-        waiterLatch.writeLock().lock();
-    }
-
-    private void unlatchWaitNotify() {
-        waiterLatch.writeLock().unlock();
-    }
-
-    private int handleLockWaiter(DatasetLockInfo dLockInfo, int eLockInfo, int entityInfo, boolean isUpgrade,
-            boolean isDatasetLockInfo, TransactionContext txnContext, JobInfo jobInfo, int duplicatedWaiterObjId)
-            throws ACIDException {
-        int waiterId = -1;
-        LockWaiter waiter;
-        int waiterCount = 0;
-        boolean isInterruptedExceptionOccurred = false;
-
-        if (duplicatedWaiterObjId != -1
-                || isDeadlockFree(dLockInfo, eLockInfo, entityInfo, isDatasetLockInfo, isUpgrade)) {//deadlock free -> wait
-            if (duplicatedWaiterObjId == -1) {
-                waiterId = lockWaiterManager.allocate(); //initial value of waiterObj: wait = true, victim = false
-                waiter = lockWaiterManager.getLockWaiter(waiterId);
-                waiter.setEntityInfoSlot(entityInfo);
-                jobInfo.addWaitingResource(waiterId);
-                waiter.setBeginWaitTime(System.currentTimeMillis());
-            } else {
-                waiterId = duplicatedWaiterObjId;
-                waiter = lockWaiterManager.getLockWaiter(waiterId);
-            }
-
-            if (duplicatedWaiterObjId == -1) {
-                //add actor properly
-                if (isDatasetLockInfo) {
-                    waiter.setWaitingOnEntityLock(false);
-                    if (isUpgrade) {
-                        dLockInfo.addUpgrader(waiterId);
-                        waiter.setWaiter(false);
-                    } else {
-                        dLockInfo.addWaiter(waiterId);
-                        waiter.setWaiter(true);
-                    }
-                } else {
-                    waiter.setWaitingOnEntityLock(true);
-                    if (isUpgrade) {
-                        waiter.setWaiter(false);
-                        entityLockInfoManager.addUpgrader(eLockInfo, waiterId);
-                    } else {
-                        waiter.setWaiter(true);
-                        entityLockInfoManager.addWaiter(eLockInfo, waiterId);
-                    }
-                }
-            }
-            waiter.increaseWaiterCount();
-            waiter.setFirstGetUp(true);
-
-            latchWaitNotify();
-            unlatchLockTable();
-            synchronized (waiter) {
-                unlatchWaitNotify();
-                while (waiter.needWait()) {
-                    try {
-                        if (IS_DEBUG_MODE) {
-                            System.out.println("" + Thread.currentThread().getName() + "\twaits("
-                                    + waiter.getWaiterCount() + "): WID(" + waiterId + "),EID("
-                                    + waiter.getEntityInfoSlot() + ")");
-                        }
-                        waiter.wait();
-                    } catch (InterruptedException e) {
-                        //TODO figure-out what is the appropriate way to handle this exception
-                        e.printStackTrace();
-                        isInterruptedExceptionOccurred = true;
-                        waiter.setWait(false);
-                    }
-                }
-            }
-
-            if (isInterruptedExceptionOccurred) {
-                throw new ACIDException("InterruptedException is caught");
-            }
-
-            //waiter woke up -> remove/deallocate waiter object and abort if timeout
-            latchLockTable();
-
-            if (txnContext.getStatus() == TransactionContext.TIMED_OUT_STATUS || waiter.isVictim()) {
-                try {
-                    requestAbort(txnContext);
-                } finally {
-                    unlatchLockTable();
-                }
-            }
-
-            if (waiter.isFirstGetUp()) {
-                waiter.setFirstGetUp(false);
-                waiterCount = waiter.getWaiterCount();
-            } else {
-                waiterCount = 0;
-            }
-
-            waiter.decreaseWaiterCount();
-            if (IS_DEBUG_MODE) {
-                System.out.println("" + Thread.currentThread().getName() + "\tgot-up!(" + waiter.getWaiterCount()
-                        + "): WID(" + waiterId + "),EID(" + waiter.getEntityInfoSlot() + ")");
-            }
-            if (waiter.getWaiterCount() == 0) {
-                //remove actor properly
-                if (isDatasetLockInfo) {
-                    if (isUpgrade) {
-                        dLockInfo.removeUpgrader(waiterId);
-                    } else {
-                        dLockInfo.removeWaiter(waiterId);
-                    }
-                } else {
-                    if (isUpgrade) {
-                        entityLockInfoManager.removeUpgrader(eLockInfo, waiterId);
-                    } else {
-                        entityLockInfoManager.removeWaiter(eLockInfo, waiterId);
-                    }
-                }
-
-                //if (!isUpgrade && isDatasetLockInfo) {
-                jobInfo.removeWaitingResource(waiterId);
-                //}
-                lockWaiterManager.deallocate(waiterId);
-            }
-
-        } else { //deadlock -> abort
-            //[Notice]
-            //Before requesting abort, the entityInfo for waiting datasetLock request is deallocated.
-            if (!isUpgrade && isDatasetLockInfo) {
-                //deallocate the entityInfo
-                entityInfoManager.deallocate(entityInfo);
-            }
-            try {
-                requestAbort(txnContext);
-            } finally {
-                unlatchLockTable();
-            }
-        }
-
-        return waiterCount;
-    }
-
-    private boolean isDeadlockFree(DatasetLockInfo dLockInfo, int eLockInfo, int entityInfo, boolean isDatasetLockInfo,
-            boolean isUpgrade) {
-        return deadlockDetector.isSafeToAdd(dLockInfo, eLockInfo, entityInfo, isDatasetLockInfo, isUpgrade);
-    }
-
-    private void requestAbort(TransactionContext txnContext) throws ACIDException {
-        txnContext.setStatus(TransactionContext.TIMED_OUT_STATUS);
-        txnContext.setStartWaitTime(TransactionContext.INVALID_TIME);
-        throw new ACIDException("Transaction " + txnContext.getJobId()
-                + " should abort (requested by the Lock Manager)");
-    }
-
-    /**
-     * For now, upgrading lock granule from entity-granule to dataset-granule is not supported!!
-     * 
-     * @param fromLockMode
-     * @param toLockMode
-     * @return
-     */
-    private boolean isLockUpgrade(byte fromLockMode, byte toLockMode) {
-        return fromLockMode == LockMode.S && toLockMode == LockMode.X;
-    }
-
-    /**
-     * wake up upgraders first, then waiters.
-     * Criteria to wake up upgraders: if the upgrading lock mode is compatible, then wake up the upgrader.
-     */
-    private void wakeUpDatasetLockWaiters(DatasetLockInfo dLockInfo) {
-        int waiterObjId = dLockInfo.getFirstUpgrader();
-        int entityInfo;
-        LockWaiter waiterObj;
-        byte datasetLockMode;
-        byte lockMode;
-        boolean areAllUpgradersAwaken = true;
-
-        consecutiveWakeupContext.reset();
-        while (waiterObjId != -1) {
-            //wake up upgraders
-            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-            entityInfo = waiterObj.getEntityInfoSlot();
-            datasetLockMode = entityInfoManager.getPKHashVal(entityInfo) == -1 ? LockMode.X : LockMode.IX;
-            if (dLockInfo.isUpgradeCompatible(datasetLockMode, entityInfo)
-                    && consecutiveWakeupContext.isCompatible(datasetLockMode)) {
-                consecutiveWakeupContext.setLockMode(datasetLockMode);
-                //compatible upgrader is waken up
-                latchWaitNotify();
-                synchronized (waiterObj) {
-                    unlatchWaitNotify();
-                    waiterObj.setWait(false);
-                    if (IS_DEBUG_MODE) {
-                        System.out.println("" + Thread.currentThread().getName() + "\twake-up(D): WID(" + waiterObjId
-                                + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
-                    }
-                    waiterObj.notifyAll();
-                }
-                waiterObjId = waiterObj.getNextWaiterObjId();
-            } else {
-                areAllUpgradersAwaken = false;
-                break;
-            }
-        }
-
-        if (areAllUpgradersAwaken) {
-            //wake up waiters
-            waiterObjId = dLockInfo.getFirstWaiter();
-            while (waiterObjId != -1) {
-                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-                entityInfo = waiterObj.getEntityInfoSlot();
-                lockMode = entityInfoManager.getDatasetLockMode(entityInfo);
-                datasetLockMode = entityInfoManager.getPKHashVal(entityInfo) == -1 ? lockMode
-                        : lockMode == LockMode.S ? LockMode.IS : LockMode.IX;
-                if (dLockInfo.isCompatible(datasetLockMode) && consecutiveWakeupContext.isCompatible(datasetLockMode)) {
-                    consecutiveWakeupContext.setLockMode(datasetLockMode);
-                    //compatible waiter is waken up
-                    latchWaitNotify();
-                    synchronized (waiterObj) {
-                        unlatchWaitNotify();
-                        waiterObj.setWait(false);
-                        if (IS_DEBUG_MODE) {
-                            System.out.println("" + Thread.currentThread().getName() + "\twake-up(D): WID("
-                                    + waiterObjId + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
-                        }
-                        waiterObj.notifyAll();
-                    }
-                    waiterObjId = waiterObj.getNextWaiterObjId();
-                } else {
-                    break;
-                }
-            }
-        }
-    }
-
-    private void wakeUpEntityLockWaiters(int eLockInfo) {
-        boolean areAllUpgradersAwaken = true;
-        int waiterObjId = entityLockInfoManager.getUpgrader(eLockInfo);
-        int entityInfo;
-        LockWaiter waiterObj;
-        byte entityLockMode;
-
-        consecutiveWakeupContext.reset();
-        while (waiterObjId != -1) {
-            //wake up upgraders
-            waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-            entityInfo = waiterObj.getEntityInfoSlot();
-            if (entityLockInfoManager.isUpgradeCompatible(eLockInfo, LockMode.X, entityInfo)
-                    && consecutiveWakeupContext.isCompatible(LockMode.X)) {
-                consecutiveWakeupContext.setLockMode(LockMode.X);
-                latchWaitNotify();
-                synchronized (waiterObj) {
-                    unlatchWaitNotify();
-                    waiterObj.setWait(false);
-                    if (IS_DEBUG_MODE) {
-                        System.out.println("" + Thread.currentThread().getName() + "\twake-up(E): WID(" + waiterObjId
-                                + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
-                    }
-                    waiterObj.notifyAll();
-                }
-                waiterObjId = waiterObj.getNextWaiterObjId();
-            } else {
-                areAllUpgradersAwaken = false;
-                break;
-            }
-        }
-
-        if (areAllUpgradersAwaken) {
-            //wake up waiters
-            waiterObjId = entityLockInfoManager.getFirstWaiter(eLockInfo);
-            while (waiterObjId != -1) {
-                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-                entityInfo = waiterObj.getEntityInfoSlot();
-                entityLockMode = entityInfoManager.getEntityLockMode(entityInfo);
-                if (entityLockInfoManager.isCompatible(eLockInfo, entityLockMode)
-                        && consecutiveWakeupContext.isCompatible(entityLockMode)) {
-                    consecutiveWakeupContext.setLockMode(entityLockMode);
-                    //compatible waiter is waken up
-                    latchWaitNotify();
-                    synchronized (waiterObj) {
-                        unlatchWaitNotify();
-                        waiterObj.setWait(false);
-                        if (IS_DEBUG_MODE) {
-                            System.out.println("" + Thread.currentThread().getName() + "\twake-up(E): WID("
-                                    + waiterObjId + "),EID(" + waiterObj.getEntityInfoSlot() + ")");
-                        }
-                        waiterObj.notifyAll();
-                    }
-                } else {
-                    break;
-                }
-                waiterObjId = waiterObj.getNextWaiterObjId();
-            }
-        }
-    }
-
-    @Override
-    public String prettyPrint() throws ACIDException {
-        StringBuilder s = new StringBuilder("\n########### LockManager Status #############\n");
-        return s + "\n";
-    }
-
-    public void sweepForTimeout() throws ACIDException {
-        JobInfo jobInfo;
-        int waiterObjId;
-        LockWaiter waiterObj;
-
-        latchLockTable();
-
-        Iterator<Entry<JobId, JobInfo>> iter = jobHT.entrySet().iterator();
-        while (iter.hasNext()) {
-            Map.Entry<JobId, JobInfo> pair = (Map.Entry<JobId, JobInfo>) iter.next();
-            jobInfo = pair.getValue();
-            waiterObjId = jobInfo.getFirstWaitingResource();
-            while (waiterObjId != -1) {
-                waiterObj = lockWaiterManager.getLockWaiter(waiterObjId);
-                toutDetector.checkAndSetVictim(waiterObj);
-                waiterObjId = waiterObj.getNextWaiterObjId();
-            }
-        }
-
-        unlatchLockTable();
-    }
-}
-
-class ConsecutiveWakeupContext {
-    private boolean IS;
-    private boolean IX;
-    private boolean S;
-    private boolean X;
-
-    public void reset() {
-        IS = false;
-        IX = false;
-        S = false;
-        X = false;
-    }
-
-    public boolean isCompatible(byte lockMode) {
-        switch (lockMode) {
-            case LockMode.IX:
-                return !S && !X;
-
-            case LockMode.IS:
-                return !X;
-
-            case LockMode.X:
-                return !IS && !IX && !S && !X;
-
-            case LockMode.S:
-                return !IX && !X;
-
-            default:
-                throw new IllegalStateException("Invalid upgrade lock mode");
-        }
-    }
-
-    public void setLockMode(byte lockMode) {
-        switch (lockMode) {
-            case LockMode.IX:
-                IX = true;
-                return;
-
-            case LockMode.IS:
-                IS = true;
-                return;
-
-            case LockMode.X:
-                X = true;
-                return;
-
-            case LockMode.S:
-                S = true;
-                return;
-
-            default:
-                throw new IllegalStateException("Invalid lock mode");
-        }
-
-    }
-
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
deleted file mode 100644
index 4e96d2e..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManager.java
+++ /dev/null
@@ -1,981 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.transaction.management.service.logging;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.RandomAccessFile;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.service.logging.IndexLogger.ReusableLogContentObject;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogManager.PageOwnershipStatus;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogManager.PageState;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-
-public class LogManager implements ILogManager {
-
-    public static final boolean IS_DEBUG_MODE = false;//true
-    private static final Logger LOGGER = Logger.getLogger(LogManager.class.getName());
-    private final TransactionSubsystem provider;
-    private LogManagerProperties logManagerProperties;
-    private LogPageFlushThread logPageFlusher;
-
-    /*
-     * the array of log pages. The number of log pages is configurable. Pages
-     * taken together form an in-memory log buffer.
-     */
-    private IFileBasedBuffer[] logPages;
-
-    private ILogRecordHelper logRecordHelper;
-
-    /*
-     * Number of log pages that constitute the in-memory log buffer.
-     */
-    private int numLogPages;
-
-    /*
-     * Initially all pages have an owner count of 1 that is the LogManager. When
-     * a transaction requests to write in a log page, the owner count is
-     * incremented. The log manager reserves space in the log page and puts in
-     * the log header but leaves the space for the content and the checksum
-     * (covering the whole log record). When the content has been put, the log
-     * manager computes the checksum and puts it after the content. At this
-     * point, the ownership count is decremented as the transaction is done with
-     * using the page. When a page is requested to be flushed, logPageFlusher
-     * set the count to 0(LOG_FLUSHER: meaning that the page is being flushed)
-     * only if the count is 1(LOG_WRITER: meaning that there is no other
-     * transactions who own the page to write logs.) After flushing the page,
-     * logPageFlusher set this count to 1.
-     */
-    private AtomicInteger[] logPageOwnerCount;
-
-    static class PageOwnershipStatus {
-        public static final int LOG_WRITER = 1;
-        public static final int LOG_FLUSHER = 0;
-    }
-
-    /*
-     * LogPageStatus: A page is either ACTIVE or INACTIVE. The status for each
-     * page is maintained in logPageStatus. A page is ACTIVE when the LogManager
-     * can allocate space in the page for writing a log record. Initially all
-     * pages are ACTIVE. As transactions fill up space by writing log records, a
-     * page may not have sufficient space left for serving a request by a
-     * transaction. When this happens, the page is flushed to disk by calling
-     * logPageFlusher.requestFlush(). In the requestFlush(), after
-     * groupCommitWaitTime, the page status is set to INACTIVE. Then, there is
-     * no more writer on the page(meaning the corresponding logPageOwnerCount is
-     * 1), the page is flushed by the logPageFlusher and the status is reset to
-     * ACTIVE by the logPageFlusher.
-     */
-    private AtomicInteger[] logPageStatus;
-
-    static class PageState {
-        public static final int INACTIVE = 0;
-        public static final int ACTIVE = 1;
-    }
-
-    private AtomicLong lastFlushedLSN = new AtomicLong(-1);
-
-    /*
-     * When the transaction eco-system comes to life, the log manager positions
-     * itself to the end of the last written log. the startingLsn represent the
-     * lsn value of the next log record to be written after a system (re)start.
-     * The value is zero when the system is starting for the first time.
-     */
-    private long startingLSN = 0;
-
-    /*
-     * lsn represents the monotonically increasing long value that can be broken
-     * down into a file id and an offset within a log file.
-     */
-    private AtomicLong lsn = new AtomicLong(0);
-
-    private List<HashMap<TransactionContext, Integer>> activeTxnCountMaps;
-
-    public void addFlushRequest(int pageIndex, long lsn, boolean isSynchronous) {
-        logPageFlusher.requestFlush(pageIndex, lsn, isSynchronous);
-    }
-
-    public AtomicLong getLastFlushedLsn() {
-        return lastFlushedLSN;
-    }
-
-    public AtomicInteger getLogPageStatus(int pageIndex) {
-        return logPageStatus[pageIndex];
-    }
-
-    public AtomicLong getCurrentLsn() {
-        return lsn;
-    }
-
-    public long incrementLastFlushedLsn(long delta) {
-        return lastFlushedLSN.addAndGet(delta);
-    }
-
-    public LogManager(TransactionSubsystem provider) throws ACIDException {
-        this.provider = provider;
-        initLogManagerProperties(this.provider.getId());
-        initLogManager();
-    }
-
-    public LogManager(TransactionSubsystem provider, String nodeId) throws ACIDException {
-        this.provider = provider;
-        initLogManagerProperties(nodeId);
-        initLogManager();
-    }
-
-    /*
-     * initialize the log manager properties either from the configuration file
-     * on disk or with default values
-     */
-    private void initLogManagerProperties(String nodeId) throws ACIDException {
-        LogManagerProperties logProperties = null;
-        InputStream is = null;
-        try {
-            is = this.getClass().getClassLoader()
-                    .getResourceAsStream(TransactionManagementConstants.LogManagerConstants.LOG_CONF_FILE);
-
-            Properties p = new Properties();
-
-            if (is != null) {
-                p.load(is);
-            }
-            logProperties = new LogManagerProperties(p, nodeId);
-
-        } catch (IOException ioe) {
-            if (is != null) {
-                try {
-                    is.close();
-                } catch (IOException e) {
-                    throw new ACIDException("unable to close input stream ", e);
-                }
-            }
-        }
-        logManagerProperties = logProperties;
-    }
-
-    private void initLogManager() throws ACIDException {
-        logRecordHelper = new LogRecordHelper(this);
-        numLogPages = logManagerProperties.getNumLogPages();
-        logPageOwnerCount = new AtomicInteger[numLogPages];
-        logPageStatus = new AtomicInteger[numLogPages];
-
-        activeTxnCountMaps = new ArrayList<HashMap<TransactionContext, Integer>>(numLogPages);
-        for (int i = 0; i < numLogPages; i++) {
-            activeTxnCountMaps.add(new HashMap<TransactionContext, Integer>());
-        }
-
-        logPages = new FileBasedBuffer[numLogPages];
-
-        /*
-         * place the log anchor at the end of the last log record written.
-         */
-        PhysicalLogLocator nextPhysicalLsn = initLSN();
-
-        /*
-         * initialize meta data for each log page.
-         */
-        for (int i = 0; i < numLogPages; i++) {
-            logPageOwnerCount[i] = new AtomicInteger(PageOwnershipStatus.LOG_WRITER);
-            logPageStatus[i] = new AtomicInteger(PageState.ACTIVE);
-        }
-
-        /*
-         * initialize the log pages.
-         */
-        initializeLogPages(nextPhysicalLsn);
-
-        /*
-         * Instantiate and begin the LogFlusher thread. The Log Flusher thread
-         * is responsible for putting log pages to disk. It is configured as a
-         * daemon thread so that it does not stop the JVM from exiting when all
-         * other threads are done with their work.
-         */
-        logPageFlusher = new LogPageFlushThread(this);
-        logPageFlusher.setDaemon(true);
-        logPageFlusher.start();
-    }
-
-    public int getLogPageIndex(long lsnValue) {
-        return (int) ((lsnValue - startingLSN) / logManagerProperties.getLogPageSize()) % numLogPages;
-
-    }
-
-    /*
-     * given a lsn, get the file id where the corresponding log record is
-     * located.
-     */
-    public int getLogFileId(long lsnValue) {
-        return (int) ((lsnValue) / logManagerProperties.getLogPartitionSize());
-
-    }
-
-    /*
-     * given a lsn, get the offset within a log page where the corresponding log
-     * record is (to be) placed.
-     */
-    public int getLogPageOffset(long lsnValue) {
-        return (int) (lsnValue - startingLSN) % logManagerProperties.getLogPageSize();
-    }
-
-    /*
-     * a transaction thread under certain scenarios is required to wait until
-     * the page where it has to write a log record becomes available for writing
-     * a log record.
-     */
-    private void waitUntillPageIsAvailableForWritingLog(int pageIndex) throws ACIDException {
-        if (logPageStatus[pageIndex].get() == PageState.ACTIVE
-                && logPageOwnerCount[pageIndex].get() >= PageOwnershipStatus.LOG_WRITER) {
-            return;
-        }
-        try {
-            synchronized (logPages[pageIndex]) {
-                while (!(logPageStatus[pageIndex].get() == PageState.ACTIVE && logPageOwnerCount[pageIndex].get() >= PageOwnershipStatus.LOG_WRITER)) {
-                    logPages[pageIndex].wait();
-                }
-            }
-        } catch (InterruptedException e) {
-            throw new ACIDException(" thread interrupted while waiting for page " + pageIndex + " to be available ", e);
-        }
-    }
-
-    /*
-     * The method that reserves the space for a transaction to write log record
-     * in the log buffer. Note that the method is not synchronized for
-     * performance reasons as we do not want transactions to be blocked by each
-     * other when writing log records.
-     * 
-     * @param entrySize: the requested space.
-     * 
-     * @param logType: the type of log record.
-     */
-    private long getLsn(int entrySize, byte logType) throws ACIDException {
-        long pageSize = logManagerProperties.getLogPageSize();
-
-        while (true) {
-            boolean forwardPage = false;
-            long old = lsn.get();
-
-            // get the log page corresponding to the current lsn value
-            int pageIndex = getLogPageIndex(old);
-            long retVal = old;
-
-            // the lsn value for the next request if the current request is
-            // served.
-            long next = old + entrySize;
-            int prevPage = -1;
-
-            // check if the log record will cross page boundaries, a case that
-            // is not allowed.
-            if ((next - 1) / pageSize != old / pageSize || (next % pageSize == 0)) {
-
-                if ((old != 0 && old % pageSize == 0)) {
-                    // On second thought, this shall never be the case as it
-                    // means that the lsn is
-                    // currently at the beginning of a page and we still need to
-                    // forward the page which
-                    // means that the entrySize exceeds a log page size. If this
-                    // is the case, an
-                    // exception is thrown before calling this API. would remove
-                    // this case.
-                    retVal = old;
-
-                } else {
-                    // set the lsn to point to the beginning of the next page.
-                    retVal = ((old / pageSize) + 1) * pageSize;
-                }
-
-                next = retVal;
-
-                // as the log record shall cross log page boundary, we must
-                // re-assign the lsn so
-                // that the log record begins on a different location.
-                forwardPage = true;
-
-                prevPage = pageIndex;
-                pageIndex = getNextPageInSequence(pageIndex);
-            }
-
-            /*
-             * we do not want to keep allocating LSNs if the corresponding page
-             * is unavailable. Consider a scenario when the log flusher thread
-             * is incredibly slow in flushing pages. Transaction threads will
-             * acquire an lsn each for writing their next log record. When a
-             * page has been made available, mulltiple transaction threads that
-             * were waiting can continue to write their log record at the
-             * assigned LSNs. Two transaction threads may get LSNs that are on
-             * the same log page but actually differ by the size of the log
-             * buffer. This would be erroneous. Transaction threads are made to
-             * wait upfront for avoiding this situation.
-             */
-            waitUntillPageIsAvailableForWritingLog(pageIndex);
-
-            if (!lsn.compareAndSet(old, next)) {
-                // Atomic call -> returns true only when the value represented
-                // by lsn is same as
-                // "old". The value is updated to "next".
-                continue;
-            }
-
-            if (forwardPage) {
-                addFlushRequest(prevPage, old, false);
-
-                // The transaction thread that discovers the need to forward a
-                // page is made to re-acquire a lsn.
-                continue;
-
-            } else {
-                // the transaction thread has been given a space in a log page,
-                // but is made to wait until the page is available.
-                // (Is this needed? when does this wait happen?)
-                waitUntillPageIsAvailableForWritingLog(pageIndex);
-
-                // increment the counter as the transaction thread now holds a
-                // space in the log page and hence is an owner.
-                logPageOwnerCount[pageIndex].incrementAndGet();
-
-                // Before the count is incremented, if the flusher flushed the
-                // allocated page,
-                // then retry to get new LSN. Otherwise, the log with allocated
-                // lsn will be lost.
-                if (lastFlushedLSN.get() >= retVal) {
-                    logPageOwnerCount[pageIndex].decrementAndGet();
-                    continue;
-                }
-            }
-
-            return retVal;
-        }
-    }
-
-    @Override
-    public void log(byte logType, TransactionContext txnCtx, int datasetId, int PKHashValue, long resourceId,
-            byte resourceMgrId, int logContentSize, ReusableLogContentObject reusableLogContentObject, ILogger logger,
-            LogicalLogLocator logicalLogLocator) throws ACIDException {
-
-        HashMap<TransactionContext, Integer> map = null;
-        int activeTxnCount;
-
-        // logLocator is a re-usable object that is appropriately set in each
-        // invocation.
-        // If the reference is null, the log manager must throw an exception.
-        if (logicalLogLocator == null) {
-            throw new ACIDException(
-                    " you need to pass in a non-null logLocator, if you dont have it, then pass in a dummy so that the +"
-                            + "log manager can set it approporiately for you");
-        }
-
-        // compute the total log size including the header and the checksum.
-        int totalLogSize = logRecordHelper.getLogRecordSize(logType, logContentSize);
-
-        // check for the total space requirement to be less than a log page.
-        if (totalLogSize > logManagerProperties.getLogPageSize()) {
-            throw new ACIDException(
-                    " Maximum Log Content Size is "
-                            + (logManagerProperties.getLogPageSize() - logRecordHelper.getLogHeaderSize(LogType.UPDATE) - logRecordHelper
-                                    .getLogChecksumSize()));
-        }
-
-        // all constraints checked and we are good to go and acquire a lsn.
-        long previousLSN = -1;
-
-        // the will be set to the location (a long value) where the log record
-        // needs to be placed.
-        long currentLSN;
-
-        // The logs written by a transaction need to be linked to each other for
-        // a successful rollback/recovery. However there could be multiple
-        // threads operating concurrently that are part of a common transaction.
-        // These threads need to synchronize and record the lsn corresponding to
-        // the last log record written by (any thread of) the transaction.
-        synchronized (txnCtx) {
-            previousLSN = txnCtx.getLastLogLocator().getLsn();
-            currentLSN = getLsn(totalLogSize, logType);
-            txnCtx.setLastLSN(currentLSN);
-            if (IS_DEBUG_MODE) {
-                System.out.println("--------------> LSN(" + currentLSN + ") is allocated");
-            }
-            logicalLogLocator.setLsn(currentLSN);
-        }
-
-        /*
-         * At this point, the transaction thread has obtained reserved space for
-         * writing the log record. In doing so, it has acquired (shared)
-         * ownership of the log page. All subsequent actions are under a try
-         * catch block so that if any exception is encountered, a clean can be
-         * performed correctly that is ownership is released.
-         */
-
-        // indicates if the transaction thread has release ownership of the
-        // page.
-        boolean decremented = false;
-
-        int pageIndex = (int) getLogPageIndex(currentLSN);
-
-        // the lsn has been obtained for the log record. need to set the
-        // LogLocator instance accordingly.
-        try {
-            logicalLogLocator.setBuffer(logPages[pageIndex]);
-            int pageOffset = getLogPageOffset(currentLSN);
-            logicalLogLocator.setMemoryOffset(pageOffset);
-
-            // write the log header.
-            logRecordHelper.writeLogHeader(logicalLogLocator, logType, txnCtx, datasetId, PKHashValue, previousLSN,
-                    resourceId, resourceMgrId, logContentSize);
-
-            // increment the offset so that the transaction can fill up the
-            // content in the correct region of the allocated space.
-            logicalLogLocator.increaseMemoryOffset(logRecordHelper.getLogHeaderSize(logType));
-
-            // a COMMIT log record does not have any content and hence
-            // the logger (responsible for putting the log content) is not
-            // invoked.
-            if (logContentSize != 0) {
-                logger.preLog(txnCtx, reusableLogContentObject);
-            }
-
-            if (logContentSize != 0) {
-                // call the logger implementation and ask to fill in the log
-                // record content at the allocated space.
-                logger.log(txnCtx, logicalLogLocator, logContentSize, reusableLogContentObject);
-                logger.postLog(txnCtx, reusableLogContentObject);
-                if (IS_DEBUG_MODE) {
-                    logicalLogLocator.setMemoryOffset(logicalLogLocator.getMemoryOffset()
-                            - logRecordHelper.getLogHeaderSize(logType));
-                    System.out.println(logRecordHelper.getLogRecordForDisplay(logicalLogLocator));
-                    logicalLogLocator.increaseMemoryOffset(logRecordHelper.getLogHeaderSize(logType));
-                }
-            }
-
-            // The log record has been written. For integrity checks, compute
-            // the checksum and put it at the end of the log record.
-            int startPosChecksum = logicalLogLocator.getMemoryOffset() - logRecordHelper.getLogHeaderSize(logType);
-            int length = totalLogSize - logRecordHelper.getLogChecksumSize();
-            long checksum = DataUtil.getChecksum(logPages[pageIndex], startPosChecksum, length);
-            logPages[pageIndex].writeLong(pageOffset + logRecordHelper.getLogHeaderSize(logType) + logContentSize,
-                    checksum);
-
-            if (IS_DEBUG_MODE) {
-                System.out.println("--------------> LSN(" + currentLSN + ") is written");
-            }
-
-            // release the ownership as the log record has been placed in
-            // created space.
-            logPageOwnerCount[pageIndex].decrementAndGet();
-
-            // indicating that the transaction thread has released ownership
-            decremented = true;
-
-            if (logType == LogType.ENTITY_COMMIT) {
-                map = activeTxnCountMaps.get(pageIndex);
-                if (map.containsKey(txnCtx)) {
-                    activeTxnCount = (Integer) map.get(txnCtx);
-                    activeTxnCount++;
-                    map.put(txnCtx, activeTxnCount);
-                } else {
-                    map.put(txnCtx, 1);
-                }
-                addFlushRequest(pageIndex, currentLSN, false);
-            } else if (logType == LogType.COMMIT) {
-                addFlushRequest(pageIndex, currentLSN, true);
-            }
-
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new ACIDException(txnCtx, "Thread: " + Thread.currentThread().getName()
-                    + " logger encountered exception", e);
-        } finally {
-            if (!decremented) {
-                logPageOwnerCount[pageIndex].decrementAndGet();
-            }
-        }
-    }
-
-    /*
-     * This method resets the log page and is called by the log flusher thread
-     * after a page has been flushed to disk.
-     */
-    public void resetLogPage(long nextWritePosition, int pageIndex) throws IOException {
-
-        String filePath = LogUtil.getLogFilePath(logManagerProperties, getLogFileId(nextWritePosition));
-
-        logPages[pageIndex].reset(filePath, LogUtil.getFileOffset(this, nextWritePosition),
-                logManagerProperties.getLogPageSize());
-    }
-
-    @Override
-    public ILogCursor readLog(ILogFilter logFilter) throws ACIDException {
-        LogCursor cursor = new LogCursor(this, logFilter);
-        return cursor;
-    }
-
-    @Override
-    public ILogCursor readLog(PhysicalLogLocator physicalLogLocator, ILogFilter logFilter) throws IOException,
-            ACIDException {
-        LogCursor cursor = new LogCursor(this, physicalLogLocator, logFilter);
-        return cursor;
-    }
-
-    /*
-     * Read a log that is residing on the disk.
-     */
-    private void readDiskLog(long lsnValue, LogicalLogLocator logicalLogLocator) throws ACIDException {
-        String filePath = LogUtil.getLogFilePath(logManagerProperties, LogUtil.getFileId(this, lsnValue));
-        long fileOffset = LogUtil.getFileOffset(this, lsnValue);
-
-        ByteBuffer buffer = ByteBuffer.allocate(logManagerProperties.getLogPageSize());
-        RandomAccessFile raf = null;
-        FileChannel fileChannel = null;
-        try {
-            raf = new RandomAccessFile(filePath, "r");
-            fileChannel = raf.getChannel();
-            fileChannel.position(fileOffset);
-            fileChannel.read(buffer);
-            buffer.position(0);
-
-            byte logType = buffer.get(4);
-            int logHeaderSize = logRecordHelper.getLogHeaderSize(logType);
-            int logBodySize = buffer.getInt(logHeaderSize - 4);
-            int logRecordSize = logHeaderSize + logBodySize + logRecordHelper.getLogChecksumSize();
-            buffer.limit(logRecordSize);
-            MemBasedBuffer memBuffer = new MemBasedBuffer(buffer.slice());
-            if (logicalLogLocator == null) {
-                logicalLogLocator = new LogicalLogLocator(lsnValue, memBuffer, 0, this);
-            } else {
-                logicalLogLocator.setLsn(lsnValue);
-                logicalLogLocator.setBuffer(memBuffer);
-                logicalLogLocator.setMemoryOffset(0);
-            }
-            if (!logRecordHelper.validateLogRecord(logicalLogLocator)) {
-                throw new ACIDException(" invalid log record at lsn " + lsnValue);
-            }
-        } catch (Exception fnfe) {
-            fnfe.printStackTrace();
-            throw new ACIDException(" unable to retrieve log record with lsn " + lsnValue + " from the file system",
-                    fnfe);
-        } finally {
-            try {
-                if (fileChannel != null) {
-                    fileChannel.close();
-                } else if (raf != null) {
-                    raf.close();
-                }
-            } catch (IOException ioe) {
-                ioe.printStackTrace();
-                throw new ACIDException(" exception in closing a file: " + filePath, ioe);
-            }
-        }
-    }
-
-    @Override
-    public void readLog(long lsnValue, LogicalLogLocator logicalLogLocator) throws ACIDException {
-        byte[] logRecord = null;
-
-        if (lsnValue >= lsn.get()) {
-            throw new ACIDException(" invalid lsn " + lsnValue);
-        }
-
-        /* check if the log record in the log buffer or has reached the disk. */
-        if (lsnValue > getLastFlushedLsn().get()) {
-            int pageIndex = getLogPageIndex(lsnValue);
-            int pageOffset = getLogPageOffset(lsnValue);
-
-            // TODO
-            // minimize memory allocation overhead. current code allocates the
-            // log page size per reading a log record.
-
-            byte[] pageContent = new byte[logManagerProperties.getLogPageSize()];
-
-            // take a lock on the log page so that the page is not flushed to
-            // disk interim
-            synchronized (logPages[pageIndex]) {
-
-                // need to check again (this thread may have got de-scheduled
-                // and must refresh!)
-                if (lsnValue > getLastFlushedLsn().get()) {
-
-                    // get the log record length
-                    logPages[pageIndex].getBytes(pageContent, 0, pageContent.length);
-                    byte logType = pageContent[pageOffset + 4];
-                    int logHeaderSize = logRecordHelper.getLogHeaderSize(logType);
-                    int logBodySize = DataUtil.byteArrayToInt(pageContent, pageOffset + logHeaderSize - 4);
-                    int logRecordSize = logHeaderSize + logBodySize + logRecordHelper.getLogChecksumSize();
-                    logRecord = new byte[logRecordSize];
-
-                    // copy the log record content
-                    System.arraycopy(pageContent, pageOffset, logRecord, 0, logRecordSize);
-                    MemBasedBuffer memBuffer = new MemBasedBuffer(logRecord);
-                    if (logicalLogLocator == null) {
-                        logicalLogLocator = new LogicalLogLocator(lsnValue, memBuffer, 0, this);
-                    } else {
-                        logicalLogLocator.setLsn(lsnValue);
-                        logicalLogLocator.setBuffer(memBuffer);
-                        logicalLogLocator.setMemoryOffset(0);
-                    }
-                    try {
-                        // validate the log record by comparing checksums
-                        if (!logRecordHelper.validateLogRecord(logicalLogLocator)) {
-                            throw new ACIDException(" invalid log record at lsn " + lsnValue);
-                        }
-                    } catch (Exception e) {
-                        throw new ACIDException("exception encoutered in validating log record at lsn " + lsnValue, e);
-                    }
-                    return;
-                }
-            }
-        }
-
-        // the log record is residing on the disk, read it from there.
-        readDiskLog(lsnValue, logicalLogLocator);
-    }
-
-    public void renewLogFiles() throws ACIDException {
-        List<String> logFileNames = LogUtil.getLogFiles(logManagerProperties);
-        for (String name : logFileNames) {
-            File file = new File(LogUtil.getLogFilePath(logManagerProperties, Long.parseLong(name)));
-            if (!file.delete()) {
-                throw new ACIDException("Failed to delete a file: " + name);
-            }
-        }
-        closeLogPages();
-        initLSN();
-        openLogPages();
-        logPageFlusher.renew();
-    }
-
-    private PhysicalLogLocator initLSN() throws ACIDException {
-        PhysicalLogLocator nextPhysicalLsn = LogUtil.initializeLogAnchor(this);
-        startingLSN = nextPhysicalLsn.getLsn();
-        lastFlushedLSN.set(startingLSN - 1);
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info(" Starting lsn is : " + startingLSN);
-        }
-        lsn.set(startingLSN);
-        return nextPhysicalLsn;
-    }
-
-    private void closeLogPages() throws ACIDException {
-        for (int i = 0; i < numLogPages; i++) {
-            try {
-                logPages[i].close();
-            } catch (IOException e) {
-                throw new ACIDException(e);
-            }
-        }
-    }
-
-    private void openLogPages() throws ACIDException {
-        try {
-            String filePath = LogUtil.getLogFilePath(logManagerProperties, LogUtil.getFileId(this, startingLSN));
-            for (int i = 0; i < numLogPages; i++) {
-                logPages[i].open(filePath,
-                        LogUtil.getFileOffset(this, startingLSN) + i * logManagerProperties.getLogPageSize(),
-                        logManagerProperties.getLogPageSize());
-            }
-        } catch (Exception e) {
-            throw new ACIDException(Thread.currentThread().getName() + " unable to create log buffer", e);
-        }
-    }
-
-    @Override
-    public ILogRecordHelper getLogRecordHelper() {
-        return logRecordHelper;
-    }
-
-    /*
-     * This method shall be called by the Buffer manager when it needs to evict
-     * a page from the cache. TODO: Change the implementation from a looping
-     * logic to event based when log manager support is integrated with the
-     * Buffer Manager.
-     */
-    @Override
-    public synchronized void flushLog(LogicalLogLocator logicalLogLocator) throws ACIDException {
-        if (logicalLogLocator.getLsn() > lsn.get()) {
-            throw new ACIDException(" invalid lsn " + logicalLogLocator.getLsn());
-        }
-        while (lastFlushedLSN.get() < logicalLogLocator.getLsn());
-    }
-
-    /*
-     * Map each log page to cover a physical byte range over a log file. When a
-     * page is flushed, the page contents are put to disk in the corresponding
-     * byte range.
-     */
-    private void initializeLogPages(PhysicalLogLocator physicalLogLocator) throws ACIDException {
-        try {
-            String filePath = LogUtil.getLogFilePath(logManagerProperties,
-                    LogUtil.getFileId(this, physicalLogLocator.getLsn()));
-            for (int i = 0; i < numLogPages; i++) {
-                logPages[i] = FileUtil.getFileBasedBuffer(
-                        filePath,
-                        LogUtil.getFileOffset(this, physicalLogLocator.getLsn()) + i
-                                * logManagerProperties.getLogPageSize(), logManagerProperties.getLogPageSize());
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new ACIDException(Thread.currentThread().getName() + " unable to create log buffer", e);
-        }
-    }
-
-    /*
-     * Pages are sequenced starting with 0 going upto numLogPages-1.
-     */
-    public int getNextPageInSequence(int pageNo) {
-        return (pageNo + 1) % numLogPages;
-    }
-
-    public int getPreviousPageInSequence(int pageNo) {
-        return pageNo == 0 ? numLogPages - 1 : pageNo - 1;
-    }
-
-    @Override
-    public LogManagerProperties getLogManagerProperties() {
-        return logManagerProperties;
-    }
-
-    public IFileBasedBuffer getLogPage(int pageIndex) {
-        return logPages[pageIndex];
-    }
-
-    public AtomicInteger getLogPageOwnershipCount(int pageIndex) {
-        return logPageOwnerCount[pageIndex];
-    }
-
-    public IFileBasedBuffer[] getLogPages() {
-        return logPages;
-    }
-
-    @Override
-    public TransactionSubsystem getTransactionSubsystem() {
-        return provider;
-    }
-
-    public void decrementActiveTxnCountOnIndexes(int pageIndex) throws HyracksDataException {
-        TransactionContext ctx = null;
-        int count = 0;
-        int i = 0;
-
-        HashMap<TransactionContext, Integer> map = activeTxnCountMaps.get(pageIndex);
-        Set<Map.Entry<TransactionContext, Integer>> entrySet = map.entrySet();
-        if (entrySet != null) {
-            for (Map.Entry<TransactionContext, Integer> entry : entrySet) {
-                if (entry != null) {
-                    if (entry.getValue() != null) {
-                        count = entry.getValue();
-                    }
-                    if (count > 0) {
-                        ctx = entry.getKey();
-                        for (i = 0; i < count; i++) {
-                            ctx.decreaseActiveTransactionCountOnIndexes();
-                        }
-                    }
-                }
-            }
-        }
-
-        map.clear();
-    }
-}
-
-/*
- * The thread responsible for putting log pages to disk in an ordered manner.
- * The Log Flusher updates the bookkeeping data internal to the log manager and
- * acquires appropriate locks. It also acquires finer level locks on the log
- * page when it is in process of flushing the content to disk.
- */
-class LogPageFlushThread extends Thread {
-
-    private LogManager logManager;
-    /*
-     * pendingFlushRequests is a map with key as Integer denoting the page
-     * index. When a (transaction) thread discovers the need to flush a page, it
-     * puts its Thread object into the corresponding value that is a
-     * LinkedBlockingQueue. The LogManager has a LogFlusher thread that scans
-     * this map in order of page index (and circling around). The flusher thread
-     * needs to flush pages in order and waits for a thread to deposit an object
-     * in the blocking queue corresponding to the next page in order. A request
-     * to flush a page is conveyed to the flush thread by simply depositing an
-     * object in to corresponding blocking queue. It is blocking in the sense
-     * that the flusher thread will continue to wait for an object to arrive in
-     * the queue. The object itself is ignored by the fliusher and just acts as
-     * a signal/event that a page needs to be flushed.
-     */
-    private final LinkedBlockingQueue<Object>[] flushRequestQueue;
-    private final Object[] flushRequests;
-    private int pageToFlush;
-    private final long groupCommitWaitPeriod;
-    private boolean isRenewRequest;
-
-    public LogPageFlushThread(LogManager logManager) {
-        this.logManager = logManager;
-        setName("Flusher");
-        int numLogPages = logManager.getLogManagerProperties().getNumLogPages();
-        this.flushRequestQueue = new LinkedBlockingQueue[numLogPages];
-        this.flushRequests = new Object[numLogPages];
-        for (int i = 0; i < numLogPages; i++) {
-            flushRequestQueue[i] = new LinkedBlockingQueue<Object>(1);
-            flushRequests[i] = new Object();
-        }
-        this.pageToFlush = -1;
-        groupCommitWaitPeriod = logManager.getLogManagerProperties().getGroupCommitWaitPeriod();
-        isRenewRequest = false;
-    }
-
-    public void renew() {
-        isRenewRequest = true;
-        pageToFlush = -1;
-        this.interrupt();
-        isRenewRequest = false;
-    }
-
-    public void requestFlush(int pageIndex, long lsn, boolean isSynchronous) {
-        synchronized (logManager.getLogPage(pageIndex)) {
-            // return if flushedLSN >= lsn
-            if (logManager.getLastFlushedLsn().get() >= lsn) {
-                return;
-            }
-
-            // put a new request to the queue only if the request on the page is
-            // not in the queue.
-            flushRequestQueue[pageIndex].offer(flushRequests[pageIndex]);
-
-            // return if the request is asynchronous
-            if (!isSynchronous) {
-                return;
-            }
-
-            // wait until there is flush.
-            boolean isNotified = false;
-            while (!isNotified) {
-                try {
-                    logManager.getLogPage(pageIndex).wait();
-                    isNotified = true;
-                } catch (InterruptedException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-    }
-
-    @Override
-    public void run() {
-        while (true) {
-            try {
-                pageToFlush = logManager.getNextPageInSequence(pageToFlush);
-
-                // A wait call on the linkedBLockingQueue. The flusher thread is
-                // notified when an object is added to the queue. Please note
-                // that each page has an associated blocking queue.
-                try {
-                    flushRequestQueue[pageToFlush].take();
-                } catch (InterruptedException ie) {
-                    while (isRenewRequest) {
-                        sleep(1);
-                    }
-                    continue;
-                }
-
-                synchronized (logManager.getLogPage(pageToFlush)) {
-
-                    // lock the internal state of the log manager and create a
-                    // log file if necessary.
-                    int prevLogFileId = logManager.getLogFileId(logManager.getLastFlushedLsn().get());
-                    int nextLogFileId = logManager.getLogFileId(logManager.getLastFlushedLsn().get()
-                            + logManager.getLogManagerProperties().getLogPageSize());
-                    if (prevLogFileId != nextLogFileId) {
-                        String filePath = LogUtil.getLogFilePath(logManager.getLogManagerProperties(), nextLogFileId);
-                        FileUtil.createFileIfNotExists(filePath);
-                        logManager.getLogPage(pageToFlush).reset(
-                                LogUtil.getLogFilePath(logManager.getLogManagerProperties(), nextLogFileId), 0,
-                                logManager.getLogManagerProperties().getLogPageSize());
-                    }
-
-                    // #. sleep during the groupCommitWaitTime
-                    sleep(groupCommitWaitPeriod);
-
-                    // #. set the logPageStatus to INACTIVE in order to prevent
-                    // other txns from writing on this page.
-                    logManager.getLogPageStatus(pageToFlush).set(PageState.INACTIVE);
-
-                    // #. need to wait until the logPageOwnerCount reaches 1
-                    // (LOG_WRITER)
-                    // meaning every one has finished writing logs on this page.
-                    while (logManager.getLogPageOwnershipCount(pageToFlush).get() != PageOwnershipStatus.LOG_WRITER) {
-                        sleep(0);
-                    }
-
-                    // #. set the logPageOwnerCount to 0 (LOG_FLUSHER)
-                    // meaning it is flushing.
-                    logManager.getLogPageOwnershipCount(pageToFlush).set(PageOwnershipStatus.LOG_FLUSHER);
-
-                    // put the content to disk (the thread still has a lock on
-                    // the log page)
-                    logManager.getLogPage(pageToFlush).flush();
-
-                    // increment the last flushed lsn and lastFlushedPage
-                    logManager.incrementLastFlushedLsn(logManager.getLogManagerProperties().getLogPageSize());
-
-                    // decrement activeTxnCountOnIndexes
-                    logManager.decrementActiveTxnCountOnIndexes(pageToFlush);
-
-                    // reset the count to 1
-                    logManager.getLogPageOwnershipCount(pageToFlush).set(PageOwnershipStatus.LOG_WRITER);
-
-                    // Map the log page to a new region in the log file.
-                    long nextWritePosition = logManager.getLogPages()[pageToFlush].getNextWritePosition()
-                            + logManager.getLogManagerProperties().getLogBufferSize();
-
-                    logManager.resetLogPage(nextWritePosition, pageToFlush);
-
-                    // mark the page as ACTIVE
-                    logManager.getLogPageStatus(pageToFlush).set(LogManager.PageState.ACTIVE);
-
-                    // #. checks the queue whether there is another flush
-                    // request on the same log buffer
-                    // If there is another request, then simply remove it.
-                    if (flushRequestQueue[pageToFlush].peek() != null) {
-                        flushRequestQueue[pageToFlush].take();
-                    }
-
-                    // notify all waiting (transaction) threads.
-                    logManager.getLogPage(pageToFlush).notifyAll();
-                }
-            } catch (IOException ioe) {
-                ioe.printStackTrace();
-                throw new Error(" exception in flushing log page", ioe);
-            } catch (InterruptedException e) {
-                e.printStackTrace();
-                break;
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManagerProperties.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManagerProperties.java
deleted file mode 100644
index 0211f69..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogManagerProperties.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2009-2012 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.transaction.management.service.logging;
-
-import java.io.Serializable;
-import java.util.Properties;
-
-public class LogManagerProperties implements Serializable {
-
-    private static final long serialVersionUID = 2084227360840799662L;
-
-    public static final int LOG_MAGIC_NUMBER = 123456789;
-    public static final String LOG_DIR_SUFFIX_KEY = ".txnLogDir";
-    public static final String LOG_PAGE_SIZE_KEY = "log_page_size";
-    public static final String LOG_PARTITION_SIZE_KEY = "log_partition_size";
-    public static final String NUM_LOG_PAGES_KEY = "num_log_pages";
-    public static final String LOG_FILE_PREFIX_KEY = "log_file_prefix";
-    public static final String GROUP_COMMIT_WAIT_PERIOD_KEY = "group_commit_wait_period";
-
-    private static final int DEFAULT_LOG_PAGE_SIZE = 128 * 1024; //128KB
-    private static final int DEFAULT_NUM_LOG_PAGES = 8;
-    private static final long DEFAULT_LOG_PARTITION_SIZE = (long) 1024 * 1024 * 1024 * 2; //2GB 
-    private static final long DEFAULT_GROUP_COMMIT_WAIT_PERIOD = 1; // time in millisec.
-    private static final String DEFAULT_LOG_FILE_PREFIX = "asterix_transaction_log";
-    private static final String DEFAULT_LOG_DIRECTORY = "asterix_logs/";
-
-    // follow the naming convention <logFilePrefix>_<number> where number starts from 0
-    private final String logFilePrefix;
-    private final String logDir;
-    public String logDirKey;
-
-    // number of log pages in the log buffer
-    private final int logPageSize;
-    // number of log pages in the log buffer.
-    private final int numLogPages;
-    // time in milliseconds
-    private final long groupCommitWaitPeriod;
-    // logBufferSize = logPageSize * numLogPages;
-    private final int logBufferSize;
-    // maximum size of each log file
-    private final long logPartitionSize;
-
-    public LogManagerProperties(Properties properties, String nodeId) {
-        this.logDirKey = new String(nodeId + LOG_DIR_SUFFIX_KEY);
-        this.logPageSize = Integer.parseInt(properties.getProperty(LOG_PAGE_SIZE_KEY, "" + DEFAULT_LOG_PAGE_SIZE));
-        this.numLogPages = Integer.parseInt(properties.getProperty(NUM_LOG_PAGES_KEY, "" + DEFAULT_NUM_LOG_PAGES));
-        long logPartitionSize = Long.parseLong(properties.getProperty(LOG_PARTITION_SIZE_KEY, ""
-                + DEFAULT_LOG_PARTITION_SIZE));
-        this.logDir = properties.getProperty(logDirKey, DEFAULT_LOG_DIRECTORY + nodeId);
-        this.logFilePrefix = properties.getProperty(LOG_FILE_PREFIX_KEY, DEFAULT_LOG_FILE_PREFIX);
-        this.groupCommitWaitPeriod = Long.parseLong(properties.getProperty(GROUP_COMMIT_WAIT_PERIOD_KEY, ""
-                + DEFAULT_GROUP_COMMIT_WAIT_PERIOD));
-
-        this.logBufferSize = logPageSize * numLogPages;
-        //make sure that the log partition size is the multiple of log buffer size.
-        this.logPartitionSize = (logPartitionSize / logBufferSize) * logBufferSize;
-    }
-
-    public long getLogPartitionSize() {
-        return logPartitionSize;
-    }
-
-    public String getLogFilePrefix() {
-        return logFilePrefix;
-    }
-
-    public String getLogDir() {
-        return logDir;
-    }
-
-    public int getLogPageSize() {
-        return logPageSize;
-    }
-
-    public int getNumLogPages() {
-        return numLogPages;
-    }
-
-    public int getLogBufferSize() {
-        return logBufferSize;
-    }
-
-    public long getGroupCommitWaitPeriod() {
-        return groupCommitWaitPeriod;
-    }
-
-    public String getLogDirKey() {
-        return logDirKey;
-    }
-
-    public String toString() {
-        StringBuilder builder = new StringBuilder();
-        builder.append("log_dir_ : " + logDir + FileUtil.lineSeparator);
-        builder.append("log_file_prefix" + logFilePrefix + FileUtil.lineSeparator);
-        builder.append("log_page_size : " + logPageSize + FileUtil.lineSeparator);
-        builder.append("num_log_pages : " + numLogPages + FileUtil.lineSeparator);
-        builder.append("log_partition_size : " + logPartitionSize + FileUtil.lineSeparator);
-        builder.append("group_commit_wait_period : " + groupCommitWaitPeriod + FileUtil.lineSeparator);
-        return builder.toString();
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogUtil.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogUtil.java
deleted file mode 100644
index feaca86..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/logging/LogUtil.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.transaction.management.service.logging;
-
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-
-/**
- * A utility class providing helper methods for the {@link ILogManager}
- */
-public class LogUtil {
-
-    private static final Logger LOGGER = Logger.getLogger(LogUtil.class.getName());
-
-    // read the log directory and initialize log anchor to point to the
-    // current log partition file and the offset where the log manager shall
-    // continue to insert log records.
-
-    public static PhysicalLogLocator initializeLogAnchor(ILogManager logManager) throws ACIDException {
-        int fileId = 0;
-        long offset = 0;
-        LogManagerProperties logManagerProperties = logManager.getLogManagerProperties();
-        File logDir = new File(logManagerProperties.getLogDir());
-        try {
-            if (logDir.exists()) {
-                List<String> logFiles = getLogFiles(logManagerProperties);
-                if (logFiles == null || logFiles.size() == 0) {
-                    FileUtil.createFileIfNotExists(getLogFilePath(logManagerProperties, 0));
-                } else {
-                    File logFile = new File(LogUtil.getLogFilePath(logManagerProperties,
-                            Long.parseLong(logFiles.get(logFiles.size() - 1))));
-                    fileId = logFiles.size() - 1;
-                    offset = logFile.length();
-                }
-            } else {
-                FileUtil.createNewDirectory(logManagerProperties.getLogDir());
-                FileUtil.createFileIfNotExists(getLogFilePath(logManagerProperties, 0));
-            }
-        } catch (IOException ioe) {
-            throw new ACIDException("Unable to initialize log anchor", ioe);
-        }
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info(" file id :" + fileId + " offset " + offset);
-        }
-        return new PhysicalLogLocator(fileId, offset, logManager);
-    }
-
-    public static List<String> getLogFiles(final LogManagerProperties logManagerProperties) {
-        File logDir = new File(logManagerProperties.getLogDir());
-        String[] logFiles = new String[0];
-        List<String> logFileCollection = new ArrayList<String>();
-        if (logDir.exists()) {
-            logFiles = logDir.list(new FilenameFilter() {
-                public boolean accept(File dir, String name) {
-                    if (name.startsWith(logManagerProperties.getLogFilePrefix())) {
-                        return true;
-                    }
-                    return false;
-                }
-            });
-        }
-        for (String logFile : logFiles) {
-            logFileCollection.add(logFile.substring(logManagerProperties.getLogFilePrefix().length() + 1));
-        }
-        Collections.sort(logFileCollection, new Comparator<String>() {
-            @Override
-            public int compare(String arg0, String arg1) {
-                return Integer.parseInt(arg0) - Integer.parseInt(arg1);
-            }
-        });
-        return logFileCollection;
-    }
-
-    public static long getFileId(String logFilePath, LogManagerProperties logManagerProperties) {
-        String logFileName = logFilePath;
-        if (logFilePath.contains(File.separator)) {
-            logFileName = logFilePath.substring(logFilePath.lastIndexOf(File.separator));
-        }
-        return Long.parseLong(logFileName.substring(logFileName.indexOf(logManagerProperties.getLogFilePrefix())));
-    }
-
-    public static String getLogFilePath(LogManagerProperties logManagerProperties, long fileId) {
-        return logManagerProperties.getLogDir() + File.separator + logManagerProperties.getLogFilePrefix() + "_"
-                + fileId;
-    }
-
-    public static LogicalLogLocator getDummyLogicalLogLocator(ILogManager logManager) {
-        LogicalLogLocator logicalLogLocator = new LogicalLogLocator(-1, null, -1, logManager);
-        return logicalLogLocator;
-    }
-
-    /*
-     * given a lsn, get the offset within the log file where the corresponding
-     * log record is (to be) placed.
-     */
-    public static long getFileOffset(ILogManager logManager, long lsn) {
-        return lsn % logManager.getLogManagerProperties().getLogPartitionSize();
-    }
-
-    /*
-     * given a lsn, get the file id that contains the log record.
-     */
-    public static long getFileId(ILogManager logManager, long lsn) {
-        return lsn / logManager.getLogManagerProperties().getLogPartitionSize();
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
deleted file mode 100644
index c27ae20..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/recovery/RecoveryManager.java
+++ /dev/null
@@ -1,819 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.transaction.management.service.recovery;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-import edu.uci.ics.asterix.transaction.management.exception.ACIDException;
-import edu.uci.ics.asterix.transaction.management.opcallbacks.IndexOperationTracker;
-import edu.uci.ics.asterix.transaction.management.resource.ILocalResourceMetadata;
-import edu.uci.ics.asterix.transaction.management.service.logging.IBuffer;
-import edu.uci.ics.asterix.transaction.management.service.logging.ILogCursor;
-import edu.uci.ics.asterix.transaction.management.service.logging.ILogFilter;
-import edu.uci.ics.asterix.transaction.management.service.logging.ILogManager;
-import edu.uci.ics.asterix.transaction.management.service.logging.ILogRecordHelper;
-import edu.uci.ics.asterix.transaction.management.service.logging.IndexResourceManager;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogManager;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogType;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogUtil;
-import edu.uci.ics.asterix.transaction.management.service.logging.LogicalLogLocator;
-import edu.uci.ics.asterix.transaction.management.service.logging.PhysicalLogLocator;
-import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager;
-import edu.uci.ics.asterix.transaction.management.service.transaction.IResourceManager.ResourceType;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionContext;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManagementConstants;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionManager;
-import edu.uci.ics.asterix.transaction.management.service.transaction.TransactionSubsystem;
-import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.storage.am.btree.impls.BTree;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndex;
-import edu.uci.ics.hyracks.storage.am.common.api.IIndexLifecycleManager;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndex;
-import edu.uci.ics.hyracks.storage.am.common.api.ITreeIndexMetaDataFrame;
-import edu.uci.ics.hyracks.storage.am.common.impls.NoOpOperationCallback;
-import edu.uci.ics.hyracks.storage.am.lsm.btree.impls.LSMBTreeImmutableComponent;
-import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMComponent;
-import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndex;
-import edu.uci.ics.hyracks.storage.am.lsm.common.api.ILSMIndexAccessor;
-import edu.uci.ics.hyracks.storage.am.lsm.common.impls.BlockingIOOperationCallbackWrapper;
-import edu.uci.ics.hyracks.storage.am.lsm.invertedindex.impls.LSMInvertedIndexImmutableComponent;
-import edu.uci.ics.hyracks.storage.am.lsm.rtree.impls.LSMRTreeImmutableComponent;
-import edu.uci.ics.hyracks.storage.am.rtree.impls.RTree;
-import edu.uci.ics.hyracks.storage.common.buffercache.IBufferCache;
-import edu.uci.ics.hyracks.storage.common.buffercache.ICachedPage;
-import edu.uci.ics.hyracks.storage.common.file.BufferedFileHandle;
-import edu.uci.ics.hyracks.storage.common.file.ILocalResourceRepository;
-import edu.uci.ics.hyracks.storage.common.file.LocalResource;
-
-/**
- * This is the Recovery Manager and is responsible for rolling back a
- * transaction as well as doing a system recovery. TODO: Crash Recovery logic is
- * not in place completely. Once we have physical logging implemented, we would
- * add support for crash recovery.
- */
-public class RecoveryManager implements IRecoveryManager {
-
-    public static final boolean IS_DEBUG_MODE = false;//true
-    private static final Logger LOGGER = Logger.getLogger(RecoveryManager.class.getName());
-    private final TransactionSubsystem txnSubsystem;
-
-    /**
-     * A file at a known location that contains the LSN of the last log record
-     * traversed doing a successful checkpoint.
-     */
-    private static final String CHECKPOINT_FILENAME_PREFIX = "checkpoint_";
-    private SystemState state;
-
-    public RecoveryManager(TransactionSubsystem TransactionProvider) throws ACIDException {
-        this.txnSubsystem = TransactionProvider;
-    }
-
-    /**
-     * returns system state which could be one of the three states: HEALTHY, RECOVERING, CORRUPTED.
-     * This state information could be used in a case where more than one thread is running
-     * in the bootstrap process to provide higher availability. In other words, while the system
-     * is recovered, another thread may start a new transaction with understanding the side effect
-     * of the operation, or the system can be recovered concurrently. This kind of concurrency is
-     * not supported, yet.
-     */
-    public SystemState getSystemState() throws ACIDException {
-
-        //#. read checkpoint file
-        CheckpointObject checkpointObject = null;
-        try {
-            checkpointObject = readCheckpoint();
-        } catch (FileNotFoundException e) {
-            //This is initial bootstrap. 
-            //Otherwise, the checkpoint file is deleted unfortunately. What we can do in this case?
-            state = SystemState.NEW_UNIVERSE;
-            return state;
-        }
-
-        //#. if minMCTFirstLSN is equal to -1 && 
-        //   checkpointLSN in the checkpoint file is equal to the lastLSN in the log file,
-        //   then return healthy state. Otherwise, return corrupted.
-        LogManager logMgr = (LogManager) txnSubsystem.getLogManager();
-        if (checkpointObject.getMinMCTFirstLSN() == -1
-                && checkpointObject.getCheckpointLSN() == logMgr.getCurrentLsn().get()) {
-            state = SystemState.HEALTHY;
-            return state;
-        } else {
-            state = SystemState.CORRUPTED;
-            return state;
-        }
-    }
-
-    public void startRecovery(boolean synchronous) throws IOException, ACIDException {
-
-        int updateLogCount = 0;
-        int commitLogCount = 0;
-        int redoCount = 0;
-
-        state = SystemState.RECOVERING;
-
-        ILogManager logManager = txnSubsystem.getLogManager();
-        ILogRecordHelper logRecordHelper = logManager.getLogRecordHelper();
-
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info("[RecoveryMgr] starting recovery ...");
-        }
-
-        //winnerTxnTable is used to add pairs, <committed TxnId, the most recent commit LSN of the TxnId>
-        Map<TxnId, Long> winnerTxnTable = new HashMap<TxnId, Long>();
-        TxnId tempKeyTxnId = new TxnId(-1, -1, -1);
-        byte logType;
-
-        //#. read checkpoint file and set lowWaterMark where anaylsis and redo start
-        CheckpointObject checkpointObject = readCheckpoint();
-        long lowWaterMarkLSN = checkpointObject.getMinMCTFirstLSN();
-        if (lowWaterMarkLSN == -1) {
-            lowWaterMarkLSN = 0;
-        }
-        int maxJobId = checkpointObject.getMaxJobId();
-        int currentJobId;
-
-        //-------------------------------------------------------------------------
-        //  [ analysis phase ]
-        //  - collect all committed LSN 
-        //  - if there are duplicate commits for the same TxnId, 
-        //    keep only the mostRecentCommitLSN among the duplicates.
-        //-------------------------------------------------------------------------
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info("[RecoveryMgr] in analysis phase");
-        }
-
-        //#. set log cursor to the lowWaterMarkLSN
-        ILogCursor logCursor = logManager.readLog(new PhysicalLogLocator(lowWaterMarkLSN, logManager),
-                new ILogFilter() {
-                    public boolean accept(IBuffer logs, long startOffset, int endOffset) {
-                        return true;
-                    }
-                });
-        LogicalLogLocator currentLogLocator = LogUtil.getDummyLogicalLogLocator(logManager);
-
-        //#. collect all committed txn's pairs,<TxnId, LSN>
-        while (logCursor.next(currentLogLocator)) {
-
-            if (LogManager.IS_DEBUG_MODE) {
-                System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
-            }
-
-            logType = logRecordHelper.getLogType(currentLogLocator);
-
-            //update max jobId
-            currentJobId = logRecordHelper.getJobId(currentLogLocator);
-            if (currentJobId > maxJobId) {
-                maxJobId = currentJobId;
-            }
-
-            TxnId commitTxnId = null;
-            switch (logType) {
-                case LogType.UPDATE:
-                    if (IS_DEBUG_MODE) {
-                        updateLogCount++;
-                    }
-                    break;
-
-                case LogType.COMMIT:
-                case LogType.ENTITY_COMMIT:
-                    commitTxnId = new TxnId(logRecordHelper.getJobId(currentLogLocator),
-                            logRecordHelper.getDatasetId(currentLogLocator),
-                            logRecordHelper.getPKHashValue(currentLogLocator));
-                    winnerTxnTable.put(commitTxnId, currentLogLocator.getLsn());
-                    if (IS_DEBUG_MODE) {
-                        commitLogCount++;
-                    }
-                    break;
-
-                default:
-                    throw new ACIDException("Unsupported LogType: " + logType);
-            }
-        }
-
-        //-------------------------------------------------------------------------
-        //  [ redo phase ]
-        //  - redo if
-        //    1) The TxnId is committed --> gurantee durability
-        //      &&  
-        //    2) the currentLSN > maxDiskLastLSN of the index --> guarantee idempotance
-        //-------------------------------------------------------------------------
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info("[RecoveryMgr] in redo phase");
-        }
-        //#. set log cursor to the lowWaterMarkLSN again.
-        logCursor = logManager.readLog(new PhysicalLogLocator(lowWaterMarkLSN, logManager), new ILogFilter() {
-            public boolean accept(IBuffer logs, long startOffset, int endOffset) {
-                return true;
-            }
-        });
-        currentLogLocator = LogUtil.getDummyLogicalLogLocator(logManager);
-
-        long resourceId;
-        byte resourceMgrId;
-        long maxDiskLastLSN;
-        long currentLSN = -1;
-        int resourceType;
-        ILSMIndex index = null;
-        LocalResource localResource = null;
-        ILocalResourceMetadata localResourceMetadata = null;
-        Map<Long, Long> resourceId2MaxLSNMap = new HashMap<Long, Long>();
-        List<ILSMComponent> immutableDiskIndexList = null;
-        TxnId jobLevelTxnId = new TxnId(-1, -1, -1);
-        boolean foundWinnerTxn;
-
-        //#. get indexLifeCycleManager 
-        IAsterixAppRuntimeContextProvider appRuntimeContext = txnSubsystem.getAsterixAppRuntimeContextProvider();
-        IIndexLifecycleManager indexLifecycleManager = appRuntimeContext.getIndexLifecycleManager();
-        ILocalResourceRepository localResourceRepository = appRuntimeContext.getLocalResourceRepository();
-
-        //#. redo
-        while (logCursor.next(currentLogLocator)) {
-            foundWinnerTxn = false;
-            if (LogManager.IS_DEBUG_MODE) {
-                System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
-            }
-
-            logType = logRecordHelper.getLogType(currentLogLocator);
-
-            switch (logType) {
-                case LogType.UPDATE:
-                    tempKeyTxnId.setTxnId(logRecordHelper.getJobId(currentLogLocator),
-                            logRecordHelper.getDatasetId(currentLogLocator),
-                            logRecordHelper.getPKHashValue(currentLogLocator));
-                    jobLevelTxnId.setTxnId(logRecordHelper.getJobId(currentLogLocator), -1, -1);
-                    if (winnerTxnTable.containsKey(tempKeyTxnId)) {
-                        currentLSN = winnerTxnTable.get(tempKeyTxnId);
-                        foundWinnerTxn = true;
-                    } else if (winnerTxnTable.containsKey(jobLevelTxnId)) {
-                        currentLSN = winnerTxnTable.get(jobLevelTxnId);
-                        foundWinnerTxn = true;
-                    }
-
-                    if (foundWinnerTxn) {
-                        resourceId = logRecordHelper.getResourceId(currentLogLocator);
-                        localResource = localResourceRepository.getResourceById(resourceId);
-
-                        //get index instance from IndexLifeCycleManager
-                        //if index is not registered into IndexLifeCycleManager,
-                        //create the index using LocalMetadata stored in LocalResourceRepository
-                        index = (ILSMIndex) indexLifecycleManager.getIndex(resourceId);
-                        if (index == null) {
-
-                            /*******************************************************************
-                             * [Notice]
-                             * -> Issue
-                             * Delete index may cause a problem during redo.
-                             * The index operation to be redone couldn't be redone because the corresponding index
-                             * may not exist in NC due to the possible index drop DDL operation.
-                             * -> Approach
-                             * Avoid the problem during redo.
-                             * More specifically, the problem will be detected when the localResource of
-                             * the corresponding index is retrieved, which will end up with 'null' return from
-                             * localResourceRepository. If null is returned, then just go and process the next
-                             * log record.
-                             *******************************************************************/
-                            if (localResource == null) {
-                                continue;
-                            }
-                            /*******************************************************************/
-
-                            //#. create index instance and register to indexLifeCycleManager
-                            localResourceMetadata = (ILocalResourceMetadata) localResource.getResourceObject();
-                            index = localResourceMetadata.createIndexInstance(appRuntimeContext,
-                                    localResource.getResourceName(), localResource.getPartition());
-                            indexLifecycleManager.register(resourceId, index);
-                            indexLifecycleManager.open(resourceId);
-
-                            //#. get maxDiskLastLSN
-                            resourceType = localResource.getResourceType();
-                            immutableDiskIndexList = index.getImmutableComponents();
-
-                            maxDiskLastLSN = -1;
-                            switch (resourceType) {
-
-                                case ResourceType.LSM_BTREE:
-                                    for (ILSMComponent c : immutableDiskIndexList) {
-                                        BTree btree = ((LSMBTreeImmutableComponent) c).getBTree();
-                                        maxDiskLastLSN = Math.max(getTreeIndexLSN(btree), maxDiskLastLSN);
-                                    }
-                                    break;
-
-                                case ResourceType.LSM_RTREE:
-                                    for (ILSMComponent c : immutableDiskIndexList) {
-                                        RTree rtree = ((LSMRTreeImmutableComponent) c).getRTree();
-                                        maxDiskLastLSN = Math.max(getTreeIndexLSN(rtree), maxDiskLastLSN);
-                                    }
-                                    break;
-
-                                case ResourceType.LSM_INVERTED_INDEX:
-                                    for (ILSMComponent c : immutableDiskIndexList) {
-                                        BTree delKeyBtree = ((LSMInvertedIndexImmutableComponent) c)
-                                                .getDeletedKeysBTree();
-                                        maxDiskLastLSN = Math.max(getTreeIndexLSN(delKeyBtree), maxDiskLastLSN);
-                                    }
-                                    break;
-
-                                default:
-                                    throw new ACIDException("Unsupported resouce type");
-                            }
-
-                            //#. set resourceId and maxDiskLastLSN to the map
-                            resourceId2MaxLSNMap.put(resourceId, maxDiskLastLSN);
-                        } else {
-                            maxDiskLastLSN = resourceId2MaxLSNMap.get(resourceId);
-                        }
-
-                        if (currentLSN > maxDiskLastLSN) {
-                            resourceMgrId = logRecordHelper.getResourceMgrId(currentLogLocator);
-
-                            // look up the repository to get the resource manager
-                            // register resourceMgr if it is not registered. 
-                            IResourceManager resourceMgr = txnSubsystem.getTransactionalResourceRepository()
-                                    .getTransactionalResourceMgr(resourceMgrId);
-                            if (resourceMgr == null) {
-                                resourceMgr = new IndexResourceManager(resourceMgrId, txnSubsystem);
-                                txnSubsystem.getTransactionalResourceRepository().registerTransactionalResourceManager(
-                                        resourceMgrId, resourceMgr);
-                            }
-
-                            //redo finally.
-                            resourceMgr.redo(logRecordHelper, currentLogLocator);
-                            if (IS_DEBUG_MODE) {
-                                redoCount++;
-                            }
-                        }
-                    }
-                    break;
-
-                case LogType.COMMIT:
-                case LogType.ENTITY_COMMIT:
-                    //do nothing
-                    break;
-
-                default:
-                    throw new ACIDException("Unsupported LogType: " + logType);
-            }
-        }
-
-        //close all indexes
-        Set<Long> resourceIdList = resourceId2MaxLSNMap.keySet();
-        for (long r : resourceIdList) {
-            indexLifecycleManager.close(r);
-        }
-
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info("[RecoveryMgr] recovery is over");
-        }
-        if (IS_DEBUG_MODE) {
-            System.out.println("[RecoveryMgr] Count: Update/Commit/Redo = " + updateLogCount + "/" + commitLogCount
-                    + "/" + redoCount);
-        }
-    }
-
-    //TODO
-    //This function came from the AbstractLSMIOOperationCallback class. 
-    //We'd better factor out this function into a component of reading/writing the local metadata of indexes.
-    private long getTreeIndexLSN(ITreeIndex treeIndex) throws HyracksDataException {
-        int fileId = treeIndex.getFileId();
-        IBufferCache bufferCache = treeIndex.getBufferCache();
-        ITreeIndexMetaDataFrame metadataFrame = treeIndex.getFreePageManager().getMetaDataFrameFactory().createFrame();
-        int metadataPageId = treeIndex.getFreePageManager().getFirstMetadataPage();
-        ICachedPage metadataPage = bufferCache.pin(BufferedFileHandle.getDiskPageId(fileId, metadataPageId), false);
-        metadataPage.acquireReadLatch();
-        try {
-            metadataFrame.setPage(metadataPage);
-            return metadataFrame.getLSN();
-        } finally {
-            metadataPage.releaseReadLatch();
-            bufferCache.unpin(metadataPage);
-        }
-    }
-
-    @Override
-    public synchronized void checkpoint(boolean isSharpCheckpoint) throws ACIDException {
-
-        LogManager logMgr = (LogManager) txnSubsystem.getLogManager();
-        TransactionManager txnMgr = (TransactionManager) txnSubsystem.getTransactionManager();
-        String logDir = logMgr.getLogManagerProperties().getLogDir();
-
-        //#. get the filename of the previous checkpoint files which are about to be deleted 
-        //   right after the new checkpoint file is written.
-        File[] prevCheckpointFiles = getPreviousCheckpointFiles();
-
-        IIndexLifecycleManager indexLifecycleManager = txnSubsystem.getAsterixAppRuntimeContextProvider()
-                .getIndexLifecycleManager();
-        List<IIndex> openIndexList = indexLifecycleManager.getOpenIndexes();
-        List<BlockingIOOperationCallbackWrapper> callbackList = new LinkedList<BlockingIOOperationCallbackWrapper>();
-
-        //#. flush all in-memory components if it is the sharp checkpoint
-        if (isSharpCheckpoint) {
-            for (IIndex index : openIndexList) {
-                ILSMIndex lsmIndex = (ILSMIndex) index;
-                ILSMIndexAccessor indexAccessor = lsmIndex.createAccessor(NoOpOperationCallback.INSTANCE,
-                        NoOpOperationCallback.INSTANCE);
-                IndexOperationTracker indexOpTracker = (IndexOperationTracker) lsmIndex.getOperationTracker();
-                BlockingIOOperationCallbackWrapper cb = new BlockingIOOperationCallbackWrapper(
-                        indexOpTracker.getIOOperationCallback());
-                callbackList.add(cb);
-                try {
-                    indexAccessor.scheduleFlush(cb);
-                } catch (HyracksDataException e) {
-                    throw new ACIDException(e);
-                }
-            }
-
-            for (BlockingIOOperationCallbackWrapper cb : callbackList) {
-                try {
-                    cb.waitForIO();
-                } catch (InterruptedException e) {
-                    throw new ACIDException(e);
-                }
-            }
-        }
-
-        //#. create and store the checkpointObject into the new checkpoint file
-        long minMCTFirstLSN = Long.MAX_VALUE;
-        long firstLSN;
-        if (openIndexList.size() > 0) {
-            for (IIndex index : openIndexList) {
-                firstLSN = ((IndexOperationTracker) ((ILSMIndex) index).getOperationTracker()).getFirstLSN();
-                minMCTFirstLSN = Math.min(minMCTFirstLSN, firstLSN);
-            }
-        } else {
-            minMCTFirstLSN = -1;
-        }
-
-        CheckpointObject checkpointObject = new CheckpointObject(logMgr.getCurrentLsn().get(), minMCTFirstLSN,
-                txnMgr.getMaxJobId(), System.currentTimeMillis());
-
-        FileOutputStream fos = null;
-        ObjectOutputStream oosToFos = null;
-        try {
-            String fileName = getFileName(logDir, Long.toString(checkpointObject.getTimeStamp()));
-            fos = new FileOutputStream(fileName);
-            oosToFos = new ObjectOutputStream(fos);
-            oosToFos.writeObject(checkpointObject);
-            oosToFos.flush();
-        } catch (IOException e) {
-            throw new ACIDException("Failed to checkpoint", e);
-        } finally {
-            if (oosToFos != null) {
-                try {
-                    oosToFos.close();
-                } catch (IOException e) {
-                    throw new ACIDException("Failed to checkpoint", e);
-                }
-            }
-            if (oosToFos == null && fos != null) {
-                try {
-                    fos.close();
-                } catch (IOException e) {
-                    throw new ACIDException("Failed to checkpoint", e);
-                }
-            }
-        }
-
-        //#. delete the previous checkpoint files
-        if (prevCheckpointFiles != null) {
-            for (File file : prevCheckpointFiles) {
-                file.delete();
-            }
-        }
-
-        if (isSharpCheckpoint) {
-            logMgr.renewLogFiles();
-        }
-    }
-
-    private CheckpointObject readCheckpoint() throws ACIDException, FileNotFoundException {
-
-        CheckpointObject checkpointObject = null;
-
-        //#. read all checkpointObjects from the existing checkpoint files
-        File[] prevCheckpointFiles = getPreviousCheckpointFiles();
-
-        if (prevCheckpointFiles == null || prevCheckpointFiles.length == 0) {
-            throw new FileNotFoundException("Checkpoint file is not found");
-        }
-
-        List<CheckpointObject> checkpointObjectList = new ArrayList<CheckpointObject>();
-
-        for (File file : prevCheckpointFiles) {
-            FileInputStream fis = null;
-            ObjectInputStream oisFromFis = null;
-
-            try {
-                fis = new FileInputStream(file);
-                oisFromFis = new ObjectInputStream(fis);
-                checkpointObject = (CheckpointObject) oisFromFis.readObject();
-                checkpointObjectList.add(checkpointObject);
-            } catch (Exception e) {
-                throw new ACIDException("Failed to read a checkpoint file", e);
-            } finally {
-                if (oisFromFis != null) {
-                    try {
-                        oisFromFis.close();
-                    } catch (IOException e) {
-                        throw new ACIDException("Failed to read a checkpoint file", e);
-                    }
-                }
-                if (oisFromFis == null && fis != null) {
-                    try {
-                        fis.close();
-                    } catch (IOException e) {
-                        throw new ACIDException("Failed to read a checkpoint file", e);
-                    }
-                }
-            }
-        }
-
-        //#. sort checkpointObjects in descending order by timeStamp to find out the most recent one.
-        Collections.sort(checkpointObjectList);
-
-        //#. return the most recent one (the first one in sorted list)
-        return checkpointObjectList.get(0);
-    }
-
-    private File[] getPreviousCheckpointFiles() {
-        String logDir = txnSubsystem.getLogManager().getLogManagerProperties().getLogDir();
-
-        File parentDir = new File(logDir);
-
-        FilenameFilter filter = new FilenameFilter() {
-            @Override
-            public boolean accept(File dir, String name) {
-                if (name.contains(CHECKPOINT_FILENAME_PREFIX)) {
-                    return true;
-                } else {
-                    return false;
-                }
-            }
-        };
-
-        File[] prevCheckpointFiles = parentDir.listFiles(filter);
-
-        return prevCheckpointFiles;
-    }
-
-    private String getFileName(String baseDir, String suffix) {
-
-        if (!baseDir.endsWith(System.getProperty("file.separator"))) {
-            baseDir += System.getProperty("file.separator");
-        }
-
-        return baseDir + CHECKPOINT_FILENAME_PREFIX + suffix;
-    }
-
-    /**
-     * Rollback a transaction
-     * 
-     * @see edu.uci.ics.transaction.management.service.recovery.IRecoveryManager# rollbackTransaction (edu.uci.ics.TransactionContext.management.service.transaction .TransactionContext)
-     */
-    @Override
-    public void rollbackTransaction(TransactionContext txnContext) throws ACIDException {
-        ILogManager logManager = txnSubsystem.getLogManager();
-        ILogRecordHelper logRecordHelper = logManager.getLogRecordHelper();
-        Map<TxnId, List<Long>> loserTxnTable = new HashMap<TxnId, List<Long>>();
-        TxnId tempKeyTxnId = new TxnId(-1, -1, -1);
-
-        int updateLogCount = 0;
-        int commitLogCount = 0;
-
-        // Obtain the first log record written by the Job
-        PhysicalLogLocator firstLSNLogLocator = txnContext.getFirstLogLocator();
-        PhysicalLogLocator lastLSNLogLocator = txnContext.getLastLogLocator();
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info(" rollbacking transaction log records from " + firstLSNLogLocator.getLsn() + " to "
-                    + lastLSNLogLocator.getLsn());
-        }
-
-        // check if the transaction actually wrote some logs.
-        if (firstLSNLogLocator.getLsn() == TransactionManagementConstants.LogManagerConstants.TERMINAL_LSN) {
-            if (LOGGER.isLoggable(Level.INFO)) {
-                LOGGER.info(" no need to roll back as there were no operations by the transaction "
-                        + txnContext.getJobId());
-            }
-            return;
-        }
-
-        // While reading log records from firstLSN to lastLSN, collect uncommitted txn's LSNs 
-        ILogCursor logCursor;
-        try {
-            logCursor = logManager.readLog(firstLSNLogLocator, new ILogFilter() {
-                @Override
-                public boolean accept(IBuffer buffer, long startOffset, int length) {
-                    return true;
-                }
-            });
-        } catch (IOException e) {
-            throw new ACIDException("Failed to create LogCursor with LSN:" + firstLSNLogLocator.getLsn(), e);
-        }
-
-        LogicalLogLocator currentLogLocator = LogUtil.getDummyLogicalLogLocator(logManager);
-        boolean valid;
-        byte logType;
-        List<Long> undoLSNSet = null;
-
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info(" collecting loser transaction's LSNs from " + firstLSNLogLocator.getLsn() + " to "
-                    + +lastLSNLogLocator.getLsn());
-        }
-
-        while (currentLogLocator.getLsn() != lastLSNLogLocator.getLsn()) {
-            try {
-                valid = logCursor.next(currentLogLocator);
-            } catch (IOException e) {
-                throw new ACIDException("Failed to read log at LSN:" + currentLogLocator.getLsn(), e);
-            }
-            if (!valid) {
-                if (currentLogLocator.getLsn() != lastLSNLogLocator.getLsn()) {
-                    throw new ACIDException("LastLSN mismatch: " + lastLSNLogLocator.getLsn() + " vs "
-                            + currentLogLocator.getLsn() + " during Rollback a transaction( " + txnContext.getJobId()
-                            + ")");
-                } else {
-                    break;//End of Log File
-                }
-            }
-
-            if (IS_DEBUG_MODE) {
-                System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
-            }
-
-            tempKeyTxnId.setTxnId(logRecordHelper.getJobId(currentLogLocator),
-                    logRecordHelper.getDatasetId(currentLogLocator), logRecordHelper.getPKHashValue(currentLogLocator));
-            logType = logRecordHelper.getLogType(currentLogLocator);
-
-            switch (logType) {
-                case LogType.UPDATE:
-                    undoLSNSet = loserTxnTable.get(tempKeyTxnId);
-                    if (undoLSNSet == null) {
-                        TxnId txnId = new TxnId(logRecordHelper.getJobId(currentLogLocator),
-                                logRecordHelper.getDatasetId(currentLogLocator),
-                                logRecordHelper.getPKHashValue(currentLogLocator));
-                        undoLSNSet = new LinkedList<Long>();
-                        loserTxnTable.put(txnId, undoLSNSet);
-                    }
-                    undoLSNSet.add(currentLogLocator.getLsn());
-                    if (IS_DEBUG_MODE) {
-                        updateLogCount++;
-                        System.out.println("" + Thread.currentThread().getId() + "======> update["
-                                + currentLogLocator.getLsn() + "]:" + tempKeyTxnId);
-                    }
-                    break;
-
-                case LogType.COMMIT:
-                case LogType.ENTITY_COMMIT:
-                    undoLSNSet = loserTxnTable.get(tempKeyTxnId);
-                    if (undoLSNSet != null) {
-                        loserTxnTable.remove(tempKeyTxnId);
-                    }
-                    if (IS_DEBUG_MODE) {
-                        commitLogCount++;
-                        System.out.println("" + Thread.currentThread().getId() + "======> commit["
-                                + currentLogLocator.getLsn() + "]" + tempKeyTxnId);
-                    }
-                    break;
-
-                default:
-                    throw new ACIDException("Unsupported LogType: " + logType);
-            }
-        }
-
-        //undo loserTxn's effect
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info(" undoing loser transaction's effect");
-        }
-
-        TxnId txnId = null;
-        Iterator<Entry<TxnId, List<Long>>> iter = loserTxnTable.entrySet().iterator();
-        byte resourceMgrId;
-        int undoCount = 0;
-        while (iter.hasNext()) {
-            //TODO 
-            //Sort the lsns in order to undo in one pass. 
-
-            Map.Entry<TxnId, List<Long>> loserTxn = (Map.Entry<TxnId, List<Long>>) iter.next();
-            txnId = loserTxn.getKey();
-
-            undoLSNSet = loserTxn.getValue();
-
-            for (long undoLSN : undoLSNSet) {
-                // here, all the log records are UPDATE type. So, we don't need to check the type again.
-
-                //read the corresponding log record to be undone.
-                logManager.readLog(undoLSN, currentLogLocator);
-
-                if (IS_DEBUG_MODE) {
-                    System.out.println(logManager.getLogRecordHelper().getLogRecordForDisplay(currentLogLocator));
-                }
-
-                // extract the resource manager id from the log record.
-                resourceMgrId = logRecordHelper.getResourceMgrId(currentLogLocator);
-                if (LOGGER.isLoggable(Level.FINE)) {
-                    LOGGER.fine(logRecordHelper.getLogRecordForDisplay(currentLogLocator));
-                }
-
-                // look up the repository to get the resource manager
-                IResourceManager resourceMgr = txnSubsystem.getTransactionalResourceRepository()
-                        .getTransactionalResourceMgr(resourceMgrId);
-
-                // register resourceMgr if it is not registered. 
-                if (resourceMgr == null) {
-                    resourceMgr = new IndexResourceManager(resourceMgrId, txnSubsystem);
-                    txnSubsystem.getTransactionalResourceRepository().registerTransactionalResourceManager(
-                            resourceMgrId, resourceMgr);
-                }
-                resourceMgr.undo(logRecordHelper, currentLogLocator);
-
-                if (IS_DEBUG_MODE) {
-                    undoCount++;
-                }
-            }
-        }
-
-        if (LOGGER.isLoggable(Level.INFO)) {
-            LOGGER.info(" undone loser transaction's effect");
-        }
-        if (IS_DEBUG_MODE) {
-            System.out.println("UpdateLogCount/CommitLogCount/UndoCount:" + updateLogCount + "/" + commitLogCount + "/"
-                    + undoCount);
-        }
-    }
-}
-
-class TxnId {
-    public int jobId;
-    public int datasetId;
-    public int pkHashVal;
-
-    public TxnId(int jobId, int datasetId, int pkHashVal) {
-        this.jobId = jobId;
-        this.datasetId = datasetId;
-        this.pkHashVal = pkHashVal;
-    }
-
-    public void setTxnId(int jobId, int datasetId, int pkHashVal) {
-        this.jobId = jobId;
-        this.datasetId = datasetId;
-        this.pkHashVal = pkHashVal;
-    }
-
-    public void setTxnId(TxnId txnId) {
-        this.jobId = txnId.jobId;
-        this.datasetId = txnId.datasetId;
-        this.pkHashVal = txnId.pkHashVal;
-    }
-
-    @Override
-    public String toString() {
-        return "[" + jobId + "," + datasetId + "," + pkHashVal + "]";
-    }
-
-    @Override
-    public int hashCode() {
-        return pkHashVal;
-    }
-
-    @Override
-    public boolean equals(Object o) {
-        if (o == this) {
-            return true;
-        }
-        if (!(o instanceof TxnId)) {
-            return false;
-        }
-        TxnId txnId = (TxnId) o;
-
-        return (txnId.pkHashVal == pkHashVal && txnId.datasetId == datasetId && txnId.jobId == jobId);
-    }
-}
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetIdFactory.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetIdFactory.java
deleted file mode 100644
index 65512ec..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/DatasetIdFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package edu.uci.ics.asterix.transaction.management.service.transaction;
-
-import java.util.concurrent.atomic.AtomicInteger;
-
-public class DatasetIdFactory {
-    private static AtomicInteger id = new AtomicInteger();
-    
-    public static void initialize(int initialId) {
-    	id.set(initialId);
-    }
-
-    public static int generateDatasetId() {
-        return id.incrementAndGet();
-    }
-}
\ No newline at end of file
diff --git a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManagementConstants.java b/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
deleted file mode 100644
index 3d25e54..0000000
--- a/asterix/asterix-transactions/src/main/java/edu/uci/ics/asterix/transaction/management/service/transaction/TransactionManagementConstants.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright 2009-2010 by The Regents of the University of California
- * Licensed 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 from
- * 
- *     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.
- */
-package edu.uci.ics.asterix.transaction.management.service.transaction;
-
-/**
- * Represents a umbrella class containing constant that are used by transaction
- * sub-systems (Lock/Log)Manager.
- */
-public class TransactionManagementConstants {
-
-    public static class ResourceMgrIds {
-        public static final byte BTREE_RESOURCE_MGR_ID = 1;
-        public static final byte METADATA_RESOURCE_MGR_ID = 2;
-    }
-
-    public static class LogManagerConstants {
-        public static final String LOG_CONF_DIR = "log_conf";
-        public static final String LOG_CONF_FILE = "log.properties";
-        public static final String ASTERIX_CONF_DIR = "src/main/resources";
-        public static final String ASTERIX_CONF_FILE = "test.properties";
-        public static final String DEFAULT_LOG_DIR = "asterix_logs";
-        public static final int TERMINAL_LSN = -1;
-    }
-
-    public static class LockManagerConstants {
-        public static final String LOCK_CONF_DIR = "lock_conf";
-        public static final String LOCK_CONF_FILE = "lock.conf";
-        public static final int[] LOCK_CONFLICT_MATRIX = new int[] { 2, 3 };
-        public static final int[] LOCK_CONVERT_MATRIX = new int[] { 2, 0 };
-
-        public static class LockMode {
-            public static final byte S = 0;
-            public static final byte X = 1;
-            public static final byte IS = 2;
-            public static final byte IX = 3;
-        }
-    }
-
-}
diff --git a/asterix/pom.xml b/asterix/pom.xml
deleted file mode 100644
index 2d0922f..0000000
--- a/asterix/pom.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
-	<modelVersion>4.0.0</modelVersion>
-	<groupId>edu.uci.ics.asterix</groupId>
-	<artifactId>asterix</artifactId>
-	<version>0.0.5-SNAPSHOT</version>
-	<packaging>pom</packaging>
-
-    <properties>
-    	<algebricks.version>0.2.4</algebricks.version>
-    	<hyracks.version>0.2.4</hyracks.version>
-    </properties>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.apache.maven.plugins</groupId>
-				<artifactId>maven-release-plugin</artifactId>
-				<version>2.1</version>
-				<configuration>
-                    <goals>package source:jar javadoc:jar deploy:deploy</goals>
-				</configuration>
-			</plugin>
-		</plugins>
-	</build>
-
-	<scm>
-		<connection>scm:svn:https://asterixdb.googlecode.com/svn/trunk/asterix</connection>
-		<developerConnection>scm:svn:https://asterixdb.googlecode.com/svn/trunk/asterix</developerConnection>
-	</scm>
-
-	<distributionManagement>
-		<repository>
-			<id>asterix-releases</id>
-			<url>http://obelix.ics.uci.edu/nexus/content/repositories/asterix-releases/</url>
-		</repository>
-		<snapshotRepository>
-			<id>asterix-snapshots</id>
-			<url>http://obelix.ics.uci.edu/nexus/content/repositories/asterix-snapshots/</url>
-		</snapshotRepository>
-	</distributionManagement>
-
-    <profiles>
-        <profile>
-          <id>32bitvm</id>
-          <activation>
-            <property>
-              <name>sun.arch.data.model</name>
-              <value>32</value>
-            </property>
-          </activation>
-          <properties>
-            <test.heap.size>2047</test.heap.size>
-          </properties>
-        </profile>
-
-        <profile>
-          <id>64bitvm</id>
-          <activation>
-            <property>
-              <name>sun.arch.data.model</name>
-              <value>64</value>
-            </property>
-          </activation>
-          <properties>
-            <test.heap.size>3072</test.heap.size>
-          </properties>
-        </profile>
-    </profiles>
-
-	<modules>
-		<module>asterix-common</module>
-		<module>asterix-algebra</module>
-		<module>asterix-app</module>
-		<module>asterix-tools</module>
-		<module>asterix-transactions</module>
-		<module>asterix-runtime</module>
-		<module>asterix-om</module>
-		<module>asterix-aql</module>
-                <module>asterix-external-data</module>
-                <module>asterix-metadata</module>
-                <module>asterix-test-framework</module>
-                <module>asterix-maven-plugins</module>
-                <module>asterix-server</module>
-                <module>asterix-installer</module>
-                <module>asterix-events</module>
-        </modules>
-
-	<repositories>
-		<repository>
-			<releases>
-				<enabled>true</enabled>
-				<updatePolicy>always</updatePolicy>
-				<checksumPolicy>warn</checksumPolicy>
-			</releases>
-			<snapshots>
-				<enabled>true</enabled>
-				<updatePolicy>always</updatePolicy>
-				<checksumPolicy>fail</checksumPolicy>
-			</snapshots>
-			<id>asterix-public</id>
-			<url>http://obelix.ics.uci.edu/nexus/content/groups/asterix-public/</url>
-		</repository>
-		<repository>
-			<releases>
-				<enabled>true</enabled>
-				<updatePolicy>always</updatePolicy>
-				<checksumPolicy>warn</checksumPolicy>
-			</releases>
-			<snapshots>
-				<enabled>true</enabled>
-				<updatePolicy>always</updatePolicy>
-				<checksumPolicy>fail</checksumPolicy>
-			</snapshots>
-			<id>third-party</id>
-			<url>http://obelix.ics.uci.edu/nexus/content/repositories/third-party/</url>
-		</repository>
-		<repository>
-			<releases>
-				<enabled>true</enabled>
-				<updatePolicy>always</updatePolicy>
-				<checksumPolicy>warn</checksumPolicy>
-			</releases>
-			<id>algebricks-releases</id>
-			<url>http://obelix.ics.uci.edu/nexus/content/repositories/algebricks-releases/</url>
-		</repository>
-		<repository>
-			<snapshots>
-				<enabled>true</enabled>
-				<updatePolicy>always</updatePolicy>
-				<checksumPolicy>fail</checksumPolicy>
-			</snapshots>
-			<id>algebricks-snapshots</id>
-			<url>http://obelix.ics.uci.edu/nexus/content/repositories/algebricks-snapshots/</url>
-		</repository>
-	</repositories>
-    <dependencies>
-        <dependency>
-            <groupId>net.sourceforge.cobertura</groupId>
-            <artifactId>cobertura</artifactId>
-            <version>1.9.4</version>
-            <optional>true</optional>
-        </dependency>
-    </dependencies>
-        <dependencyManagement>
-    	<dependencies>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>algebricks-compiler</artifactId>
-    			<version>${algebricks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-api</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-dataflow-std</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-control-cc</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-control-nc</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-server</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-cli</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-dataflow-hadoop</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-storage-am-btree</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-storage-am-rtree</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>
-    				hyracks-storage-am-invertedindex
-    			</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-    		<dependency>
-    			<groupId>edu.uci.ics.hyracks</groupId>
-    			<artifactId>hyracks-storage-am-common</artifactId>
-    			<version>${hyracks.version}</version>
-    		</dependency>
-		    <dependency>
-                <groupId>edu.uci.ics.hyracks</groupId>
-                <artifactId>hyracks-client</artifactId>
-                <version>${hyracks.version}</version>
-            </dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-common</artifactId>
-			<version>${hyracks.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-btree</artifactId>
-			<version>${hyracks.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
-			<version>${hyracks.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>edu.uci.ics.hyracks</groupId>
-			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
-			<version>${hyracks.version}</version>
-		</dependency>
-    	</dependencies>
-    </dependencyManagement>
-</project>
diff --git a/asterix/build.xml b/build.xml
similarity index 100%
rename from asterix/build.xml
rename to build.xml
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..20efdb3
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>edu.uci.ics.asterix</groupId>
+	<artifactId>asterix</artifactId>
+	<version>0.0.6-SNAPSHOT</version>
+	<packaging>pom</packaging>
+
+    <properties>
+    	<algebricks.version>0.2.6-SNAPSHOT</algebricks.version>
+    	<hyracks.version>0.2.6-SNAPSHOT</hyracks.version>
+    </properties>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-release-plugin</artifactId>
+				<version>2.1</version>
+				<configuration>
+                    <goals>package source:jar javadoc:jar deploy:deploy</goals>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+
+	<scm>
+		<connection>scm:git:https://code.google.com/p/asterixdb/</connection>
+		<developerConnection>scm:git:https://code.google.com/p/asterixdb/</developerConnection>
+	</scm>
+
+	<distributionManagement>
+		<repository>
+			<id>asterix-releases</id>
+			<url>http://obelix.ics.uci.edu/nexus/content/repositories/asterix-releases/</url>
+		</repository>
+		<snapshotRepository>
+			<id>asterix-snapshots</id>
+			<url>http://obelix.ics.uci.edu/nexus/content/repositories/asterix-snapshots/</url>
+		</snapshotRepository>
+	</distributionManagement>
+
+    <profiles>
+        <profile>
+          <id>32bitvm</id>
+          <activation>
+            <property>
+              <name>sun.arch.data.model</name>
+              <value>32</value>
+            </property>
+          </activation>
+          <properties>
+            <test.heap.size>2047</test.heap.size>
+          </properties>
+        </profile>
+
+        <profile>
+          <id>64bitvm</id>
+          <activation>
+            <property>
+              <name>sun.arch.data.model</name>
+              <value>64</value>
+            </property>
+          </activation>
+          <properties>
+            <test.heap.size>3072</test.heap.size>
+          </properties>
+        </profile>
+    </profiles>
+
+	<modules>
+		<module>asterix-common</module>
+		<module>asterix-algebra</module>
+		<module>asterix-app</module>
+		<module>asterix-tools</module>
+		<module>asterix-transactions</module>
+		<module>asterix-runtime</module>
+		<module>asterix-om</module>
+		<module>asterix-aql</module>
+                <module>asterix-external-data</module>
+                <module>asterix-metadata</module>
+                <module>asterix-test-framework</module>
+                <module>asterix-maven-plugins</module>
+                <module>asterix-server</module>
+                <module>asterix-installer</module>
+                <module>asterix-events</module>
+        </modules>
+
+	<repositories>
+		<repository>
+			<releases>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+				<checksumPolicy>warn</checksumPolicy>
+			</releases>
+			<snapshots>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+				<checksumPolicy>fail</checksumPolicy>
+			</snapshots>
+			<id>asterix-public</id>
+			<url>http://obelix.ics.uci.edu/nexus/content/groups/asterix-public/</url>
+		</repository>
+		<repository>
+			<releases>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+				<checksumPolicy>warn</checksumPolicy>
+			</releases>
+			<snapshots>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+				<checksumPolicy>fail</checksumPolicy>
+			</snapshots>
+			<id>third-party</id>
+			<url>http://obelix.ics.uci.edu/nexus/content/repositories/third-party/</url>
+		</repository>
+		<repository>
+			<releases>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+				<checksumPolicy>warn</checksumPolicy>
+			</releases>
+			<id>algebricks-releases</id>
+			<url>http://obelix.ics.uci.edu/nexus/content/repositories/algebricks-releases/</url>
+		</repository>
+		<repository>
+			<snapshots>
+				<enabled>true</enabled>
+				<updatePolicy>always</updatePolicy>
+				<checksumPolicy>fail</checksumPolicy>
+			</snapshots>
+			<id>algebricks-snapshots</id>
+			<url>http://obelix.ics.uci.edu/nexus/content/repositories/algebricks-snapshots/</url>
+		</repository>
+	</repositories>
+    <dependencies>
+        <dependency>
+            <groupId>net.sourceforge.cobertura</groupId>
+            <artifactId>cobertura</artifactId>
+            <version>1.9.4</version>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+        <dependencyManagement>
+    	<dependencies>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>algebricks-compiler</artifactId>
+    			<version>${algebricks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-api</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-dataflow-std</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-control-cc</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-control-nc</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-server</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-cli</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-dataflow-hadoop</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-storage-am-btree</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-storage-am-rtree</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>
+    				hyracks-storage-am-invertedindex
+    			</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+    		<dependency>
+    			<groupId>edu.uci.ics.hyracks</groupId>
+    			<artifactId>hyracks-storage-am-common</artifactId>
+    			<version>${hyracks.version}</version>
+    		</dependency>
+		    <dependency>
+                <groupId>edu.uci.ics.hyracks</groupId>
+                <artifactId>hyracks-client</artifactId>
+                <version>${hyracks.version}</version>
+            </dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-common</artifactId>
+			<version>${hyracks.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-btree</artifactId>
+			<version>${hyracks.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-rtree</artifactId>
+			<version>${hyracks.version}</version>
+		</dependency>
+		<dependency>
+			<groupId>edu.uci.ics.hyracks</groupId>
+			<artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
+			<version>${hyracks.version}</version>
+		</dependency>
+    	</dependencies>
+    </dependencyManagement>
+</project>