@Override
    public List<OptExpression> transform(OptExpression input, OptimizerContext context) {
        LogicalOlapScanOperator scan = (LogicalOlapScanOperator) input.getOp();
        PhysicalOlapScanOperator physicalOlapScan = new PhysicalOlapScanOperator(scan);

        physicalOlapScan.setSalt(scan.getSalt());
        physicalOlapScan.setColumnAccessPaths(scan.getColumnAccessPaths());
        OptExpression result = new OptExpression(physicalOlapScan);
        return Lists.newArrayList(result);
    }
@Test
    public void transform(@Mocked OlapTable table) {
        LogicalOlapScanOperator logical = new LogicalOlapScanOperator(table, Maps.newHashMap(), Maps.newHashMap(),
                null, -1, ConstantOperator.createBoolean(true),
                1, Lists.newArrayList(1L, 2L, 3L), null,
                false, Lists.newArrayList(4L), null, null, false);

        List<OptExpression> output =
                new OlapScanImplementationRule().transform(new OptExpression(logical), new OptimizerContext(
                        new Memo(), new ColumnRefFactory()));

        assertEquals(1, output.size());

        PhysicalOlapScanOperator physical = (PhysicalOlapScanOperator) output.get(0).getOp();
        assertEquals(1, physical.getSelectedIndexId());

        assertEquals(3, physical.getSelectedPartitionId().size());
        assertEquals(1, physical.getSelectedTabletId().size());
        assertEquals(ConstantOperator.createBoolean(true), physical.getPredicate());
    }