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("<", "<");
+ message = message.replace(">", ">");
+ 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("<", "<");
- message = message.replace(">", ">");
- 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>