Skip to content

Commit 7f5635f

Browse files
authored
Merge pull request #266 from jeffgbutler/immutable-functions
Refactoring - remove some useless abstractions, and add consistency
2 parents 9a18d5f + ff31381 commit 7f5635f

19 files changed

+137
-33
lines changed

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

+12-12
Original file line numberDiff line numberDiff line change
@@ -359,22 +359,22 @@ static StringConstant stringConstant(String constant) {
359359
// functions
360360
static <T extends Number> Add<T> add(BindableColumn<T> firstColumn, BasicColumn secondColumn,
361361
BasicColumn... subsequentColumns) {
362-
return Add.of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
362+
return Add.of(firstColumn, secondColumn, subsequentColumns);
363363
}
364364

365365
static <T extends Number> Divide<T> divide(BindableColumn<T> firstColumn, BasicColumn secondColumn,
366366
BasicColumn... subsequentColumns) {
367-
return Divide.of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
367+
return Divide.of(firstColumn, secondColumn, subsequentColumns);
368368
}
369369

370370
static <T extends Number> Multiply<T> multiply(BindableColumn<T> firstColumn, BasicColumn secondColumn,
371371
BasicColumn... subsequentColumns) {
372-
return Multiply.of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
372+
return Multiply.of(firstColumn, secondColumn, subsequentColumns);
373373
}
374374

375375
static <T extends Number> Subtract<T> subtract(BindableColumn<T> firstColumn, BasicColumn secondColumn,
376376
BasicColumn... subsequentColumns) {
377-
return Subtract.of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
377+
return Subtract.of(firstColumn, secondColumn, subsequentColumns);
378378
}
379379

380380
static <T> Concatenate<T> concatenate(BindableColumn<T> firstColumn, BasicColumn secondColumn,
@@ -555,7 +555,7 @@ static <T> IsLessThanOrEqualToWhenPresent<T> isLessThanOrEqualToWhenPresent(Supp
555555

556556
@SafeVarargs
557557
static <T> IsIn<T> isIn(T...values) {
558-
return isIn(Arrays.asList(values));
558+
return IsIn.of(values);
559559
}
560560

561561
static <T> IsIn<T> isIn(Collection<T> values) {
@@ -568,7 +568,7 @@ static <T> IsInWithSubselect<T> isIn(Buildable<SelectModel> selectModelBuilder)
568568

569569
@SafeVarargs
570570
static <T> IsInWhenPresent<T> isInWhenPresent(T...values) {
571-
return isInWhenPresent(Arrays.asList(values));
571+
return IsInWhenPresent.of(values);
572572
}
573573

574574
static <T> IsInWhenPresent<T> isInWhenPresent(Collection<T> values) {
@@ -577,7 +577,7 @@ static <T> IsInWhenPresent<T> isInWhenPresent(Collection<T> values) {
577577

578578
@SafeVarargs
579579
static <T> IsNotIn<T> isNotIn(T...values) {
580-
return isNotIn(Arrays.asList(values));
580+
return IsNotIn.of(values);
581581
}
582582

583583
static <T> IsNotIn<T> isNotIn(Collection<T> values) {
@@ -590,7 +590,7 @@ static <T> IsNotInWithSubselect<T> isNotIn(Buildable<SelectModel> selectModelBui
590590

591591
@SafeVarargs
592592
static <T> IsNotInWhenPresent<T> isNotInWhenPresent(T...values) {
593-
return isNotInWhenPresent(Arrays.asList(values));
593+
return IsNotInWhenPresent.of(values);
594594
}
595595

596596
static <T> IsNotInWhenPresent<T> isNotInWhenPresent(Collection<T> values) {
@@ -705,31 +705,31 @@ static IsNotLikeCaseInsensitiveWhenPresent isNotLikeCaseInsensitiveWhenPresent(S
705705
}
706706

707707
static IsInCaseInsensitive isInCaseInsensitive(String...values) {
708-
return isInCaseInsensitive(Arrays.asList(values));
708+
return IsInCaseInsensitive.of(values);
709709
}
710710

711711
static IsInCaseInsensitive isInCaseInsensitive(Collection<String> values) {
712712
return IsInCaseInsensitive.of(values);
713713
}
714714

715715
static IsInCaseInsensitiveWhenPresent isInCaseInsensitiveWhenPresent(String...values) {
716-
return isInCaseInsensitiveWhenPresent(Arrays.asList(values));
716+
return IsInCaseInsensitiveWhenPresent.of(values);
717717
}
718718

719719
static IsInCaseInsensitiveWhenPresent isInCaseInsensitiveWhenPresent(Collection<String> values) {
720720
return IsInCaseInsensitiveWhenPresent.of(values);
721721
}
722722

723723
static IsNotInCaseInsensitive isNotInCaseInsensitive(String...values) {
724-
return isNotInCaseInsensitive(Arrays.asList(values));
724+
return IsNotInCaseInsensitive.of(values);
725725
}
726726

727727
static IsNotInCaseInsensitive isNotInCaseInsensitive(Collection<String> values) {
728728
return IsNotInCaseInsensitive.of(values);
729729
}
730730

731731
static IsNotInCaseInsensitiveWhenPresent isNotInCaseInsensitiveWhenPresent(String...values) {
732-
return isNotInCaseInsensitiveWhenPresent(Arrays.asList(values));
732+
return IsNotInCaseInsensitiveWhenPresent.of(values);
733733
}
734734

735735
static IsNotInCaseInsensitiveWhenPresent isNotInCaseInsensitiveWhenPresent(Collection<String> values) {

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

+5-10
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,14 @@
2323
* Count functions are implemented differently than the other aggregates. This is primarily to preserve
2424
* backwards compatibility. Count functions are configured as BindableColumns of type Long
2525
* as it is assumed that the count functions always return a number.
26-
*
27-
* @param <T> the subtype of this class
2826
*/
29-
public abstract class AbstractCount<T extends AbstractCount<T>> implements BindableColumn<Long> {
27+
public abstract class AbstractCount implements BindableColumn<Long> {
3028
private final String alias;
3129

30+
protected AbstractCount() {
31+
this(null);
32+
}
33+
3234
protected AbstractCount(String alias) {
3335
this.alias = alias;
3436
}
@@ -37,11 +39,4 @@ protected AbstractCount(String alias) {
3739
public Optional<String> alias() {
3840
return Optional.ofNullable(alias);
3941
}
40-
41-
@Override
42-
public T as(String alias) {
43-
return copyWithAlias(alias);
44-
}
45-
46-
protected abstract T copyWithAlias(String alias);
4742
}

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

+7-3
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@
2020
import org.mybatis.dynamic.sql.BasicColumn;
2121
import org.mybatis.dynamic.sql.render.TableAliasCalculator;
2222

23-
public class Count extends AbstractCount<Count> {
23+
public class Count extends AbstractCount {
2424

2525
private final BasicColumn column;
2626

27+
private Count(BasicColumn column) {
28+
this.column = Objects.requireNonNull(column);
29+
}
30+
2731
private Count(BasicColumn column, String alias) {
2832
super(alias);
2933
this.column = Objects.requireNonNull(column);
@@ -35,11 +39,11 @@ public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
3539
}
3640

3741
@Override
38-
protected Count copyWithAlias(String alias) {
42+
public Count as(String alias) {
3943
return new Count(column, alias);
4044
}
4145

4246
public static Count of(BasicColumn column) {
43-
return new Count(column, null);
47+
return new Count(column);
4448
}
4549
}

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717

1818
import org.mybatis.dynamic.sql.render.TableAliasCalculator;
1919

20-
public class CountAll extends AbstractCount<CountAll> {
20+
public class CountAll extends AbstractCount {
2121

2222
public CountAll() {
23-
super(null);
23+
super();
2424
}
2525

2626
private CountAll(String alias) {
@@ -33,7 +33,7 @@ public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
3333
}
3434

3535
@Override
36-
protected CountAll copyWithAlias(String alias) {
36+
public CountAll as(String alias) {
3737
return new CountAll(alias);
3838
}
3939
}

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

+7-3
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@
2020
import org.mybatis.dynamic.sql.BasicColumn;
2121
import org.mybatis.dynamic.sql.render.TableAliasCalculator;
2222

23-
public class CountDistinct extends AbstractCount<CountDistinct> {
23+
public class CountDistinct extends AbstractCount {
2424

2525
private final BasicColumn column;
2626

27+
private CountDistinct(BasicColumn column) {
28+
this.column = Objects.requireNonNull(column);
29+
}
30+
2731
private CountDistinct(BasicColumn column, String alias) {
2832
super(alias);
2933
this.column = Objects.requireNonNull(column);
@@ -35,11 +39,11 @@ public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
3539
}
3640

3741
@Override
38-
public CountDistinct copyWithAlias(String alias) {
42+
public CountDistinct as(String alias) {
3943
return new CountDistinct(column, alias);
4044
}
4145

4246
public static CountDistinct of(BasicColumn column) {
43-
return new CountDistinct(column, null);
47+
return new CountDistinct(column);
4448
}
4549
}

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

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.function;
1717

18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
import org.mybatis.dynamic.sql.BasicColumn;
@@ -32,6 +33,11 @@ protected Add<T> copy() {
3233
return new Add<>(column, secondColumn, subsequentColumns);
3334
}
3435

36+
public static <T extends Number> Add<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
37+
BasicColumn... subsequentColumns) {
38+
return of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
39+
}
40+
3541
public static <T extends Number> Add<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
3642
List<BasicColumn> subsequentColumns) {
3743
return new Add<>(firstColumn, secondColumn, subsequentColumns);

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

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.function;
1717

18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
import org.mybatis.dynamic.sql.BasicColumn;
@@ -32,6 +33,11 @@ protected Divide<T> copy() {
3233
return new Divide<>(column, secondColumn, subsequentColumns);
3334
}
3435

36+
public static <T extends Number> Divide<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
37+
BasicColumn... subsequentColumns) {
38+
return of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
39+
}
40+
3541
public static <T extends Number> Divide<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
3642
List<BasicColumn> subsequentColumns) {
3743
return new Divide<>(firstColumn, secondColumn, subsequentColumns);

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

+6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.function;
1717

18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
import org.mybatis.dynamic.sql.BasicColumn;
@@ -32,6 +33,11 @@ protected Multiply<T> copy() {
3233
return new Multiply<>(column, secondColumn, subsequentColumns);
3334
}
3435

36+
public static <T extends Number> Multiply<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
37+
BasicColumn... subsequentColumns) {
38+
return of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
39+
}
40+
3541
public static <T extends Number> Multiply<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
3642
List<BasicColumn> subsequentColumns) {
3743
return new Multiply<>(firstColumn, secondColumn, subsequentColumns);

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

+6-1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ public String renderWithTableAlias(TableAliasCalculator tableAliasCalculator) {
5959

6060
public static <T> OperatorFunction<T> of(String operator, BindableColumn<T> firstColumn, BasicColumn secondColumn,
6161
BasicColumn... subsequentColumns) {
62-
return new OperatorFunction<>(operator, firstColumn, secondColumn, Arrays.asList(subsequentColumns));
62+
return of(operator, firstColumn, secondColumn, Arrays.asList(subsequentColumns));
63+
}
64+
65+
public static <T> OperatorFunction<T> of(String operator, BindableColumn<T> firstColumn, BasicColumn secondColumn,
66+
List<BasicColumn> subsequentColumns) {
67+
return new OperatorFunction<>(operator, firstColumn, secondColumn, subsequentColumns);
6368
}
6469
}

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

+7-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.select.function;
1717

18+
import java.util.Arrays;
1819
import java.util.List;
1920

2021
import org.mybatis.dynamic.sql.BasicColumn;
@@ -33,7 +34,12 @@ protected Subtract<T> copy() {
3334
}
3435

3536
public static <T extends Number> Subtract<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
36-
List<BasicColumn> subsequentColumns) {
37+
BasicColumn... subsequentColumns) {
38+
return of(firstColumn, secondColumn, Arrays.asList(subsequentColumns));
39+
}
40+
41+
public static <T extends Number> Subtract<T> of(BindableColumn<T> firstColumn, BasicColumn secondColumn,
42+
List<BasicColumn> subsequentColumns) {
3743
return new Subtract<>(firstColumn, secondColumn, subsequentColumns);
3844
}
3945
}

src/main/java/org/mybatis/dynamic/sql/where/condition/IsIn.java

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceAfter;
1919

20+
import java.util.Arrays;
2021
import java.util.Collection;
2122
import java.util.function.UnaryOperator;
2223
import java.util.stream.Collectors;
@@ -64,6 +65,11 @@ public IsIn<T> then(UnaryOperator<Stream<T>> valueStreamTransformer) {
6465
.build();
6566
}
6667

68+
@SafeVarargs
69+
public static <T> IsIn<T> of(T... values) {
70+
return of(Arrays.asList(values));
71+
}
72+
6773
public static <T> IsIn<T> of(Collection<T> values) {
6874
return new Builder<T>().withValues(values).build();
6975
}

src/main/java/org/mybatis/dynamic/sql/where/condition/IsInCaseInsensitive.java

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.where.condition;
1717

18+
import java.util.Arrays;
1819
import java.util.Collection;
1920
import java.util.stream.Collectors;
2021
import java.util.stream.Stream;
@@ -44,6 +45,10 @@ public IsInCaseInsensitive withListEmptyCallback(Callback callback) {
4445
.build();
4546
}
4647

48+
public static IsInCaseInsensitive of(String... values) {
49+
return of(Arrays.asList(values));
50+
}
51+
4752
public static IsInCaseInsensitive of(Collection<String> values) {
4853
return new Builder()
4954
.withValues(values)

src/main/java/org/mybatis/dynamic/sql/where/condition/IsInCaseInsensitiveWhenPresent.java

+5
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
*/
1616
package org.mybatis.dynamic.sql.where.condition;
1717

18+
import java.util.Arrays;
1819
import java.util.Collection;
1920
import java.util.Objects;
2021
import java.util.stream.Collectors;
@@ -45,6 +46,10 @@ public IsInCaseInsensitiveWhenPresent withListEmptyCallback(Callback callback) {
4546
.build();
4647
}
4748

49+
public static IsInCaseInsensitiveWhenPresent of(String... values) {
50+
return of(Arrays.asList(values));
51+
}
52+
4853
public static IsInCaseInsensitiveWhenPresent of(Collection<String> values) {
4954
return new Builder()
5055
.withValues(values)

src/main/java/org/mybatis/dynamic/sql/where/condition/IsInWhenPresent.java

+6
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceAfter;
1919

20+
import java.util.Arrays;
2021
import java.util.Collection;
2122
import java.util.Objects;
2223
import java.util.stream.Collectors;
@@ -46,6 +47,11 @@ public IsInWhenPresent<T> withListEmptyCallback(Callback callback) {
4647
.build();
4748
}
4849

50+
@SafeVarargs
51+
public static <T> IsInWhenPresent<T> of(T... values) {
52+
return of(Arrays.asList(values));
53+
}
54+
4955
public static <T> IsInWhenPresent<T> of(Collection<T> values) {
5056
return new Builder<T>()
5157
.withValues(values)

0 commit comments

Comments
 (0)