Merged subscription model with job. Still have job issues
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelSubscribeStatement.java b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelSubscribeStatement.java
index 5803f60..c22a819 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelSubscribeStatement.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelSubscribeStatement.java
@@ -18,42 +18,30 @@
  */
 package org.apache.asterix.bad.lang.statement;
 
-import java.util.ArrayList;
+import java.io.StringReader;
 import java.util.List;
 
 import org.apache.asterix.algebra.extension.ExtensionStatement;
 import org.apache.asterix.app.translator.QueryTranslator;
 import org.apache.asterix.bad.BADConstants;
 import org.apache.asterix.bad.lang.BADLangExtension;
+import org.apache.asterix.bad.lang.BADParserFactory;
 import org.apache.asterix.bad.metadata.Broker;
 import org.apache.asterix.bad.metadata.Channel;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.exceptions.CompilationException;
-import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.expression.CallExpr;
-import org.apache.asterix.lang.common.expression.FieldAccessor;
-import org.apache.asterix.lang.common.expression.FieldBinding;
-import org.apache.asterix.lang.common.expression.LiteralExpr;
-import org.apache.asterix.lang.common.expression.RecordConstructor;
-import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.literal.StringLiteral;
-import org.apache.asterix.lang.common.statement.InsertStatement;
-import org.apache.asterix.lang.common.statement.Query;
-import org.apache.asterix.lang.common.statement.UpsertStatement;
+import org.apache.asterix.lang.common.base.Statement;
 import org.apache.asterix.lang.common.struct.Identifier;
-import org.apache.asterix.lang.common.struct.VarIdentifier;
 import org.apache.asterix.lang.common.visitor.base.ILangVisitor;
 import org.apache.asterix.metadata.MetadataManager;
 import org.apache.asterix.metadata.MetadataTransactionContext;
 import org.apache.asterix.metadata.declared.MetadataProvider;
-import org.apache.asterix.om.functions.BuiltinFunctions;
 import org.apache.asterix.translator.IRequestParameters;
 import org.apache.asterix.translator.IStatementExecutor;
 import org.apache.asterix.translator.IStatementExecutor.ResultDelivery;
 import org.apache.asterix.translator.IStatementExecutor.Stats;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.api.client.IHyracksClientConnection;
 import org.apache.hyracks.api.dataset.IHyracksDataset;
 import org.apache.hyracks.api.dataset.ResultSetId;
@@ -66,11 +54,13 @@
     private final Identifier brokerDataverseName;
     private final Identifier brokerName;
     private final List<Expression> argList;
+    private final List<String> paramList;
     private final String subscriptionId;
     private final int varCounter;
 
     public ChannelSubscribeStatement(Identifier dataverseName, Identifier channelName, List<Expression> argList,
-            int varCounter, Identifier brokerDataverseName, Identifier brokerName, String subscriptionId) {
+            int varCounter, Identifier brokerDataverseName, Identifier brokerName, String subscriptionId,
+            List<String> paramList) {
         this.channelName = channelName;
         this.dataverseName = dataverseName;
         this.brokerDataverseName = brokerDataverseName;
@@ -78,6 +68,7 @@
         this.argList = argList;
         this.subscriptionId = subscriptionId;
         this.varCounter = varCounter;
+        this.paramList = paramList;
     }
 
     public Identifier getDataverseName() {
@@ -138,83 +129,39 @@
                 throw new AsterixException("There is no broker with this name " + brokerName + ".");
             }
 
-            String subscriptionsDatasetName = channel.getChannelSubscriptionsDataset();
+            String channelSubscriptionsDataset =
+                    channel.getChannelId().getDataverse() + "." + channel.getChannelSubscriptionsDataset();
 
-            if (argList.size() != channel.getFunction().getArity()) {
-                throw new AsterixException("Channel expected " + channel.getFunction().getArity()
-                        + " parameters but got " + argList.size());
-            }
-
-            Query subscriptionTuple = new Query(false);
-
-            List<FieldBinding> fb = new ArrayList<>();
-            LiteralExpr leftExpr = new LiteralExpr(new StringLiteral(BADConstants.DataverseName));
-            Expression rightExpr = new LiteralExpr(new StringLiteral(brokerDataverse));
-            fb.add(new FieldBinding(leftExpr, rightExpr));
-
-            leftExpr = new LiteralExpr(new StringLiteral(BADConstants.BrokerName));
-            rightExpr = new LiteralExpr(new StringLiteral(broker.getBrokerName()));
-            fb.add(new FieldBinding(leftExpr, rightExpr));
-
-            if (subscriptionId != null) {
-                leftExpr = new LiteralExpr(new StringLiteral(BADConstants.ChannelSubscriptionId));
-
-                List<Expression> UUIDList = new ArrayList<>();
-                UUIDList.add(new LiteralExpr(new StringLiteral(subscriptionId)));
-                FunctionIdentifier function = BuiltinFunctions.UUID_CONSTRUCTOR;
-                FunctionSignature UUIDfunc =
-                        new FunctionSignature(function.getNamespace(), function.getName(), function.getArity());
-                CallExpr UUIDCall = new CallExpr(UUIDfunc, UUIDList);
-
-                rightExpr = UUIDCall;
-                fb.add(new FieldBinding(leftExpr, rightExpr));
-            }
-
-            for (int i = 0; i < argList.size(); i++) {
-                leftExpr = new LiteralExpr(new StringLiteral("param" + i));
-                rightExpr = argList.get(i);
-                fb.add(new FieldBinding(leftExpr, rightExpr));
-            }
-            RecordConstructor recordCon = new RecordConstructor(fb);
-            subscriptionTuple.setBody(recordCon);
-            subscriptionTuple.setVarCounter(varCounter);
-            MetadataProvider tempMdProvider = new MetadataProvider(metadataProvider.getApplicationContext(),
-                    metadataProvider.getDefaultDataverse());
-            tempMdProvider.getConfig().putAll(metadataProvider.getConfig());
+            String brokerSubscriptionsDataset =
+                    channel.getChannelId().getDataverse() + "." + channel.getBrokerSubscriptionsDataset();
 
             final ResultDelivery resultDelivery = requestParameters.getResultProperties().getDelivery();
             final IHyracksDataset hdc = requestParameters.getHyracksDataset();
             final Stats stats = requestParameters.getStats();
             if (subscriptionId == null) {
-                //To create a new subscription
-                VariableExpr resultVar = new VariableExpr(new VarIdentifier("$result", 0));
-                VariableExpr useResultVar = new VariableExpr(new VarIdentifier("$result", 0));
-                useResultVar.setIsNewVar(false);
-                FieldAccessor accessor =
-                        new FieldAccessor(useResultVar, new Identifier(BADConstants.ChannelSubscriptionId));
+                //Create a new subscription
+                if (argList.size() != channel.getFunction().getArity()) {
+                    throw new AsterixException("Channel expected " + channel.getFunction().getArity()
+                            + " parameters but got " + argList.size());
+                }
 
+                createChannelSubscription(statementExecutor, metadataProvider, hcc, hdc, stats,
+                        channelSubscriptionsDataset, resultDelivery);
+
+                metadataProvider.getLocks().reset();
                 metadataProvider.setResultSetId(new ResultSetId(resultSetId));
                 boolean resultsAsync =
                         resultDelivery == ResultDelivery.ASYNC || resultDelivery == ResultDelivery.DEFERRED;
                 metadataProvider.setResultAsyncMode(resultsAsync);
-                tempMdProvider.setResultSetId(metadataProvider.getResultSetId());
-                tempMdProvider.setResultAsyncMode(resultsAsync);
-                tempMdProvider.setWriterFactory(metadataProvider.getWriterFactory());
-                tempMdProvider
-                        .setResultSerializerFactoryProvider(metadataProvider.getResultSerializerFactoryProvider());
-                tempMdProvider.setOutputFile(metadataProvider.getOutputFile());
-                tempMdProvider.setMaxResultReads(requestParameters.getResultProperties().getMaxReads());
+                metadataProvider.setMaxResultReads(requestParameters.getResultProperties().getMaxReads());
 
-                InsertStatement insert = new InsertStatement(new Identifier(dataverse),
-                        new Identifier(subscriptionsDatasetName), subscriptionTuple, varCounter, resultVar, accessor);
-                ((QueryTranslator) statementExecutor).handleInsertUpsertStatement(tempMdProvider, insert, hcc, hdc,
-                        resultDelivery, null, stats, false, null, null, null);
+                createBrokerSubscription(statementExecutor, metadataProvider, hcc, hdc, stats,
+                        channelSubscriptionsDataset, brokerSubscriptionsDataset, broker, resultDelivery);
+
             } else {
-                //To update an existing subscription
-                UpsertStatement upsert = new UpsertStatement(new Identifier(dataverse),
-                        new Identifier(subscriptionsDatasetName), subscriptionTuple, varCounter, null, null);
-                ((QueryTranslator) statementExecutor).handleInsertUpsertStatement(tempMdProvider, upsert, hcc, hdc,
-                        resultDelivery, null, stats, false, null, null, null);
+                //move subscription
+                moveBrokerSubscription(statementExecutor, metadataProvider, hcc, hdc, stats, brokerSubscriptionsDataset,
+                        broker, resultDelivery, subscriptionId);
             }
 
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
@@ -227,4 +174,89 @@
 
     }
 
