Skip to content

Commit ff80a4f

Browse files
committed
Count functions implement BindableColumn directly
1 parent 0f5f547 commit ff80a4f

File tree

3 files changed

+84
-26
lines changed

3 files changed

+84
-26
lines changed

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

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,49 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.aggregate;
1717

18+
import java.sql.JDBCType;
19+
import java.util.Objects;
20+
import java.util.Optional;
21+
1822
import org.mybatis.dynamic.sql.BasicColumn;
23+
import org.mybatis.dynamic.sql.BindableColumn;
24+
import org.mybatis.dynamic.sql.render.TableAliasCalculator;
25+
26+
public class Count implements BindableColumn<Long> {
27+
28+
private final BasicColumn column;
29+
private final String alias;
1930

20-
public class Count extends AbstractAggregate<Count> {
21-
2231
private Count(BasicColumn column) {
23-
super(column);
32+
this.column = Objects.requireNonNull(column);
33+
alias = null;
2434
}
25-
35+
36+
private Count(BasicColumn column, String alias) {
37+
this.column = Objects.requireNonNull(column);
38+
this.alias = alias;
39+
}
40+
2641
@Override
27-
protected String render(String columnName) {
28-
return "count(" + columnName + ")"; //$NON-NLS-1$ //$NON-NLS-2$
42+
public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
43+
return "count(" + column.renderWithTableAlias(tableAliasCalculator) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
2944
}
3045

3146
@Override
32-
protected Count copy() {
33-
return new Count(column);
47+
public Optional<String> alias() {
48+
return Optional.ofNullable(alias);
3449
}
35-
50+
51+
@Override
52+
public Count as(String alias) {
53+
return new Count(column, alias);
54+
}
55+
56+
@Override
57+
public Optional<JDBCType> jdbcType() {
58+
return Optional.of(JDBCType.BIGINT);
59+
}
60+
3661
public static Count of(BasicColumn column) {
3762
return new Count(column);
3863
}

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

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,29 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.aggregate;
1717

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

20-
import org.mybatis.dynamic.sql.BasicColumn;
21+
import org.mybatis.dynamic.sql.BindableColumn;
2122
import org.mybatis.dynamic.sql.render.TableAliasCalculator;
2223

2324
/**
2425
* CountAll seems like the other aggregates, but it is special because there is no column.
2526
* Rather than dealing with a useless and confusing abstraction, we simply implement
26-
* BasicColumn directly.
27+
* BindableColumn directly.
2728
*
2829
* @author Jeff Butler
2930
*/
30-
public class CountAll implements BasicColumn {
31+
public class CountAll implements BindableColumn<Long> {
3132

32-
private String alias;
33+
private final String alias;
3334

3435
public CountAll() {
35-
super();
36+
alias = null;
37+
}
38+
39+
private CountAll(String alias) {
40+
this.alias = alias;
3641
}
3742

3843
@Override
@@ -47,8 +52,11 @@ public Optional<String> alias() {
4752

4853
@Override
4954
public CountAll as(String alias) {
50-
CountAll copy = new CountAll();
51-
copy.alias = alias;
52-
return copy;
55+
return new CountAll(alias);
56+
}
57+
58+
@Override
59+
public Optional<JDBCType> jdbcType() {
60+
return Optional.of(JDBCType.BIGINT);
5361
}
5462
}

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

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,24 +15,49 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.aggregate;
1717

18+
import java.sql.JDBCType;
19+
import java.util.Objects;
20+
import java.util.Optional;
21+
1822
import org.mybatis.dynamic.sql.BasicColumn;
23+
import org.mybatis.dynamic.sql.BindableColumn;
24+
import org.mybatis.dynamic.sql.render.TableAliasCalculator;
25+
26+
public class CountDistinct implements BindableColumn<Long> {
27+
28+
private final BasicColumn column;
29+
private final String alias;
1930

20-
public class CountDistinct extends AbstractAggregate<CountDistinct> {
21-
2231
private CountDistinct(BasicColumn column) {
23-
super(column);
32+
this.column = Objects.requireNonNull(column);
33+
alias = null;
2434
}
25-
35+
36+
private CountDistinct(BasicColumn column, String alias) {
37+
this.column = Objects.requireNonNull(column);
38+
this.alias = alias;
39+
}
40+
2641
@Override
27-
protected String render(String columnName) {
28-
return "count(distinct " + columnName + ")"; //$NON-NLS-1$ //$NON-NLS-2$
42+
public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
43+
return "count(distinct " + column.renderWithTableAlias(tableAliasCalculator) + ")"; //$NON-NLS-1$ //$NON-NLS-2$
2944
}
3045

3146
@Override
32-
protected CountDistinct copy() {
33-
return new CountDistinct(column);
47+
public Optional<String> alias() {
48+
return Optional.ofNullable(alias);
3449
}
35-
50+
51+
@Override
52+
public CountDistinct as(String alias) {
53+
return new CountDistinct(column, alias);
54+
}
55+
56+
@Override
57+
public Optional<JDBCType> jdbcType() {
58+
return Optional.of(JDBCType.BIGINT);
59+
}
60+
3661
public static CountDistinct of(BasicColumn column) {
3762
return new CountDistinct(column);
3863
}

0 commit comments

Comments
 (0)