diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 335899c..51adb76 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -18,12 +18,9 @@
  */
 package org.apache.asterix.app.translator;
 
-import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
 import java.rmi.RemoteException;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -36,7 +33,6 @@
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Objects;
 import java.util.Properties;
 import java.util.Set;
@@ -62,7 +58,6 @@
 import org.apache.asterix.common.config.DatasetConfig.ExternalFilePendingOp;
 import org.apache.asterix.common.config.DatasetConfig.IndexType;
 import org.apache.asterix.common.config.DatasetConfig.TransactionState;
-import org.apache.asterix.common.config.ExternalProperties;
 import org.apache.asterix.common.config.GlobalConfig;
 import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.ACIDException;
@@ -84,11 +79,7 @@
 import org.apache.asterix.lang.common.base.IRewriterFactory;
 import org.apache.asterix.lang.common.base.IStatementRewriter;
 import org.apache.asterix.lang.common.base.Statement;
-import org.apache.asterix.lang.common.expression.FieldBinding;
 import org.apache.asterix.lang.common.expression.IndexedTypeExpression;
-import org.apache.asterix.lang.common.expression.LiteralExpr;
-import org.apache.asterix.lang.common.expression.RecordConstructor;
-import org.apache.asterix.lang.common.literal.StringLiteral;
 import org.apache.asterix.lang.common.statement.CompactStatement;
 import org.apache.asterix.lang.common.statement.ConnectFeedStatement;
 import org.apache.asterix.lang.common.statement.CreateDataverseStatement;
@@ -107,7 +98,6 @@
 import org.apache.asterix.lang.common.statement.FeedPolicyDropStatement;
 import org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.lang.common.statement.FunctionDropStatement;
-import org.apache.asterix.lang.common.statement.IDatasetDetailsDecl;
 import org.apache.asterix.lang.common.statement.IndexDropStatement;
 import org.apache.asterix.lang.common.statement.InsertStatement;
 import org.apache.asterix.lang.common.statement.InternalDetailsDecl;
@@ -116,7 +106,6 @@
 import org.apache.asterix.lang.common.statement.NodegroupDecl;
 import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.lang.common.statement.RefreshExternalDatasetStatement;
-import org.apache.asterix.lang.common.statement.RunStatement;
 import org.apache.asterix.lang.common.statement.SetStatement;
 import org.apache.asterix.lang.common.statement.StartFeedStatement;
 import org.apache.asterix.lang.common.statement.StopFeedStatement;
@@ -126,7 +115,6 @@
 import org.apache.asterix.lang.common.struct.Identifier;
 import org.apache.asterix.lang.common.struct.VarIdentifier;
 import org.apache.asterix.lang.common.util.FunctionUtil;
-import org.apache.asterix.lang.common.util.MergePolicyUtils;
 import org.apache.asterix.lang.sqlpp.rewrites.SqlppRewriterFactory;
 import org.apache.asterix.metadata.IDatasetDetails;
 import org.apache.asterix.metadata.MetadataManager;
@@ -404,9 +392,6 @@
                         writerFactory = (result.first != null) ? result.first : writerFactory;
                         outputFile = result.second;
                         break;
-                    case Statement.Kind.RUN:
-                        handleRunStatement(metadataProvider, stmt, hcc);
-                        break;
                     case Statement.Kind.FUNCTION_DECL:
                         // No op
                         break;
@@ -2789,266 +2774,6 @@
         }
     }
 
