1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.aggregate;
17
18 import java.util.Objects;
19
20 import org.mybatis.dynamic.sql.BasicColumn;
21 import org.mybatis.dynamic.sql.render.RenderingContext;
22 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
23
24 public class CountDistinct extends AbstractCount {
25
26 private final BasicColumn column;
27
28 private CountDistinct(BasicColumn column) {
29 this.column = Objects.requireNonNull(column);
30 }
31
32 private CountDistinct(BasicColumn column, String alias) {
33 super(alias);
34 this.column = Objects.requireNonNull(column);
35 }
36
37 @Override
38 public FragmentAndParameters render(RenderingContext renderingContext) {
39 return column.render(renderingContext)
40 .mapFragment(s -> "count(distinct " + s + ")");
41 }
42
43 @Override
44 public CountDistinct as(String alias) {
45 return new CountDistinct(column, alias);
46 }
47
48 public static CountDistinct of(BasicColumn column) {
49 return new CountDistinct(column);
50 }
51 }