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 org.mybatis.dynamic.sql.BasicColumn;
19 import org.mybatis.dynamic.sql.BindableColumn;
20 import org.mybatis.dynamic.sql.render.RenderingContext;
21 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
22
23 public class Substring<T> extends AbstractUniTypeFunction<T, Substring<T>> {
24
25 private final int offset;
26 private final int length;
27
28 private Substring(BasicColumn column, int offset, int length) {
29 super(column);
30 this.offset = offset;
31 this.length = length;
32 }
33
34 @Override
35 public FragmentAndParameters render(RenderingContext renderingContext) {
36 return column.render(renderingContext).mapFragment(s -> "substring("
37 + s
38 + ", "
39 + offset
40 + ", "
41 + length
42 + ")");
43 }
44
45 @Override
46 protected Substring<T> copy() {
47 return new Substring<>(column, offset, length);
48 }
49
50 public static <T> Substring<T> of(BindableColumn<T> column, int offset, int length) {
51 return new Substring<>(column, offset, length);
52 }
53 }