Skip to content

Commit bc4beca

Browse files
committed
Rename VisitableCondition to RenderableCondition
Conditions are no longer rendered via a Visitor, so the new name makes more sense
1 parent 0cfecd7 commit bc4beca

25 files changed

+95
-110
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,10 @@ Runtime behavior changes:
100100
these concepts for different databases it simply adds known clauses to a generated SQL statement. You should always
101101
test to make sure these functions work in your target database. Currently, we support, and test, the options
102102
supported by PostgreSQL.
103+
- Rendering for all the conditions (isEqualTo, etc.) has changed. This should be transparent to most users unless you
104+
have coded a direct implementation of `VisitableCondition`. The change makes it easier to code custom conditions that
105+
are not supported by the library out of the box. The statement renderers now call methods `renderCondition` and
106+
`renderLeftColumn` that you can override to implement any rendering you need.
103107

104108
## Release 1.5.2 - June 3, 2024
105109

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import org.mybatis.dynamic.sql.render.RenderingContext;
2121
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2222

23-
public abstract class AbstractColumnComparisonCondition<T> implements VisitableCondition<T> {
23+
public abstract class AbstractColumnComparisonCondition<T> implements RenderableCondition<T> {
2424

2525
protected final BasicColumn rightColumn;
2626

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2929
import org.mybatis.dynamic.sql.util.FragmentCollector;
3030

31-
public abstract class AbstractListValueCondition<T> implements VisitableCondition<T> {
31+
public abstract class AbstractListValueCondition<T> implements RenderableCondition<T> {
3232
protected final Collection<T> values;
3333

3434
protected AbstractListValueCondition(Collection<T> values) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import org.mybatis.dynamic.sql.render.RenderingContext;
2222
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2323

24-
public abstract class AbstractNoValueCondition<T> implements VisitableCondition<T> {
24+
public abstract class AbstractNoValueCondition<T> implements RenderableCondition<T> {
2525

2626
protected <S extends AbstractNoValueCondition<?>> S filterSupport(BooleanSupplier booleanSupplier,
2727
Supplier<S> emptySupplier, S self) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
import org.mybatis.dynamic.sql.render.RenderingContext;
2626
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2727

28-
public abstract class AbstractSingleValueCondition<T> implements VisitableCondition<T> {
28+
public abstract class AbstractSingleValueCondition<T> implements RenderableCondition<T> {
2929
protected final T value;
3030

3131
protected AbstractSingleValueCondition(T value) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import org.mybatis.dynamic.sql.util.Buildable;
2222
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2323

24-
public abstract class AbstractSubselectCondition<T> implements VisitableCondition<T> {
24+
public abstract class AbstractSubselectCondition<T> implements RenderableCondition<T> {
2525
private final SelectModel selectModel;
2626

2727
protected AbstractSubselectCondition(Buildable<SelectModel> selectModelBuilder) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.mybatis.dynamic.sql.render.RenderingContext;
2828
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2929

30-
public abstract class AbstractTwoValueCondition<T> implements VisitableCondition<T> {
30+
public abstract class AbstractTwoValueCondition<T> implements RenderableCondition<T> {
3131
protected final T value1;
3232
protected final T value2;
3333

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
public class ColumnAndConditionCriterion<T> extends SqlCriterion {
2323
private final BindableColumn<T> column;
24-
private final VisitableCondition<T> condition;
24+
private final RenderableCondition<T> condition;
2525

2626
private ColumnAndConditionCriterion(Builder<T> builder) {
2727
super(builder);
@@ -33,7 +33,7 @@ public BindableColumn<T> column() {
3333
return column;
3434
}
3535

36-
public VisitableCondition<T> condition() {
36+
public RenderableCondition<T> condition() {
3737
return condition;
3838
}
3939

@@ -48,14 +48,14 @@ public static <T> Builder<T> withColumn(BindableColumn<T> column) {
4848

4949
public static class Builder<T> extends AbstractBuilder<Builder<T>> {
5050
private @Nullable BindableColumn<T> column;
51-
private @Nullable VisitableCondition<T> condition;
51+
private @Nullable RenderableCondition<T> condition;
5252

5353
public Builder<T> withColumn(BindableColumn<T> column) {
5454
this.column = column;
5555
return this;
5656
}
5757

58-
public Builder<T> withCondition(VisitableCondition<T> condition) {
58+
public Builder<T> withCondition(RenderableCondition<T> condition) {
5959
this.condition = condition;
6060
return this;
6161
}

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ static WhereDSL.StandaloneWhereFinisher where() {
250250
return new WhereDSL().where();
251251
}
252252

253-
static <T> WhereDSL.StandaloneWhereFinisher where(BindableColumn<T> column, VisitableCondition<T> condition,
253+
static <T> WhereDSL.StandaloneWhereFinisher where(BindableColumn<T> column, RenderableCondition<T> condition,
254254
AndOrCriteriaGroup... subCriteria) {
255255
return new WhereDSL().where(column, condition, subCriteria);
256256
}
@@ -263,7 +263,7 @@ static WhereDSL.StandaloneWhereFinisher where(ExistsPredicate existsPredicate, A
263263
return new WhereDSL().where(existsPredicate, subCriteria);
264264
}
265265

266-
static <T> HavingDSL.StandaloneHavingFinisher having(BindableColumn<T> column, VisitableCondition<T> condition,
266+
static <T> HavingDSL.StandaloneHavingFinisher having(BindableColumn<T> column, RenderableCondition<T> condition,
267267
AndOrCriteriaGroup... subCriteria) {
268268
return new HavingDSL().having(column, condition, subCriteria);
269269
}
@@ -273,12 +273,12 @@ static HavingDSL.StandaloneHavingFinisher having(SqlCriterion initialCriterion,
273273
}
274274

275275
// where condition connectors
276-
static <T> CriteriaGroup group(BindableColumn<T> column, VisitableCondition<T> condition,
276+
static <T> CriteriaGroup group(BindableColumn<T> column, RenderableCondition<T> condition,
277277
AndOrCriteriaGroup... subCriteria) {
278278
return group(column, condition, Arrays.asList(subCriteria));
279279
}
280280

281-
static <T> CriteriaGroup group(BindableColumn<T> column, VisitableCondition<T> condition,
281+
static <T> CriteriaGroup group(BindableColumn<T> column, RenderableCondition<T> condition,
282282
List<AndOrCriteriaGroup> subCriteria) {
283283
return new CriteriaGroup.Builder()
284284
.withInitialCriterion(new ColumnAndConditionCriterion.Builder<T>().withColumn(column)
@@ -316,12 +316,12 @@ static CriteriaGroup group(List<AndOrCriteriaGroup> subCriteria) {
316316
.build();
317317
}
318318

319-
static <T> NotCriterion not(BindableColumn<T> column, VisitableCondition<T> condition,
319+
static <T> NotCriterion not(BindableColumn<T> column, RenderableCondition<T> condition,
320320
AndOrCriteriaGroup... subCriteria) {
321321
return not(column, condition, Arrays.asList(subCriteria));
322322
}
323323

324-
static <T> NotCriterion not(BindableColumn<T> column, VisitableCondition<T> condition,
324+
static <T> NotCriterion not(BindableColumn<T> column, RenderableCondition<T> condition,
325325
List<AndOrCriteriaGroup> subCriteria) {
326326
return new NotCriterion.Builder()
327327
.withInitialCriterion(new ColumnAndConditionCriterion.Builder<T>().withColumn(column)
@@ -359,7 +359,7 @@ static NotCriterion not(List<AndOrCriteriaGroup> subCriteria) {
359359
.build();
360360
}
361361

362-
static <T> AndOrCriteriaGroup or(BindableColumn<T> column, VisitableCondition<T> condition,
362+
static <T> AndOrCriteriaGroup or(BindableColumn<T> column, RenderableCondition<T> condition,
363363
AndOrCriteriaGroup... subCriteria) {
364364
return new AndOrCriteriaGroup.Builder()
365365
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column)
@@ -394,7 +394,7 @@ static AndOrCriteriaGroup or(List<AndOrCriteriaGroup> subCriteria) {
394394
.build();
395395
}
396396

397-
static <T> AndOrCriteriaGroup and(BindableColumn<T> column, VisitableCondition<T> condition,
397+
static <T> AndOrCriteriaGroup and(BindableColumn<T> column, RenderableCondition<T> condition,
398398
AndOrCriteriaGroup... subCriteria) {
399399
return new AndOrCriteriaGroup.Builder()
400400
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column)
@@ -430,7 +430,7 @@ static AndOrCriteriaGroup and(List<AndOrCriteriaGroup> subCriteria) {
430430
}
431431

432432
// join support
433-
static <T> ColumnAndConditionCriterion<T> on(BindableColumn<T> joinColumn, VisitableCondition<T> joinCondition) {
433+
static <T> ColumnAndConditionCriterion<T> on(BindableColumn<T> joinColumn, RenderableCondition<T> joinCondition) {
434434
return ColumnAndConditionCriterion.withColumn(joinColumn)
435435
.withCondition(joinCondition)
436436
.build();
@@ -506,7 +506,7 @@ static Sum<Object> sum(BasicColumn column) {
506506
return Sum.of(column);
507507
}
508508

509-
static <T> Sum<T> sum(BindableColumn<T> column, VisitableCondition<T> condition) {
509+
static <T> Sum<T> sum(BindableColumn<T> column, RenderableCondition<T> condition) {
510510
return Sum.of(column, condition);
511511
}
512512

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

Lines changed: 17 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,41 +16,21 @@
1616
package org.mybatis.dynamic.sql;
1717

1818
import org.mybatis.dynamic.sql.render.RenderingContext;
19-
import org.mybatis.dynamic.sql.util.FragmentAndParameters;
2019

21-
@FunctionalInterface
22-
public interface VisitableCondition<T> {
23-
FragmentAndParameters renderCondition(RenderingContext renderingContext, BindableColumn<T> leftColumn);
24-
25-
default FragmentAndParameters renderLeftColumn(RenderingContext renderingContext, BindableColumn<T> leftColumn) {
26-
return leftColumn.alias()
27-
.map(FragmentAndParameters::fromFragment)
28-
.orElseGet(() -> leftColumn.render(renderingContext));
29-
}
30-
31-
/**
32-
* Subclasses can override this to inform the renderer if the condition should not be included
33-
* in the rendered SQL. Typically, conditions will not render if they are empty.
34-
*
35-
* @return true if the condition should render.
36-
*/
37-
default boolean shouldRender(RenderingContext renderingContext) {
38-
return !isEmpty();
39-
}
40-
41-
/**
42-
* Subclasses can override this to indicate whether the condition is considered empty. This is primarily used in
43-
* map and filter operations - the map and filter functions will not be applied if the condition is empty.
44-
*
45-
* @return true if the condition is empty.
46-
*/
47-
default boolean isEmpty() {
48-
return false;
49-
}
50-
51-
/**
52-
* This method will be called during rendering when {@link VisitableCondition#shouldRender(RenderingContext)}
53-
* returns false.
54-
*/
55-
default void renderingSkipped() {}
56-
}
20+
/**
21+
* Deprecated interface.
22+
*
23+
* <p>Conditions are no longer rendered with a visitor, so the name is misleading. This change makes it far easier
24+
* to implement custom conditions for functionality not supplied out of the box by the library.
25+
*
26+
* <p>If you created any direct implementations of this interface, you will need to change the rendering functions.
27+
* The library now calls {@link RenderableCondition#renderCondition(RenderingContext, BindableColumn)} and
28+
* {@link RenderableCondition#renderLeftColumn(RenderingContext, BindableColumn)} instead of the previous methods
29+
* like <code>operator</code>, <code>value</code>, etc. Subclasses of the supplied abstract conditions should continue
30+
* to function as before.
31+
*
32+
* @param <T> the Java type related to the column this condition relates to. Used primarily for compiler type checking
33+
* @deprecated since 2.0.0. Please use {@link RenderableCondition} instead.
34+
*/
35+
@Deprecated(since = "2.0.0", forRemoval = true)
36+
public interface VisitableCondition<T> extends RenderableCondition<T> { }

0 commit comments

Comments
 (0)