presto-main/src/main/java/io/prestosql/sql/planner/iterative/rule/PushPredicateIntoTableScan.java/PushPredicateIntoTableScan/apply
class PushPredicateIntoTableScan:    @Override
    public Result apply(FilterNode filterNode, Captures captures, Context context)
    {
        TableScanNode tableScan = captures.get(TABLE_SCAN);

        Optional<PlanNode> rewritten = pushFilterIntoTableScan(
                tableScan,
                filterNode.getPredicate(),
                false,
                context.getSession(),
                context.getSymbolAllocator().getTypes(),
                context.getIdAllocator(),
                metadata,
                typeAnalyzer,
                domainTranslator);

        if (!rewritten.isPresent() || arePlansSame(filterNode, tableScan, rewritten.get())) {
            return Result.empty();
        }

        return Result.ofPlanNode(rewritten.get());
    }