-    protected void handleRunStatement(MetadataProvider metadataProvider, Statement stmt, IHyracksClientConnection hcc)
-            throws CompilationException, Exception {
-        RunStatement runStmt = (RunStatement) stmt;
-        switch (runStmt.getSystem()) {
-            case "pregel":
-            case "pregelix":
-                handlePregelixStatement(metadataProvider, runStmt, hcc);
-                break;
-            default:
-                throw new AlgebricksException(
-                        "The system \"" + runStmt.getSystem() + "\" specified in your run statement is not supported.");
-        }
-
-    }
-
-    protected void handlePregelixStatement(MetadataProvider metadataProvider, Statement stmt,
-            IHyracksClientConnection hcc) throws Exception {
-        RunStatement pregelixStmt = (RunStatement) stmt;
-        boolean bActiveTxn = true;
-        String dataverseNameFrom = getActiveDataverse(pregelixStmt.getDataverseNameFrom());
-        String dataverseNameTo = getActiveDataverse(pregelixStmt.getDataverseNameTo());
-        String datasetNameFrom = pregelixStmt.getDatasetNameFrom().getValue();
-        String datasetNameTo = pregelixStmt.getDatasetNameTo().getValue();
-        String fullyQualifiedDatasetNameTo =
-                DatasetUtil.isFullyQualifiedName(datasetNameTo) ? datasetNameTo : dataverseNameTo + '.' + datasetNameTo;
-        MetadataTransactionContext mdTxnCtx = MetadataManager.INSTANCE.beginTransaction();
-        metadataProvider.setMetadataTxnContext(mdTxnCtx);
-        MetadataLockUtil.insertDeleteUpsertBegin(lockManager, metadataProvider.getLocks(), fullyQualifiedDatasetNameTo);
-        try {
-            prepareRunExternalRuntime(metadataProvider, hcc, pregelixStmt, dataverseNameFrom, dataverseNameTo,
-                    datasetNameFrom, datasetNameTo, mdTxnCtx);
-
-            String pregelixHomeKey = "PREGELIX_HOME";
-            // Finds PREGELIX_HOME in system environment variables.
-            String pregelixHome = System.getenv(pregelixHomeKey);
-            // Finds PREGELIX_HOME in Java properties.
-            if (pregelixHome == null) {
-                pregelixHome = System.getProperty(pregelixHomeKey);
-            }
-            // Finds PREGELIX_HOME in AsterixDB configuration.
-            if (pregelixHome == null) {
-                // Since there is a default value for PREGELIX_HOME in CompilerProperties,
-                // pregelixHome can never be null.
-                pregelixHome = appCtx.getCompilerProperties().getPregelixHome();
-            }
-
-            // Constructs the pregelix command line.
-            List<String> cmd = constructPregelixCommand(pregelixStmt, dataverseNameFrom, datasetNameFrom,
-                    dataverseNameTo, datasetNameTo);
-            ProcessBuilder pb = new ProcessBuilder(cmd);
-            pb.directory(new File(pregelixHome));
-            pb.redirectErrorStream(true);
-
-            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
-            bActiveTxn = false;
-            // Executes the Pregelix command.
-            int resultState = executeExternalShellProgram(pb);
-            // Checks the return state of the external Pregelix command.
-            if (resultState != 0) {
-                throw new AlgebricksException(
-                        "Something went wrong executing your Pregelix Job. Perhaps the Pregelix cluster "
-                                + "needs to be restarted. "
-                                + "Check the following things: Are the datatypes of Asterix and Pregelix matching? "
-                                + "Is the server configuration correct (node names, buffer sizes, framesize)? "
-                                + "Check the logfiles for more details.");
-            }
-        } catch (Exception e) {
-            if (bActiveTxn) {
-                abort(e, e, mdTxnCtx);
-            }
-            throw e;
-        } finally {
-            metadataProvider.getLocks().unlock();
-        }
-    }
-
-    // Prepares to run a program on external runtime.
-    protected void prepareRunExternalRuntime(MetadataProvider metadataProvider, IHyracksClientConnection hcc,
-            RunStatement pregelixStmt, String dataverseNameFrom, String dataverseNameTo, String datasetNameFrom,
-            String datasetNameTo, MetadataTransactionContext mdTxnCtx) throws Exception {
-        // Validates the source/sink dataverses and datasets.
-        Dataset fromDataset = metadataProvider.findDataset(dataverseNameFrom, datasetNameFrom);
-        if (fromDataset == null) {
-            throw new CompilationException("The source dataset " + datasetNameFrom + " in dataverse "
-                    + dataverseNameFrom + " could not be found for the Run command");
-        }
-        Dataset toDataset = metadataProvider.findDataset(dataverseNameTo, datasetNameTo);
-        if (toDataset == null) {
-            throw new CompilationException("The sink dataset " + datasetNameTo + " in dataverse " + dataverseNameTo
-                    + " could not be found for the Run command");
-        }
-
-        try {
-            // Find the primary index of the sink dataset.
-            Index toIndex = null;
-            List<Index> indexes = MetadataManager.INSTANCE.getDatasetIndexes(mdTxnCtx, dataverseNameTo,
-                    pregelixStmt.getDatasetNameTo().getValue());
-            for (Index index : indexes) {
-                if (index.isPrimaryIndex()) {
-                    toIndex = index;
-                    break;
-                }
-            }
-            if (toIndex == null) {
-                throw new AlgebricksException("Tried to access non-existing dataset: " + datasetNameTo);
-            }
-            // Cleans up the sink dataset -- Drop and then Create.
-            DropDatasetStatement dropStmt =
-                    new DropDatasetStatement(new Identifier(dataverseNameTo), pregelixStmt.getDatasetNameTo(), true);
-            this.handleDatasetDropStatement(metadataProvider, dropStmt, hcc, null);
-            IDatasetDetailsDecl idd = new InternalDetailsDecl(toIndex.getKeyFieldNames(),
-                    toIndex.getKeyFieldSourceIndicators(), false, null);
-            RecordConstructor withRecord = getWithRecord(toDataset);
-            DatasetDecl createToDataset = new DatasetDecl(new Identifier(dataverseNameTo),
-                    pregelixStmt.getDatasetNameTo(), new Identifier(toDataset.getItemTypeDataverseName()),
-                    new Identifier(toDataset.getItemTypeName()),
-                    new Identifier(toDataset.getMetaItemTypeDataverseName()),
-                    new Identifier(toDataset.getMetaItemTypeName()), new Identifier(toDataset.getNodeGroupName()),
-                    toDataset.getHints(), toDataset.getDatasetType(), idd, withRecord, false);
-            this.handleCreateDatasetStatement(metadataProvider, createToDataset, hcc, null);
-        } catch (Exception e) {
-            LOGGER.log(Level.WARN, e.getMessage(), e);
-            throw new AlgebricksException("Error cleaning the result dataset. This should not happen.");
-        }
-
-        // Flushes source dataset.
-        FlushDatasetUtil.flushDataset(hcc, metadataProvider, dataverseNameFrom, datasetNameFrom);
-    }
-
-    private static RecordConstructor getWithRecord(Dataset dataset) {
-        String mergePolicy = dataset.getCompactionPolicy();
-        Map<String, String> mergePolicyProperties = dataset.getCompactionPolicyProperties();
-        if (mergePolicy.equals(GlobalConfig.DEFAULT_COMPACTION_POLICY_NAME)
-                && mergePolicyProperties.equals(GlobalConfig.DEFAULT_COMPACTION_POLICY_PROPERTIES)) {
-            return null;
-        }
-        List<FieldBinding> mergePolicyRecordFields = new ArrayList<>(mergePolicyProperties == null ? 1 : 2);
-        mergePolicyRecordFields.add(toFieldBinding(MergePolicyUtils.MERGE_POLICY_NAME_PARAMETER_NAME, mergePolicy));
-        if (mergePolicyProperties != null) {
-            mergePolicyRecordFields.add(
-                    toFieldBinding(MergePolicyUtils.MERGE_POLICY_PARAMETERS_PARAMETER_NAME, mergePolicyProperties));
-        }
-        FieldBinding mergePolicyBinding = toFieldBinding(MergePolicyUtils.MERGE_POLICY_PARAMETER_NAME,
-                new RecordConstructor(mergePolicyRecordFields));
-        List<FieldBinding> withRecordFields = new ArrayList<>(1);
-        withRecordFields.add(mergePolicyBinding);
-        return new RecordConstructor(withRecordFields);
-    }
-
-    private static FieldBinding toFieldBinding(String key, Map<String, String> value) {
-        List<FieldBinding> fields = new ArrayList<>(value.size());
-        for (Entry<String, String> entry : value.entrySet()) {
-            fields.add(toFieldBinding(entry.getKey(), entry.getValue()));
-        }
-        RecordConstructor record = new RecordConstructor(fields);
-        return toFieldBinding(key, record);
-    }
-
-    private static FieldBinding toFieldBinding(String key, RecordConstructor value) {
-        return new FieldBinding(new LiteralExpr(new StringLiteral(key)), value);
-    }
-
-    private static FieldBinding toFieldBinding(String key, String value) {
-        return new FieldBinding(new LiteralExpr(new StringLiteral(key)), new LiteralExpr(new StringLiteral(value)));
-    }
-
-    // Executes external shell commands.
-    protected int executeExternalShellProgram(ProcessBuilder pb)
-            throws IOException, AlgebricksException, InterruptedException {
-        Process process = pb.start();
-        try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
-            String line;
-            while ((line = in.readLine()) != null) {
-                LOGGER.info(line);
-                if (line.contains("Exception") || line.contains("Error")) {
-                    LOGGER.error(line);
-                    if (line.contains("Connection refused")) {
-                        throw new AlgebricksException(
-                                "The connection to your Pregelix cluster was refused. Is it running? "
-                                        + "Is the port in the query correct?");
-                    }
-                    if (line.contains("Could not find or load main class")) {
-                        throw new AlgebricksException("The main class of your Pregelix query was not found. "
-                                + "Is the path to your .jar file correct?");
-                    }
-                    if (line.contains("ClassNotFoundException")) {
-                        throw new AlgebricksException("The vertex class of your Pregelix query was not found. "
-                                + "Does it exist? Is the spelling correct?");
-                    }
-                }
-            }
-            process.waitFor();
-        }
-        // Gets the exit value of the program.
-        return process.exitValue();
-    }
-
-    // Constructs a Pregelix command line.
-    protected List<String> constructPregelixCommand(RunStatement pregelixStmt, String fromDataverseName,
-            String fromDatasetName, String toDataverseName, String toDatasetName) {
-        // Constructs AsterixDB parameters, e.g., URL, source dataset and sink dataset.
-        ExternalProperties externalProperties = appCtx.getExternalProperties();
-        String clientIP = appCtx.getServiceContext().getCCContext().getClusterControllerInfo().getClientNetAddress();
-        StringBuilder asterixdbParameterBuilder = new StringBuilder();
-        asterixdbParameterBuilder.append(
-                "pregelix.asterixdb.url=" + "http://" + clientIP + ":" + externalProperties.getAPIServerPort() + ",");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.source=true,");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.sink=true,");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.input.dataverse=" + fromDataverseName + ",");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.input.dataset=" + fromDatasetName + ",");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.output.dataverse=" + toDataverseName + ",");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.output.dataset=" + toDatasetName + ",");
-        asterixdbParameterBuilder.append("pregelix.asterixdb.output.cleanup=false,");
-
-        // construct command
-        List<String> cmds = new ArrayList<>();
-        cmds.add("bin/pregelix");
-        cmds.add(pregelixStmt.getParameters().get(0)); // jar
-        cmds.add(pregelixStmt.getParameters().get(1)); // class
-
-        String customizedPregelixProperty = "-cust-prop";
-        String inputConverterClassKey = "pregelix.asterixdb.input.converterclass";
-        String inputConverterClassValue = "=org.apache.pregelix.example.converter.VLongIdInputVertexConverter,";
-        String outputConverterClassKey = "pregelix.asterixdb.output.converterclass";
-        String outputConverterClassValue = "=org.apache.pregelix.example.converter.VLongIdOutputVertexConverter,";
-        boolean custPropAdded = false;
-        boolean meetCustProp = false;
-        // User parameters.
-        for (String s : pregelixStmt.getParameters().get(2).split(" ")) {
-            if (meetCustProp) {
-                if (!s.contains(inputConverterClassKey)) {
-                    asterixdbParameterBuilder.append(inputConverterClassKey + inputConverterClassValue);
-                }
-                if (!s.contains(outputConverterClassKey)) {
-                    asterixdbParameterBuilder.append(outputConverterClassKey + outputConverterClassValue);
-                }
-                cmds.add(asterixdbParameterBuilder.toString() + s);
-                meetCustProp = false;
-                custPropAdded = true;
-                continue;
-            }
-            cmds.add(s);
-            if (s.equals(customizedPregelixProperty)) {
-                meetCustProp = true;
-            }
-        }
-
-        if (!custPropAdded) {
-            cmds.add(customizedPregelixProperty);
-            // Appends default converter classes to asterixdbParameterBuilder.
-            asterixdbParameterBuilder.append(inputConverterClassKey + inputConverterClassValue);
-            asterixdbParameterBuilder.append(outputConverterClassKey + outputConverterClassValue);
-            // Remove the last comma.
-            asterixdbParameterBuilder.delete(asterixdbParameterBuilder.length() - 1,
-                    asterixdbParameterBuilder.length());
-            cmds.add(asterixdbParameterBuilder.toString());
-        }
-        return cmds;
-    }
-
     @Override
     public String getActiveDataverseName(String dataverse) {
         return (dataverse != null) ? dataverse : activeDataverse.getDataverseName();
diff --git a/asterixdb/asterix-app/src/test/java/org/apache/asterix/aql/translator/QueryTranslatorTest.java b/asterixdb/asterix-app/src/test/java/org/apache/asterix/aql/translator/QueryTranslatorTest.java
deleted file mode 100644
index 51c512a..0000000
--- a/asterixdb/asterix-app/src/test/java/org/apache/asterix/aql/translator/QueryTranslatorTest.java
+++ /dev/null
@@ -1,117 +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.aql.translator;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-import org.apache.asterix.app.translator.DefaultStatementExecutorFactory;
-import org.apache.asterix.common.config.ExternalProperties;
-import org.apache.asterix.compiler.provider.AqlCompilationProvider;
-import org.apache.asterix.file.StorageComponentProvider;
-import org.apache.asterix.lang.common.base.Statement;
-import org.apache.asterix.lang.common.statement.RunStatement;
-import org.apache.asterix.runtime.utils.CcApplicationContext;
-import org.apache.asterix.translator.IStatementExecutor;
-import org.apache.asterix.translator.SessionOutput;
-import org.apache.hyracks.api.application.ICCServiceContext;
-import org.apache.hyracks.api.client.ClusterControllerInfo;
-import org.apache.hyracks.api.config.IApplicationConfig;
-import org.apache.hyracks.api.context.ICCContext;
-import org.apache.hyracks.control.common.controllers.CCConfig;
-import org.junit.Assert;
-import org.junit.Test;
-
-import junit.extensions.PA;
-
-@SuppressWarnings({ "unchecked" })
-public class QueryTranslatorTest {
-
-    @Test
-    public void test() throws Exception {
-        List<Statement> statements = new ArrayList<>();
-        SessionOutput mockSessionOutput = mock(SessionOutput.class);
-        RunStatement mockRunStatement = mock(RunStatement.class);
-
-        // Mocks AppContextInfo.
-        CcApplicationContext mockAsterixAppContextInfo = mock(CcApplicationContext.class);
-        ExternalProperties mockAsterixExternalProperties = mock(ExternalProperties.class);
-        when(mockAsterixAppContextInfo.getExternalProperties()).thenReturn(mockAsterixExternalProperties);
-        when(mockAsterixExternalProperties.getAPIServerPort()).thenReturn(19002);
-        ICCServiceContext mockServiceContext = mock(ICCServiceContext.class);
-        when(mockAsterixAppContextInfo.getServiceContext()).thenReturn(mockServiceContext);
-        ICCContext mockCCContext = mock(ICCContext.class);
-        when(mockServiceContext.getCCContext()).thenReturn(mockCCContext);
-        ClusterControllerInfo mockCCInfo = mock(ClusterControllerInfo.class);
-        when(mockCCContext.getClusterControllerInfo()).thenReturn(mockCCInfo);
-        when(mockCCInfo.getClientNetAddress()).thenReturn("127.0.0.1");
-        IApplicationConfig mockApplicationConfig = mock(IApplicationConfig.class);
-        when(mockServiceContext.getAppConfig()).thenReturn(mockApplicationConfig);
-        when(mockApplicationConfig.getBoolean(CCConfig.Option.ENFORCE_FRAME_WRITER_PROTOCOL)).thenReturn(true);
-
-        IStatementExecutor aqlTranslator = new DefaultStatementExecutorFactory().create(mockAsterixAppContextInfo,
-                statements, mockSessionOutput, new AqlCompilationProvider(), new StorageComponentProvider());
-        List<String> parameters = new ArrayList<>();
-        parameters.add("examples/pregelix-example-jar-with-dependencies.jar");
-        parameters.add("org.apache.pregelix.example.PageRankVertex");
-        parameters.add("-ip 10.0.2.15 -port 3199");
-        when(mockRunStatement.getParameters()).thenReturn(parameters);
-        // Test a customer command without "-cust-prop".
-        List<String> cmds = (List<String>) PA.invokeMethod(aqlTranslator,
-                "constructPregelixCommand(org.apache.asterix.lang.common.statement.RunStatement,"
-                        + "String,String,String,String)",
-                mockRunStatement, "fromDataverse", "fromDataset", "toDataverse", "toDataset");
-        List<String> expectedCmds = Arrays.asList(new String[] { "bin/pregelix",
-                "examples/pregelix-example-jar-with-dependencies.jar", "org.apache.pregelix.example.PageRankVertex",
-                "-ip", "10.0.2.15", "-port", "3199", "-cust-prop",
-                "pregelix.asterixdb.url=http://127.0.0.1:19002,pregelix.asterixdb.source=true,pregelix.asterixdb.sink=true,pregelix.asterixdb.input.dataverse=fromDataverse,pregelix.asterixdb.input.dataset=fromDataset,pregelix.asterixdb.output.dataverse=toDataverse,pregelix.asterixdb.output.dataset=toDataset,pregelix.asterixdb.output.cleanup=false,pregelix.asterixdb.input.converterclass=org.apache.pregelix.example.converter.VLongIdInputVertexConverter,pregelix.asterixdb.output.converterclass=org.apache.pregelix.example.converter.VLongIdOutputVertexConverter" });
-        Assert.assertEquals(cmds, expectedCmds);
-
-        parameters.remove(parameters.size() - 1);
-        parameters.add("-ip 10.0.2.15 -port 3199 -cust-prop "
-                + "pregelix.asterixdb.input.converterclass=org.apache.pregelix.example.converter.TestInputVertexConverter,"
-                + "pregelix.asterixdb.output.converterclass=org.apache.pregelix.example.converter.TestOutputVertexConverter");
-        // Test a customer command with "-cust-prop".
-        cmds = (List<String>) PA.invokeMethod(aqlTranslator,
-                "constructPregelixCommand(org.apache.asterix.lang.common.statement.RunStatement,"
-                        + "String,String,String,String)",
-                mockRunStatement, "fromDataverse", "fromDataset", "toDataverse", "toDataset");
-        expectedCmds = Arrays.asList(new String[] { "bin/pregelix",
-                "examples/pregelix-example-jar-with-dependencies.jar", "org.apache.pregelix.example.PageRankVertex",
-                "-ip", "10.0.2.15", "-port", "3199", "-cust-prop",
-                "pregelix.asterixdb.url=http://127.0.0.1:19002,pregelix.asterixdb.source=true,pregelix.asterixdb.sink=true,pregelix.asterixdb.input.dataverse=fromDataverse,pregelix.asterixdb.input.dataset=fromDataset,pregelix.asterixdb.output.dataverse=toDataverse,pregelix.asterixdb.output.dataset=toDataset,pregelix.asterixdb.output.cleanup=false,pregelix.asterixdb.input.converterclass=org.apache.pregelix.example.converter.TestInputVertexConverter,pregelix.asterixdb.output.converterclass=org.apache.pregelix.example.converter.TestOutputVertexConverter" });
-        Assert.assertEquals(cmds, expectedCmds);
-    }
-
-    private void setFinalStaticField(Field field, Object newValue) throws Exception {
-        field.setAccessible(true);
-        // remove final modifier from field
-        Field modifiersField = Field.class.getDeclaredField("modifiers");
-        modifiersField.setAccessible(true);
-        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
-        field.set(null, newValue);
-    }
-}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.1.ddl.aql
deleted file mode 100644
index 4a7acd0..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.1.ddl.aql
+++ /dev/null
@@ -1,65 +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.
- */
-drop dataverse Pregelix if exists;
-create dataverse Pregelix
-use dataverse Pregelix
-
-create type TwitterUserType as open {
-        screen-name: string,
-        lang: string,
-        friends_count: int32,
-        statuses_count: int32,
-        name: string,
-        followers_count: int32
-}
-
-create type TweetMessageType as open {
-       tweetid: int64,
-       user: TwitterUserType,
-       sender-location: point?,
-       send-time: datetime,
-       referred-topics: {{ string }},
-       message-text: string,
-       retweeted-from: int64, 
-       forwarded-from: int64
-}
-
-create dataset TwitterMsgs(TweetMessageType)
-    primary key tweetid;
-
-create dataset TwitterUsers(TwitterUserType)
-    primary key screen-name;
-
-    create type TMEdge as open {
-        tweetid: int64,
-        value: float?
-    }
-
-    create type TMGraph as open {
-        tweetid: int64,
-        rank-value: double?,
-        populated-by: {{TMEdge}}
-    }
-
-
-create dataset MyInputGraph(TMGraph)
-    primary key tweetid;
-
-create dataset MyOutputGraph(TMGraph)
-    primary key tweetid;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.2.update.aql
deleted file mode 100644
index e679951..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.2.update.aql
+++ /dev/null
@@ -1,52 +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.
- */
-use dataverse Pregelix;
-
-insert into dataset TwitterUsers (
-{{
-{"screen-name":"NathanGiesen@211","lang":"en","friends_count":18,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},
-{"screen-name":"ColineGeyer@63","lang":"en","friends_count":121,"statuses_count":362,"name":"Coline Geyer","followers_count":17159},
-{"screen-name":"NilaMilliron_tw","lang":"en","friends_count":445,"statuses_count":164,"name":"Nila Milliron","followers_count":22649},
-{"screen-name":"ChangEwing_573","lang":"en","friends_count":182,"statuses_count":394,"name":"Chang Ewing","followers_count":32136}
-}})
-
-insert into dataset TwitterMsgs (
-{{
-    {"tweetid":1,"user":{"screen-name":"NathanGiesen@211","lang":"en","friends_count":39339,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},"sender-location":point("47.44,80.65"),"send-time":datetime("2008-04-26T10:10:00"),"referred-topics":{{"t-mobile","customization"}},"message-text":" love t-mobile its customization is good:)", "retweeted-from":2, "forwarded-from":3},
-    {"tweetid":2,"user":{"screen-name":"ColineGeyer@63","lang":"en","friends_count":121,"statuses_count":362,"name":"Coline Geyer","followers_count":17159},"sender-location":point("32.84,67.14"),"send-time":datetime("2010-05-13T10:10:00"),"referred-topics":{{"verizon","shortcut-menu"}},"message-text":" like verizon its shortcut-menu is awesome:)", "retweeted-from":7, "forwarded-from":1},
-    {"tweetid":3,"user":{"screen-name":"NathanGiesen@211","lang":"en","friends_count":39339,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},"sender-location":point("29.72,75.8"),"send-time":datetime("2006-11-04T10:10:00"),"referred-topics":{{"motorola","speed"}},"message-text":" like motorola the speed is good:)", "retweeted-from":8, "forwarded-from":6},
-    {"tweetid":4,"user":{"screen-name":"NathanGiesen@211","lang":"en","friends_count":39339,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},"sender-location":point("39.28,70.48"),"send-time":datetime("2011-12-26T10:10:00"),"referred-topics":{{"sprint","voice-command"}},"message-text":" like sprint the voice-command is mind-blowing:)", "retweeted-from":1, "forwarded-from":3},
-    {"tweetid":5,"user":{"screen-name":"NathanGiesen@211","lang":"en","friends_count":39339,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},"sender-location":point("40.09,92.69"),"send-time":datetime("2006-08-04T10:10:00"),"referred-topics":{{"motorola","speed"}},"message-text":" can't stand motorola its speed is terrible:(", "retweeted-from":8, "forwarded-from":6},
-    {"tweetid":6,"user":{"screen-name":"ColineGeyer@63","lang":"en","friends_count":121,"statuses_count":362,"name":"Coline Geyer","followers_count":17159},"sender-location":point("47.51,83.99"),"send-time":datetime("2010-05-07T10:10:00"),"referred-topics":{{"iphone","voice-clarity"}},"message-text":" like iphone the voice-clarity is good:)", "retweeted-from":4, "forwarded-from":5},
-    {"tweetid":7,"user":{"screen-name":"ChangEwing_573","lang":"en","friends_count":182,"statuses_count":394,"name":"Chang Ewing","followers_count":32136},"sender-location":point("36.21,72.6"),"send-time":datetime("2011-08-25T10:10:00"),"referred-topics":{{"samsung","platform"}},"message-text":" like samsung the platform is good", "retweeted-from":2, "forwarded-from":7},
-    {"tweetid":8,"user":{"screen-name":"NathanGiesen@211","lang":"en","friends_count":39339,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},"sender-location":point("46.05,93.34"),"send-time":datetime("2005-10-14T10:10:00"),"referred-topics":{{"t-mobile","shortcut-menu"}},"message-text":" like t-mobile the shortcut-menu is awesome:)", "retweeted-from":3, "forwarded-from":7},
-    {"tweetid":9,"user":{"screen-name":"NathanGiesen@211","lang":"en","friends_count":39339,"statuses_count":473,"name":"Nathan Giesen","followers_count":49416},"sender-location":point("36.86,74.62"),"send-time":datetime("2012-07-21T10:10:00"),"referred-topics":{{"verizon","voicemail-service"}},"message-text":" love verizon its voicemail-service is awesome", "retweeted-from":6, "forwarded-from":2},
-    {"tweetid":10,"user":{"screen-name":"ColineGeyer@63","lang":"en","friends_count":121,"statuses_count":362,"name":"Coline Geyer","followers_count":17159},"sender-location":point("29.15,76.53"),"send-time":datetime("2008-01-26T10:10:00"),"referred-topics":{{"verizon","voice-clarity"}},"message-text":" hate verizon its voice-clarity is OMG:(", "retweeted-from":4, "forwarded-from":5},
-    {"tweetid":11,"user":{"screen-name":"NilaMilliron_tw","lang":"en","friends_count":445,"statuses_count":164,"name":"Nila Milliron","followers_count":22649},"sender-location":point("37.59,68.42"),"send-time":datetime("2008-03-09T10:10:00"),"referred-topics":{{"iphone","platform"}},"message-text":" can't stand iphone its platform is terrible", "retweeted-from":6, "forwarded-from":3},
-    {"tweetid":12,"user":{"screen-name":"OliJackson_512","lang":"en","friends_count":445,"statuses_count":164,"name":"Oli Jackson","followers_count":22649},"sender-location":point("24.82,94.63"),"send-time":datetime("2010-02-13T10:10:00"),"referred-topics":{{"samsung","voice-command"}},"message-text":" like samsung the voice-command is amazing:)", "retweeted-from":6, "forwarded-from":5}
-}})
-
-insert into dataset MyInputGraph
-for $tm in dataset TwitterMsgs
-let $links:={{ {"tweetid":$tm.retweeted-from}, {"tweetid":$tm.forwarded-from}}}
-return {
-      "tweetid": $tm.tweetid,
-      "rank-value": 0.0,
-      "populated-by": $links
-}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.3.query.aql
deleted file mode 100644
index d317355..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q01/pregel-q01.3.query.aql
+++ /dev/null
@@ -1,27 +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.
- */
-use dataverse Pregelix;
-
-run pregel("examples/pregelix-example-0.2.14-SNAPSHOT-jar-with-dependencies.jar"
- "org.apache.pregelix.example.PageRankVertex"
- "-ip 10.0.2.15 -port 3199 -vnum 17")
-from dataset MyInputGraph 
-to dataset MyOutputGraph;
-
-for $n in dataset MyOutputGraph return $n;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.1.ddl.aql
deleted file mode 100644
index d7a495a..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.1.ddl.aql
+++ /dev/null
@@ -1,34 +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.
- */
-drop dataverse Pregelix if exists;
-create dataverse Pregelix
-use dataverse Pregelix
-
-create type EdgeType as open {
-    destVertexId: int64,
-    value: float?
-}
-create type NodeType as open {
-   id: int64,
-   value: int64?,
-   edges: {{EdgeType}}
-}
-
-create dataset InputGraph(NodeType) primary key id;
-create dataset ResultGraph(NodeType) primary key id;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.2.update.aql
deleted file mode 100644
index 8f6ca9c..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.2.update.aql
+++ /dev/null
@@ -1,45 +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.
- */
-use dataverse Pregelix;
-
-insert into dataset InputGraph (
-{{
-    {"id":0,"value":0,"edges":{{ {"destVertexId":1}}}},
-{"id":1,"value":1,"edges":{{ {"destVertexId":1},{"destVertexId":2}}}},
-{"id":2,"value":2,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3}}}},
-{"id":3,"value":3,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4}}}},
-{"id":4,"value":4,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4},{"destVertexId":5}}}},
-{"id":5,"value":5,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4},{"destVertexId":5},{"destVertexId":6}}}},
-{"id":6,"value":6,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4},{"destVertexId":5},{"destVertexId":6},{"destVertexId":7}}}},
-{"id":7,"value":7,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4},{"destVertexId":5},{"destVertexId":6},{"destVertexId":7},{"destVertexId":8}}}},
-{"id":8,"value":8,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4},{"destVertexId":5},{"destVertexId":6},{"destVertexId":7},{"destVertexId":8},{"destVertexId":9}}}},
-{"id":9,"value":9,"edges":{{ {"destVertexId":1},{"destVertexId":2},{"destVertexId":3},{"destVertexId":4},{"destVertexId":5},{"destVertexId":6},{"destVertexId":7},{"destVertexId":8},{"destVertexId":9},{"destVertexId":0}}}},
-{"id":10,"value":10,"edges":{{ {"destVertexId":11}}}},
-{"id":11,"value":11,"edges":{{ {"destVertexId":11},{"destVertexId":12}}}},
-{"id":12,"value":12,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13}}}},
-{"id":13,"value":13,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14}}}},
-{"id":14,"value":14,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14},{"destVertexId":15}}}},
-{"id":15,"value":15,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14},{"destVertexId":15},{"destVertexId":16}}}},
-{"id":16,"value":16,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14},{"destVertexId":15},{"destVertexId":16},{"destVertexId":17}}}},
-{"id":17,"value":17,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14},{"destVertexId":15},{"destVertexId":16},{"destVertexId":17},{"destVertexId":18}}}},
-{"id":18,"value":18,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14},{"destVertexId":15},{"destVertexId":16},{"destVertexId":17},{"destVertexId":18},{"destVertexId":19}}}},
-{"id":19,"value":19,"edges":{{ {"destVertexId":11},{"destVertexId":12},{"destVertexId":13},{"destVertexId":14},{"destVertexId":15},{"destVertexId":16},{"destVertexId":17},{"destVertexId":18},{"destVertexId":19},   {"destVertexId":10}}}}
-}}
-
-)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.3.query.aql
deleted file mode 100644
index 23a5215..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q02/pregel-q02.3.query.aql
+++ /dev/null
@@ -1,27 +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.
- */
-use dataverse Pregelix;
-
-run pregel("examples/pregelix-example-0.2.14-SNAPSHOT-jar-with-dependencies.jar"
- "org.apache.pregelix.example.ConnectedComponentsVertex"
- "-ip 10.0.2.15 -port 3199")
-from dataset InputGraph 
-to dataset ResultGraph;
-
-for $n in dataset ResultGraph return $n;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.1.ddl.aql
deleted file mode 100644
index 370ad80..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.1.ddl.aql
+++ /dev/null
@@ -1,34 +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.
- */
-drop dataverse Pregelix if exists;
-create dataverse Pregelix
-use dataverse Pregelix
-
-create type EdgeType as open {
-    destVertexId: int64,
-    cost: float?
-}
-create type NodeType as open {
-    id: int64,
-    value: double?,
-    edges: {{EdgeType}}
-}
-
-create dataset InputGraph(NodeType) primary key id;
-create dataset ResultGraph(NodeType) primary key id;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.2.update.aql
deleted file mode 100644
index 1702cc6..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.2.update.aql
+++ /dev/null
@@ -1,34 +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.
- */
-use dataverse Pregelix;
-
-insert into dataset InputGraph (
-{{
-{"id":0,  "edges":{{ {"destVertexId":1, "cost":1.0f}}}},
-{"id":1,  "edges":{{ {"destVertexId":3, "cost":4.0f},{"destVertexId":2, "cost":3.0f}}}},
-{"id":2,  "edges":{{ {"destVertexId":4, "cost":5.0f},{"destVertexId":5, "cost":23.0f}}}},
-{"id":3,  "edges":{{ {"destVertexId":2, "cost":1.0f},{"destVertexId":8, "cost":13.0f}}}},
-{"id":4,  "edges":{{ {"destVertexId":1, "cost":5.0f},{"destVertexId":2, "cost":8.0f},{"destVertexId":3, "cost":23.0f},{"destVertexId":4, "cost":12.0f}}}},
-{"id":5,  "edges":{{ {"destVertexId":6, "cost":12.0f},{"destVertexId":7, "cost":17.0f}}}},
-{"id":6,  "edges":{{ {"destVertexId":1, "cost":12.0f},{"destVertexId":2, "cost":1.0f}}}},
-{"id":7,  "edges":{{ {"destVertexId":9, "cost":100.0f}}}},
-{"id":8,  "edges":{{ {"destVertexId":4, "cost":11.0f}}}},
-{"id":9,  "edges":{{ {"destVertexId":1, "cost":16.0f},{"destVertexId":2, "cost":9.0f}}}}
-}}
-)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.3.query.aql
deleted file mode 100644
index 3ac6980..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/graph/pregel-q03/pregel-q03.3.query.aql
+++ /dev/null
@@ -1,27 +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.
- */
-use dataverse Pregelix;
-
-run pregel("examples/pregelix-example-0.2.14-SNAPSHOT-jar-with-dependencies.jar"
- "org.apache.pregelix.example.ShortestPathsVertex"
- "-ip 10.0.2.15 -port 3199 -source-vertex 0")
-from dataset InputGraph
-to dataset ResultGraph;
-
-for $n in dataset ResultGraph return $n;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.1.ddl.sqlpp
deleted file mode 100644
index 3ffbbf4..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.1.ddl.sqlpp
+++ /dev/null
@@ -1,68 +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.
- */
-
-drop  dataverse Pregelix if exists;
-create  dataverse Pregelix;
-
-use Pregelix;
-
-
-create type Pregelix.TwitterUserType as
-{
-  `screen-name` : string,
-  lang : string,
-  friends_count : integer,
-  statuses_count : integer,
-  name : string,
-  followers_count : integer
-};
-
-create type Pregelix.TweetMessageType as
-{
-  tweetid : bigint,
-  user : TwitterUserType,
-  `sender-location` : point?,
-  `send-time` : datetime,
-  `referred-topics` : {{string}},
-  `message-text` : string,
-  `retweeted-from` : bigint,
-  `forwarded-from` : bigint
-};
-
-create  dataset TwitterMsgs(TweetMessageType) primary key tweetid;
-
-create  dataset TwitterUsers(TwitterUserType) primary key `screen-name`;
-
-create type Pregelix.TMEdge as
-{
-  tweetid : bigint,
-  `value` : float?
-};
-
-create type Pregelix.TMGraph as
-{
-  tweetid : bigint,
-  `rank-value` : double?,
-  `populated-by` : {{TMEdge}};
-};
-
-create  dataset MyInputGraph(TMGraph) primary key tweetid;
-
-create  dataset MyOutputGraph(TMGraph) primary key tweetid;
-
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.2.update.sqlpp
deleted file mode 100644
index dbd9ebe..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.2.update.sqlpp
+++ /dev/null
@@ -1,31 +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.
- */
-
-use Pregelix;
-
-
-insert into TwitterUsers
-select element {{{'screen-name':'NathanGiesen@211','lang':'en','friends_count':18,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},{'screen-name':'ColineGeyer@63','lang':'en','friends_count':121,'statuses_count':362,'name':'Coline Geyer','followers_count':17159},{'screen-name':'NilaMilliron_tw','lang':'en','friends_count':445,'statuses_count':164,'name':'Nila Milliron','followers_count':22649},{'screen-name':'ChangEwing_573','lang':'en','friends_count':182,'statuses_count':394,'name':'Chang Ewing','followers_count':32136}}};
-insert into TwitterMsgs
-select element {{{'tweetid':1,'user':{'screen-name':'NathanGiesen@211','lang':'en','friends_count':39339,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},'sender-location':Pregelix.point('47.44,80.65'),'send-time':Pregelix.datetime('2008-04-26T10:10:00'),'referred-topics':{{'t-mobile','customization'}},'message-text':' love t-mobile its customization is good:)','retweeted-from':2,'forwarded-from':3},{'tweetid':2,'user':{'screen-name':'ColineGeyer@63','lang':'en','friends_count':121,'statuses_count':362,'name':'Coline Geyer','followers_count':17159},'sender-location':Pregelix.point('32.84,67.14'),'send-time':Pregelix.datetime('2010-05-13T10:10:00'),'referred-topics':{{'verizon','shortcut-menu'}},'message-text':' like verizon its shortcut-menu is awesome:)','retweeted-from':7,'forwarded-from':1},{'tweetid':3,'user':{'screen-name':'NathanGiesen@211','lang':'en','friends_count':39339,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},'sender-location':Pregelix.point('29.72,75.8'),'send-time':Pregelix.datetime('2006-11-04T10:10:00'),'referred-topics':{{'motorola','speed'}},'message-text':' like motorola the speed is good:)','retweeted-from':8,'forwarded-from':6},{'tweetid':4,'user':{'screen-name':'NathanGiesen@211','lang':'en','friends_count':39339,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},'sender-location':Pregelix.point('39.28,70.48'),'send-time':Pregelix.datetime('2011-12-26T10:10:00'),'referred-topics':{{'sprint','voice-command'}},'message-text':' like sprint the voice-command is mind-blowing:)','retweeted-from':1,'forwarded-from':3},{'tweetid':5,'user':{'screen-name':'NathanGiesen@211','lang':'en','friends_count':39339,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},'sender-location':Pregelix.point('40.09,92.69'),'send-time':Pregelix.datetime('2006-08-04T10:10:00'),'referred-topics':{{'motorola','speed'}},'message-text':' can\'t stand motorola its speed is terrible:(','retweeted-from':8,'forwarded-from':6},{'tweetid':6,'user':{'screen-name':'ColineGeyer@63','lang':'en','friends_count':121,'statuses_count':362,'name':'Coline Geyer','followers_count':17159},'sender-location':Pregelix.point('47.51,83.99'),'send-time':Pregelix.datetime('2010-05-07T10:10:00'),'referred-topics':{{'iphone','voice-clarity'}},'message-text':' like iphone the voice-clarity is good:)','retweeted-from':4,'forwarded-from':5},{'tweetid':7,'user':{'screen-name':'ChangEwing_573','lang':'en','friends_count':182,'statuses_count':394,'name':'Chang Ewing','followers_count':32136},'sender-location':Pregelix.point('36.21,72.6'),'send-time':Pregelix.datetime('2011-08-25T10:10:00'),'referred-topics':{{'samsung','platform'}},'message-text':' like samsung the platform is good','retweeted-from':2,'forwarded-from':7},{'tweetid':8,'user':{'screen-name':'NathanGiesen@211','lang':'en','friends_count':39339,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},'sender-location':Pregelix.point('46.05,93.34'),'send-time':Pregelix.datetime('2005-10-14T10:10:00'),'referred-topics':{{'t-mobile','shortcut-menu'}},'message-text':' like t-mobile the shortcut-menu is awesome:)','retweeted-from':3,'forwarded-from':7},{'tweetid':9,'user':{'screen-name':'NathanGiesen@211','lang':'en','friends_count':39339,'statuses_count':473,'name':'Nathan Giesen','followers_count':49416},'sender-location':Pregelix.point('36.86,74.62'),'send-time':Pregelix.datetime('2012-07-21T10:10:00'),'referred-topics':{{'verizon','voicemail-service'}},'message-text':' love verizon its voicemail-service is awesome','retweeted-from':6,'forwarded-from':2},{'tweetid':10,'user':{'screen-name':'ColineGeyer@63','lang':'en','friends_count':121,'statuses_count':362,'name':'Coline Geyer','followers_count':17159},'sender-location':Pregelix.point('29.15,76.53'),'send-time':Pregelix.datetime('2008-01-26T10:10:00'),'referred-topics':{{'verizon','voice-clarity'}},'message-text':' hate verizon its voice-clarity is OMG:(','retweeted-from':4,'forwarded-from':5},{'tweetid':11,'user':{'screen-name':'NilaMilliron_tw','lang':'en','friends_count':445,'statuses_count':164,'name':'Nila Milliron','followers_count':22649},'sender-location':Pregelix.point('37.59,68.42'),'send-time':Pregelix.datetime('2008-03-09T10:10:00'),'referred-topics':{{'iphone','platform'}},'message-text':' can\'t stand iphone its platform is terrible','retweeted-from':6,'forwarded-from':3},{'tweetid':12,'user':{'screen-name':'OliJackson_512','lang':'en','friends_count':445,'statuses_count':164,'name':'Oli Jackson','followers_count':22649},'sender-location':Pregelix.point('24.82,94.63'),'send-time':Pregelix.datetime('2010-02-13T10:10:00'),'referred-topics':{{'samsung','voice-command'}},'message-text':' like samsung the voice-command is amazing:)','retweeted-from':6,'forwarded-from':5}}};
-insert into MyInputGraph
-select element {'tweetid':tm.tweetid,'rank-value':0.0,'populated-by':links}
-from  TwitterMsgs as tm
-with  links as {{{'tweetid':tm.`retweeted-from`},{'tweetid':tm.`forwarded-from`}}}
-;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.3.query.sqlpp
deleted file mode 100644
index 0a70a27..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q01/pregel-q01.3.query.sqlpp
+++ /dev/null
@@ -1,25 +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.
- */
-
-use Pregelix;
-
-
-select element n
-from  MyOutputGraph as n
-;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.1.ddl.sqlpp
deleted file mode 100644
index c9e6b15..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.1.ddl.sqlpp
+++ /dev/null
@@ -1,42 +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.
- */
-
-drop  dataverse Pregelix if exists;
-create  dataverse Pregelix;
-
-use Pregelix;
-
-
-create type Pregelix.EdgeType as
-{
-  destVertexId : bigint,
-  `value` : float?
-};
-
-create type Pregelix.NodeType as
-{
-  id : bigint,
-  `value` : bigint?,
-  edges : {{EdgeType}};
-};
-
-create  dataset InputGraph(NodeType) primary key id;
-
-create  dataset ResultGraph(NodeType) primary key id;
-
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.2.update.sqlpp
deleted file mode 100644
index 2ec9add..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.2.update.sqlpp
+++ /dev/null
@@ -1,24 +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.
- */
-
-use Pregelix;
-
-
-insert into InputGraph
-select element {{{'id':0,'value':0,'edges':{{{'destVertexId':1}}}},{'id':1,'value':1,'edges':{{{'destVertexId':1},{'destVertexId':2}}}},{'id':2,'value':2,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3}}}},{'id':3,'value':3,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4}}}},{'id':4,'value':4,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4},{'destVertexId':5}}}},{'id':5,'value':5,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4},{'destVertexId':5},{'destVertexId':6}}}},{'id':6,'value':6,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4},{'destVertexId':5},{'destVertexId':6},{'destVertexId':7}}}},{'id':7,'value':7,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4},{'destVertexId':5},{'destVertexId':6},{'destVertexId':7},{'destVertexId':8}}}},{'id':8,'value':8,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4},{'destVertexId':5},{'destVertexId':6},{'destVertexId':7},{'destVertexId':8},{'destVertexId':9}}}},{'id':9,'value':9,'edges':{{{'destVertexId':1},{'destVertexId':2},{'destVertexId':3},{'destVertexId':4},{'destVertexId':5},{'destVertexId':6},{'destVertexId':7},{'destVertexId':8},{'destVertexId':9},{'destVertexId':0}}}},{'id':10,'value':10,'edges':{{{'destVertexId':11}}}},{'id':11,'value':11,'edges':{{{'destVertexId':11},{'destVertexId':12}}}},{'id':12,'value':12,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13}}}},{'id':13,'value':13,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14}}}},{'id':14,'value':14,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14},{'destVertexId':15}}}},{'id':15,'value':15,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14},{'destVertexId':15},{'destVertexId':16}}}},{'id':16,'value':16,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14},{'destVertexId':15},{'destVertexId':16},{'destVertexId':17}}}},{'id':17,'value':17,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14},{'destVertexId':15},{'destVertexId':16},{'destVertexId':17},{'destVertexId':18}}}},{'id':18,'value':18,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14},{'destVertexId':15},{'destVertexId':16},{'destVertexId':17},{'destVertexId':18},{'destVertexId':19}}}},{'id':19,'value':19,'edges':{{{'destVertexId':11},{'destVertexId':12},{'destVertexId':13},{'destVertexId':14},{'destVertexId':15},{'destVertexId':16},{'destVertexId':17},{'destVertexId':18},{'destVertexId':19},{'destVertexId':10}}}}}};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.3.query.sqlpp
deleted file mode 100644
index 99f49c1..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q02/pregel-q02.3.query.sqlpp
+++ /dev/null
@@ -1,25 +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.
- */
-
-use Pregelix;
-
-
-select element n
-from  ResultGraph as n
-;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.1.ddl.sqlpp
deleted file mode 100644
index d56e013..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.1.ddl.sqlpp
+++ /dev/null
@@ -1,42 +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.
- */
-
-drop  dataverse Pregelix if exists;
-create  dataverse Pregelix;
-
-use Pregelix;
-
-
-create type Pregelix.EdgeType as
-{
-  destVertexId : bigint,
-  cost : float?
-};
-
-create type Pregelix.NodeType as
-{
-  id : bigint,
-  `value` : double?,
-  edges : {{EdgeType}};
-};
-
-create  dataset InputGraph(NodeType) primary key id;
-
-create  dataset ResultGraph(NodeType) primary key id;
-
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.2.update.sqlpp
deleted file mode 100644
index 6b89842..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.2.update.sqlpp
+++ /dev/null
@@ -1,24 +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.
- */
-
-use Pregelix;
-
-
-insert into InputGraph
-select element {{{'id':0,'edges':{{{'destVertexId':1,'cost':1.000000f}}}},{'id':1,'edges':{{{'destVertexId':3,'cost':4.000000f},{'destVertexId':2,'cost':3.000000f}}}},{'id':2,'edges':{{{'destVertexId':4,'cost':5.000000f},{'destVertexId':5,'cost':23.000000f}}}},{'id':3,'edges':{{{'destVertexId':2,'cost':1.000000f},{'destVertexId':8,'cost':13.000000f}}}},{'id':4,'edges':{{{'destVertexId':1,'cost':5.000000f},{'destVertexId':2,'cost':8.000000f},{'destVertexId':3,'cost':23.000000f},{'destVertexId':4,'cost':12.000000f}}}},{'id':5,'edges':{{{'destVertexId':6,'cost':12.000000f},{'destVertexId':7,'cost':17.000000f}}}},{'id':6,'edges':{{{'destVertexId':1,'cost':12.000000f},{'destVertexId':2,'cost':1.000000f}}}},{'id':7,'edges':{{{'destVertexId':9,'cost':100.000000f}}}},{'id':8,'edges':{{{'destVertexId':4,'cost':11.000000f}}}},{'id':9,'edges':{{{'destVertexId':1,'cost':16.000000f},{'destVertexId':2,'cost':9.000000f}}}}}};
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.3.query.sqlpp
deleted file mode 100644
index 99f49c1..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/graph/pregel-q03/pregel-q03.3.query.sqlpp
+++ /dev/null
@@ -1,25 +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.
- */
-
-use Pregelix;
-
-
-select element n
-from  ResultGraph as n
-;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q01/pregel-q01.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q01/pregel-q01.1.adm
deleted file mode 100644
index 4f747e2..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q01/pregel-q01.1.adm
+++ /dev/null
@@ -1,12 +0,0 @@
-{ "tweetid": 1i64, "rank-value": 0.07349647505081802d, "populated-by": {{ { "tweetid": 2i64, "value": 0.0f }, { "tweetid": 3i64, "value": 0.0f } }} }
-{ "tweetid": 2i64, "rank-value": 0.10497306443795257d, "populated-by": {{ { "tweetid": 7i64, "value": 0.0f }, { "tweetid": 1i64, "value": 0.0f } }} }
-{ "tweetid": 3i64, "rank-value": 0.09458886502271134d, "populated-by": {{ { "tweetid": 8i64, "value": 0.0f }, { "tweetid": 6i64, "value": 0.0f } }} }
-{ "tweetid": 4i64, "rank-value": 0.04783722202788025d, "populated-by": {{ { "tweetid": 1i64, "value": 0.0f }, { "tweetid": 3i64, "value": 0.0f } }} }
-{ "tweetid": 5i64, "rank-value": 0.051587222027880256d, "populated-by": {{ { "tweetid": 8i64, "value": 0.0f }, { "tweetid": 6i64, "value": 0.0f } }} }
-{ "tweetid": 6i64, "rank-value": 0.0822549135142923d, "populated-by": {{ { "tweetid": 4i64, "value": 0.0f }, { "tweetid": 5i64, "value": 0.0f } }} }
-{ "tweetid": 7i64, "rank-value": 0.14484555969829038d, "populated-by": {{ { "tweetid": 2i64, "value": 0.0f }, { "tweetid": 7i64, "value": 0.0f } }} }
-{ "tweetid": 8i64, "rank-value": 0.0710049135142923d, "populated-by": {{ { "tweetid": 3i64, "value": 0.0f }, { "tweetid": 7i64, "value": 0.0f } }} }
-{ "tweetid": 9i64, "rank-value": 0.008823529411764706d, "populated-by": {{ { "tweetid": 6i64, "value": 0.0f }, { "tweetid": 2i64, "value": 0.0f } }} }
-{ "tweetid": 10i64, "rank-value": 0.008823529411764706d, "populated-by": {{ { "tweetid": 4i64, "value": 0.0f }, { "tweetid": 5i64, "value": 0.0f } }} }
-{ "tweetid": 11i64, "rank-value": 0.008823529411764706d, "populated-by": {{ { "tweetid": 6i64, "value": 0.0f }, { "tweetid": 3i64, "value": 0.0f } }} }
-{ "tweetid": 12i64, "rank-value": 0.008823529411764706d, "populated-by": {{ { "tweetid": 6i64, "value": 0.0f }, { "tweetid": 5i64, "value": 0.0f } }} }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q02/pregel-q02.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q02/pregel-q02.1.adm
deleted file mode 100644
index c5e21b0..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q02/pregel-q02.1.adm
+++ /dev/null
@@ -1,20 +0,0 @@
-{ "id": 0i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f } }} }
-{ "id": 1i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f } }} }
-{ "id": 2i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f } }} }
-{ "id": 3i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f } }} }
-{ "id": 4i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f }, { "destVertexId": 5i64, "value": 0.0f } }} }
-{ "id": 5i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f }, { "destVertexId": 5i64, "value": 0.0f }, { "destVertexId": 6i64, "value": 0.0f } }} }
-{ "id": 6i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f }, { "destVertexId": 5i64, "value": 0.0f }, { "destVertexId": 6i64, "value": 0.0f }, { "destVertexId": 7i64, "value": 0.0f } }} }
-{ "id": 7i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f }, { "destVertexId": 5i64, "value": 0.0f }, { "destVertexId": 6i64, "value": 0.0f }, { "destVertexId": 7i64, "value": 0.0f }, { "destVertexId": 8i64, "value": 0.0f } }} }
-{ "id": 8i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f }, { "destVertexId": 5i64, "value": 0.0f }, { "destVertexId": 6i64, "value": 0.0f }, { "destVertexId": 7i64, "value": 0.0f }, { "destVertexId": 8i64, "value": 0.0f }, { "destVertexId": 9i64, "value": 0.0f } }} }
-{ "id": 9i64, "value": 0i64, "edges": {{ { "destVertexId": 1i64, "value": 0.0f }, { "destVertexId": 2i64, "value": 0.0f }, { "destVertexId": 3i64, "value": 0.0f }, { "destVertexId": 4i64, "value": 0.0f }, { "destVertexId": 5i64, "value": 0.0f }, { "destVertexId": 6i64, "value": 0.0f }, { "destVertexId": 7i64, "value": 0.0f }, { "destVertexId": 8i64, "value": 0.0f }, { "destVertexId": 9i64, "value": 0.0f }, { "destVertexId": 0i64, "value": 0.0f } }} }
-{ "id": 10i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f } }} }
-{ "id": 11i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f } }} }
-{ "id": 12i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f } }} }
-{ "id": 13i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f } }} }
-{ "id": 14i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f }, { "destVertexId": 15i64, "value": 0.0f } }} }
-{ "id": 15i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f }, { "destVertexId": 15i64, "value": 0.0f }, { "destVertexId": 16i64, "value": 0.0f } }} }
-{ "id": 16i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f }, { "destVertexId": 15i64, "value": 0.0f }, { "destVertexId": 16i64, "value": 0.0f }, { "destVertexId": 17i64, "value": 0.0f } }} }
-{ "id": 17i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f }, { "destVertexId": 15i64, "value": 0.0f }, { "destVertexId": 16i64, "value": 0.0f }, { "destVertexId": 17i64, "value": 0.0f }, { "destVertexId": 18i64, "value": 0.0f } }} }
-{ "id": 18i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f }, { "destVertexId": 15i64, "value": 0.0f }, { "destVertexId": 16i64, "value": 0.0f }, { "destVertexId": 17i64, "value": 0.0f }, { "destVertexId": 18i64, "value": 0.0f }, { "destVertexId": 19i64, "value": 0.0f } }} }
-{ "id": 19i64, "value": 10i64, "edges": {{ { "destVertexId": 11i64, "value": 0.0f }, { "destVertexId": 12i64, "value": 0.0f }, { "destVertexId": 13i64, "value": 0.0f }, { "destVertexId": 14i64, "value": 0.0f }, { "destVertexId": 15i64, "value": 0.0f }, { "destVertexId": 16i64, "value": 0.0f }, { "destVertexId": 17i64, "value": 0.0f }, { "destVertexId": 18i64, "value": 0.0f }, { "destVertexId": 19i64, "value": 0.0f }, { "destVertexId": 10i64, "value": 0.0f } }} }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q03/pregel-q03.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q03/pregel-q03.1.adm
deleted file mode 100644
index bee980c..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/graph/pregel-q03/pregel-q03.1.adm
+++ /dev/null
@@ -1,10 +0,0 @@
-{ "id": 0i64, "value": 0.0d, "edges": {{ { "destVertexId": 1i64, "cost": 1.0f } }} }
-{ "id": 1i64, "value": 1.0d, "edges": {{ { "destVertexId": 3i64, "cost": 4.0f }, { "destVertexId": 2i64, "cost": 3.0f } }} }
-{ "id": 2i64, "value": 4.0d, "edges": {{ { "destVertexId": 4i64, "cost": 5.0f }, { "destVertexId": 5i64, "cost": 23.0f } }} }
-{ "id": 3i64, "value": 5.0d, "edges": {{ { "destVertexId": 2i64, "cost": 1.0f }, { "destVertexId": 8i64, "cost": 13.0f } }} }
-{ "id": 4i64, "value": 9.0d, "edges": {{ { "destVertexId": 1i64, "cost": 5.0f }, { "destVertexId": 2i64, "cost": 8.0f }, { "destVertexId": 3i64, "cost": 23.0f }, { "destVertexId": 4i64, "cost": 12.0f } }} }
-{ "id": 5i64, "value": 27.0d, "edges": {{ { "destVertexId": 6i64, "cost": 12.0f }, { "destVertexId": 7i64, "cost": 17.0f } }} }
-{ "id": 6i64, "value": 39.0d, "edges": {{ { "destVertexId": 1i64, "cost": 12.0f }, { "destVertexId": 2i64, "cost": 1.0f } }} }
-{ "id": 7i64, "value": 44.0d, "edges": {{ { "destVertexId": 9i64, "cost": 100.0f } }} }
-{ "id": 8i64, "value": 18.0d, "edges": {{ { "destVertexId": 4i64, "cost": 11.0f } }} }
-{ "id": 9i64, "value": 144.0d, "edges": {{ { "destVertexId": 1i64, "cost": 16.0f }, { "destVertexId": 2i64, "cost": 9.0f } }} }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
index b17db48..887b39a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -2886,23 +2886,6 @@
       </compilation-unit>
     </test-case>
   </test-group>
