in asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADRuleSetFactory.java [54:80]
private void updateNormalizationRules(
List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> logicalRuleSet,
ICcApplicationContext appCtx) {
// gen original normalization rules
List<IAlgebraicRewriteRule> originalNormalizationRules =
RuleCollections.buildNormalizationRuleCollection(appCtx);
// make a copy
List<IAlgebraicRewriteRule> alteredNormalizationRules = new ArrayList<>();
alteredNormalizationRules.addAll(originalNormalizationRules);
// insert the broker rule
for (int i = 0; i < alteredNormalizationRules.size(); i++) {
IAlgebraicRewriteRule rule = alteredNormalizationRules.get(i);
if (rule instanceof UnnestToDataScanRule) {
alteredNormalizationRules.add(i + 1, new InsertBrokerNotifierForChannelRule());
}
}
// replace all normalization rule collections with the new one
SequentialFixpointRuleController seqOnceCtrl = new SequentialFixpointRuleController(true);
for (int i = 0; i < logicalRuleSet.size(); i++) {
List<IAlgebraicRewriteRule> existingRuleCollection = logicalRuleSet.get(i).second;
if (isSameRuleCollection(existingRuleCollection, originalNormalizationRules)) {
logicalRuleSet.set(i, new Pair<>(seqOnceCtrl, alteredNormalizationRules));
}
}
}