in parser/sql/statement/core/src/main/java/org/apache/shardingsphere/sql/parser/statement/core/extractor/TableExtractor.java [144:196]
private void extractTablesFromExpression(final ExpressionSegment expressionSegment) {
if (expressionSegment instanceof ColumnSegment) {
extractTablesFromColumnSegments(Collections.singleton((ColumnSegment) expressionSegment));
}
if (expressionSegment instanceof ListExpression) {
((ListExpression) expressionSegment).getItems().forEach(this::extractTablesFromExpression);
}
if (expressionSegment instanceof ExistsSubqueryExpression) {
extractTablesFromSelect(((ExistsSubqueryExpression) expressionSegment).getSubquery().getSelect());
}
if (expressionSegment instanceof BetweenExpression) {
extractTablesFromExpression(((BetweenExpression) expressionSegment).getLeft());
extractTablesFromExpression(((BetweenExpression) expressionSegment).getBetweenExpr());
extractTablesFromExpression(((BetweenExpression) expressionSegment).getAndExpr());
}
if (expressionSegment instanceof InExpression) {
extractTablesFromExpression(((InExpression) expressionSegment).getLeft());
extractTablesFromExpression(((InExpression) expressionSegment).getRight());
}
if (expressionSegment instanceof SubqueryExpressionSegment) {
extractTablesFromSelect(((SubqueryExpressionSegment) expressionSegment).getSubquery().getSelect());
}
if (expressionSegment instanceof SubquerySegment) {
extractTablesFromSelect(((SubquerySegment) expressionSegment).getSelect());
}
if (expressionSegment instanceof BinaryOperationExpression) {
extractTablesFromExpression(((BinaryOperationExpression) expressionSegment).getLeft());
extractTablesFromExpression(((BinaryOperationExpression) expressionSegment).getRight());
}
if (expressionSegment instanceof MatchAgainstExpression) {
((MatchAgainstExpression) expressionSegment).getColumns().forEach(this::extractTablesFromExpression);
extractTablesFromExpression(((MatchAgainstExpression) expressionSegment).getExpr());
}
if (expressionSegment instanceof FunctionSegment) {
((FunctionSegment) expressionSegment).getParameters().forEach(this::extractTablesFromExpression);
}
if (expressionSegment instanceof CaseWhenExpression) {
extractTablesFromCaseWhenExpression((CaseWhenExpression) expressionSegment);
}
if (expressionSegment instanceof CollateExpression) {
extractTablesFromExpression(((CollateExpression) expressionSegment).getCollateName());
}
if (expressionSegment instanceof DatetimeExpression) {
extractTablesFromExpression(((DatetimeExpression) expressionSegment).getLeft());
extractTablesFromExpression(((DatetimeExpression) expressionSegment).getRight());
}
if (expressionSegment instanceof NotExpression) {
extractTablesFromExpression(((NotExpression) expressionSegment).getExpression());
}
if (expressionSegment instanceof TypeCastExpression) {
extractTablesFromExpression(((TypeCastExpression) expressionSegment).getExpression());
}
}