-  <!-- <test-group name="graph">
-    <test-case FilePath="graph">
-      <compilation-unit name="pregel-q01">
-        <output-dir compare="Text">pregel-q01</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="graph">
-      <compilation-unit name="pregel-q02">
-        <output-dir compare="Text">pregel-q02</output-dir>
-      </compilation-unit>
-    </test-case>
-    <test-case FilePath="graph">
-      <compilation-unit name="pregel-q03">
-          <output-dir compare="Text">pregel-q03</output-dir>
-      </compilation-unit>
-    </test-case>
-  </test-group> -->
   <test-group name="index-join">
     <test-case FilePath="index-join">
       <compilation-unit name="btree-index-nested-loop-join">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 3a535cc..997c02c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -2717,21 +2717,6 @@
       </test-case>
     </test-group>
     -->
-  <!-- <test-group name="graph">
-        <test-case FilePath="graph">
-            <compilation-unit name="pregel-q01">
-                <output-dir compare="Text">pregel-q01</output-dir>
-            </compilation-unit>
-            <test-case FilePath="graph">
-            <compilation-unit name="pregel-q02">
-                <output-dir compare="Text">pregel-q02</output-dir>
-            </compilation-unit>
-            <test-case FilePath="graph">
-            <compilation-unit name="pregel-q03">
-                <output-dir compare="Text">pregel-q03</output-dir>
-            </compilation-unit>
-        </test-case>
-    </test-group> -->
   <test-group name="fulltext">
     <test-case FilePath="fulltext">
       <compilation-unit name="fulltext-01">
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
index 283f055..753e3a7 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp_parser.xml
@@ -2465,21 +2465,6 @@
       </compilation-unit>
     </test-case>
   </test-group>
