@Override
    public void check(final EncryptRule encryptRule, final ShardingSphereSchema schema, final SelectStatementContext sqlStatementContext) {
        checkSelect(encryptRule, sqlStatementContext);
        for (SelectStatementContext each : sqlStatementContext.getSubqueryContexts().values()) {
            checkSelect(encryptRule, each);
        }
    }
@Test
    void assertCheckWhenCombineStatementContainsEncryptColumn() {
        SelectStatementContext sqlStatementContext = mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
        when(sqlStatementContext.isContainsCombine()).thenReturn(true);
        when(sqlStatementContext.getSqlStatement().getCombine().isPresent()).thenReturn(true);
        CombineSegment combineSegment = mock(CombineSegment.class, RETURNS_DEEP_STUBS);
        when(sqlStatementContext.getSqlStatement().getCombine().get()).thenReturn(combineSegment);
        ColumnProjection orderIdColumn = new ColumnProjection("o", "order_id", null, new MySQLDatabaseType());
        orderIdColumn.setOriginalTable(new IdentifierValue("t_order"));
        orderIdColumn.setOriginalColumn(new IdentifierValue("order_id"));
        ColumnProjection userIdColumn = new ColumnProjection("o", "user_id", null, new MySQLDatabaseType());
        userIdColumn.setOriginalTable(new IdentifierValue("t_order"));
        userIdColumn.setOriginalColumn(new IdentifierValue("user_id"));
        SelectStatementContext leftSelectStatementContext = mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
        when(leftSelectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Arrays.asList(orderIdColumn, userIdColumn));
        ColumnProjection merchantIdColumn = new ColumnProjection("m", "merchant_id", null, new MySQLDatabaseType());
        merchantIdColumn.setOriginalTable(new IdentifierValue("t_merchant"));
        merchantIdColumn.setOriginalColumn(new IdentifierValue("merchant_id"));
        ColumnProjection merchantNameColumn = new ColumnProjection("m", "merchant_name", null, new MySQLDatabaseType());
        merchantNameColumn.setOriginalTable(new IdentifierValue("t_merchant"));
        merchantNameColumn.setOriginalColumn(new IdentifierValue("merchant_name"));
        SelectStatementContext rightSelectStatementContext = mock(SelectStatementContext.class, RETURNS_DEEP_STUBS);
        when(rightSelectStatementContext.getProjectionsContext().getExpandProjections()).thenReturn(Arrays.asList(merchantIdColumn, merchantNameColumn));
        Map<Integer, SelectStatementContext> subqueryContexts = new LinkedHashMap<>(2, 1F);
        subqueryContexts.put(0, leftSelectStatementContext);
        subqueryContexts.put(1, rightSelectStatementContext);
        when(sqlStatementContext.getSubqueryContexts()).thenReturn(subqueryContexts);
        when(combineSegment.getLeft().getStartIndex()).thenReturn(0);
        when(combineSegment.getRight().getStartIndex()).thenReturn(1);
        assertThrows(UnsupportedSQLOperationException.class, () -> new EncryptSelectProjectionSupportedChecker().check(mockEncryptRule(), null, sqlStatementContext));
    }