Skip to content

Add Support for "exists"and "not exists" in "where" Clauses #296

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 32 commits into from
Dec 2, 2020
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
820ac22
Make SqlCriterion abstract so we can add support for exists
jeffgbutler Nov 21, 2020
94b069d
Add ExistsCriterion and renderer
jeffgbutler Nov 22, 2020
161f069
First working exists test
jeffgbutler Nov 22, 2020
7a9ad99
Basic support for not exists
jeffgbutler Nov 22, 2020
ec98ec7
Basic support for not exists
jeffgbutler Nov 23, 2020
d21764c
Remove unnecessary if statement
jeffgbutler Nov 23, 2020
7756e00
Merge branch 'master' into exists-infrastructure
jeffgbutler Nov 30, 2020
dd43a85
Merge conflict resolution
jeffgbutler Nov 30, 2020
d66bced
Example Length Function
jeffgbutler Nov 29, 2020
cca11d2
Initial refactor of where support
jeffgbutler Nov 30, 2020
3906447
More merge cleanup
jeffgbutler Nov 30, 2020
84a6523
More merge cleanup
jeffgbutler Nov 30, 2020
7784536
Remove some useless code
jeffgbutler Nov 27, 2020
688cdc8
Kotlin Polishing
jeffgbutler Nov 29, 2020
84361fd
Better Kotlin Pattern
jeffgbutler Nov 29, 2020
d6604f0
Checkstyle and Sonar Updates
jeffgbutler Nov 30, 2020
dbea6c6
Better name for the base where support class
jeffgbutler Nov 30, 2020
dc782d5
Merge conflict resolution
jeffgbutler Nov 30, 2020
075ce9d
Merge remote-tracking branch 'origin/exists-infrastructure' into exis…
jeffgbutler Nov 30, 2020
83617c2
More merge cleanup
jeffgbutler Nov 30, 2020
1ad37ec
Better exists functions
jeffgbutler Nov 30, 2020
af20a93
Copyrights and polishing
jeffgbutler Nov 30, 2020
e2a80c2
Polishing
jeffgbutler Nov 30, 2020
fa716e9
Coverage
jeffgbutler Nov 30, 2020
9c3b876
Add exists to Kotlin DSL
jeffgbutler Nov 30, 2020
d39fb6f
Detekt Updates
jeffgbutler Nov 30, 2020
7149bee
Checkstyle updates
jeffgbutler Nov 30, 2020
07cfa81
Add Exists support in the CriteriaCollector
jeffgbutler Nov 30, 2020
0ff6592
Add Exists support in the standalone where clause and top level conne…
jeffgbutler Nov 30, 2020
827a6ed
Documentation
jeffgbutler Dec 1, 2020
034c72e
Finally a better name
jeffgbutler Dec 1, 2020
6f018e2
Add PR link to changelog
jeffgbutler Dec 1, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove unnecessary if statement
  • Loading branch information
jeffgbutler committed Nov 23, 2020
commit d21764cdf49f425fa2666bbecbbfc91c4332ec8c
4 changes: 2 additions & 2 deletions src/main/java/org/mybatis/dynamic/sql/SqlBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -329,11 +329,11 @@ static Upper upper(BindableColumn<String> column) {

// conditions for all data types
static Exists exists(Buildable<SelectModel> selectModelBuilder) {
return new Exists.Builder().withSelectModelBuilder(selectModelBuilder).build();
return Exists.exists().withSelectModelBuilder(selectModelBuilder).build();
}

static Exists notExists(Buildable<SelectModel> selectModelBuilder) {
return new Exists.Builder().withSelectModelBuilder(selectModelBuilder).isNotExists().build();
return Exists.notExists().withSelectModelBuilder(selectModelBuilder).build();
}

static <T> IsNull<T> isNull() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@
public interface SqlCriterionVisitor<R> {
<T> R visit(ColumnAndConditionCriterion<T> criterion);

R visit(ExistsCriterion existsCriterion);
R visit(ExistsCriterion criterion);
}
22 changes: 15 additions & 7 deletions src/main/java/org/mybatis/dynamic/sql/where/condition/Exists.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,40 @@

public class Exists {
private final Buildable<SelectModel> selectModelBuilder;
private final boolean isNotExists;
private final String operator;

private Exists(Builder builder) {
this.selectModelBuilder = Objects.requireNonNull(builder.selectModelBuilder);
this.isNotExists = builder.isNotExists;
this.operator = builder.operator;
}

public boolean isNotExists() {
return isNotExists;
public String operator() {
return operator;
}

public Buildable<SelectModel> selectModelBuilder() {
return selectModelBuilder;
}

public static Builder exists() {
return new Builder();
}

public static Builder notExists() {
return new Builder().notExists();
}

public static class Builder {
private Buildable<SelectModel> selectModelBuilder;
private boolean isNotExists;
private String operator = "exists"; //$NON-NLS-1$

public Builder withSelectModelBuilder(Buildable<SelectModel> selectModelBuilder) {
this.selectModelBuilder = selectModelBuilder;
return this;
}

public Builder isNotExists() {
isNotExists = true;
private Builder notExists() {
operator = "not exists"; //$NON-NLS-1$
return this;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,13 +84,11 @@ public Optional<RenderedCriterion> visit(ExistsCriterion criterion) {
.build()
.render();

String prefix = "exists ("; //$NON-NLS-1$
if (exists.isNotExists()) {
prefix = "not " + prefix; //$NON-NLS-1$
}
String fragment = exists.operator() + " (" //$NON-NLS-1$
+ selectStatement.getSelectStatement() + ")"; //$NON-NLS-1$

FragmentAndParameters initialCondition = FragmentAndParameters
.withFragment(prefix + selectStatement.getSelectStatement() + ")") //$NON-NLS-1$
.withFragment(fragment)
.withParameters(selectStatement.getParameters())
.build();

Expand Down