Skip to content

Commit 42646b5

Browse files
committed
Refactor column hierarchy so we can build un-typed functions
1 parent b938d32 commit 42646b5

File tree

23 files changed

+110
-44
lines changed

23 files changed

+110
-44
lines changed

src/main/java/org/mybatis/dynamic/sql/BasicColumn.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@
1515
*/
1616
package org.mybatis.dynamic.sql;
1717

18+
import java.sql.JDBCType;
1819
import java.util.Optional;
1920

2021
import org.mybatis.dynamic.sql.render.RenderingContext;
22+
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2123
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2224

2325
/**
@@ -58,6 +60,18 @@ public interface BasicColumn {
5860
*/
5961
FragmentAndParameters render(RenderingContext renderingContext);
6062

63+
default Optional<JDBCType> jdbcType() {
64+
return Optional.empty();
65+
}
66+
67+
default Optional<String> typeHandler() {
68+
return Optional.empty();
69+
}
70+
71+
default Optional<RenderingStrategy> renderingStrategy() {
72+
return Optional.empty();
73+
}
74+
6175
/**
6276
* Utility method to make it easier to build column lists for methods that require an
6377
* array rather than the varargs method.

src/main/java/org/mybatis/dynamic/sql/BindableColumn.java

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,11 @@
1515
*/
1616
package org.mybatis.dynamic.sql;
1717

18-
import java.sql.JDBCType;
1918
import java.util.Optional;
2019

