http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index dc1cb65..741ce56 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -85,7 +85,7 @@ import org.apache.asterix.metadata.entities.Feed;
 import org.apache.asterix.metadata.entities.Function;
 import org.apache.asterix.metadata.entities.InternalDatasetDetails;
 import org.apache.asterix.metadata.functions.ExternalFunctionCompilerUtil;
-import org.apache.asterix.metadata.utils.DatasetUtils;
+import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.om.base.AInt64;
 import org.apache.asterix.om.base.AString;
 import org.apache.asterix.om.constants.AsterixConstantValue;
@@ -94,7 +94,7 @@ import org.apache.asterix.om.functions.FunctionInfo;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.IAType;
 import org.apache.asterix.runtime.formats.FormatUtils;
-import org.apache.asterix.runtime.util.AppContextInfo;
+import org.apache.asterix.runtime.utils.AppContextInfo;
 import 
org.apache.asterix.translator.CompiledStatements.CompiledInsertStatement;
 import 
org.apache.asterix.translator.CompiledStatements.CompiledLoadFromFileStatement;
 import 
org.apache.asterix.translator.CompiledStatements.CompiledSubscribeFeedStatement;
@@ -199,11 +199,11 @@ class LangExpressionToPlanTranslator
                     "Unable to load dataset " + clffs.getDatasetName() + " 
since it does not exist");
         }
         IAType itemType = 
metadataProvider.findType(dataset.getItemTypeDataverseName(), 
dataset.getItemTypeName());
-        IAType metaItemType = 
metadataProvider.findType(dataset.getMetaItemTypeDataverseName(),
-                dataset.getMetaItemTypeName());
-        DatasetDataSource targetDatasource = 
validateDatasetInfo(metadataProvider, stmt.getDataverseName(),
-                stmt.getDatasetName());
-        List<List<String>> partitionKeys = 
DatasetUtils.getPartitioningKeys(targetDatasource.getDataset());
+        IAType metaItemType =
+                
metadataProvider.findType(dataset.getMetaItemTypeDataverseName(), 
dataset.getMetaItemTypeName());
+        DatasetDataSource targetDatasource =
+                validateDatasetInfo(metadataProvider, stmt.getDataverseName(), 
stmt.getDatasetName());
+        List<List<String>> partitionKeys = 
DatasetUtil.getPartitioningKeys(targetDatasource.getDataset());
         if (dataset.hasMetaPart()) {
             throw new AlgebricksException(
                     dataset.getDatasetName() + ": load dataset is not 
supported on Datasets with Meta records");
@@ -254,7 +254,7 @@ class LangExpressionToPlanTranslator
             assign.setExplicitOrderingProperty(new 
LocalOrderProperty(orderColumns));
         }
 
-        List<String> additionalFilteringField = 
DatasetUtils.getFilterField(targetDatasource.getDataset());
+        List<String> additionalFilteringField = 
DatasetUtil.getFilterField(targetDatasource.getDataset());
         List<LogicalVariable> additionalFilteringVars;
         List<Mutable<ILogicalExpression>> additionalFilteringAssignExpressions;
         List<Mutable<ILogicalExpression>> additionalFilteringExpressions = 
null;
@@ -265,8 +265,8 @@ class LangExpressionToPlanTranslator
             additionalFilteringExpressions = new ArrayList<>();
             
PlanTranslationUtil.prepareVarAndExpression(additionalFilteringField, 
payloadVar, additionalFilteringVars,
                     additionalFilteringAssignExpressions, 
additionalFilteringExpressions, context);
-            additionalFilteringAssign = new 
AssignOperator(additionalFilteringVars,
-                    additionalFilteringAssignExpressions);
+            additionalFilteringAssign =
+                    new AssignOperator(additionalFilteringVars, 
additionalFilteringAssignExpressions);
         }
 
         InsertDeleteUpsertOperator insertOp = new 
