1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.function;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.List;
21 import java.util.stream.Collectors;
22
23 import org.mybatis.dynamic.sql.BasicColumn;
24 import org.mybatis.dynamic.sql.BindableColumn;
25 import org.mybatis.dynamic.sql.render.RenderingContext;
26 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
27 import org.mybatis.dynamic.sql.util.FragmentCollector;
28
29 public class Concat<T> extends AbstractUniTypeFunction<T, Concat<T>> {
30 private final List<BasicColumn> allColumns = new ArrayList<>();
31
32 protected Concat(BasicColumn firstColumn, List<BasicColumn> subsequentColumns) {
33 super(firstColumn);
34 allColumns.add(firstColumn);
35 this.allColumns.addAll(subsequentColumns);
36 }
37
38 @Override
39 public FragmentAndParameters render(RenderingContext renderingContext) {
40
41 return allColumns.stream()
42 .map(column -> column.render(renderingContext))
43 .collect(FragmentCollector.collect()).toFragmentAndParameters(
44 Collectors.joining(", ", "concat(", ")"));
45 }
46
47 @Override
48 protected Concat<T> copy() {
49 return new Concat<>(column, allColumns.subList(1, allColumns.size()));
50 }
51
52 public static <T> Concat<T> concat(BindableColumn<T> firstColumn, BasicColumn... subsequentColumns) {
53 return new Concat<>(firstColumn, Arrays.asList(subsequentColumns));
54 }
55
56 public static <T> Concat<T> of(BindableColumn<T> firstColumn, List<BasicColumn> subsequentColumns) {
57 return new Concat<>(firstColumn, subsequentColumns);
58 }
59 }