-  <!-- <test-group name="graph">
-        <test-case FilePath="graph">
-            <compilation-unit name="pregel-q01">
-                <output-dir compare="AST">pregel-q01</output-dir>
-            </compilation-unit>
-            <test-case FilePath="graph">
-            <compilation-unit name="pregel-q02">
-                <output-dir compare="AST">pregel-q02</output-dir>
-            </compilation-unit>
-            <test-case FilePath="graph">
-            <compilation-unit name="pregel-q03">
-                <output-dir compare="AST">pregel-q03</output-dir>
-            </compilation-unit>
-        </test-case>
-    </test-group> -->
   <test-group name="index-join">
     <test-case FilePath="index-join">
       <compilation-unit name="btree-index-nested-loop-join">
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
index 821b6e1..0580c1f 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
@@ -18,10 +18,7 @@
  */
 package org.apache.asterix.common.config;
 
-import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER;
-import static org.apache.hyracks.control.common.config.OptionTypes.INTEGER_BYTE_UNIT;
-import static org.apache.hyracks.control.common.config.OptionTypes.LONG_BYTE_UNIT;
-import static org.apache.hyracks.control.common.config.OptionTypes.STRING;
+import static org.apache.hyracks.control.common.config.OptionTypes.*;
 import static org.apache.hyracks.util.StorageUtil.StorageUnit.KILOBYTE;
 import static org.apache.hyracks.util.StorageUtil.StorageUnit.MEGABYTE;
 
