private void addRewriteChannelTimeFunctionRule()

in asterix-bad/src/main/java/org/apache/asterix/bad/lang/BADRuleSetFactory.java [82:108]


    private void addRewriteChannelTimeFunctionRule(
            List<Pair<AbstractRuleController, List<IAlgebraicRewriteRule>>> logicalRuleSet,
            ICcApplicationContext appCtx) {
        // gen original normalization rules
        List<IAlgebraicRewriteRule> originalRuleCollection = RuleCollections.buildLoadFieldsRuleCollection(appCtx);
        // make a copy
        List<IAlgebraicRewriteRule> alteredRuleCollection = new ArrayList<>();
        alteredRuleCollection.addAll(originalRuleCollection);
        // insert the broker rule
        for (int i = 0; i < alteredRuleCollection.size(); i++) {
            IAlgebraicRewriteRule rule = alteredRuleCollection.get(i);
            if (rule instanceof FeedScanCollectionToUnnest) {
                alteredRuleCollection.add(i + 1, new MetaFunctionToMetaVariableRule());
                alteredRuleCollection.add(i + 1, new RewriteChannelTimeFunctionToLocalVarRule());
                alteredRuleCollection.add(i + 1, new RewriteActiveFunctionsRule());
            }
        }

        // replace all normalization rule collections with the new one
        SequentialFixpointRuleController seqCtrlNoDfs = new SequentialFixpointRuleController(true);
        for (int i = 0; i < logicalRuleSet.size(); i++) {
            List<IAlgebraicRewriteRule> existingRuleCollection = logicalRuleSet.get(i).second;
            if (isSameRuleCollection(existingRuleCollection, originalRuleCollection)) {
                logicalRuleSet.set(i, new Pair<>(seqCtrlNoDfs, alteredRuleCollection));
            }
        }
    }