public static Collection extractColumns()

in parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/ExpressionExtractor.java [176:253]


    public static Collection<ColumnSegment> extractColumns(final ExpressionSegment expression, final boolean containsSubQuery) {
        if (expression instanceof ColumnSegment) {
            return Collections.singletonList((ColumnSegment) expression);
        }
        Collection<ColumnSegment> result = new LinkedList<>();
        if (expression instanceof AggregationProjectionSegment) {
            for (ExpressionSegment each : ((AggregationProjectionSegment) expression).getParameters()) {
                result.addAll(extractColumns(each, containsSubQuery));
            }
        }
        if (expression instanceof BetweenExpression) {
            result.addAll(extractColumns(((BetweenExpression) expression).getLeft(), containsSubQuery));
            result.addAll(extractColumns(((BetweenExpression) expression).getBetweenExpr(), containsSubQuery));
            result.addAll(extractColumns(((BetweenExpression) expression).getAndExpr(), containsSubQuery));
        }
        if (expression instanceof BinaryOperationExpression) {
            result.addAll(extractColumns(((BinaryOperationExpression) expression).getLeft(), containsSubQuery));
            result.addAll(extractColumns(((BinaryOperationExpression) expression).getRight(), containsSubQuery));
        }
        if (expression instanceof CaseWhenExpression) {
            result.addAll(extractColumns(((CaseWhenExpression) expression).getCaseExpr(), containsSubQuery));
            result.addAll(extractColumns(((CaseWhenExpression) expression).getElseExpr(), containsSubQuery));
            ((CaseWhenExpression) expression).getWhenExprs().forEach(each -> result.addAll(extractColumns(each, containsSubQuery)));
            ((CaseWhenExpression) expression).getThenExprs().forEach(each -> result.addAll(extractColumns(each, containsSubQuery)));
        }
        if (expression instanceof OuterJoinExpression) {
            result.add(((OuterJoinExpression) expression).getColumnName());
        }
        if (expression instanceof DatetimeExpression) {
            result.addAll(extractColumns(((DatetimeExpression) expression).getLeft(), containsSubQuery));
            result.addAll(extractColumns(((DatetimeExpression) expression).getRight(), containsSubQuery));
        }
        if (expression instanceof ExpressionProjectionSegment) {
            result.addAll(extractColumns(((ExpressionProjectionSegment) expression).getExpr(), containsSubQuery));
        }
        if (expression instanceof FunctionSegment) {
            for (ExpressionSegment each : ((FunctionSegment) expression).getParameters()) {
                result.addAll(extractColumns(each, containsSubQuery));
            }
        }
        if (expression instanceof InExpression) {
            result.addAll(extractColumns(((InExpression) expression).getLeft(), containsSubQuery));
            result.addAll(extractColumns(((InExpression) expression).getRight(), containsSubQuery));
        }
        if (expression instanceof IntervalExpressionProjection) {
            result.addAll(extractColumns(((IntervalExpressionProjection) expression).getLeft(), containsSubQuery));
            result.addAll(extractColumns(((IntervalExpressionProjection) expression).getRight(), containsSubQuery));
            result.addAll(extractColumns(((IntervalExpressionProjection) expression).getMinus(), containsSubQuery));
        }
        if (expression instanceof ListExpression) {
            for (ExpressionSegment each : ((ListExpression) expression).getItems()) {
                result.addAll(extractColumns(each, containsSubQuery));
            }
        }
        if (expression instanceof MatchAgainstExpression) {
            result.addAll(((MatchAgainstExpression) expression).getColumns());
            result.addAll(extractColumns(((MatchAgainstExpression) expression).getExpr(), containsSubQuery));
        }
        if (expression instanceof MultisetExpression) {
            result.addAll(extractColumns(((MultisetExpression) expression).getLeft(), containsSubQuery));
            result.addAll(extractColumns(((MultisetExpression) expression).getRight(), containsSubQuery));
        }
        if (expression instanceof NotExpression) {
            result.addAll(extractColumns(((NotExpression) expression).getExpression(), containsSubQuery));
        }
        if (expression instanceof ValuesExpression) {
            for (InsertValuesSegment each : ((ValuesExpression) expression).getRowConstructorList()) {
                each.getValues().forEach(value -> result.addAll(extractColumns(value, containsSubQuery)));
            }
        }
        if (expression instanceof SubquerySegment && containsSubQuery) {
            ColumnExtractor.extractFromSelectStatement(result, ((SubquerySegment) expression).getSelect(), true);
        }
        if (expression instanceof SubqueryExpressionSegment && containsSubQuery) {
            ColumnExtractor.extractFromSelectStatement(result, ((SubqueryExpressionSegment) expression).getSubquery().getSelect(), true);
        }
        return result;
    }