+    private void createChannelSubscription(IStatementExecutor statementExecutor, MetadataProvider metadataProvider,
+            IHyracksClientConnection hcc, IHyracksDataset hdc, Stats stats, String channelSubscriptionsDataset,
+            ResultDelivery resultDelivery) throws Exception {
+        //TODO: Might be better to create the entire expression manually rather than parsing a string
+        StringBuilder builder = new StringBuilder();
+        builder.append("upsert into " + channelSubscriptionsDataset + "(\n");
+        builder.append("(let v = (select value s from " + channelSubscriptionsDataset + " s where ");
+        for (int i = 0; i < paramList.size(); i++) {
+            builder.append("param" + i + " =  " + paramList.get(i));
+            if (i < paramList.size() - 1) {
+                builder.append(" and ");
+            }
+        }
+        builder.append(")\n");
+        builder.append("select value (CASE (array_count(v) > 0)\n");
+        builder.append("WHEN true THEN {\"" + BADConstants.ChannelSubscriptionId + "\":v[0]."
+                + BADConstants.ChannelSubscriptionId + ", ");
+        for (int i = 0; i < paramList.size(); i++) {
+            builder.append("\"param" + i + "\": " + paramList.get(i));
+            if (i < paramList.size() - 1) {
+                builder.append(", ");
+            }
+        }
+        builder.append("}\n");
+        builder.append("ELSE {\"" + BADConstants.ChannelSubscriptionId + "\":create_uuid(), ");
+        for (int i = 0; i < paramList.size(); i++) {
+            builder.append("\"param" + i + "\": " + paramList.get(i));
+            if (i < paramList.size() - 1) {
+                builder.append(", ");
+            }
+        }
+        builder.append("}\n");
+        builder.append("END))\n");
+        builder.append(");");
+        BADParserFactory factory = new BADParserFactory();
+        List<Statement> fStatements = factory.createParser(new StringReader(builder.toString())).parse();
+        ((QueryTranslator) statementExecutor).handleInsertUpsertStatement(metadataProvider, fStatements.get(0), hcc,
+                hdc, resultDelivery, null, stats, false, null, null, null);
+    }
+
+    private void createBrokerSubscription(IStatementExecutor statementExecutor, MetadataProvider metadataProvider,
+            IHyracksClientConnection hcc, IHyracksDataset hdc, Stats stats, String channelSubscriptionsDataset,
+            String brokerSubscriptionDataset, Broker broker, ResultDelivery resultDelivery) throws Exception {
+        //TODO: Might be better to create the entire expression manually rather than parsing a string
+        StringBuilder builder = new StringBuilder();
+        builder.append("insert into " + brokerSubscriptionDataset + " as r (\n");
+        builder.append("(select value {\"" + BADConstants.ChannelSubscriptionId + "\":s."
+                + BADConstants.ChannelSubscriptionId + ",\"" + BADConstants.BrokerSubscriptionId
+                + "\":create_uuid(), \"" + BADConstants.DataverseName + "\":\"" + broker.getDataverseName() + "\", \""
+                + BADConstants.BrokerName + "\":\"" + broker.getBrokerName() + "\"}\n");
+        builder.append("from " + channelSubscriptionsDataset + " s where ");
+        for (int i = 0; i < paramList.size(); i++) {
+            builder.append("param" + i + " =  " + paramList.get(i));
+            if (i < paramList.size() - 1) {
+                builder.append(" and ");
+            }
+        }
+        builder.append(" limit 1)\n");
+        builder.append(") returning r." + BADConstants.BrokerSubscriptionId + ";");
+        BADParserFactory factory = new BADParserFactory();
+        List<Statement> fStatements = factory.createParser(new StringReader(builder.toString())).parse();
+        ((QueryTranslator) statementExecutor).handleInsertUpsertStatement(metadataProvider, fStatements.get(0), hcc,
+                hdc, resultDelivery, null, stats, false, null, null, null);
+    }
+
+    private void moveBrokerSubscription(IStatementExecutor statementExecutor, MetadataProvider metadataProvider,
+            IHyracksClientConnection hcc, IHyracksDataset hdc, Stats stats, String brokerSubscriptionDataset,
+            Broker broker, ResultDelivery resultDelivery, String subscriptionString) throws Exception {
+        //TODO: Might be better to create the entire expression manually rather than parsing a string
+        StringBuilder builder = new StringBuilder();
+        builder.append("upsert into " + brokerSubscriptionDataset + "(\n");
+        builder.append(
+                "(select value {\"" + BADConstants.ChannelSubscriptionId + "\":s." + BADConstants.ChannelSubscriptionId
+                        + ",\"" + BADConstants.BrokerSubscriptionId + "\":s." + BADConstants.BrokerSubscriptionId
+                        + ",\"" + BADConstants.DataverseName + "\":\"" + broker.getDataverseName() + "\", \""
+                        + BADConstants.BrokerName + "\":\"" + broker.getBrokerName() + "\"}\n");
+        builder.append("from " + brokerSubscriptionDataset + " s where ");
+        builder.append("s." + BADConstants.BrokerSubscriptionId + " = uuid(\"" + subscriptionString + "\"))\n");
+        builder.append(");");
+        BADParserFactory factory = new BADParserFactory();
+        List<Statement> fStatements = factory.createParser(new StringReader(builder.toString())).parse();
+        ((QueryTranslator) statementExecutor).handleInsertUpsertStatement(metadataProvider, fStatements.get(0), hcc,
+                hdc, resultDelivery, null, stats, false, null, null, null);
+    }
+
 }