InsertDeleteUpsertOperator(targetDatasource, payloadRef,
@@ -345,14 +345,15 @@ class LangExpressionToPlanTranslator
             ProjectOperator projectOperator = (ProjectOperator) topOp;
             projectOperator.getVariables().set(0, seqVar);
             resVar = seqVar;
-            DatasetDataSource targetDatasource = 
validateDatasetInfo(metadataProvider, stmt.getDataverseName(),
-                    stmt.getDatasetName());
-            List<Integer> keySourceIndicator = ((InternalDatasetDetails) 
targetDatasource.getDataset()
-                    .getDatasetDetails()).getKeySourceIndicator();
+            DatasetDataSource targetDatasource =
+                    validateDatasetInfo(metadataProvider, 
stmt.getDataverseName(), stmt.getDatasetName());
+            List<Integer> keySourceIndicator =
+                    ((InternalDatasetDetails) 
targetDatasource.getDataset().getDatasetDetails())
+                            .getKeySourceIndicator();
             ArrayList<LogicalVariable> vars = new ArrayList<>();
             ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<>();
             List<Mutable<ILogicalExpression>> varRefsForLoading = new 
ArrayList<>();
-            List<List<String>> partitionKeys = 
DatasetUtils.getPartitioningKeys(targetDatasource.getDataset());
+            List<List<String>> partitionKeys = 
DatasetUtil.getPartitioningKeys(targetDatasource.getDataset());
             int numOfPrimaryKeys = partitionKeys.size();
             for (int i = 0; i < numOfPrimaryKeys; i++) {
                 if (keySourceIndicator == null || 
keySourceIndicator.get(i).intValue() == 0) {
@@ -367,7 +368,7 @@ class LangExpressionToPlanTranslator
             }
 
             AssignOperator assign = new AssignOperator(vars, exprs);
-            List<String> additionalFilteringField = 
DatasetUtils.getFilterField(targetDatasource.getDataset());
+            List<String> additionalFilteringField = 
DatasetUtil.getFilterField(targetDatasource.getDataset());
             List<LogicalVariable> additionalFilteringVars;
             List<Mutable<ILogicalExpression>> 
additionalFilteringAssignExpressions;
             List<Mutable<ILogicalExpression>> additionalFilteringExpressions = 
null;
@@ -380,8 +381,8 @@ class LangExpressionToPlanTranslator
                 
PlanTranslationUtil.prepareVarAndExpression(additionalFilteringField, resVar, 
additionalFilteringVars,
                         additionalFilteringAssignExpressions, 
additionalFilteringExpressions, context);
 
-                additionalFilteringAssign = new 
AssignOperator(additionalFilteringVars,
-                        additionalFilteringAssignExpressions);
+                additionalFilteringAssign =
+                        new AssignOperator(additionalFilteringVars, 
additionalFilteringAssignExpressions);
                 additionalFilteringAssign.getInputs().add(new 
MutableObject<>(topOp));
                 assign.getInputs().add(new 
MutableObject<>(additionalFilteringAssign));
             } else {
@@ -439,7 +440,7 @@ class LangExpressionToPlanTranslator
     private ILogicalOperator translateDelete(DatasetDataSource 
targetDatasource, Mutable<ILogicalExpression> varRef,
             List<Mutable<ILogicalExpression>> varRefsForLoading,
             List<Mutable<ILogicalExpression>> additionalFilteringExpressions, 
ILogicalOperator assign)
-                    throws AlgebricksException {
+            throws AlgebricksException {
         if (targetDatasource.getDataset().hasMetaPart()) {
             throw new 
AlgebricksException(targetDatasource.getDataset().getDatasetName()
                     + ": delete from dataset is not supported on Datasets with 
Meta records");
@@ -526,8 +527,8 @@ class LangExpressionToPlanTranslator
                 feedModificationOp.getInputs().add(assign.getInputs().get(0));
             }
         } else {
-            final InsertDeleteUpsertOperator.Kind opKind = isUpsertFeed ? 
InsertDeleteUpsertOperator.Kind.UPSERT
-                    : InsertDeleteUpsertOperator.Kind.INSERT;
+            final InsertDeleteUpsertOperator.Kind opKind =
+                    isUpsertFeed ? InsertDeleteUpsertOperator.Kind.UPSERT : 
InsertDeleteUpsertOperator.Kind.INSERT;
             feedModificationOp = new 
InsertDeleteUpsertOperator(targetDatasource, varRef, varRefsForLoading,
                     metaExpSingletonList, opKind, false);
             if (isUpsertFeed) {
@@ -553,7 +554,7 @@ class LangExpressionToPlanTranslator
             List<String> additionalFilteringField, LogicalVariable unnestVar, 
ILogicalOperator topOp,
             List<Mutable<ILogicalExpression>> exprs, LogicalVariable resVar, 
AssignOperator additionalFilteringAssign,
             ICompiledDmlStatement stmt) throws AlgebricksException {
-        if (!targetDatasource.getDataset().allow(topOp, Dataset.OP_UPSERT)) {
+        if (!targetDatasource.getDataset().allow(topOp, 
DatasetUtil.OP_UPSERT)) {
             throw new 
AlgebricksException(targetDatasource.getDataset().getDatasetName()
                     + ": upsert into dataset is not supported on Datasets with 
Meta records");
         }
@@ -597,8 +598,8 @@ class LangExpressionToPlanTranslator
                 }
             }
             // A change feed, we don't need the assign to access PKs
-            upsertOp = new InsertDeleteUpsertOperator(targetDatasource, 
varRef, varRefsForLoading, metaExpSingletonList,
-                    InsertDeleteUpsertOperator.Kind.UPSERT, false);
+            upsertOp = new InsertDeleteUpsertOperator(targetDatasource, 
varRef, varRefsForLoading,
+                    metaExpSingletonList, 
InsertDeleteUpsertOperator.Kind.UPSERT, false);
             // Create and add a new variable used for representing the 
original record
             upsertOp.setPrevRecordVar(context.newVar());
             upsertOp.setPrevRecordType(targetDatasource.getItemType());
@@ -664,8 +665,8 @@ class LangExpressionToPlanTranslator
         // Adds the commit operator.
         CompiledInsertStatement compiledInsert = (CompiledInsertStatement) 
stmt;
         Expression returnExpression = compiledInsert.getReturnExpression();
-        ILogicalOperator rootOperator = new DelegateOperator(
-                new CommitOperator(returnExpression == null ? true : false));
+        ILogicalOperator rootOperator =
+                new DelegateOperator(new CommitOperator(returnExpression == 
null ? true : false));
         rootOperator.getInputs().add(new MutableObject<>(insertOp));
 
         // Compiles the return expression.
@@ -685,8 +686,8 @@ class LangExpressionToPlanTranslator
         context.newVar(compiledInsert.getVar());
         context.setVar(compiledInsert.getVar(),
                 ((VariableReferenceExpression) 
insertOp.getPayloadExpression().getValue()).getVariableReference());
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = 
langExprToAlgExpression(returnExpression,
-                    new MutableObject<>(rootOperator));
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> p =
+                langExprToAlgExpression(returnExpression, new 
MutableObject<>(rootOperator));
 
         // Adds an assign operator for the returning expression.
         LogicalVariable resultVar = context.newVar();
@@ -714,8 +715,8 @@ class LangExpressionToPlanTranslator
         }
         DataSourceId sourceId = new DataSourceId(dataverseName, datasetName);
         IAType itemType = 
metadataProvider.findType(dataset.getItemTypeDataverseName(), 
dataset.getItemTypeName());
-        IAType metaItemType = 
metadataProvider.findType(dataset.getMetaItemTypeDataverseName(),
-                dataset.getMetaItemTypeName());
+        IAType metaItemType =
+                
metadataProvider.findType(dataset.getMetaItemTypeDataverseName(), 
dataset.getMetaItemTypeName());
         INodeDomain domain = 
metadataProvider.findNodeDomain(dataset.getNodeGroupName());
         return new DatasetDataSource(sourceId, dataset, itemType, 
metaItemType, DataSource.Type.INTERNAL_DATASET,
                 dataset.getDatasetDetails(), domain);
@@ -723,8 +724,8 @@ class LangExpressionToPlanTranslator
 
     private FileSplit getDefaultOutputFileLocation() throws MetadataException {
         String outputDir = System.getProperty("java.io.tmpDir");
-        String filePath = outputDir + System.getProperty("file.separator") + 
OUTPUT_FILE_PREFIX
-                + outputFileID.incrementAndGet();
+        String filePath =
+                outputDir + System.getProperty("file.separator") + 
OUTPUT_FILE_PREFIX + outputFileID.incrementAndGet();
         MetadataProperties metadataProperties = 
AppContextInfo.INSTANCE.getMetadataProperties();
         return new ManagedFileSplit(metadataProperties.getMetadataNodeName(), 
filePath);
     }
@@ -741,8 +742,8 @@ class LangExpressionToPlanTranslator
             returnedOp.getInputs().add(tupSource);
         } else {
             v = context.newVar(lc.getVarExpr());
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = 
langExprToAlgExpression(lc.getBindingExpr(),
-                    tupSource);
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo =
+                    langExprToAlgExpression(lc.getBindingExpr(), tupSource);
             returnedOp = new AssignOperator(v, new MutableObject<>(eo.first));
             returnedOp.getInputs().add(eo.second);
         }
@@ -754,11 +755,11 @@ class LangExpressionToPlanTranslator
             throws CompilationException {
         Pair<ILogicalExpression, Mutable<ILogicalOperator>> p = 
langExprToAlgExpression(fa.getExpr(), tupSource);
         LogicalVariable v = context.newVar();
-        AbstractFunctionCallExpression fldAccess = new 
ScalarFunctionCallExpression(
-                
FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME));
+        AbstractFunctionCallExpression fldAccess =
+                new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.FIELD_ACCESS_BY_NAME));
         fldAccess.getArguments().add(new MutableObject<>(p.first));
-        ILogicalExpression faExpr = new ConstantExpression(
-                new AsterixConstantValue(new 
AString(fa.getIdent().getValue())));
+        ILogicalExpression faExpr =
+                new ConstantExpression(new AsterixConstantValue(new 
AString(fa.getIdent().getValue())));
         fldAccess.getArguments().add(new MutableObject<>(faExpr));
         AssignOperator a = new AssignOperator(v, new 
MutableObject<>(fldAccess));
         a.getInputs().add(p.second);
@@ -772,12 +773,11 @@ class LangExpressionToPlanTranslator
         LogicalVariable v = context.newVar();
         AbstractFunctionCallExpression f;
         if (ia.isAny()) {
-            f = new ScalarFunctionCallExpression(
-                    
FunctionUtil.getFunctionInfo(BuiltinFunctions.ANY_COLLECTION_MEMBER));
+            f = new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.ANY_COLLECTION_MEMBER));
             f.getArguments().add(new MutableObject<>(p.first));
         } else {
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> indexPair = 
langExprToAlgExpression(ia.getIndexExpr(),
-                    tupSource);
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> indexPair =
+                    langExprToAlgExpression(ia.getIndexExpr(), tupSource);
             f = new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.GET_ITEM));
             f.getArguments().add(new MutableObject<>(p.first));
             f.getArguments().add(new MutableObject<>(indexPair.first));
@@ -884,8 +884,8 @@ class LangExpressionToPlanTranslator
         if (BuiltinFunctions.isBuiltinAggregateFunction(fi)) {
             f = BuiltinFunctions.makeAggregateFunctionExpression(fi, args);
         } else if (BuiltinFunctions.isBuiltinUnnestingFunction(fi)) {
-            UnnestingFunctionCallExpression ufce = new 
UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi),
-                    args);
+            UnnestingFunctionCallExpression ufce =
+                    new 
UnnestingFunctionCallExpression(FunctionUtil.getFunctionInfo(fi), args);
             
ufce.setReturnsUniqueValues(BuiltinFunctions.returnsUniqueValues(fi));
             f = ufce;
         } else {
@@ -907,8 +907,9 @@ class LangExpressionToPlanTranslator
             List<Pair<Expression, Identifier>> groupFieldList = 
gc.getGroupFieldList();
             List<Mutable<ILogicalExpression>> groupRecordConstructorArgList = 
new ArrayList<>();
             for (Pair<Expression, Identifier> groupField : groupFieldList) {
-                ILogicalExpression groupFieldNameExpr = 
langExprToAlgExpression(
-                        new LiteralExpr(new 
StringLiteral(groupField.second.getValue())), topOp).first;
+                ILogicalExpression groupFieldNameExpr =
+                        langExprToAlgExpression(new LiteralExpr(new 
StringLiteral(groupField.second.getValue())),
+                                topOp).first;
                 groupRecordConstructorArgList.add(new 
MutableObject<>(groupFieldNameExpr));
                 ILogicalExpression groupFieldExpr = 
langExprToAlgExpression(groupField.first, topOp).first;
                 groupRecordConstructorArgList.add(new 
MutableObject<>(groupFieldExpr));
@@ -944,8 +945,8 @@ class LangExpressionToPlanTranslator
                     new MutableObject<>(new NestedTupleSourceOperator(new 
MutableObject<>(gOp))));
             List<Mutable<ILogicalExpression>> flArgs = new ArrayList<>(1);
             flArgs.add(new MutableObject<>(listifyInput.first));
-            AggregateFunctionCallExpression fListify = BuiltinFunctions
-                    .makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, 
flArgs);
+            AggregateFunctionCallExpression fListify =
+                    
BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, 
flArgs);
             LogicalVariable aggVar = context.newVar();
             AggregateOperator agg = new 
