|
15 | 15 | */
|
16 | 16 | package org.mybatis.dynamic.sql.where.render;
|
17 | 17 |
|
18 |
| -import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore; |
19 |
| - |
20 | 18 | import java.util.Objects;
|
| 19 | +import java.util.stream.Collectors; |
21 | 20 |
|
22 | 21 | import org.jspecify.annotations.Nullable;
|
23 | 22 | import org.mybatis.dynamic.sql.BindableColumn;
|
24 | 23 | import org.mybatis.dynamic.sql.VisitableCondition;
|
25 | 24 | import org.mybatis.dynamic.sql.render.RenderingContext;
|
26 | 25 | import org.mybatis.dynamic.sql.util.FragmentAndParameters;
|
| 26 | +import org.mybatis.dynamic.sql.util.FragmentCollector; |
27 | 27 |
|
28 | 28 | public class ColumnAndConditionRenderer<T> {
|
29 | 29 | private final BindableColumn<T> column;
|
30 | 30 | private final VisitableCondition<T> condition;
|
31 | 31 | private final RenderingContext renderingContext;
|
| 32 | + private final DefaultConditionVisitor<T> visitor; |
32 | 33 |
|
33 | 34 | private ColumnAndConditionRenderer(Builder<T> builder) {
|
34 | 35 | column = Objects.requireNonNull(builder.column);
|
35 | 36 | condition = Objects.requireNonNull(builder.condition);
|
36 | 37 | renderingContext = Objects.requireNonNull(builder.renderingContext);
|
37 |
| - } |
38 |
| - |
39 |
| - public FragmentAndParameters render() { |
40 |
| - FragmentAndParameters renderedLeftColumn = column.alias() |
41 |
| - .map(FragmentAndParameters::fromFragment) |
42 |
| - .orElseGet(() -> column.render(renderingContext)); |
43 |
| - |
44 |
| - DefaultConditionVisitor<T> visitor = DefaultConditionVisitor.withColumn(column) |
| 38 | + visitor = DefaultConditionVisitor.withColumn(column) |
45 | 39 | .withRenderingContext(renderingContext)
|
46 | 40 | .build();
|
| 41 | + } |
47 | 42 |
|
48 |
| - FragmentAndParameters renderedCondition = condition.accept(visitor); |
49 |
| - |
50 |
| - String finalFragment = condition.overrideRenderedLeftColumn(renderedLeftColumn.fragment()) |
51 |
| - + spaceBefore(renderedCondition.fragment()); |
| 43 | + public FragmentAndParameters render() { |
| 44 | + FragmentCollector fc = new FragmentCollector(); |
| 45 | + fc.add(renderLeftColumn()); |
| 46 | + fc.add(condition.accept(visitor)); |
| 47 | + return fc.toFragmentAndParameters(Collectors.joining(" ")); //$NON-NLS-1$ |
| 48 | + } |
52 | 49 |
|
53 |
| - return FragmentAndParameters.withFragment(finalFragment) |
54 |
| - .withParameters(renderedLeftColumn.parameters()) |
55 |
| - .withParameters(renderedCondition.parameters()) |
56 |
| - .build(); |
| 50 | + private FragmentAndParameters renderLeftColumn() { |
| 51 | + return column.alias() |
| 52 | + .map(FragmentAndParameters::fromFragment) |
| 53 | + .orElseGet(() -> column.render(renderingContext)) |
| 54 | + .mapFragment(condition::overrideRenderedLeftColumn); |
57 | 55 | }
|
58 | 56 |
|
59 | 57 | public static class Builder<T> {
|
|
0 commit comments