21-
import org.mybatis.dynamic.sql.render.RenderingStrategy;
22-
2320
/**
24-
* Describes additional attributes of columns that are necessary for binding the column as a JDBC parameter.
25-
* Columns in where clauses are typically bound.
21+
* Describes a column with a known data type. The type is only used by the compiler to assure type safety
22+
* when building clauses with conditions.
2623
*
2724
* @author Jeff Butler
2825
*
@@ -37,18 +34,6 @@ public interface BindableColumn<T> extends BasicColumn {
3734
@Override
3835
BindableColumn<T> as(String alias);
3936

40-
default Optional<JDBCType> jdbcType() {
41-
return Optional.empty();
42-
}
43-
44-
default Optional<String> typeHandler() {
45-
return Optional.empty();
46-
}
47-
48-
default Optional<RenderingStrategy> renderingStrategy() {
49-
return Optional.empty();
50-
}
51-
5237
default Object convertParameterType(T value) {
5338
return value;
5439
}

src/main/java/org/mybatis/dynamic/sql/SqlBuilder.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -497,6 +497,10 @@ static <T> Sum<T> sum(BindableColumn<T> column) {
497497
return Sum.of(column);
498498
}
499499

500+
static Sum<Object> sum(BasicColumn column) {
501+
return Sum.of(column);
502+
}
503+
500504
static <T> Sum<T> sum(BindableColumn<T> column, VisitableCondition<T> condition) {
501505
return Sum.of(column, condition);
502506
}

src/main/java/org/mybatis/dynamic/sql/select/aggregate/Avg.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.aggregate;
1717

18+
import org.mybatis.dynamic.sql.BasicColumn;
1819
import org.mybatis.dynamic.sql.BindableColumn;
1920
import org.mybatis.dynamic.sql.render.RenderingContext;
2021
import org.mybatis.dynamic.sql.select.function.AbstractUniTypeFunction;
2122
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2223

2324
public class Avg<T> extends AbstractUniTypeFunction<T, Avg<T>> {
2425

25-
private Avg(BindableColumn<T> column) {
26+
private Avg(BasicColumn column) {
2627
super(column);
2728
}
2829

src/main/java/org/mybatis/dynamic/sql/select/aggregate/Max.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.aggregate;
1717

18+
import org.mybatis.dynamic.sql.BasicColumn;
1819
import org.mybatis.dynamic.sql.BindableColumn;
1920
import org.mybatis.dynamic.sql.render.RenderingContext;
2021
import org.mybatis.dynamic.sql.select.function.AbstractUniTypeFunction;
2122
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2223

2324
public class Max<T> extends AbstractUniTypeFunction<T, Max<T>> {
2425

25-
private Max(BindableColumn<T> column) {
26+
private Max(BasicColumn column) {
2627
super(column);
2728
}
2829

src/main/java/org/mybatis/dynamic/sql/select/aggregate/Min.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.aggregate;
1717

18+
import org.mybatis.dynamic.sql.BasicColumn;
1819
import org.mybatis.dynamic.sql.BindableColumn;
1920
import org.mybatis.dynamic.sql.render.RenderingContext;
2021
import org.mybatis.dynamic.sql.select.function.AbstractUniTypeFunction;
2122
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2223

2324
public class Min<T> extends AbstractUniTypeFunction<T, Min<T>> {
2425

25-
private Min(BindableColumn<T> column) {
26+
private Min(BasicColumn column) {
2627
super(column);
2728
}
2829

src/main/java/org/mybatis/dynamic/sql/select/aggregate/Sum.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.function.Function;
1919

20+
import org.mybatis.dynamic.sql.BasicColumn;
2021
import org.mybatis.dynamic.sql.BindableColumn;
2122
import org.mybatis.dynamic.sql.VisitableCondition;
2223
import org.mybatis.dynamic.sql.render.RenderingContext;
@@ -28,7 +29,7 @@
2829
public class Sum<T> extends AbstractUniTypeFunction<T, Sum<T>> {
2930
private final Function<RenderingContext, FragmentAndParameters> renderer;
3031

31-
private Sum(BindableColumn<T> column) {
32+
private Sum(BasicColumn column) {
3233
super(column);
3334
renderer = rc -> column.render(rc).mapFragment(this::applyAggregate);
3435
}
@@ -48,7 +49,7 @@ private Sum(BindableColumn<T> column, VisitableCondition<T> condition) {
4849
};
4950
}
5051

51-
private Sum(BindableColumn<T> column, Function<RenderingContext, FragmentAndParameters> renderer) {
52+
private Sum(BasicColumn column, Function<RenderingContext, FragmentAndParameters> renderer) {
5253
super(column);
5354
this.renderer = renderer;
5455
}
@@ -71,6 +72,10 @@ public static <T> Sum<T> of(BindableColumn<T> column) {
7172
return new Sum<>(column);
7273
}
7374

75+
public static Sum<Object> of(BasicColumn column) {
76+
return new Sum<>(column);
77+
}
78+
7479
public static <T> Sum<T> of(BindableColumn<T> column, VisitableCondition<T> condition) {
7580
return new Sum<>(column, condition);
7681
}

src/main/java/org/mybatis/dynamic/sql/select/function/AbstractTypeConvertingFunction.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import java.util.Objects;
1919
import java.util.Optional;
2020

21+
import org.mybatis.dynamic.sql.BasicColumn;
2122
import org.mybatis.dynamic.sql.BindableColumn;
2223

2324
/**
@@ -36,10 +37,10 @@
3637
*/
3738
public abstract class AbstractTypeConvertingFunction<T, R, U extends AbstractTypeConvertingFunction<T, R, U>>
3839
implements BindableColumn<R> {
39-
protected final BindableColumn<T> column;
40+
protected final BasicColumn column;
4041
protected String alias;
4142

42-
protected AbstractTypeConvertingFunction(BindableColumn<T> column) {
43+
protected AbstractTypeConvertingFunction(BasicColumn column) {
4344
this.column = Objects.requireNonNull(column);
4445
}
4546

src/main/java/org/mybatis/dynamic/sql/select/function/AbstractUniTypeFunction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
import java.sql.JDBCType;
1919
import java.util.Optional;
2020

21-
import org.mybatis.dynamic.sql.BindableColumn;
21+
import org.mybatis.dynamic.sql.BasicColumn;
2222

2323
/**
2424
* Represents a function that does not change the underlying data type.
@@ -33,7 +33,7 @@
3333
public abstract class AbstractUniTypeFunction<T, U extends AbstractUniTypeFunction<T, U>>
3434
extends AbstractTypeConvertingFunction<T, T, U> {
3535

36-
protected AbstractUniTypeFunction(BindableColumn<T> column) {
36+
protected AbstractUniTypeFunction(BasicColumn column) {
3737
super(column);
3838
}
3939

src/main/java/org/mybatis/dynamic/sql/select/function/Add.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
public class Add<T> extends OperatorFunction<T> {
2525

26-
private Add(BindableColumn<T> firstColumn, BasicColumn secondColumn,
26+
private Add(BasicColumn firstColumn, BasicColumn secondColumn,
2727
List<BasicColumn> subsequentColumns) {
2828
super("+", firstColumn, secondColumn, subsequentColumns); //$NON-NLS-1$
2929
}

0 commit comments

Comments
 (0)