AggregateOperator(mkSingletonArrayList(aggVar),
                     mkSingletonArrayList(new MutableObject<>(fListify)));
@@ -1005,14 +1006,14 @@ class LangExpressionToPlanTranslator
         LogicalVariable unnestVar = context.newVar();
         UnnestOperator unnestOp = new UnnestOperator(unnestVar,
                 new MutableObject<>(new UnnestingFunctionCallExpression(
-                        
FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION),
-                        Collections.singletonList(new MutableObject<>(new 
VariableReferenceExpression(selectVar))))));
+                        
FunctionUtil.getFunctionInfo(BuiltinFunctions.SCAN_COLLECTION), Collections
+                                .singletonList(new MutableObject<>(new 
VariableReferenceExpression(selectVar))))));
         unnestOp.getInputs().add(new MutableObject<>(assignOp));
 
         // Produces the final result.
         LogicalVariable resultVar = context.newVar();
-        AssignOperator finalAssignOp = new AssignOperator(resultVar,
-                new MutableObject<>(new 
VariableReferenceExpression(unnestVar)));
+        AssignOperator finalAssignOp =
+                new AssignOperator(resultVar, new MutableObject<>(new 
VariableReferenceExpression(unnestVar)));
         finalAssignOp.getInputs().add(new MutableObject<>(unnestOp));
         return new Pair<>(finalAssignOp, resultVar);
     }
@@ -1167,7 +1168,8 @@ class LangExpressionToPlanTranslator
         firstOp.getInputs().add(topOp);
         topOp = lastOp;
 
-        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = 
langExprToAlgExpression(qe.getSatisfiesExpr(), topOp);
+        Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 =
+                langExprToAlgExpression(qe.getSatisfiesExpr(), topOp);
 
         AggregateFunctionCallExpression fAgg;
         SelectOperator s;
@@ -1182,8 +1184,7 @@ class LangExpressionToPlanTranslator
             s = new SelectOperator(new MutableObject<>(new 
ScalarFunctionCallExpression(
                     
FunctionUtil.getFunctionInfo(AlgebricksBuiltinFunctions.NOT), satExprList)), 
false, null);
             s.getInputs().add(eo2.second);
-            fAgg = 
BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.EMPTY_STREAM,
-                    new ArrayList<>());
+            fAgg = 
BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.EMPTY_STREAM, 
new ArrayList<>());
         }
         LogicalVariable qeVar = context.newVar();
         AggregateOperator a = new 
AggregateOperator(mkSingletonArrayList(qeVar),
@@ -1210,7 +1211,8 @@ class LangExpressionToPlanTranslator
             Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo1 = 
langExprToAlgExpression(fb.getLeftExpr(), topOp);
             f.getArguments().add(new MutableObject<>(eo1.first));
             topOp = eo1.second;
-            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 = 
langExprToAlgExpression(fb.getRightExpr(), topOp);
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo2 =
+                    langExprToAlgExpression(fb.getRightExpr(), topOp);
             f.getArguments().add(new MutableObject<>(eo2.first));
             topOp = eo2.second;
         }
@@ -1379,8 +1381,8 @@ class LangExpressionToPlanTranslator
             Mutable<ILogicalOperator> topOpRef) throws CompilationException {
         switch (expr.getKind()) {
             case VARIABLE_EXPRESSION:
-                VariableReferenceExpression ve = new 
VariableReferenceExpression(
-                        context.getVar(((VariableExpr) 
expr).getVar().getId()));
+                VariableReferenceExpression ve =
+                        new 
VariableReferenceExpression(context.getVar(((VariableExpr) 
expr).getVar().getId()));
                 return new Pair<>(ve, topOpRef);
             case LITERAL_EXPRESSION:
                 LiteralExpr val = (LiteralExpr) expr;
@@ -1417,8 +1419,8 @@ class LangExpressionToPlanTranslator
 
     protected Pair<ILogicalOperator, LogicalVariable> 
aggListifyForSubquery(LogicalVariable var,
             Mutable<ILogicalOperator> opRef, boolean bProject) {
-        AggregateFunctionCallExpression funAgg = BuiltinFunctions
-                .makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, new 
ArrayList<>());
+        AggregateFunctionCallExpression funAgg =
+                
BuiltinFunctions.makeAggregateFunctionExpression(BuiltinFunctions.LISTIFY, new 
ArrayList<>());
         funAgg.getArguments().add(new MutableObject<>(new 
VariableReferenceExpression(var)));
 
         LogicalVariable varListified = context.newSubplanOutputVar();
@@ -1575,10 +1577,10 @@ class LangExpressionToPlanTranslator
                     // There is a shared operator reference in the query plan.
                     // Deep copies the child plan.
                     LogicalOperatorDeepCopyWithNewVariablesVisitor visitor =
-                        new 
LogicalOperatorDeepCopyWithNewVariablesVisitor(context, null);
+                            new 
LogicalOperatorDeepCopyWithNewVariablesVisitor(context, null);
                     ILogicalOperator newChild = 
childRef.getValue().accept(visitor, null);
-                    LinkedHashMap<LogicalVariable, LogicalVariable> 
cloneVarMap = visitor
-                            .getInputToOutputVariableMapping();
+                    LinkedHashMap<LogicalVariable, LogicalVariable> 
cloneVarMap =
+                            visitor.getInputToOutputVariableMapping();
 
                     // Substitute variables according to the deep copy which 
generates new variables.
                     VariableUtilities.substituteVariables(currentOperator, 
cloneVarMap, null);
@@ -1591,8 +1593,8 @@ class LangExpressionToPlanTranslator
 
                 // Recursively eliminate shared operator reference for the 
operator subtree,
                 // even if it is a deep copy of some other one.
-                LinkedHashMap<LogicalVariable, LogicalVariable> childVarMap = 
eliminateSharedOperatorReference(childRef,
-                        opRefSet);
+                LinkedHashMap<LogicalVariable, LogicalVariable> childVarMap =
+                        eliminateSharedOperatorReference(childRef, opRefSet);
                 // Substitute variables according to the new subtree.
                 VariableUtilities.substituteVariables(currentOperator, 
childVarMap, null);
 
@@ -1635,8 +1637,8 @@ class LangExpressionToPlanTranslator
         context.enterSubplan();
         SubplanOperator subplanOp = new SubplanOperator();
         subplanOp.getInputs().add(new MutableObject<>(inputOp));
-        Mutable<ILogicalOperator> nestedSource = new MutableObject<>(
-                new NestedTupleSourceOperator(new MutableObject<>(subplanOp)));
+        Mutable<ILogicalOperator> nestedSource =
+                new MutableObject<>(new NestedTupleSourceOperator(new 
MutableObject<>(subplanOp)));
         SelectOperator select = new SelectOperator(selectExpr, false, null);
         // The select operator cannot be moved up and down, otherwise it will 
cause typing issues (ASTERIXDB-1203).
         OperatorPropertiesUtil.markMovable(select, false);
@@ -1656,8 +1658,8 @@ class LangExpressionToPlanTranslator
 
     // Processes EXISTS and NOT EXISTS.
     private AssignOperator processExists(ILogicalExpression inputExpr, 
LogicalVariable v1, boolean not) {
-        AbstractFunctionCallExpression count = new 
ScalarFunctionCallExpression(
-                FunctionUtil.getFunctionInfo(BuiltinFunctions.SCALAR_COUNT));
+        AbstractFunctionCallExpression count =
+                new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.SCALAR_COUNT));
         count.getArguments().add(new MutableObject<>(inputExpr));
         AbstractFunctionCallExpression comparison = new 
ScalarFunctionCallExpression(
                 FunctionUtil.getFunctionInfo(not ? BuiltinFunctions.EQ : 
BuiltinFunctions.NEQ));
@@ -1678,9 +1680,8 @@ class LangExpressionToPlanTranslator
         }
         Mutable<ILogicalExpression> hasBeenExecutedExprRef = new 