@@ -57,7 +54,6 @@
                         + "other integer values dictate the number of query execution parallel partitions. The system will "
                         + "fall back to use the number of all available CPU cores in the cluster as the degree of parallelism "
                         + "if the number set by a user is too large or too small"),
-        COMPILER_PREGELIX_HOME(STRING, "~/pregelix", "Pregelix installation root directory"),
         COMPILER_STRINGOFFSET(INTEGER, 0, "Position of a first character in a String/Binary (0 or 1)");
 
         private final IOptionType type;
@@ -92,7 +88,7 @@
 
         @Override
         public boolean hidden() {
-            return this == COMPILER_PREGELIX_HOME || this == COMPILER_STRINGOFFSET;
+            return this == COMPILER_STRINGOFFSET;
         }
     }
 
@@ -130,10 +126,6 @@
         return accessor.getInt(Option.COMPILER_PARALLELISM);
     }
 
-    public String getPregelixHome() {
-        return accessor.getString(Option.COMPILER_PREGELIX_HOME);
-    }
-
     public int getStringOffset() {
         int value = accessor.getInt(Option.COMPILER_STRINGOFFSET);
         return value > 0 ? 1 : 0;
diff --git a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
index 7ddc5d2..8efcf1c 100644
--- a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
+++ b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
@@ -140,7 +140,6 @@
 import org.apache.asterix.lang.common.statement.NodegroupDecl;
 import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.lang.common.statement.RefreshExternalDatasetStatement;
-import org.apache.asterix.lang.common.statement.RunStatement;
 import org.apache.asterix.lang.common.statement.SetStatement;
 import org.apache.asterix.lang.common.statement.TypeDecl;
 import org.apache.asterix.lang.common.statement.TypeDropStatement;
@@ -336,7 +335,6 @@
     | stmt = CompactStatement()
     | stmt = Query()
     | stmt = RefreshExternalDatasetStatement()
-    | stmt = RunStatement()
   )
   {
     return stmt;
@@ -551,27 +549,6 @@
   )
 }
 
