@Override
    public final String toString() {
        StringJoiner result = new StringJoiner(", ", "(", ")");
        for (int i = 0; i < values.size(); i++) {
            result.add(getValue(i));
        }
        return result.toString();
    }
@Test
    void assertToString() {
        List<ExpressionSegment> expressionSegments = new ArrayList<>(4);
        ParameterMarkerExpressionSegment parameterMarkerExpressionSegment = new ParameterMarkerExpressionSegment(1, 1, 1);
        ParameterMarkerExpressionSegment positionalParameterMarkerExpressionSegment = new ParameterMarkerExpressionSegment(1, 1, 0, ParameterMarkerType.DOLLAR);
        LiteralExpressionSegment literalExpressionSegment = new LiteralExpressionSegment(2, 2, "literals");
        ComplexExpressionSegment complexExpressionSegment = new ComplexExpressionSegment() {
            
            @Override
            public String getText() {
                return "complexExpressionSegment";
            }
            
            @Override
            public int getStartIndex() {
                return 3;
            }
            
            @Override
            public int getStopIndex() {
                return 3;
            }
        };
        expressionSegments.add(parameterMarkerExpressionSegment);
        expressionSegments.add(positionalParameterMarkerExpressionSegment);
        expressionSegments.add(literalExpressionSegment);
        expressionSegments.add(complexExpressionSegment);
        expressionSegments.add(new TypeCastExpression(0, 0, "$2::varchar::jsonb", new TypeCastExpression(0, 0, "$2::varchar",
                new ParameterMarkerExpressionSegment(0, 0, 1, ParameterMarkerType.DOLLAR), "varchar"), "jsonb"));
        InsertValue insertValue = new InsertValue(expressionSegments);
        String actualToString = insertValue.toString();
        String expectedToString = "(?, $1, 'literals', complexExpressionSegment, $2::varchar::jsonb)";
        assertThat(actualToString, is(expectedToString));
    }