in infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/engine/segment/dml/expression/ExpressionSegmentBinder.java [70:114]
public static ExpressionSegment bind(final ExpressionSegment segment, final SegmentType parentSegmentType, final SQLStatementBinderContext binderContext,
final Multimap<CaseInsensitiveString, TableSegmentBinderContext> tableBinderContexts,
final Multimap<CaseInsensitiveString, TableSegmentBinderContext> outerTableBinderContexts) {
if (segment instanceof BinaryOperationExpression) {
return BinaryOperationExpressionBinder.bind((BinaryOperationExpression) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof ExistsSubqueryExpression) {
return ExistsSubqueryExpressionBinder.bind((ExistsSubqueryExpression) segment, binderContext, tableBinderContexts);
}
if (segment instanceof SubqueryExpressionSegment) {
Multimap<CaseInsensitiveString, TableSegmentBinderContext> newOuterTableBinderContexts = LinkedHashMultimap.create();
newOuterTableBinderContexts.putAll(outerTableBinderContexts);
newOuterTableBinderContexts.putAll(tableBinderContexts);
return new SubqueryExpressionSegment(SubquerySegmentBinder.bind(((SubqueryExpressionSegment) segment).getSubquery(), binderContext, newOuterTableBinderContexts));
}
if (segment instanceof InExpression) {
return InExpressionBinder.bind((InExpression) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof NotExpression) {
return NotExpressionBinder.bind((NotExpression) segment, parentSegmentType, binderContext, tableBinderContexts);
}
if (segment instanceof ColumnSegment) {
return ColumnSegmentBinder.bind((ColumnSegment) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof FunctionSegment) {
return FunctionExpressionSegmentBinder.bind((FunctionSegment) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof BetweenExpression) {
return BetweenExpressionSegmentBinder.bind((BetweenExpression) segment, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof AggregationDistinctProjectionSegment) {
return AggregationDistinctProjectionSegmentBinder.bind((AggregationDistinctProjectionSegment) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof AggregationProjectionSegment) {
return AggregationProjectionSegmentBinder.bind((AggregationProjectionSegment) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof CaseWhenExpression) {
return CaseWhenExpressionBinder.bind((CaseWhenExpression) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
if (segment instanceof OuterJoinExpression) {
return OuterJoinExpressionBinder.bind((OuterJoinExpression) segment, parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
}
// TODO support more ExpressionSegment bound
return segment;
}