-RunStatement RunStatement() throws ParseException:
-{
-  String system = null;
-  String tmp;
-  ArrayList<String> parameters = new  ArrayList<String>();
-  Pair<Identifier,Identifier> nameComponentsFrom = null;
-  Pair<Identifier,Identifier> nameComponentsTo = null;
-}
-{
-  <RUN> system = Identifier()<LEFTPAREN> ( tmp = Identifier() [<COMMA>]
-    {
-      parameters.add(tmp);
-    }
-  )*<RIGHTPAREN>
-  <FROM> <DATASET> nameComponentsFrom  = QualifiedName()
-  <TO> <DATASET> nameComponentsTo  = QualifiedName()
-    {
-      return new RunStatement(system, parameters, nameComponentsFrom.first, nameComponentsFrom.second, nameComponentsTo.first, nameComponentsTo.second);
-    }
-}
-
 CreateIndexStatement IndexSpecification() throws ParseException:
 {
   CreateIndexStatement cis = new CreateIndexStatement();
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java
index 612b230..5d8fb69 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/base/Statement.java
@@ -18,13 +18,7 @@
  */
 package org.apache.asterix.lang.common.base;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
 public interface Statement extends ILangExpression {
-    public static final List<Byte> KINDS = Collections.unmodifiableList(Kind.range(Kind.DATASET_DECL, Kind.RUN));
-
     /**
      * get a byte representing the statement kind.
      * Note: bytes 0x00 - 0x7f are reserved for core asterix statements
@@ -32,7 +26,7 @@
      *
      * @return kind byte
      */
-    public byte getKind();
+    byte getKind();
 
     /**
      *  get a byte representing the statement category.
@@ -40,9 +34,9 @@
      *
      * @return kind byte
      */
-    public byte getCategory();
+    byte getCategory();
 
-    public class Category {
+    class Category {
         /** no modifications */
         public static final byte QUERY = 0x01;
         /** modify data */
@@ -56,7 +50,7 @@
         }
     }
 
-    public class Kind {
+    class Kind {
         public static final byte DATASET_DECL = 0x00;
         public static final byte DATAVERSE_DECL = 0x01;
         public static final byte DATAVERSE_DROP = 0x02;
@@ -91,26 +85,11 @@
         public static final byte FUNCTION_DROP = 0x1f;
         public static final byte COMPACT = 0x20;
         public static final byte EXTERNAL_DATASET_REFRESH = 0x21;
-        public static final byte RUN = 0x22;
+        // 0x22 unused
         public static final byte EXTENSION = 0x23;
         public static final byte SUBSCRIBE_FEED = 0x24;
 
         private Kind() {
         }
-
-        /**
-         * Generate a list of Bytes from start to end
-         *
-         * @param start
-         * @param end
-         * @return
-         */
-        private static List<Byte> range(byte start, byte end) {
-            ArrayList<Byte> bytes = new ArrayList<>();
-            for (byte b = start; b <= end; b++) {
-                bytes.add(b);
-            }
-            return bytes;
-        }
     }
 }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RunStatement.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RunStatement.java
deleted file mode 100644
index cee6e77..0000000
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/statement/RunStatement.java
+++ /dev/null
@@ -1,86 +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.lang.common.statement;
-
-import java.util.List;
-
-import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.lang.common.base.Statement;
-import org.apache.asterix.lang.common.struct.Identifier;
-import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
-
-public class RunStatement implements Statement {
-
-    private String system;
-    private List<String> parameters;
-    private final Identifier dataverseNameFrom;
-    private final Identifier datasetNameFrom;
-    private final Identifier dataverseNameTo;
-    private final Identifier datasetNameTo;
-
-    public RunStatement(String system, List<String> parameters, Identifier dataverseNameFrom,
-            Identifier datasetNameFrom, Identifier dataverseNameTo, Identifier datasetNameTo) {
-        this.system = system;
-        this.parameters = parameters;
-        this.datasetNameFrom = datasetNameFrom;
-        this.dataverseNameFrom = dataverseNameFrom;
-        this.datasetNameTo = datasetNameTo;
-        this.dataverseNameTo = dataverseNameTo;
-    }
-
-    public String getSystem() {
-        return system;
-    }
-
-    public List<String> getParameters() {
-        return parameters;
-    }
-
-    public Identifier getDataverseNameFrom() {
-        return dataverseNameFrom;
-    }
-
-    public Identifier getDatasetNameFrom() {
-        return datasetNameFrom;
-    }
-
-    public Identifier getDataverseNameTo() {
-        return dataverseNameTo;
-    }
-
-    public Identifier getDatasetNameTo() {
-        return datasetNameTo;
-    }
-
-    @Override
-    public <R, T> R accept(ILangVisitor<R, T> visitor, T arg) throws CompilationException {
-        return null;
-    }
-
-    @Override
-    public byte getKind() {
-        return Statement.Kind.RUN;
-    }
-
-    @Override
-    public byte getCategory() {
-        return Category.QUERY;
-    }
-
-}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index fd5de86..a532a6b 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -135,7 +135,6 @@
 import org.apache.asterix.lang.common.statement.NodegroupDecl;
 import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.lang.common.statement.RefreshExternalDatasetStatement;
-import org.apache.asterix.lang.common.statement.RunStatement;
 import org.apache.asterix.lang.common.statement.SetStatement;
 import org.apache.asterix.lang.common.statement.TypeDecl;
 import org.apache.asterix.lang.common.statement.TypeDropStatement;
@@ -390,7 +389,6 @@
     | stmt = ExplainStatement()
     | stmt = Query(false)
     | stmt = RefreshExternalDatasetStatement()
-    | stmt = RunStatement()
   )
   {
     return stmt;
@@ -603,27 +601,6 @@
     }
 }
 