\ No newline at end of file
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelUnsubscribeStatement.java b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelUnsubscribeStatement.java
index e6ba69c..86041b7 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelUnsubscribeStatement.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/lang/statement/ChannelUnsubscribeStatement.java
@@ -113,11 +113,11 @@
                 throw new AsterixException("There is no channel with this name " + channelName + ".");
             }
 
-            String subscriptionsDatasetName = channel.getChannelSubscriptionsDataset();
+            String subscriptionsDatasetName = channel.getBrokerSubscriptionsDataset();
 
             //Need a condition to say subscription-id = sid
             OperatorExpr condition = new OperatorExpr();
-            FieldAccessor fa = new FieldAccessor(vars, new Identifier(BADConstants.ChannelSubscriptionId));
+            FieldAccessor fa = new FieldAccessor(vars, new Identifier(BADConstants.BrokerSubscriptionId));
             condition.addOperand(fa);
             condition.setCurrentop(true);
             condition.addOperator("=");
diff --git a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/Channel.java b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/Channel.java
index 61df9af..cc0d81e 100644
--- a/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/Channel.java
+++ b/asterix-bad/src/main/java/org/apache/asterix/bad/metadata/Channel.java
@@ -70,9 +70,11 @@
             this.dependencies.add(new ArrayList<>());
             this.dependencies.add(new ArrayList<>());
             List<String> resultsList = Arrays.asList(dataverseName, resultsDatasetName);
-            List<String> subscriptionList = Arrays.asList(dataverseName, channelSubscriptionsDatasetName);
+            List<String> channelSubscriptionList = Arrays.asList(dataverseName, channelSubscriptionsDatasetName);
+            List<String> brokerSubscriptionList = Arrays.asList(dataverseName, brokerSubscriptionsDatasetName);
             this.dependencies.get(0).add(resultsList);
