Skip to content

Commit 7ff0d1d

Browse files
committed
Allow rendering parameters that aren't columns
1 parent ea9bd6e commit 7ff0d1d

File tree

5 files changed

+32
-28
lines changed

5 files changed

+32
-28
lines changed

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

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public class SqlColumn<T> implements BindableColumn<T>, SortSpecification {
3333
private SqlColumn(Builder builder) {
3434
name = Objects.requireNonNull(builder.name);
3535
jdbcType = builder.jdbcType;
36-
table = builder.table;
36+
table = Objects.requireNonNull(builder.table);
3737
typeHandler = builder.typeHandler;
3838
}
3939

@@ -89,14 +89,9 @@ public String aliasOrName() {
8989
return alias().orElse(name);
9090
}
9191

92-
public Optional<SqlTable> table() {
93-
return Optional.ofNullable(table);
94-
}
95-
9692
@Override
9793
public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
98-
return table()
99-
.flatMap(tableAliasCalculator::aliasForColumn)
94+
return tableAliasCalculator.aliasForColumn(table)
10095
.map(this::applyTableAlias)
10196
.orElseGet(this::name);
10297
}
@@ -111,10 +106,6 @@ private String applyTableAlias(String tableAlias) {
111106
return tableAlias + "." + name(); //$NON-NLS-1$
112107
}
113108

114-
public static <T> SqlColumn<T> of(String name) {
115-
return SqlColumn.withName(name).build();
116-
}
117-
118109
public static <T> SqlColumn<T> of(String name, SqlTable table) {
119110
return SqlColumn.withName(name)
120111
.withTable(table)

src/main/java/org/mybatis/dynamic/sql/render/MyBatis3RenderingStrategy.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,11 +15,13 @@
1515
*/
1616
package org.mybatis.dynamic.sql.render;
1717

18+
import java.util.Optional;
19+
1820
import org.mybatis.dynamic.sql.BindableColumn;
1921

2022
public class MyBatis3RenderingStrategy extends RenderingStrategy {
2123
@Override
22-
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
24+
public String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, String prefix, String parameterName) {
2325
return "#{" //$NON-NLS-1$
2426
+ prefix
2527
+ "." //$NON-NLS-1$
@@ -29,13 +31,17 @@ public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefi
2931
+ "}"; //$NON-NLS-1$
3032
}
3133

32-
private String renderTypeHandler(BindableColumn<?> column) {
33-
return column.typeHandler().map(th -> ",typeHandler=" + th) //$NON-NLS-1$
34+
private String renderTypeHandler(Optional<BindableColumn<?>> column) {
35+
return column
36+
.flatMap(BindableColumn::typeHandler)
37+
.map(th -> ",typeHandler=" + th) //$NON-NLS-1$
3438
.orElse(""); //$NON-NLS-1$
3539
}
3640

37-
private String renderJdbcType(BindableColumn<?> column) {
38-
return column.jdbcType().map(jt -> ",jdbcType=" + jt.getName()) //$NON-NLS-1$
41+
private String renderJdbcType(Optional<BindableColumn<?>> column) {
42+
return column
43+
.flatMap(BindableColumn::jdbcType)
44+
.map(jt -> ",jdbcType=" + jt.getName()) //$NON-NLS-1$
3945
.orElse(""); //$NON-NLS-1$
4046
}
4147
}

src/main/java/org/mybatis/dynamic/sql/render/RenderingStrategy.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2017 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,11 +15,21 @@
1515
*/
1616
package org.mybatis.dynamic.sql.render;
1717

18+
import java.util.Optional;
19+
1820
import org.mybatis.dynamic.sql.BindableColumn;
1921

2022
public abstract class RenderingStrategy {
2123
public static final RenderingStrategy MYBATIS3 = new MyBatis3RenderingStrategy();
2224
public static final RenderingStrategy SPRING_NAMED_PARAMETER = new SpringNamedParameterRenderingStrategy();
2325

24-
public abstract String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName);
26+
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
27+
return getFormattedJdbcPlaceholder(Optional.of(column), prefix, parameterName);
28+
}
29+
30+
public String getFormattedJdbcPlaceholder(String prefix, String parameterName) {
31+
return getFormattedJdbcPlaceholder(Optional.empty(), prefix, parameterName);
32+
}
33+
34+
public abstract String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, String prefix, String parameterName);
2535
}

src/main/java/org/mybatis/dynamic/sql/render/SpringNamedParameterRenderingStrategy.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2017 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -15,13 +15,14 @@
1515
*/
1616
package org.mybatis.dynamic.sql.render;
1717

18+
import java.util.Optional;
19+
1820
import org.mybatis.dynamic.sql.BindableColumn;
1921

2022
public class SpringNamedParameterRenderingStrategy extends RenderingStrategy {
2123

2224
@Override
23-
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
25+
public String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, String prefix, String parameterName) {
2426
return ":" + parameterName; //$NON-NLS-1$
2527
}
26-
2728
}

src/main/java/org/mybatis/dynamic/sql/select/render/SelectRenderer.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020
import java.util.Optional;
2121
import java.util.concurrent.atomic.AtomicInteger;
2222

23-
import org.mybatis.dynamic.sql.BindableColumn;
2423
import org.mybatis.dynamic.sql.SortSpecification;
25-
import org.mybatis.dynamic.sql.SqlColumn;
2624
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2725
import org.mybatis.dynamic.sql.select.OrderByModel;
2826
import org.mybatis.dynamic.sql.select.QueryExpressionModel;
@@ -81,15 +79,13 @@ private String orderByPhrase(SortSpecification column) {
8179
}
8280

8381
private String renderLimit(Map<String, Object> parameters, Long limit) {
84-
BindableColumn<Integer> bc = SqlColumn.of(LIMIT_PARAMETER);
85-
String placeholder = renderingStrategy.getFormattedJdbcPlaceholder(bc, "parameters", LIMIT_PARAMETER); //$NON-NLS-1$
82+
String placeholder = renderingStrategy.getFormattedJdbcPlaceholder("parameters", LIMIT_PARAMETER); //$NON-NLS-1$
8683
parameters.put(LIMIT_PARAMETER, limit);
8784
return "limit " + placeholder; //$NON-NLS-1$
8885
}
8986

9087
private String renderOffset(Map<String, Object> parameters, Long offset) {
91-
BindableColumn<Integer> bc = SqlColumn.of(OFFSET_PARAMETER);
92-
String placeholder = renderingStrategy.getFormattedJdbcPlaceholder(bc, "parameters", OFFSET_PARAMETER); //$NON-NLS-1$
88+
String placeholder = renderingStrategy.getFormattedJdbcPlaceholder("parameters", OFFSET_PARAMETER); //$NON-NLS-1$
9389
parameters.put(OFFSET_PARAMETER, offset);
9490
return "offset " + placeholder; //$NON-NLS-1$
9591
}

0 commit comments

Comments
 (0)