public static InExpression bind(final InExpression segment, final SegmentType parentSegmentType, final SQLStatementBinderContext binderContext,
                                    final Map<String, TableSegmentBinderContext> tableBinderContexts, final Map<String, TableSegmentBinderContext> outerTableBinderContexts) {
        ExpressionSegment boundLeft = ExpressionSegmentBinder.bind(segment.getLeft(), parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
        ExpressionSegment boundRight = ExpressionSegmentBinder.bind(segment.getRight(), parentSegmentType, binderContext, tableBinderContexts, outerTableBinderContexts);
        return new InExpression(segment.getStartIndex(), segment.getStopIndex(), boundLeft, boundRight, segment.isNot());
    }
@Test
    void assertInExpressionBinder() {
        InExpression inExpression = new InExpression(0, 10,
                new LiteralExpressionSegment(0, 0, "left"),
                new LiteralExpressionSegment(0, 0, "right"), true);
        SQLStatementBinderContext binderContext = mock(SQLStatementBinderContext.class);
        InExpression actual = InExpressionBinder.bind(inExpression, SegmentType.PROJECTION, binderContext, Collections.emptyMap(), Collections.emptyMap());
        assertThat(actual.getText(), is("leftright"));
        assertTrue(actual.isNot());
    }