1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql;
17
18 import java.util.Objects;
19 import java.util.Optional;
20
21 import org.jspecify.annotations.Nullable;
22 import org.mybatis.dynamic.sql.render.RenderingContext;
23 import org.mybatis.dynamic.sql.select.SelectModel;
24 import org.mybatis.dynamic.sql.select.render.SubQueryRenderer;
25 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
26
27 public class SubQueryColumn implements BasicColumn {
28 private final SelectModel selectModel;
29 private @Nullable String alias;
30
31 private SubQueryColumn(SelectModel selectModel) {
32 this.selectModel = Objects.requireNonNull(selectModel);
33 }
34
35 @Override
36 public Optional<String> alias() {
37 return Optional.ofNullable(alias);
38 }
39
40 @Override
41 public SubQueryColumn as(String alias) {
42 SubQueryColumn answer = new SubQueryColumn(selectModel);
43 answer.alias = alias;
44 return answer;
45 }
46
47 @Override
48 public FragmentAndParameters render(RenderingContext renderingContext) {
49 return SubQueryRenderer.withSelectModel(selectModel)
50 .withRenderingContext(renderingContext)
51 .withPrefix("(")
52 .withSuffix(")")
53 .build()
54 .render();
55 }
56
57 public static SubQueryColumn of(SelectModel selectModel) {
58 return new SubQueryColumn(selectModel);
59 }
60 }