-RunStatement RunStatement() throws ParseException:
-{
-  String system = null;
-  String tmp;
-  ArrayList<String> parameters = new  ArrayList<String>();
-  Pair<Identifier,Identifier> nameComponentsFrom = null;
-  Pair<Identifier,Identifier> nameComponentsTo = null;
-}
-{
-  <RUN> system = Identifier()<LEFTPAREN> ( tmp = Identifier() [<COMMA>]
-    {
-      parameters.add(tmp);
-    }
-  )*<RIGHTPAREN>
-  <FROM> Dataset() nameComponentsFrom  = QualifiedName()
-  <TO> Dataset() nameComponentsTo  = QualifiedName()
-    {
-      return new RunStatement(system, parameters, nameComponentsFrom.first, nameComponentsFrom.second, nameComponentsTo.first, nameComponentsTo.second);
-    }
-}
-
 CreateIndexStatement IndexSpecification() throws ParseException:
 {
   CreateIndexStatement cis = new CreateIndexStatement();
diff --git a/asterixdb/asterix-server/pom.xml b/asterixdb/asterix-server/pom.xml
index 109c407..3ae891f 100644
--- a/asterixdb/asterix-server/pom.xml
+++ b/asterixdb/asterix-server/pom.xml
@@ -492,6 +492,22 @@
         </plugins>
       </build>
     </profile>
+    <profile>
+      <id>asterix-gerrit-integration-tests</id>
+      <properties>
+        <test.includes/>
+        <itest.includes>**/NCServiceExecutionIT.java,**/RecoveryIT.java</itest.includes>
+        <failIfNoTests>false</failIfNoTests>
+      </properties>
+    </profile>
+    <profile>
+      <id>asterix-gerrit-verify-no-app</id>
+      <properties>
+        <test.includes/>
+        <itest.excludes>**/NCServiceExecutionIT.java,**/RecoveryIT.java</itest.excludes>
+        <failIfNoTests>false</failIfNoTests>
+      </properties>
+    </profile>
   </profiles>
   <dependencies>
     <dependency>
diff --git a/asterixdb/asterix-server/src/test/resources/integrationts/asterix-configuration.xml b/asterixdb/asterix-server/src/test/resources/integrationts/asterix-configuration.xml
deleted file mode 100644
index 9583485..0000000
--- a/asterixdb/asterix-server/src/test/resources/integrationts/asterix-configuration.xml
+++ /dev/null
@@ -1,261 +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.
- !-->
-<asterixConfiguration xmlns="asterixconf">
-
-  <property>
-    <name>nc.java.opts</name>
-    <value>-Xmx4096m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"</value>
-    <description>JVM parameters for each Node Contoller (NC)</description>
-  </property>
-
-  <property>
-    <name>cc.java.opts</name>
-    <value>-Xmx1024m -Dnode.Resolver="org.apache.asterix.external.util.IdentitiyResolverFactory"</value>
-    <description>JVM parameters for each Cluster Contoller (CC)
-    </description>
-  </property>
-
-  <property>
-    <name>max.wait.active.cluster</name>
-    <value>60</value>
-    <description>Maximum wait (in seconds) for a cluster to be ACTIVE (all nodes are available)
-      before a submitted query/statement can be executed. (Default = 60 seconds)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.buffercache.pagesize</name>
-    <value>128KB</value>
-    <description>The page size in bytes for pages in the buffer cache.
-      (Default = "131072" // 128KB)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.buffercache.size</name>
-    <value>512MB</value>
-    <description>The size of memory allocated to the disk buffer cache.
-      The value should be a multiple of the buffer cache page size(Default
-      = "536870912" // 512MB)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.buffercache.maxopenfiles</name>
-    <value>214748364</value>
-    <description>The maximum number of open files in the buffer cache.
-      (Default = "214748364")
-    </description>
-  </property>
-
-  <property>
-    <name>storage.memorycomponent.pagesize</name>
-    <value>128KB</value>
-    <description>The page size in bytes for pages allocated to memory
-      components. (Default = "131072" // 128KB)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.memorycomponent.numpages</name>
-    <value>256</value>
-    <description>The number of pages to allocate for a memory component.
-      This budget is shared by all the memory components of the primary
-      index and all its secondary indexes across all I/O devices on a node.
-      Note: in-memory components usually has fill factor of 75% since
-      the pages are 75% full and the remaining 25% is un-utilized. (Default = 256)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.metadata.memorycomponent.numpages</name>
-    <value>64</value>
-    <description>The number of pages to allocate for a memory component.
-      (Default = 64)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.memorycomponent.numcomponents</name>
-    <value>2</value>
-    <description>The number of memory components to be used per lsm index.
-      (Default = 2)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.memorycomponent.globalbudget</name>
-    <value>1GB</value>
-    <description>The total size of memory in bytes that the sum of all open memory
-      components cannot exceed. Consider this as the buffer cache for all memory
-      components of all indexes in a node. When this budget is fully used, a victim
-      dataset will be chosen. The chosen dataset must be evicted and closed to make
-      a space for another dataset. (Default = 512MB)
-    </description>
-  </property>
-
-  <property>
-    <name>storage.lsm.bloomfilter.falsepositiverate</name>
-    <value>0.01</value>
-    <description>The maximum acceptable false positive rate for bloom
-      filters associated with LSM indexes. (Default = "0.01" // 1%)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.log.buffer.numpages</name>
-    <value>8</value>
-    <description>The number of in-memory log buffer pages. (Default = "8")
-    </description>
-  </property>
-
-  <property>
-    <name>txn.log.buffer.pagesize</name>
-    <value>512KB</value>
-    <description>The size of pages in the in-memory log buffer. (Default =
-      "524288" // 512KB)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.log.partitionsize</name>
-    <value>2GB</value>
-    <description>The maximum size of a log file partition allowed before
-      rotating the log to the next partition. (Default = "2147483648" //
-      2GB)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.log.checkpoint.lsnthreshold</name>
-    <value>67108864</value>
-    <description>The size of the window that the maximum LSN is allowed to
-      be ahead of the checkpoint LSN by. (Default = ""67108864" // 64M)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.log.checkpoint.pollfrequency</name>
-    <value>120</value>
-    <description>The time in seconds between that the checkpoint thread
-      waits between polls. (Default = "120" // 120s)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.log.checkpoint.history</name>
-    <value>0</value>
-    <description>The number of old log partition files to keep before
-      discarding. (Default = "0")
-    </description>
-  </property>
-
-  <property>
-    <name>txn.lock.escalationthreshold</name>
-    <value>1000</value>
-    <description>The number of entity level locks that need to be acquired
-      before the locks are coalesced and escalated into a dataset level
-      lock. (Default = "1000")
-    </description>
-  </property>
-
-  <property>
-    <name>txn.lock.shrinktimer</name>
-    <value>5000</value>
-    <description>The time in milliseconds to wait before deallocating
-      unused lock manager memory. (Default = "5000" // 5s)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.lock.timeout.waitthreshold</name>
-    <value>60000</value>
-    <description>The time in milliseconds to wait before labeling a
-      transaction which has been waiting for a lock timed-out. (Default =
-      "60000" // 60s)
-    </description>
-  </property>
-
-  <property>
-    <name>txn.lock.timeout.sweepthreshold</name>
-    <value>10000</value>
-    <description>The time in milliseconds the timeout thread waits between
-      sweeps to detect timed-out transactions. (Default = "10000" // 10s)
-    </description>
-  </property>
-
-  <property>
-    <name>compiler.sortmemory</name>
-    <value>32MB</value>
-    <description>The amount of memory in bytes given to sort operations.
-      (Default = "33554432" // 32MB)
-    </description>
-  </property>
-
-  <property>
-    <name>compiler.joinmemory</name>
-    <value>32MB</value>
-    <description>The amount of memory in bytes given to join operations.
-      (Default = "33554432" // 32MB)
-    </description>
-  </property>
-
-  <property>
-    <name>compiler.groupmemory</name>
-    <value>32MB</value>
-    <description>The amount of memory in bytes given to group-by operations.
-      (Default = "33554432" // 32MB)
-    </description>
-  </property>
-
-  <property>
-    <name>compiler.framesize</name>
-    <value>128KB</value>
-    <description>The Hyracks frame size that the compiler configures per
-      job. (Default = "131072" // 128KB)
-    </description>
-  </property>
-
-  <property>
-    <name>compiler.pregelix.home</name>
-    <value>~/pregelix</value>
-  </property>
-
-  <property>
-    <name>web.port</name>
-    <value>19001</value>
-    <description>The port for the ASTERIX web interface. (Default = 19001)
-    </description>
-  </property>
-
-  <property>
-    <name>api.port</name>
-    <value>19002</value>
-    <description>The port for the ASTERIX API server. (Default = 19002)
-    </description>
-  </property>
-
-  <property>
-    <name>log.level</name>
-    <value>INFO</value>
-    <description>The minimum log level to be displayed. (Default = INFO)
-    </description>
-  </property>
-
-</asterixConfiguration>
diff --git a/asterixdb/pom.xml b/asterixdb/pom.xml
index 2ff67c6..adab2e4 100644
--- a/asterixdb/pom.xml
+++ b/asterixdb/pom.xml
@@ -737,6 +737,13 @@
         </plugins>
       </build>
     </profile>
+    <profile>
+      <id>integration-tests-only</id>
+      <properties>
+        <test.includes/>
+        <failIfNoTests>false</failIfNoTests>
+      </properties>
+    </profile>
   </profiles>
 
   <modules>
diff --git a/hyracks-fullstack/pom.xml b/hyracks-fullstack/pom.xml
index a990f0e..339372e 100644
--- a/hyracks-fullstack/pom.xml
+++ b/hyracks-fullstack/pom.xml
@@ -63,10 +63,9 @@
     <skip.testResources>${maven.test.skip}</skip.testResources>
     <testLog4jConfigFile>${root.dir}/src/test/resources/log4j2-hyracks-test.xml</testLog4jConfigFile>
     <!-- Definition of tests in various categories which may be excluded -->
-    <hanging.pregelix.tests>**/pregelix/**/FailureRecovery*.java</hanging.pregelix.tests>
     <hivesterix.perf.tests>**/hivesterix/perf/PerfTestSuite.java</hivesterix.perf.tests>
     <global.test.includes>**/*TestSuite.java,**/*Test.java</global.test.includes>
-    <global.test.excludes>**/Abstract*.java,${hanging.pregelix.tests},${hivesterix.perf.tests}</global.test.excludes>
+    <global.test.excludes>**/Abstract*.java,${hivesterix.perf.tests}</global.test.excludes>
     <test.includes>${global.test.includes}</test.includes>
     <test.excludes>${global.test.excludes}</test.excludes>
     <!-- Versions under dependencymanagement or used in many projects via properties -->
@@ -545,12 +544,6 @@
 
   <profiles>
     <profile>
-      <id>hanging-pregelix-tests</id>
-      <properties>
-        <hanging.pregelix.tests />
-      </properties>
-    </profile>
-    <profile>
       <id>skip-assembly</id>
       <activation>
         <file>
@@ -667,6 +660,13 @@
         <jdk.version>1.8</jdk.version>
       </properties>
     </profile>
+    <profile>
+      <id>integration-tests-only</id>
+      <properties>
+        <test.includes/>
+        <failIfNoTests>false</failIfNoTests>
+      </properties>
+    </profile>
   </profiles>
 
   <modules>