MutableObject<>(
                 new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.OR), 
arguments));
-        return new MutableObject<>(
-                new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT),
-                        new 
ArrayList<>(Collections.singletonList(hasBeenExecutedExprRef))));
+        return new MutableObject<>(new 
ScalarFunctionCallExpression(FunctionUtil.getFunctionInfo(BuiltinFunctions.NOT),
+                new 
ArrayList<>(Collections.singletonList(hasBeenExecutedExprRef))));
     }
 
     // For an input expression `expr`, return `expr AND expr IS NOT UNKOWN`.
@@ -1729,8 +1730,8 @@ class LangExpressionToPlanTranslator
         while (inputOpRefIterator.hasNext()) {
             // Generates the variable triple <leftVar, rightVar, outputVar> .
             topUnionVar = context.newVar();
-            Triple<LogicalVariable, LogicalVariable, LogicalVariable> 
varTriple = new Triple<>(leftInputVar,
-                    inputVarIterator.next(), topUnionVar);
+            Triple<LogicalVariable, LogicalVariable, LogicalVariable> 
varTriple =
+                    new Triple<>(leftInputVar, inputVarIterator.next(), 
topUnionVar);
             List<Triple<LogicalVariable, LogicalVariable, LogicalVariable>> 
varTriples = new ArrayList<>();
             varTriples.add(varTriple);
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
index 065b1b0..3d0315c 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/ValidateUtil.java
@@ -23,34 +23,44 @@ import java.util.List;
 
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.metadata.utils.KeyFieldTypeUtils;
+import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.metadata.utils.KeyFieldTypeUtil;
 import org.apache.asterix.om.types.ARecordType;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.IAType;
+import org.apache.asterix.om.utils.RecordUtil;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 
 /**
  * A util that can verify if a filter field, a list of partitioning 
expressions,
  * or a list of key fields are valid in a record type.
  */
 public class ValidateUtil {
+    private ValidateUtil() {
+    }
 
     /**
      * Validates the field that will be used as filter for the components of 
an LSM index.
      *
-     * @param recType
+     * @param dataset
+     *            the dataset
+     * @param recordType
      *            the record type
-     * @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 AsterixException
-     *             (if the validation failed), IOException
+     * @param filterField
+     *            the full name of the field
+     * @throws AlgebricksException
+     *             if field is not found in record.
+     *             if field type can't be a filter type.
+     *             if field type is nullable.
      */
-    public static void validateFilterField(ARecordType recType, List<String> 
filterField) throws AsterixException {
-        IAType fieldType = recType.getSubFieldType(filterField);
+    public static void validateFilterField(ARecordType recordType, 
List<String> filterField)
+            throws AlgebricksException {
+        IAType fieldType = recordType.getSubFieldType(filterField);
         if (fieldType == null) {
-            throw new AsterixException("A field with this name  \"" + 
filterField + "\" could not be found.");
+            throw new 
CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND,
+                    RecordUtil.toFullyQualifiedName(filterField));
         }
         switch (fieldType.getTypeTag()) {
             case INT8:
@@ -69,47 +79,59 @@ public class ValidateUtil {
             case DAYTIMEDURATION:
                 break;
             case UNION:
-                throw new AsterixException("The filter field \"" + filterField 
+ "\" cannot be nullable");
+                throw new 
CompilationException(ErrorCode.COMPILATION_FILTER_CANNOT_BE_NULLABLE,
+                        RecordUtil.toFullyQualifiedName(filterField));
             default:
-                throw new AsterixException("The field \"" + filterField + "\" 
which is of type "
-                        + fieldType.getTypeTag() + " cannot be used as a 
filter for a dataset.");
+                throw new 
CompilationException(ErrorCode.COMPILATION_ILLEGAL_FILTER_TYPE,
+                        fieldType.getTypeTag().name());
         }
     }
 
     /**
      * Validates the partitioning expression that will be used to partition a 
dataset and returns expression type.
      *
+     * @param recType
+     *            the record type
+     * @param metaRecType
+     *            the meta record type
      * @param partitioningExprs
      *            a list of partitioning expressions that will be validated
+     * @param keySourceIndicators
+     *            the key sources (record vs. meta)
+     * @param autogenerated
+     *            true if auto generated, false otherwise
      * @return a list of partitioning expressions types
-     * @throws AsterixException
-     *             (if the validation failed), IOException
+     * @throws AlgebricksException
+     *             if composite key is autogenerated.
+     *             if autogenerated and of a type that can't be autogenerated.
+     *             if a field could not be found in its record type.
+     *             if partitioning key is nullable.
+     *             if the field type can't be a primary key.
      */
     public static List<IAType> validatePartitioningExpressions(ARecordType 
recType, ARecordType metaRecType,
             List<List<String>> partitioningExprs, List<Integer> 
keySourceIndicators, boolean autogenerated)
-                    throws AsterixException {
-        List<IAType> partitioningExprTypes = new 
ArrayList<IAType>(partitioningExprs.size());
+            throws AlgebricksException {
+        List<IAType> partitioningExprTypes = new 
ArrayList<>(partitioningExprs.size());
         if (autogenerated) {
             if (partitioningExprs.size() > 1) {
-                throw new AsterixException("Cannot autogenerate a composite 
primary key");
+                throw new 
CompilationException(ErrorCode.COMPILATION_CANNOT_AUTOGENERATE_COMPOSITE_PRIMARY_KEY);
             }
             List<String> fieldName = partitioningExprs.get(0);
             IAType fieldType = recType.getSubFieldType(fieldName);
             partitioningExprTypes.add(fieldType);
-
             ATypeTag pkTypeTag = fieldType.getTypeTag();
             if (pkTypeTag != ATypeTag.UUID) {
-                throw new AsterixException("Cannot autogenerate a primary key 
for type " + pkTypeTag
-                        + ". Autogenerated primary keys must be of type " + 
ATypeTag.UUID + ".");
+                throw new 
CompilationException(ErrorCode.COMPILATION_ILLEGAL_AUTOGENERATED_TYPE, 
pkTypeTag.name(),
+                        ATypeTag.UUID.name());
             }
         } else {
-            partitioningExprTypes = KeyFieldTypeUtils.getKeyTypes(recType, 
metaRecType, partitioningExprs,
-                    keySourceIndicators);
+            partitioningExprTypes =
+                    KeyFieldTypeUtil.getKeyTypes(recType, metaRecType, 
partitioningExprs, keySourceIndicators);
             for (int fidx = 0; fidx < partitioningExprTypes.size(); ++fidx) {
                 IAType fieldType = partitioningExprTypes.get(fidx);
                 if (fieldType == null) {
-                    throw new AsterixException(
-                            "Type not found for partitioning key " + 
partitioningExprs.get(fidx));
+                    throw new 
CompilationException(ErrorCode.COMPILATION_FIELD_NOT_FOUND,
+                            
RecordUtil.toFullyQualifiedName(partitioningExprs.get(fidx)));
                 }
                 switch (fieldType.getTypeTag()) {
                     case INT8:
@@ -128,11 +150,11 @@ public class ValidateUtil {
                     case DAYTIMEDURATION:
                         break;
                     case UNION:
-                        throw new AsterixException(
-                                "The partitioning key " + 
partitioningExprs.get(fidx) + " cannot be nullable");
+                        throw new 
CompilationException(ErrorCode.COMPILATION_PRIMARY_KEY_CANNOT_BE_NULLABLE,
+                                
RecordUtil.toFullyQualifiedName(partitioningExprs.get(fidx)));
                     default:
-                        throw new AsterixException("The partitioning key " + 
partitioningExprs.get(fidx)
-                                + " cannot be of type " + 
fieldType.getTypeTag() + ".");
+                        throw new 
CompilationException(ErrorCode.COMPILATION_ILLEGAL_PRIMARY_KEY_TYPE,
+                                fieldType.getTypeTag().name());
                 }
             }
         }
@@ -150,14 +172,13 @@ public class ValidateUtil {
      *            a map of key types (if provided) that will be validated
      * @param indexType
      *            the type of the index that its key fields is being validated
-     * @throws AsterixException
-     *             (if the validation failed), IOException
+     * @throws AlgebricksException
      */
-    public static void validateKeyFields(ARecordType recType, ARecordType 
metaRecType, List<List<String>> keyFieldNames,
-            List<Integer> keySourceIndicators, List<IAType> keyFieldTypes, 
IndexType indexType)
-                    throws AsterixException {
-        List<IAType> fieldTypes = KeyFieldTypeUtils.getKeyTypes(recType, 
metaRecType, keyFieldNames,
-                keySourceIndicators);
+    public static void validateKeyFields(ARecordType recType, ARecordType 
metaRecType,
+            List<List<String>> keyFieldNames, List<Integer> 
keySourceIndicators, List<IAType> keyFieldTypes,
+            IndexType indexType) throws AlgebricksException {
+        List<IAType> fieldTypes =
+                KeyFieldTypeUtil.getKeyTypes(recType, metaRecType, 
keyFieldNames, keySourceIndicators);
         int pos = 0;
         boolean openFieldCompositeIdx = false;
         for (IAType fieldType : fieldTypes) {

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/pom.xml
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/pom.xml b/asterixdb/asterix-app/pom.xml
index 77ca6ef..282181c 100644
--- a/asterixdb/asterix-app/pom.xml
+++ b/asterixdb/asterix-app/pom.xml
@@ -147,7 +147,6 @@
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-dependency-plugin</artifactId>
-        <version>2.10</version>
         <configuration>
           <ignoredUsedUndeclaredDependencies>
             
<ignoredUsedUndeclaredDependency>commons-logging:commons-logging-api:*</ignoredUsedUndeclaredDependency>
@@ -351,10 +350,6 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.hyracks</groupId>
-      <artifactId>hyracks-storage-am-lsm-rtree</artifactId>
-    </dependency>
-    <dependency>
       <groupId>org.apache.commons</groupId>
       <artifactId>commons-compress</artifactId>
       <version>1.4.1</version>
@@ -409,10 +404,6 @@
       <scope>test</scope>
     </dependency>
     <dependency>
-      <groupId>org.apache.hyracks</groupId>
-      <artifactId>hyracks-storage-am-rtree</artifactId>
-    </dependency>
-    <dependency>
       <groupId>commons-lang</groupId>
       <artifactId>commons-lang</artifactId>
     </dependency>
@@ -435,10 +426,6 @@
     </dependency>
     <dependency>
       <groupId>org.apache.hyracks</groupId>
-      <artifactId>hyracks-storage-am-lsm-invertedindex</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.hyracks</groupId>
       <artifactId>hyracks-storage-am-btree</artifactId>
     </dependency>
     <dependency>

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index c4535cf..0f16179 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -31,7 +31,6 @@ import java.util.Set;
 
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslator;
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslatorFactory;
-import org.apache.asterix.api.common.Job.SubmissionMode;
 import org.apache.asterix.app.result.ResultUtil;
 import org.apache.asterix.common.config.CompilerProperties;
 import org.apache.asterix.common.config.ExternalProperties;
@@ -40,6 +39,8 @@ import org.apache.asterix.common.config.OptimizationConfUtil;
 import org.apache.asterix.common.config.PropertyInterpreters;
 import org.apache.asterix.common.exceptions.ACIDException;
 import org.apache.asterix.common.exceptions.CompilationException;
+import org.apache.asterix.common.utils.Job;
+import org.apache.asterix.common.utils.Job.SubmissionMode;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.compiler.provider.IRuleSetFactory;
 import org.apache.asterix.dataflow.data.common.ConflictingTypeResolver;
@@ -59,12 +60,12 @@ import 
org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.metadata.declared.MetadataProvider;
 import org.apache.asterix.runtime.job.listener.JobEventListenerFactory;
-import org.apache.asterix.runtime.util.AppContextInfo;
+import org.apache.asterix.runtime.utils.AppContextInfo;
 import 
org.apache.asterix.transaction.management.service.transaction.JobIdFactory;
 import org.apache.asterix.translator.CompiledStatements.ICompiledDmlStatement;
 import org.apache.asterix.translator.IStatementExecutor.Stats;
+import org.apache.asterix.utils.ResourceUtils;
 import org.apache.asterix.translator.SessionConfig;
-import org.apache.asterix.util.ResourceUtils;
 import 
org.apache.hyracks.algebricks.common.constraints.AlgebricksAbsolutePartitionConstraint;
 import 
org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -79,7 +80,7 @@ import 
org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionEvalSiz
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionTypeComputer;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.IMergeAggregationExpressionFactory;
 import 
org.apache.hyracks.algebricks.core.algebra.expressions.IMissableTypeComputer;
-import 
org.apache.hyracks.algebricks.core.algebra.expressions.LogicalExpressionJobGenToExpressionRuntimeProviderAdapter;
+import 
org.apache.hyracks.algebricks.core.algebra.expressions.ExpressionRuntimeProvider;
 import 
org.apache.hyracks.algebricks.core.algebra.prettyprint.AlgebricksAppendable;
 import 
org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor;
 import org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPlotter;
@@ -126,7 +127,8 @@ public class APIFramework {
                 IExpressionEvalSizeComputer expressionEvalSizeComputer,
                 IMergeAggregationExpressionFactory 
mergeAggregationExpressionFactory,
                 IExpressionTypeComputer expressionTypeComputer, 
IMissableTypeComputer missableTypeComputer,
-                IConflictingTypeResolver conflictingTypeResolver, 
PhysicalOptimizationConfig physicalOptimizationConfig,
+                IConflictingTypeResolver conflictingTypeResolver,
+                PhysicalOptimizationConfig physicalOptimizationConfig,
                 AlgebricksPartitionConstraint clusterLocations) {
             return new AlgebricksOptimizationContext(varCounter, 
expressionEvalSizeComputer,
                     mergeAggregationExpressionFactory, expressionTypeComputer, 
missableTypeComputer,
@@ -181,8 +183,8 @@ public class APIFramework {
 
         org.apache.asterix.common.transactions.JobId asterixJobId = 
JobIdFactory.generateJobId();
         metadataProvider.setJobId(asterixJobId);
-        ILangExpressionToPlanTranslator t = 
translatorFactory.createExpressionToPlanTranslator(metadataProvider,
-                varCounter);
+        ILangExpressionToPlanTranslator t =
+                
translatorFactory.createExpressionToPlanTranslator(metadataProvider, 
varCounter);
 
         ILogicalPlan plan;
         // statement = null when it's a query
@@ -224,8 +226,8 @@ public class APIFramework {
         
OptimizationConfUtil.getPhysicalOptimizationConfig().setMaxFramesExternalGroupBy(groupFrameLimit);
         
OptimizationConfUtil.getPhysicalOptimizationConfig().setMaxFramesForJoin(joinFrameLimit);
 
-        HeuristicCompilerFactoryBuilder builder = new 
HeuristicCompilerFactoryBuilder(
-                OptimizationContextFactory.INSTANCE);
+        HeuristicCompilerFactoryBuilder builder =
+                new 
HeuristicCompilerFactoryBuilder(OptimizationContextFactory.INSTANCE);
         
builder.setPhysicalOptimizationConfig(OptimizationConfUtil.getPhysicalOptimizationConfig());
         builder.setLogicalRewrites(ruleSetFactory.getLogicalRewrites());
         builder.setPhysicalRewrites(ruleSetFactory.getPhysicalRewrites());
@@ -240,8 +242,8 @@ public class APIFramework {
 
         int parallelism = 
getParallelism(querySpecificConfig.get(CompilerProperties.COMPILER_PARALLELISM_KEY),
                 compilerProperties.getParallelism());
-        AlgebricksAbsolutePartitionConstraint computationLocations = 
chooseLocations(clusterInfoCollector, parallelism,
-                metadataProvider.getClusterLocations());
+        AlgebricksAbsolutePartitionConstraint computationLocations =
+                chooseLocations(clusterInfoCollector, parallelism, 
metadataProvider.getClusterLocations());
         builder.setClusterLocations(computationLocations);
 
         ICompiler compiler = compilerFactory.createCompiler(plan, 
metadataProvider, t.getVarCounter());
@@ -285,7 +287,7 @@ public class APIFramework {
         
builder.setBinaryIntegerInspectorFactory(format.getBinaryIntegerInspectorFactory());
         
builder.setComparatorFactoryProvider(format.getBinaryComparatorFactoryProvider());
         builder.setExpressionRuntimeProvider(
-                new 
LogicalExpressionJobGenToExpressionRuntimeProviderAdapter(QueryLogicalExpressionJobGen.INSTANCE));
+                new 
ExpressionRuntimeProvider(QueryLogicalExpressionJobGen.INSTANCE));
         
builder.setHashFunctionFactoryProvider(format.getBinaryHashFunctionFactoryProvider());
         
builder.setHashFunctionFamilyProvider(format.getBinaryHashFunctionFamilyProvider());
         builder.setMissingWriterFactory(format.getMissingWriterFactory());
@@ -313,8 +315,8 @@ public class APIFramework {
         builder.setTypeTraitProvider(format.getTypeTraitProvider());
         
builder.setNormalizedKeyComputerFactoryProvider(format.getNormalizedKeyComputerFactoryProvider());
 
-        JobEventListenerFactory jobEventListenerFactory = new 
JobEventListenerFactory(asterixJobId,
-                metadataProvider.isWriteTransaction());
+        JobEventListenerFactory jobEventListenerFactory =
+                new JobEventListenerFactory(asterixJobId, 
metadataProvider.isWriteTransaction());
         JobSpecification spec = compiler.createJob(AppContextInfo.INSTANCE, 
jobEventListenerFactory);
 
         // When the top-level statement is a query, the statement parameter is 
null.
@@ -427,10 +429,10 @@ public class APIFramework {
         for (Map.Entry<String, NodeControllerInfo> entry : ncMap.entrySet()) {
             String nodeId = entry.getKey();
             int availableCores = entry.getValue().getNumAvailableCores();
-            int nodeParallelism = 
selectedNodesWithOneMorePartition.contains(nodeId) ? perNodeParallelismMax
-                    : perNodeParallelismMin;
-            int coresToUse = nodeParallelism >= 0 && nodeParallelism < 
availableCores ? nodeParallelism
-                    : availableCores;
+            int nodeParallelism =
+                    selectedNodesWithOneMorePartition.contains(nodeId) ? 
perNodeParallelismMax : perNodeParallelismMin;
+            int coresToUse =
+                    nodeParallelism >= 0 && nodeParallelism < availableCores ? 
nodeParallelism : availableCores;
             for (int count = 0; count < coresToUse; ++count) {
                 locations.add(nodeId);
             }
@@ -450,15 +452,15 @@ public class APIFramework {
     // Gets the frame limit.
     private int getFrameLimit(String parameter, long memBudgetInConfiguration, 
int frameSize) {
         IPropertyInterpreter<Long> longBytePropertyInterpreter = 
PropertyInterpreters.getLongBytePropertyInterpreter();
-        long memBudget = parameter == null ? memBudgetInConfiguration
-                : longBytePropertyInterpreter.interpret(parameter);
+        long memBudget =
+                parameter == null ? memBudgetInConfiguration : 
longBytePropertyInterpreter.interpret(parameter);
         return (int) (memBudget / frameSize);
     }
 
     // Gets the parallelism parameter.
     private int getParallelism(String parameter, int 
parallelismInConfiguration) {
-        IPropertyInterpreter<Integer> integerIPropertyInterpreter = 
PropertyInterpreters
-                .getIntegerPropertyInterpreter();
+        IPropertyInterpreter<Integer> integerIPropertyInterpreter =
+                PropertyInterpreters.getIntegerPropertyInterpreter();
         return parameter == null ? parallelismInConfiguration : 
integerIPropertyInterpreter.interpret(parameter);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java
deleted file mode 100644
index 8eebdd0..0000000
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/Job.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.api.common;
-
-import org.apache.hyracks.api.job.JobSpecification;
-
-public class Job {
-
-    public enum SubmissionMode {
-        SYNCHRONOUS,
-        ASYNCHRONOUS
-    }
-
-    private final JobSpecification jobSpec;
-    private final SubmissionMode submissionMode;
-
-    public Job(JobSpecification jobSpecification, SubmissionMode 
submissionMode) {
-        this.jobSpec = jobSpecification;
-        this.submissionMode = submissionMode;
-    }
-
-    public Job(JobSpecification jobSpec) {
-        this.jobSpec = jobSpec;
-        this.submissionMode = SubmissionMode.SYNCHRONOUS;
-    }
-
-    public JobSpecification getJobSpec() {
-        return jobSpec;
-    }
-
-    public SubmissionMode getSubmissionMode() {
-        return submissionMode;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
index ab05f10..95eb6fb 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ApiServlet.java
@@ -38,6 +38,7 @@ import javax.imageio.ImageIO;
 import org.apache.asterix.app.result.ResultReader;
 import org.apache.asterix.app.result.ResultUtil;
 import org.apache.asterix.common.config.GlobalConfig;
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.aql.parser.TokenMgrError;
@@ -69,14 +70,16 @@ public class ApiServlet extends AbstractServlet {
     private final ILangCompilationProvider aqlCompilationProvider;
     private final ILangCompilationProvider sqlppCompilationProvider;
     private final IStatementExecutorFactory statementExectorFactory;
+    private final IStorageComponentProvider componentProvider;
 
     public ApiServlet(ConcurrentMap<String, Object> ctx, String[] paths,
             ILangCompilationProvider aqlCompilationProvider, 
ILangCompilationProvider sqlppCompilationProvider,
-            IStatementExecutorFactory statementExecutorFactory) {
+            IStatementExecutorFactory statementExecutorFactory, 
IStorageComponentProvider componentProvider) {
         super(ctx, paths);
         this.aqlCompilationProvider = aqlCompilationProvider;
         this.sqlppCompilationProvider = sqlppCompilationProvider;
         this.statementExectorFactory = statementExecutorFactory;
+        this.componentProvider = componentProvider;
     }
 
     public void doPost(IServletRequest request, IServletResponse response) {
@@ -135,8 +138,8 @@ public class ApiServlet extends AbstractServlet {
             sessionConfig.setOOBData(isSet(printExprParam), 
isSet(printRewrittenExprParam),
                     isSet(printLogicalPlanParam), 
isSet(printOptimizedLogicalPlanParam), isSet(printJob));
             MetadataManager.INSTANCE.init();
-            IStatementExecutor translator =
-                    statementExectorFactory.create(aqlStatements, 
sessionConfig, compilationProvider);
+            IStatementExecutor translator = 
statementExectorFactory.create(aqlStatements, sessionConfig,
+                    compilationProvider, componentProvider);
             double duration;
             long startTime = System.currentTimeMillis();
             translator.compileAndExecute(hcc, hds, 
IStatementExecutor.ResultDelivery.IMMEDIATE);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
index 038ed2f..e93108d 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ClusterApiServlet.java
@@ -31,7 +31,7 @@ import java.util.regex.Pattern;
 import org.apache.asterix.common.config.AbstractProperties;
 import org.apache.asterix.common.config.ReplicationProperties;
 import org.apache.asterix.common.utils.JSONUtil;
-import org.apache.asterix.runtime.util.ClusterStateManager;
+import org.apache.asterix.runtime.utils.ClusterStateManager;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.api.IServletResponse;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
index caa00f1..66064aa 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ConnectorApiServlet.java
@@ -28,13 +28,14 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import org.apache.asterix.file.StorageComponentProvider;
 import org.apache.asterix.metadata.MetadataManager;
 import org.apache.asterix.metadata.MetadataTransactionContext;
 import org.apache.asterix.metadata.declared.MetadataProvider;
 import org.apache.asterix.metadata.entities.Dataset;
-import org.apache.asterix.metadata.utils.DatasetUtils;
+import org.apache.asterix.metadata.utils.DatasetUtil;
 import org.apache.asterix.om.types.ARecordType;
-import org.apache.asterix.util.FlushDatasetUtils;
+import org.apache.asterix.utils.FlushDatasetUtil;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.api.client.NodeControllerInfo;
 import org.apache.hyracks.api.io.FileSplit;
@@ -97,7 +98,7 @@ public class ConnectorApiServlet extends AbstractServlet {
             MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
 
             // Retrieves file splits of the dataset.
-            MetadataProvider metadataProvider = new MetadataProvider(null);
+            MetadataProvider metadataProvider = new MetadataProvider(null, new 
StorageComponentProvider());
             metadataProvider.setMetadataTxnContext(mdTxnCtx);
             Dataset dataset = metadataProvider.findDataset(dataverseName, 
datasetName);
             if (dataset == null) {
@@ -112,7 +113,7 @@ public class ConnectorApiServlet extends AbstractServlet {
                     metadataProvider.splitsForDataset(mdTxnCtx, dataverseName, 
datasetName, datasetName, temp);
             ARecordType recordType = (ARecordType) 
metadataProvider.findType(dataset.getItemTypeDataverseName(),
                     dataset.getItemTypeName());
-            List<List<String>> primaryKeys = 
DatasetUtils.getPartitioningKeys(dataset);
+            List<List<String>> primaryKeys = 
DatasetUtil.getPartitioningKeys(dataset);
             StringBuilder pkStrBuf = new StringBuilder();
             for (List<String> keys : primaryKeys) {
                 for (String key : keys) {
@@ -126,7 +127,7 @@ public class ConnectorApiServlet extends AbstractServlet {
                     hcc.getNodeControllerInfos());
 
             // Flush the cached contents of the dataset to file system.
-            FlushDatasetUtils.flushDataset(hcc, metadataProvider, mdTxnCtx, 
dataverseName, datasetName, datasetName);
+            FlushDatasetUtil.flushDataset(hcc, metadataProvider, 
dataverseName, datasetName, datasetName);
 
             // Metadata transaction commits.
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java
index be6e280..a994470 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DdlApiServlet.java
@@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server;
 
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.translator.IStatementExecutorFactory;
@@ -30,8 +31,9 @@ public class DdlApiServlet extends RestApiServlet {
             Statement.Category.QUERY | Statement.Category.UPDATE | 
Statement.Category.DDL;
 
     public DdlApiServlet(ConcurrentMap<String, Object> ctx, String[] paths,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
-        super(ctx, paths, compilationProvider, statementExecutorFactory);
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider componentProvider) {
+        super(ctx, paths, compilationProvider, statementExecutorFactory, 
componentProvider);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
index e6a32a3..709db4b 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/DiagnosticsApiServlet.java
@@ -35,7 +35,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.apache.asterix.api.http.servlet.ServletConstants;
-import org.apache.asterix.runtime.util.AppContextInfo;
+import org.apache.asterix.runtime.utils.AppContextInfo;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java
index 9c08fbd..eafae35 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/FullApiServlet.java
@@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server;
 
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.translator.IStatementExecutorFactory;
@@ -32,8 +33,9 @@ public class FullApiServlet extends RestApiServlet {
             | Statement.Category.DDL | Statement.Category.PROCEDURE;
 
     public FullApiServlet(ConcurrentMap<String, Object> ctx, String[] paths,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
-        super(ctx, paths, compilationProvider, statementExecutorFactory);
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider componentProvider) {
+        super(ctx, paths, compilationProvider, statementExecutorFactory, 
componentProvider);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java
index 2dbaa54..f6b80fc 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NodeControllerDetailsApiServlet.java
@@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.asterix.runtime.util.ClusterStateManager;
+import org.apache.asterix.runtime.utils.ClusterStateManager;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java
index 160c801..5075795 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryApiServlet.java
@@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server;
 
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.translator.IStatementExecutorFactory;
@@ -29,8 +30,9 @@ public class QueryApiServlet extends RestApiServlet {
     private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY;
 
     public QueryApiServlet(ConcurrentMap<String, Object> ctx, String[] paths,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
-        super(ctx, paths, compilationProvider, statementExecutorFactory);
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider componentProvider) {
+        super(ctx, paths, compilationProvider, statementExecutorFactory, 
componentProvider);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 43530ea..410fd1e 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -36,6 +36,7 @@ import org.apache.asterix.app.result.ResultUtil;
 import org.apache.asterix.app.translator.QueryTranslator;
 import org.apache.asterix.common.api.IClusterManagementWork;
 import org.apache.asterix.common.config.GlobalConfig;
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.utils.JSONUtil;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
@@ -43,7 +44,7 @@ import org.apache.asterix.lang.aql.parser.TokenMgrError;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.metadata.MetadataManager;
-import org.apache.asterix.runtime.util.ClusterStateManager;
+import org.apache.asterix.runtime.utils.ClusterStateManager;
 import org.apache.asterix.translator.IStatementExecutor;
 import org.apache.asterix.translator.IStatementExecutor.Stats;
 import org.apache.asterix.translator.IStatementExecutorFactory;
@@ -73,12 +74,15 @@ public class QueryServiceServlet extends AbstractServlet {
     private static final Logger LOGGER = 
Logger.getLogger(QueryServiceServlet.class.getName());
     private final ILangCompilationProvider compilationProvider;
     private final IStatementExecutorFactory statementExecutorFactory;
+    private final IStorageComponentProvider componentProvider;
 
     public QueryServiceServlet(ConcurrentMap<String, Object> ctx, String[] 
paths,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider componentProvider) {
         super(ctx, paths);
         this.compilationProvider = compilationProvider;
         this.statementExecutorFactory = statementExecutorFactory;
+        this.componentProvider = componentProvider;
     }
 
     @Override
@@ -310,19 +314,10 @@ public class QueryServiceServlet extends AbstractServlet {
             }
         };
 
-        SessionConfig.ResultDecorator resultPostfix = (AlgebricksAppendable 
app) -> app.append("\t,\n");
-
-        SessionConfig.ResultDecorator handlePrefix = new 
SessionConfig.ResultDecorator() {
-            @Override
-            public AlgebricksAppendable append(AlgebricksAppendable app) 
throws AlgebricksException {
-                app.append("\t\"");
-                app.append(ResultFields.HANDLE.str());
-                app.append("\": ");
-                return app;
-            }
-        };
-
-        SessionConfig.ResultDecorator handlePostfix = (AlgebricksAppendable 
app) -> app.append(",\n");
+        SessionConfig.ResultDecorator resultPostfix = app -> 
app.append("\t,\n");
+        SessionConfig.ResultDecorator handlePrefix =
+                app -> 
app.append("\t\"").append(ResultFields.HANDLE.str()).append("\": ");
+        SessionConfig.ResultDecorator handlePostfix = app -> app.append(",\n");
 
         SessionConfig.OutputFormat format = getFormat(param.format);
         SessionConfig sessionConfig =
@@ -518,7 +513,7 @@ public class QueryServiceServlet extends AbstractServlet {
             List<Statement> statements = parser.parse();
             MetadataManager.INSTANCE.init();
             IStatementExecutor translator =
-                    statementExecutorFactory.create(statements, sessionConfig, 
compilationProvider);
+                    statementExecutorFactory.create(statements, sessionConfig, 
compilationProvider, componentProvider);
             execStart = System.nanoTime();
             translator.compileAndExecute(hcc, hds, delivery, stats);
             execEnd = System.nanoTime();

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
index fac5883..96df30f 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryWebInterfaceServlet.java
@@ -27,7 +27,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.apache.asterix.common.config.ExternalProperties;
-import org.apache.asterix.runtime.util.AppContextInfo;
+import org.apache.asterix.runtime.utils.AppContextInfo;
 import org.apache.commons.io.IOUtils;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java
index 787ff47..b069efe 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/RestApiServlet.java
@@ -32,6 +32,7 @@ import org.apache.asterix.app.result.ResultReader;
 import org.apache.asterix.app.result.ResultUtil;
 import org.apache.asterix.app.translator.QueryTranslator;
 import org.apache.asterix.common.config.GlobalConfig;
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.aql.parser.TokenMgrError;
@@ -66,13 +67,16 @@ public abstract class RestApiServlet extends 
AbstractServlet {
     private final ILangCompilationProvider compilationProvider;
     private final IParserFactory parserFactory;
     private final IStatementExecutorFactory statementExecutorFactory;
+    private final IStorageComponentProvider componentProvider;
 
     public RestApiServlet(ConcurrentMap<String, Object> ctx, String[] paths,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider componentProvider) {
         super(ctx, paths);
         this.compilationProvider = compilationProvider;
         this.parserFactory = compilationProvider.getParserFactory();
         this.statementExecutorFactory = statementExecutorFactory;
+        this.componentProvider = componentProvider;
     }
 
     /**
@@ -189,8 +193,8 @@ public abstract class RestApiServlet extends 
AbstractServlet {
             List<Statement> aqlStatements = parser.parse();
             validate(aqlStatements);
             MetadataManager.INSTANCE.init();
-            IStatementExecutor translator =
-                    statementExecutorFactory.create(aqlStatements, 
sessionConfig, compilationProvider);
+            IStatementExecutor translator = 
statementExecutorFactory.create(aqlStatements, sessionConfig,
+                    compilationProvider, componentProvider);
             translator.compileAndExecute(hcc, hds, resultDelivery);
         } catch (AsterixException | TokenMgrError | 
org.apache.asterix.aqlplus.parser.TokenMgrError pe) {
             response.setStatus(HttpResponseStatus.INTERNAL_SERVER_ERROR);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java
index dc48288..5c569ed 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ShutdownApiServlet.java
@@ -28,7 +28,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import org.apache.asterix.common.config.GlobalConfig;
-import org.apache.asterix.runtime.util.ClusterStateManager;
+import org.apache.asterix.runtime.utils.ClusterStateManager;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java
index 0a0e680..ad2c128 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/UpdateApiServlet.java
@@ -20,6 +20,7 @@ package org.apache.asterix.api.http.server;
 
 import java.util.concurrent.ConcurrentMap;
 
+import org.apache.asterix.common.context.IStorageComponentProvider;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.translator.IStatementExecutorFactory;
@@ -29,8 +30,9 @@ public class UpdateApiServlet extends RestApiServlet {
     private static final byte ALLOWED_CATEGORIES = Statement.Category.QUERY | 
Statement.Category.UPDATE;
 
     public UpdateApiServlet(ConcurrentMap<String, Object> ctx, String[] paths,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
-        super(ctx, paths, compilationProvider, statementExecutorFactory);
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider componentProvider) {
+        super(ctx, paths, compilationProvider, statementExecutorFactory, 
componentProvider);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java
index 5899660..1b2c2e6 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/VersionApiServlet.java
@@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.asterix.runtime.util.AppContextInfo;
+import org.apache.asterix.runtime.utils.AppContextInfo;
 import org.apache.hyracks.http.api.IServlet;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.api.IServletResponse;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
index 3d240f8..c09f8cb 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/java/AsterixJavaClient.java
@@ -23,8 +23,9 @@ import java.io.Reader;
 import java.util.List;
 
 import org.apache.asterix.api.common.APIFramework;
-import org.apache.asterix.api.common.Job;
 import org.apache.asterix.app.translator.QueryTranslator;
+import org.apache.asterix.common.context.IStorageComponentProvider;
+import org.apache.asterix.common.utils.Job;
 import org.apache.asterix.compiler.provider.ILangCompilationProvider;
 import org.apache.asterix.lang.common.base.IParser;
 import org.apache.asterix.lang.common.base.IParserFactory;
@@ -49,21 +50,28 @@ public class AsterixJavaClient {
     private final IParserFactory parserFactory;
     private final APIFramework apiFramework;
     private final IStatementExecutorFactory statementExecutorFactory;
+    private final IStorageComponentProvider storageComponentProvider;
 
     public AsterixJavaClient(IHyracksClientConnection hcc, Reader queryText, 
PrintWriter writer,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider storageComponentProvider) {
         this.hcc = hcc;
         this.queryText = queryText;
         this.writer = writer;
         this.compilationProvider = compilationProvider;
-        this.apiFramework = new APIFramework(compilationProvider);
         this.statementExecutorFactory = statementExecutorFactory;
+        this.storageComponentProvider = storageComponentProvider;
+        apiFramework = new APIFramework(compilationProvider);
         parserFactory = compilationProvider.getParserFactory();
     }
 
     public AsterixJavaClient(IHyracksClientConnection hcc, Reader queryText,
-            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory) {
-        this(hcc, queryText, new PrintWriter(System.out, true), 
compilationProvider, statementExecutorFactory);
+            ILangCompilationProvider compilationProvider, 
IStatementExecutorFactory statementExecutorFactory,
+            IStorageComponentProvider storageComponentProvider) {
+        this(hcc, queryText,
+                // This is a commandline client and so System.out is 
appropriate
+                new PrintWriter(System.out, true), // NOSONAR
+                compilationProvider, statementExecutorFactory, 
storageComponentProvider);
     }
 
     public void compile() throws Exception {
@@ -94,7 +102,8 @@ public class AsterixJavaClient {
             conf.set(SessionConfig.FORMAT_ONLY_PHYSICAL_OPS, true);
         }
 
-        IStatementExecutor translator = 
statementExecutorFactory.create(statements, conf, compilationProvider);
+        IStatementExecutor translator =
+                statementExecutorFactory.create(statements, conf, 
compilationProvider, storageComponentProvider);
         translator.compileAndExecute(hcc, null, 
QueryTranslator.ResultDelivery.IMMEDIATE);
         writer.flush();
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/ef9be0f9/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
new file mode 100644
index 0000000..31ace22
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/cc/CCExtensionManager.java
@@ -0,0 +1,109 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.app.cc;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.asterix.algebra.base.ILangExtension;
+import org.apache.asterix.algebra.base.ILangExtension.Language;
+import org.apache.asterix.algebra.extension.IAlgebraExtensionManager;
+import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
+import org.apache.asterix.common.api.ExtensionId;
+import org.apache.asterix.common.api.IExtension;
+import org.apache.asterix.common.config.AsterixExtension;
+import org.apache.asterix.common.exceptions.ErrorCode;
+import org.apache.asterix.common.exceptions.RuntimeDataException;
+import org.apache.asterix.compiler.provider.AqlCompilationProvider;
+import org.apache.asterix.compiler.provider.ILangCompilationProvider;
+import org.apache.asterix.compiler.provider.SqlppCompilationProvider;
+import org.apache.asterix.translator.IStatementExecutorFactory;
+import org.apache.asterix.utils.ExtensionUtil;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
+
+/**
+ * AsterixDB's implementation of {@code IAlgebraExtensionManager} which takes 
care of
+ * initializing extensions for App and Compilation purposes
+ */
+public class CCExtensionManager implements IAlgebraExtensionManager {
+
+    private final Map<ExtensionId, IExtension> extensions = new HashMap<>();
+
+    private final IStatementExecutorExtension statementExecutorExtension;
+    private final ILangCompilationProvider aqlCompilationProvider;
+    private final ILangCompilationProvider sqlppCompilationProvider;
+    private final DefaultStatementExecutorFactory 
defaultQueryTranslatorFactory;
+
+    /**
+     * Initialize {@code CompilerExtensionManager} from configuration
+     *
+     * @param list
+     * @throws InstantiationException
+     * @throws IllegalAccessException
+     * @throws ClassNotFoundException
+     * @throws HyracksDataException
+     */
+    public CCExtensionManager(List<AsterixExtension> list)
+            throws InstantiationException, IllegalAccessException, 
ClassNotFoundException, HyracksDataException {
+        Pair<ExtensionId, ILangCompilationProvider> aqlcp = null;
+        Pair<ExtensionId, ILangCompilationProvider> sqlppcp = null;
+        IStatementExecutorExtension see = null;
+        defaultQueryTranslatorFactory = new DefaultStatementExecutorFactory();
+        if (list != null) {
+            for (AsterixExtension extensionConf : list) {
+                IExtension extension = (IExtension) 
Class.forName(extensionConf.getClassName()).newInstance();
+                extension.configure(extensionConf.getArgs());
+                if (extensions.containsKey(extension.getId())) {
+                    throw new 
RuntimeDataException(ErrorCode.EXTENSION_ID_CONFLICT, extension.getId());
+                }
+                extensions.put(extension.getId(), extension);
+                switch (extension.getExtensionKind()) {
+                    case STATEMENT_EXECUTOR:
+                        see = ExtensionUtil.extendStatementExecutor(see, 
(IStatementExecutorExtension) extension);
+                        break;
+                    case LANG:
+                        ILangExtension le = (ILangExtension) extension;
+                        aqlcp = 
ExtensionUtil.extendLangCompilationProvider(Language.AQL, aqlcp, le);
+                        sqlppcp = 
ExtensionUtil.extendLangCompilationProvider(Language.SQLPP, sqlppcp, le);
+                        break;
+                    default:
+                        break;
+                }
+            }
+        }
+        this.statementExecutorExtension = see;
+        this.aqlCompilationProvider = aqlcp == null ? new 
AqlCompilationProvider() : aqlcp.second;
+        this.sqlppCompilationProvider = sqlppcp == null ? new 
SqlppCompilationProvider() : sqlppcp.second;
+    }
+
+    public IStatementExecutorFactory getQueryTranslatorFactory() {
+        return statementExecutorExtension == null ? 
defaultQueryTranslatorFactory
+                : statementExecutorExtension.getQueryTranslatorFactory();
+    }
+
+    public ILangCompilationProvider getAqlCompilationProvider() {
+        return aqlCompilationProvider;
+    }
+
+    public ILangCompilationProvider getSqlppCompilationProvider() {
+        return sqlppCompilationProvider;
+    }
+}

Reply via email to