-            this.dependencies.get(0).add(subscriptionList);
+            this.dependencies.get(0).add(channelSubscriptionList);
+            this.dependencies.get(0).add(brokerSubscriptionList);
             this.dependencies.get(1).add(functionAsPath);
         } else {
             this.dependencies = dependencies;
diff --git a/asterix-bad/src/main/resources/lang-extension/lang.txt b/asterix-bad/src/main/resources/lang-extension/lang.txt
index 7456cef..9e6491e 100644
--- a/asterix-bad/src/main/resources/lang-extension/lang.txt
+++ b/asterix-bad/src/main/resources/lang-extension/lang.txt
@@ -226,21 +226,40 @@
   String id = null;
   String subscriptionId = null;
   Pair<Identifier,Identifier> brokerName = null;
+  Token beginPos;
+  Token endPos;
+  String paramString;
+  List<String> paramList = new ArrayList<String>();
 }
 {
   (
   "subscribe" <TO> nameComponents = QualifiedName()
-   <LEFTPAREN> (tmp = Expression()
+   <LEFTPAREN>
+   (
    {
-      argList.add(tmp);
+   beginPos = token;
    }
-   (<COMMA> tmp = Expression()
+   tmp = Expression()
    {
       argList.add(tmp);
+      endPos = token;
+      paramString = extractFragment(beginPos.endLine, beginPos.endColumn, endPos.endLine, endPos.endColumn+1);
+      paramList.add(paramString);
+   }
+   (<COMMA>
+   {
+   beginPos = token;
+   }
+    tmp = Expression()
+   {
+      argList.add(tmp);
+      endPos = token;
+      paramString = extractFragment(beginPos.endLine, beginPos.endColumn, endPos.endLine, endPos.endColumn+1);
+      paramList.add(paramString);
    }
    )*)? <RIGHTPAREN> <ON> brokerName = QualifiedName()
    {
-      stmt = new ChannelSubscribeStatement(nameComponents.first, nameComponents.second, argList, getVarCounter(), brokerName.first, brokerName.second, subscriptionId);
+      stmt = new ChannelSubscribeStatement(nameComponents.first, nameComponents.second, argList, getVarCounter(), brokerName.first, brokerName.second, subscriptionId, paramList);
    }
    | "unsubscribe" id = StringLiteral() <FROM> nameComponents = QualifiedName()
       {
@@ -251,19 +270,9 @@
         getCurrentScope().addNewVarSymbolToScope(varExp.getVar());
         stmt = new ChannelUnsubscribeStatement(varExp, nameComponents.first, nameComponents.second, id, getVarCounter());
       }
-     | "change" "subscription" subscriptionId = StringLiteral()  <ON> nameComponents = QualifiedName()
-       <LEFTPAREN> (tmp = Expression()
-       {
-         argList.add(tmp);
-       }
-       (<COMMA> tmp = Expression()
-       {
-         argList.add(tmp);
-       }
-       )*)? <RIGHTPAREN>
-        <TO> brokerName = QualifiedName()
+     | "move" "subscription" subscriptionId = StringLiteral()  <ON> nameComponents = QualifiedName() <TO> brokerName = QualifiedName()
       {
-        stmt = new ChannelSubscribeStatement(nameComponents.first, nameComponents.second, argList, getVarCounter(), brokerName.first, brokerName.second, subscriptionId);
+        stmt = new ChannelSubscribeStatement(nameComponents.first, nameComponents.second, argList, getVarCounter(), brokerName.first, brokerName.second, subscriptionId, paramList);
       }
     )
     {
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.2.update.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.2.update.sqlpp
index 0a38e41..8d43491 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.2.update.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.2.update.sqlpp
@@ -25,110 +25,106 @@
 
 use channels;
 
-insert into EmergencyChannelSubscriptions(
-[
-{"param0" : "w2294u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4321u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3398u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w2488u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3666u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4489u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p78u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p544u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p711u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2828u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4796u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4082u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4923u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w2324u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1339u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p520u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1092u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4979u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1487u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4330u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3682u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p117u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w1741u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w2434u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3833u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1373u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p89u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4003u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c910u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4961u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4475u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w1960u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p438u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1362u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p588u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c902u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4684u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1609u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1510u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3851u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1418u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2559u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w1815u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4924u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3320u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p663u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4571u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p781u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c919u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1121u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p814u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4006u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2822u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4953u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3486u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3107u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2836u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w2003u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3256u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4762u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4900u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p357u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3630u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3166u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4687u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p817u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4433u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3426u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p582u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3388u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4823u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1664u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4051u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c857u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1412u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2521u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3114u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p404u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p111u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3006u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2903u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2823u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4153u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2589u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1459u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p766u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p593u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p168u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4253u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4177u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p387u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2571u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "c1513u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p618u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2735u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t4859u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "w1848u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t3306u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "t2558u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" },
-{"param0" : "p180u1" , "DataverseName" : "channels" , "BrokerName" : "brokerA" }
-]
-);
+subscribe to EmergencyChannel("w2294u1") on brokerA;
+subscribe to EmergencyChannel("t4321u1") on brokerA;
+subscribe to EmergencyChannel("t3398u1") on brokerA;
+subscribe to EmergencyChannel("w2488u1") on brokerA;
+subscribe to EmergencyChannel("t3666u1") on brokerA;
+subscribe to EmergencyChannel("t4489u1") on brokerA;
+subscribe to EmergencyChannel("p78u1") on brokerA;
+subscribe to EmergencyChannel("p544u1") on brokerA;
+subscribe to EmergencyChannel("p711u1") on brokerA;
+subscribe to EmergencyChannel("t2828u1") on brokerA;
+subscribe to EmergencyChannel("t4796u1") on brokerA;
+subscribe to EmergencyChannel("t4082u1") on brokerA;
+subscribe to EmergencyChannel("t4923u1") on brokerA;
+subscribe to EmergencyChannel("w2324u1") on brokerA;
+subscribe to EmergencyChannel("c1339u1") on brokerA;
+subscribe to EmergencyChannel("p520u1") on brokerA;
+subscribe to EmergencyChannel("c1092u1") on brokerA;
+subscribe to EmergencyChannel("t4979u1") on brokerA;
+subscribe to EmergencyChannel("c1487u1") on brokerA;
+subscribe to EmergencyChannel("t4330u1") on brokerA;
+subscribe to EmergencyChannel("t3682u1") on brokerA;
+subscribe to EmergencyChannel("p117u1") on brokerA;
+subscribe to EmergencyChannel("w1741u1") on brokerA;
+subscribe to EmergencyChannel("w2434u1") on brokerA;
+subscribe to EmergencyChannel("t3833u1") on brokerA;
+subscribe to EmergencyChannel("c1373u1") on brokerA;
+subscribe to EmergencyChannel("p89u1") on brokerA;
+subscribe to EmergencyChannel("t4003u1") on brokerA;
+subscribe to EmergencyChannel("c910u1") on brokerA;
+subscribe to EmergencyChannel("t4961u1") on brokerA;
+subscribe to EmergencyChannel("t4475u1") on brokerA;
+subscribe to EmergencyChannel("w1960u1") on brokerA;
+subscribe to EmergencyChannel("p438u1") on brokerA;
+subscribe to EmergencyChannel("c1362u1") on brokerA;
+subscribe to EmergencyChannel("p588u1") on brokerA;
+subscribe to EmergencyChannel("c902u1") on brokerA;
+subscribe to EmergencyChannel("t4684u1") on brokerA;
+subscribe to EmergencyChannel("c1609u1") on brokerA;
+subscribe to EmergencyChannel("c1510u1") on brokerA;
+subscribe to EmergencyChannel("t3851u1") on brokerA;
+subscribe to EmergencyChannel("c1418u1") on brokerA;
+subscribe to EmergencyChannel("t2559u1") on brokerA;
+subscribe to EmergencyChannel("w1815u1") on brokerA;
+subscribe to EmergencyChannel("t4924u1") on brokerA;
+subscribe to EmergencyChannel("t3320u1") on brokerA;
+subscribe to EmergencyChannel("p663u1") on brokerA;
+subscribe to EmergencyChannel("t4571u1") on brokerA;
+subscribe to EmergencyChannel("p781u1") on brokerA;
+subscribe to EmergencyChannel("c919u1") on brokerA;
+subscribe to EmergencyChannel("c1121u1") on brokerA;
+subscribe to EmergencyChannel("p814u1") on brokerA;
+subscribe to EmergencyChannel("t4006u1") on brokerA;
+subscribe to EmergencyChannel("t2822u1") on brokerA;
+subscribe to EmergencyChannel("t4953u1") on brokerA;
+subscribe to EmergencyChannel("t3486u1") on brokerA;
+subscribe to EmergencyChannel("t3107u1") on brokerA;
+subscribe to EmergencyChannel("t2836u1") on brokerA;
+subscribe to EmergencyChannel("w2003u1") on brokerA;
+subscribe to EmergencyChannel("t3256u1") on brokerA;
+subscribe to EmergencyChannel("t4762u1") on brokerA;
+subscribe to EmergencyChannel("t4900u1") on brokerA;
+subscribe to EmergencyChannel("p357u1") on brokerA;
+subscribe to EmergencyChannel("t3630u1") on brokerA;
+subscribe to EmergencyChannel("t3166u1") on brokerA;
+subscribe to EmergencyChannel("t4687u1") on brokerA;
+subscribe to EmergencyChannel("p817u1") on brokerA;
+subscribe to EmergencyChannel("t4433u1") on brokerA;
+subscribe to EmergencyChannel("t3426u1") on brokerA;
+subscribe to EmergencyChannel("p582u1") on brokerA;
+subscribe to EmergencyChannel("t3388u1") on brokerA;
+subscribe to EmergencyChannel("t4823u1") on brokerA;
+subscribe to EmergencyChannel("c1664u1") on brokerA;
+subscribe to EmergencyChannel("t4051u1") on brokerA;
+subscribe to EmergencyChannel("c857u1") on brokerA;
+subscribe to EmergencyChannel("c1412u1") on brokerA;
+subscribe to EmergencyChannel("t2521u1") on brokerA;
+subscribe to EmergencyChannel("t3114u1") on brokerA;
+subscribe to EmergencyChannel("p404u1") on brokerA;
+subscribe to EmergencyChannel("p111u1") on brokerA;
+subscribe to EmergencyChannel("t3006u1") on brokerA;
+subscribe to EmergencyChannel("t2903u1") on brokerA;
+subscribe to EmergencyChannel("t2823u1") on brokerA;
+subscribe to EmergencyChannel("t4153u1") on brokerA;
+subscribe to EmergencyChannel("t2589u1") on brokerA;
+subscribe to EmergencyChannel("c1459u1") on brokerA;
+subscribe to EmergencyChannel("p766u1") on brokerA;
+subscribe to EmergencyChannel("p593u1") on brokerA;
+subscribe to EmergencyChannel("p168u1") on brokerA;
+subscribe to EmergencyChannel("t4253u1") on brokerA;
+subscribe to EmergencyChannel("t4177u1") on brokerA;
+subscribe to EmergencyChannel("p387u1") on brokerA;
+subscribe to EmergencyChannel("t2571u1") on brokerA;
+subscribe to EmergencyChannel("c1513u1") on brokerA;
+subscribe to EmergencyChannel("p618u1") on brokerA;
+subscribe to EmergencyChannel("t2735u1") on brokerA;
+subscribe to EmergencyChannel("t4859u1") on brokerA;
+subscribe to EmergencyChannel("w1848u1") on brokerA;
+subscribe to EmergencyChannel("t3306u1") on brokerA;
+subscribe to EmergencyChannel("t2558u1") on brokerA;
+subscribe to EmergencyChannel("p180u1") on brokerA;
 
 insert into Shelters (
 [
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.5.query.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.5.pollquery.sqlpp
similarity index 97%
rename from asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.5.query.sqlpp
rename to asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.5.pollquery.sqlpp
index dd6e1ca..0cc76dc 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.5.query.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.5.pollquery.sqlpp
@@ -22,6 +22,7 @@
 * Date         : Apr 2018
 * Author       : Steven Jacobs
 */
+// polltimeoutsecs=15
 
 use channels;
 
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/create_channel_check_datasets/create_channel_check_datasets.3.query.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/create_channel_check_datasets/create_channel_check_datasets.3.query.sqlpp
index c9ac4c8..f93a5cf 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/create_channel_check_datasets/create_channel_check_datasets.3.query.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/create_channel_check_datasets/create_channel_check_datasets.3.query.sqlpp
@@ -21,6 +21,7 @@
 select value x
 from Metadata.`Channel` result, Metadata.`Dataset` x
 where result.ChannelName = "nearbyTweetChannel"
-and (x.DatasetName = result.SubscriptionsDatasetName
+and (x.DatasetName = result.ChannelSubscriptionsDatasetName
+or x.DatasetName = result.BrokerSubscriptionsDatasetName
 or x.DatasetName = result.ResultsDatasetName)
 order by x.DatasetName;
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/drop_channel_check_datasets/drop_channel_check_datasets.3.query.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/drop_channel_check_datasets/drop_channel_check_datasets.3.query.sqlpp
index 7a1c5a1..52af22d 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/drop_channel_check_datasets/drop_channel_check_datasets.3.query.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/drop_channel_check_datasets/drop_channel_check_datasets.3.query.sqlpp
@@ -20,7 +20,8 @@
 
 select value x
 from Metadata.`Channel` result, Metadata.`Dataset` x
-where x.DatasetName = result.SubscriptionsDatasetName
+where x.DatasetName = result.BrokerSubscriptionsDatasetName
+or x.DatasetName = result.ChannelSubscriptionsDatasetName
 or x.DatasetName = result.ResultsDatasetName
 order by x.DatasetName
 ;
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/drop_subscriptions/drop_subscriptions.1.ddl.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/drop_subscriptions/drop_subscriptions.1.ddl.sqlpp
index f6dc2bf..13e644e 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/drop_subscriptions/drop_subscriptions.1.ddl.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/drop_subscriptions/drop_subscriptions.1.ddl.sqlpp
@@ -54,4 +54,4 @@
 
 create repetitive channel nearbyTweetChannel using channels.NearbyTweetsContainingText@2 period duration("PT10M");
 
-drop dataset two.nearbyTweetChannelSubscriptions;
\ No newline at end of file
+drop dataset two.nearbyTweetChannelChannelSubscriptions;
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/room_occupants/room_occupants.4.query.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/room_occupants/room_occupants.4.query.sqlpp
index 8612077..1044c26 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/room_occupants/room_occupants.4.query.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/room_occupants/room_occupants.4.query.sqlpp
@@ -25,7 +25,7 @@
 
 use channels;
 
-select test.BrokerName, test.param0
-from roomRecordsSubscriptions test
-order by test.BrokerName
+select test.param0
+from roomRecordsChannelSubscriptions test
+order by test.param0
 ;
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.1.ddl.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.1.ddl.sqlpp
new file mode 100644
index 0000000..06f1b4e
--- /dev/null
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.1.ddl.sqlpp
@@ -0,0 +1,74 @@
+/*
+ * 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.
+ */
+/*
+* Description  : Create matching subscriptions and check results
+* Expected Res : Success
+* Date         : Jun 2018
+* Author       : Steven Jacobs
+*/
+
+drop dataverse two if exists;
+drop dataverse channels if exists;
+create dataverse channels;
+use channels;
+
+create type userLocation as {
+  userId: int,
+  roomNumber: int
+};
+create type watchedUser as {
+  userId: int,
+  name: string
+};
+create type roomSecurity as {
+  roomNumber: int,
+  securityGuardName: string,
+  securityGuardNumber: string
+};
+
+create dataset watchedUsers(watchedUser)
+primary key userId;
+
+create dataset roomSecurityAssignments(roomSecurity)
+primary key roomNumber;
+
+upsert into roomSecurityAssignments([
+{"roomNumber":123, "securityGuardName":"Mike", "securityGuardNumber":"555_4815"},
+{"roomNumber":222, "securityGuardName":"Steven", "securityGuardNumber":"555_1623"},
+{"roomNumber":350, "securityGuardName":"Vassilis", "securityGuardNumber":"555_1234"}]
+);
+
+upsert into watchedUsers([
+{"userId":1, "name":"suspectNumber1"}]
+);
+
+
+create dataset UserLocations(userLocation)
+primary key userId;
+
+create function RoomOccupants(room) {
+  (select location.userId
+  from UserLocations location
+  where location.roomNumber = room)
+};
+
+create broker brokerA at "http://www.notifyA.com";
+create broker brokerB at "http://www.notifyB.com";
+
+create repetitive channel roomRecords using RoomOccupants@1 period duration("PT5S");
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.2.update.sqlpp
similarity index 81%
copy from asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
copy to asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.2.update.sqlpp
index 5f764b3..15a2246 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.2.update.sqlpp
@@ -16,11 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
-* Description  : Check Whether a Channel works after adding a new Index
-* Expected Res : Success
-* Date         : Apr 2018
-* Author       : Steven Jacobs
-*/
+use channels;
 
-15000
\ No newline at end of file
+subscribe to roomRecords(123) on brokerA;
+subscribe to roomRecords(350) on brokerA;
+subscribe to roomRecords(123) on brokerA;
+subscribe to roomRecords(350) on brokerB;
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.3.query.sqlpp
similarity index 82%
copy from asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
copy to asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.3.query.sqlpp
index 5f764b3..c3a8dee 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.3.query.sqlpp
@@ -16,11 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
-* Description  : Check Whether a Channel works after adding a new Index
-* Expected Res : Success
-* Date         : Apr 2018
-* Author       : Steven Jacobs
-*/
+use channels;
 
-15000
\ No newline at end of file
+select param0 from roomRecordsChannelSubscriptions
+order by param0;
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.4.query.sqlpp
similarity index 82%
copy from asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
copy to asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.4.query.sqlpp
index 5f764b3..17c0a01 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.4.query.sqlpp
@@ -16,11 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
-* Description  : Check Whether a Channel works after adding a new Index
-* Expected Res : Success
-* Date         : Apr 2018
-* Author       : Steven Jacobs
-*/
+use channels;
 
-15000
\ No newline at end of file
+select DataverseName,BrokerName from roomRecordsBrokerSubscriptions
+order by BrokerName;
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.5.update.sqlpp
similarity index 82%
copy from asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
copy to asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.5.update.sqlpp
index 5f764b3..7c14a29 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.5.update.sqlpp
@@ -16,11 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
-* Description  : Check Whether a Channel works after adding a new Index
-* Expected Res : Success
-* Date         : Apr 2018
-* Author       : Steven Jacobs
-*/
+use channels;
 
-15000
\ No newline at end of file
+upsert into UserLocations([
+{"userId":1, "roomNumber":123},
+{"userId":2, "roomNumber":222},
+{"userId":3, "roomNumber":350}]
+);
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.6.pollquery.sqlpp
similarity index 82%
rename from asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
rename to asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.6.pollquery.sqlpp
index 5f764b3..990002a 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/add_index/add_index.4.sleep.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/shared_subscriptions/shared_subscriptions.6.pollquery.sqlpp
@@ -16,11 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/*
-* Description  : Check Whether a Channel works after adding a new Index
-* Expected Res : Success
-* Date         : Apr 2018
-* Author       : Steven Jacobs
-*/
+ // polltimeoutsecs=15
 
-15000
\ No newline at end of file
+use channels;
+
+array_count((select * from roomRecordsResults));
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/queries/channel/subscribe_channel_check_subscriptions/subscribe_channel_check_subscriptions.5.query.sqlpp b/asterix-bad/src/test/resources/runtimets/queries/channel/subscribe_channel_check_subscriptions/subscribe_channel_check_subscriptions.5.query.sqlpp
index cd0510d..5c3a4de 100644
--- a/asterix-bad/src/test/resources/runtimets/queries/channel/subscribe_channel_check_subscriptions/subscribe_channel_check_subscriptions.5.query.sqlpp
+++ b/asterix-bad/src/test/resources/runtimets/queries/channel/subscribe_channel_check_subscriptions/subscribe_channel_check_subscriptions.5.query.sqlpp
@@ -19,6 +19,6 @@
 use channels;
 
 select value param1
-from nearbyTweetChannelSubscriptions
+from nearbyTweetChannelChannelSubscriptions
 order by param1
 ;
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_datasets/create_channel_check_datasets.1.adm b/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_datasets/create_channel_check_datasets.1.adm
index 776192d..59442c8 100644
--- a/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_datasets/create_channel_check_datasets.1.adm
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_datasets/create_channel_check_datasets.1.adm
@@ -1,2 +1,3 @@
-{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannelResults", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelResultsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannelResults", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "resultId" ] ], "PrimaryKey": [ [ "resultId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Mon Sep 12 13:48:16 PDT 2016", "DatasetId": 103, "PendingOp": 0 }
-{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannelSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannelSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "subscriptionId" ] ], "PrimaryKey": [ [ "subscriptionId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Mon Sep 12 13:48:16 PDT 2016", "DatasetId": 102, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannelBrokerSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "BrokerSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannelBrokerSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "channelSubId" ], [ "brokerSubId" ] ], "PrimaryKey": [ [ "channelSubId" ], [ "brokerSubId" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:48:20 PDT 2018", "DatasetId": 133, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannelChannelSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannelChannelSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "channelSubId" ] ], "PrimaryKey": [ [ "channelSubId" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:48:20 PDT 2018", "DatasetId": 132, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannelResults", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelResultsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannelResults", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "resultId" ] ], "PrimaryKey": [ [ "resultId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:48:20 PDT 2018", "DatasetId": 134, "PendingOp": 0 }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_metadata/create_channel_check_metadata.1.adm b/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_metadata/create_channel_check_metadata.1.adm
index 225d83f..ff95244 100644
--- a/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_metadata/create_channel_check_metadata.1.adm
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/create_channel_check_metadata/create_channel_check_metadata.1.adm
@@ -1 +1 @@
-{ "DataverseName": "channels", "ChannelName": "nearbyTweetChannel", "SubscriptionsDatasetName": "nearbyTweetChannelSubscriptions", "ResultsDatasetName": "nearbyTweetChannelResults", "Function": [ "channels", "NearbyTweetsContainingText", "2" ], "Duration": "PT10M", "Dependencies": [ [ [ "channels", "nearbyTweetChannelResults" ], [ "channels", "nearbyTweetChannelSubscriptions" ] ], [ [ "channels", "NearbyTweetsContainingText", "2" ] ] ], "Body": "SET inline_with \"false\";\ninsert into channels.nearbyTweetChannelResults as a (\nwith channelExecutionTime as current_datetime() \nselect result, channelExecutionTime, sub.subscriptionId as subscriptionId,current_datetime() as deliveryTime\nfrom channels.nearbyTweetChannelSubscriptions sub,\nMetadata.Broker b, \nchannels.NearbyTweetsContainingText(sub.param0,sub.param1) result \nwhere b.BrokerName = sub.BrokerName\nand b.DataverseName = sub.DataverseName\n) returning a;" }
\ No newline at end of file
+{ "DataverseName": "channels", "ChannelName": "nearbyTweetChannel", "ChannelSubscriptionsDatasetName": "nearbyTweetChannelChannelSubscriptions", "ResultsDatasetName": "nearbyTweetChannelResults", "Function": [ "channels", "NearbyTweetsContainingText", "2" ], "Duration": "PT10M", "Dependencies": [ [ [ "channels", "nearbyTweetChannelResults" ], [ "channels", "nearbyTweetChannelChannelSubscriptions" ], [ "channels", "nearbyTweetChannelBrokerSubscriptions" ] ], [ [ "channels", "NearbyTweetsContainingText", "2" ] ] ], "Body": "SET inline_with \"false\";\ninsert into channels.nearbyTweetChannelResults as a (\nwith channelExecutionTime as current_datetime() \nselect result, channelExecutionTime, sub.channelSubId as channelSubId,current_datetime() as deliveryTime\nfrom channels.nearbyTweetChannelChannelSubscriptions sub,\nchannels.nearbyTweetChannelBrokerSubscriptions bs,\nMetadata.Broker b, \nchannels.NearbyTweetsContainingText(sub.param0,sub.param1) result \n) returning a;", "BrokerSubscriptionsDatasetName": "nearbyTweetChannelBrokerSubscriptions" }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_datasets/drop_channel_check_datasets.1.adm b/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_datasets/drop_channel_check_datasets.1.adm
index 7d160fa..16063bc 100644
--- a/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_datasets/drop_channel_check_datasets.1.adm
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_datasets/drop_channel_check_datasets.1.adm
@@ -1,4 +1,6 @@
-{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel1Results", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelResultsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel1Results", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "resultId" ] ], "PrimaryKey": [ [ "resultId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Tue Sep 13 09:50:56 PDT 2016", "DatasetId": 103, "PendingOp": 0 }
-{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel1Subscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel1Subscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "subscriptionId" ] ], "PrimaryKey": [ [ "subscriptionId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Tue Sep 13 09:50:56 PDT 2016", "DatasetId": 102, "PendingOp": 0 }
-{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel3Results", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelResultsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel3Results", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "resultId" ] ], "PrimaryKey": [ [ "resultId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Tue Sep 13 09:50:58 PDT 2016", "DatasetId": 107, "PendingOp": 0 }
-{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel3Subscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel3Subscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "subscriptionId" ] ], "PrimaryKey": [ [ "subscriptionId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Tue Sep 13 09:50:58 PDT 2016", "DatasetId": 106, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel1BrokerSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "BrokerSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel1BrokerSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "channelSubId" ], [ "brokerSubId" ] ], "PrimaryKey": [ [ "channelSubId" ], [ "brokerSubId" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:58:14 PDT 2018", "DatasetId": 103, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel1ChannelSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel1ChannelSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "channelSubId" ] ], "PrimaryKey": [ [ "channelSubId" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:58:14 PDT 2018", "DatasetId": 102, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel1Results", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelResultsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel1Results", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "resultId" ] ], "PrimaryKey": [ [ "resultId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:58:14 PDT 2018", "DatasetId": 104, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel3BrokerSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "BrokerSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel3BrokerSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "channelSubId" ], [ "brokerSubId" ] ], "PrimaryKey": [ [ "channelSubId" ], [ "brokerSubId" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:58:16 PDT 2018", "DatasetId": 109, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel3ChannelSubscriptions", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelSubscriptionsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel3ChannelSubscriptions", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "channelSubId" ] ], "PrimaryKey": [ [ "channelSubId" ] ], "Autogenerated": false }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:58:16 PDT 2018", "DatasetId": 108, "PendingOp": 0 }
+{ "DataverseName": "channels", "DatasetName": "nearbyTweetChannel3Results", "DatatypeDataverseName": "Metadata", "DatatypeName": "ChannelResultsType", "DatasetType": "INTERNAL", "GroupName": "channels.nearbyTweetChannel3Results", "CompactionPolicy": "prefix", "CompactionPolicyProperties": [ { "Name": "max-mergable-component-size", "Value": "1073741824" }, { "Name": "max-tolerance-component-count", "Value": "5" } ], "InternalDetails": { "FileStructure": "BTREE", "PartitioningStrategy": "HASH", "PartitioningKey": [ [ "resultId" ] ], "PrimaryKey": [ [ "resultId" ] ], "Autogenerated": true }, "Hints": {{  }}, "Timestamp": "Wed Jun 20 14:58:16 PDT 2018", "DatasetId": 110, "PendingOp": 0 }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_metadata/drop_channel_check_metadata.1.adm b/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_metadata/drop_channel_check_metadata.1.adm
index 8d8899d..839d691 100644
--- a/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_metadata/drop_channel_check_metadata.1.adm
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/drop_channel_check_metadata/drop_channel_check_metadata.1.adm
@@ -1,2 +1,2 @@
-{ "DataverseName": "channels", "ChannelName": "nearbyTweetChannel1", "SubscriptionsDatasetName": "nearbyTweetChannel1Subscriptions", "ResultsDatasetName": "nearbyTweetChannel1Results", "Function": [ "channels", "NearbyTweetsContainingText", "2" ], "Duration": "PT10M", "Dependencies": [ [ [ "channels", "nearbyTweetChannel1Results" ], [ "channels", "nearbyTweetChannel1Subscriptions" ] ], [ [ "channels", "NearbyTweetsContainingText", "2" ] ] ], "Body": "SET inline_with \"false\";\ninsert into channels.nearbyTweetChannel1Results as a (\nwith channelExecutionTime as current_datetime() \nselect result, channelExecutionTime, sub.subscriptionId as subscriptionId,current_datetime() as deliveryTime\nfrom channels.nearbyTweetChannel1Subscriptions sub,\nMetadata.Broker b, \nchannels.NearbyTweetsContainingText(sub.param0,sub.param1) result \nwhere b.BrokerName = sub.BrokerName\nand b.DataverseName = sub.DataverseName\n) returning a;" }
-{ "DataverseName": "channels", "ChannelName": "nearbyTweetChannel3", "SubscriptionsDatasetName": "nearbyTweetChannel3Subscriptions", "ResultsDatasetName": "nearbyTweetChannel3Results", "Function": [ "channels", "NearbyTweetsContainingText", "2" ], "Duration": "PT10M", "Dependencies": [ [ [ "channels", "nearbyTweetChannel3Results" ], [ "channels", "nearbyTweetChannel3Subscriptions" ] ], [ [ "channels", "NearbyTweetsContainingText", "2" ] ] ], "Body": "SET inline_with \"false\";\ninsert into channels.nearbyTweetChannel3Results as a (\nwith channelExecutionTime as current_datetime() \nselect result, channelExecutionTime, sub.subscriptionId as subscriptionId,current_datetime() as deliveryTime\nfrom channels.nearbyTweetChannel3Subscriptions sub,\nMetadata.Broker b, \nchannels.NearbyTweetsContainingText(sub.param0,sub.param1) result \nwhere b.BrokerName = sub.BrokerName\nand b.DataverseName = sub.DataverseName\n) returning a;" }
\ No newline at end of file
+{ "DataverseName": "channels", "ChannelName": "nearbyTweetChannel1", "ChannelSubscriptionsDatasetName": "nearbyTweetChannel1ChannelSubscriptions", "ResultsDatasetName": "nearbyTweetChannel1Results", "Function": [ "channels", "NearbyTweetsContainingText", "2" ], "Duration": "PT10M", "Dependencies": [ [ [ "channels", "nearbyTweetChannel1Results" ], [ "channels", "nearbyTweetChannel1ChannelSubscriptions" ], [ "channels", "nearbyTweetChannel1BrokerSubscriptions" ] ], [ [ "channels", "NearbyTweetsContainingText", "2" ] ] ], "Body": "SET inline_with \"false\";\ninsert into channels.nearbyTweetChannel1Results as a (\nwith channelExecutionTime as current_datetime() \nselect result, channelExecutionTime, sub.channelSubId as channelSubId,current_datetime() as deliveryTime\nfrom channels.nearbyTweetChannel1ChannelSubscriptions sub,\nchannels.nearbyTweetChannel1BrokerSubscriptions bs,\nMetadata.Broker b, \nchannels.NearbyTweetsContainingText(sub.param0,sub.param1) result \n) returning a;", "BrokerSubscriptionsDatasetName": "nearbyTweetChannel1BrokerSubscriptions" }
+{ "DataverseName": "channels", "ChannelName": "nearbyTweetChannel3", "ChannelSubscriptionsDatasetName": "nearbyTweetChannel3ChannelSubscriptions", "ResultsDatasetName": "nearbyTweetChannel3Results", "Function": [ "channels", "NearbyTweetsContainingText", "2" ], "Duration": "PT10M", "Dependencies": [ [ [ "channels", "nearbyTweetChannel3Results" ], [ "channels", "nearbyTweetChannel3ChannelSubscriptions" ], [ "channels", "nearbyTweetChannel3BrokerSubscriptions" ] ], [ [ "channels", "NearbyTweetsContainingText", "2" ] ] ], "Body": "SET inline_with \"false\";\ninsert into channels.nearbyTweetChannel3Results as a (\nwith channelExecutionTime as current_datetime() \nselect result, channelExecutionTime, sub.channelSubId as channelSubId,current_datetime() as deliveryTime\nfrom channels.nearbyTweetChannel3ChannelSubscriptions sub,\nchannels.nearbyTweetChannel3BrokerSubscriptions bs,\nMetadata.Broker b, \nchannels.NearbyTweetsContainingText(sub.param0,sub.param1) result \n) returning a;", "BrokerSubscriptionsDatasetName": "nearbyTweetChannel3BrokerSubscriptions" }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/room_occupants/room_occupants.1.adm b/asterix-bad/src/test/resources/runtimets/results/channel/room_occupants/room_occupants.1.adm
index ce8cc0f..426ca7d 100644
--- a/asterix-bad/src/test/resources/runtimets/results/channel/room_occupants/room_occupants.1.adm
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/room_occupants/room_occupants.1.adm
@@ -1,2 +1,2 @@
-{ "BrokerName": "brokerA", "param0": 123 }
-{ "BrokerName": "brokerB", "param0": 350 }
\ No newline at end of file
+{ "param0": 123 }
+{ "param0": 350 }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.3.adm b/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.3.adm
new file mode 100644
index 0000000..426ca7d
--- /dev/null
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.3.adm
@@ -0,0 +1,2 @@
+{ "param0": 123 }
+{ "param0": 350 }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.4.adm b/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.4.adm
new file mode 100644
index 0000000..2bb764e
--- /dev/null
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.4.adm
@@ -0,0 +1,4 @@
+{ "DataverseName": "channels", "BrokerName": "brokerA" }
+{ "DataverseName": "channels", "BrokerName": "brokerA" }
+{ "DataverseName": "channels", "BrokerName": "brokerA" }
+{ "DataverseName": "channels", "BrokerName": "brokerB" }
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.6.adm b/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.6.adm
new file mode 100644
index 0000000..d8263ee
--- /dev/null
+++ b/asterix-bad/src/test/resources/runtimets/results/channel/shared_subscriptions/shared_subscriptions.6.adm
@@ -0,0 +1 @@
+2
\ No newline at end of file
diff --git a/asterix-bad/src/test/resources/runtimets/testsuite.xml b/asterix-bad/src/test/resources/runtimets/testsuite.xml
index 4640af1..7309bfb 100644
--- a/asterix-bad/src/test/resources/runtimets/testsuite.xml
+++ b/asterix-bad/src/test/resources/runtimets/testsuite.xml
@@ -154,7 +154,7 @@
     <test-case FilePath="channel">
       <compilation-unit name="drop_subscriptions">
         <output-dir compare="Text">drop_subscriptions</output-dir>
-        <expected-error>Cannot alter dataset two.nearbyTweetChannelSubscriptions. two.nearbyTweetChannel(Channel) depends on it!</expected-error>
+        <expected-error>Cannot alter dataset two.nearbyTweetChannelChannelSubscriptions. two.nearbyTweetChannel(Channel) depends on it!</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="channel">
@@ -164,6 +164,11 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="channel">
+      <compilation-unit name="shared_subscriptions">
+        <output-dir compare="Text">shared_subscriptions</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="channel">
       <compilation-unit name="room_occupants">
         <output-dir compare="Text">room_occupants</output-dir>
       </compilation-unit>