1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.render;
17
18 import java.util.Objects;
19
20 import org.jspecify.annotations.Nullable;
21 import org.mybatis.dynamic.sql.SqlTable;
22 import org.mybatis.dynamic.sql.TableExpressionVisitor;
23 import org.mybatis.dynamic.sql.render.RenderingContext;
24 import org.mybatis.dynamic.sql.select.SubQuery;
25 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
26
27 public class TableExpressionRenderer implements TableExpressionVisitor<FragmentAndParameters> {
28 private final RenderingContext renderingContext;
29
30 private TableExpressionRenderer(Builder builder) {
31 renderingContext = Objects.requireNonNull(builder.renderingContext);
32 }
33
34 @Override
35 public FragmentAndParameters visit(SqlTable table) {
36 return FragmentAndParameters.fromFragment(renderingContext.aliasedTableName(table));
37 }
38
39 @Override
40 public FragmentAndParameters visit(SubQuery subQuery) {
41 String suffix = subQuery.alias().map(a -> ") " + a)
42 .orElse(")");
43
44 return SubQueryRenderer.withSelectModel(subQuery.selectModel())
45 .withRenderingContext(renderingContext)
46 .withPrefix("(")
47 .withSuffix(suffix)
48 .build()
49 .render();
50 }
51
52 public static class Builder {
53 private @Nullable RenderingContext renderingContext;
54
55 public Builder withRenderingContext(RenderingContext renderingContext) {
56 this.renderingContext = renderingContext;
57 return this;
58 }
59
60 public TableExpressionRenderer build() {
61 return new TableExpressionRenderer(this);
62 }
63 }
64 }