Skip to content

Add Alternative Join Construction Methods #132

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 2 commits into from
Aug 20, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
16 changes: 12 additions & 4 deletions src/main/java/org/mybatis/dynamic/sql/SqlBuilder.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,10 @@
import org.mybatis.dynamic.sql.select.function.Substring;
import org.mybatis.dynamic.sql.select.function.Subtract;
import org.mybatis.dynamic.sql.select.function.Upper;
import org.mybatis.dynamic.sql.select.join.AndJoinCriterion;
import org.mybatis.dynamic.sql.select.join.EqualTo;
import org.mybatis.dynamic.sql.select.join.JoinCondition;
import org.mybatis.dynamic.sql.select.join.JoinCriterion;
import org.mybatis.dynamic.sql.select.join.OnJoinCriterion;
import org.mybatis.dynamic.sql.update.UpdateDSL;
import org.mybatis.dynamic.sql.update.UpdateModel;
import org.mybatis.dynamic.sql.util.Buildable;
Expand Down Expand Up @@ -191,10 +192,17 @@ static <T> SqlCriterion<T> and(BindableColumn<T> column, VisitableCondition<T> c
}

// join support
static JoinCriterion and(BasicColumn joinColumn, JoinCondition joinCondition) {
return JoinCriterion.withJoinColumn(joinColumn)
static AndJoinCriterion and(BasicColumn joinColumn, JoinCondition joinCondition) {
return new AndJoinCriterion.Builder()
.withJoinColumn(joinColumn)
.withJoinCondition(joinCondition)
.build();
}

static OnJoinCriterion on(BasicColumn joinColumn, JoinCondition joinCondition) {
return new OnJoinCriterion.Builder()
.withJoinColumn(joinColumn)
.withJoinCondition(joinCondition)
.withConnector("and") //$NON-NLS-1$
.build();
}

Expand Down
52 changes: 0 additions & 52 deletions src/main/java/org/mybatis/dynamic/sql/select/CompletableQuery.java

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,17 @@
import org.mybatis.dynamic.sql.SqlCriterion;
import org.mybatis.dynamic.sql.SqlTable;
import org.mybatis.dynamic.sql.VisitableCondition;
import org.mybatis.dynamic.sql.select.join.AndJoinCriterion;
import org.mybatis.dynamic.sql.select.join.JoinCondition;
import org.mybatis.dynamic.sql.select.join.JoinCriterion;
import org.mybatis.dynamic.sql.select.join.JoinModel;
import org.mybatis.dynamic.sql.select.join.JoinSpecification;
import org.mybatis.dynamic.sql.select.join.JoinType;
import org.mybatis.dynamic.sql.select.join.OnJoinCriterion;
import org.mybatis.dynamic.sql.util.Buildable;
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;

public class QueryExpressionDSL<R> implements CompletableQuery<R> {
public class QueryExpressionDSL<R> implements Buildable<R> {

private String connector;
private SelectDSL<R> selectDSL;
Expand All @@ -62,19 +64,16 @@ public class QueryExpressionDSL<R> implements CompletableQuery<R> {
tableAliases.put(table, tableAlias);
}

@Override
public QueryExpressionWhereBuilder where() {
whereBuilder = new QueryExpressionWhereBuilder();
return whereBuilder;
}

@Override
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition) {
whereBuilder = new QueryExpressionWhereBuilder(column, condition);
return whereBuilder;
}

@Override
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
SqlCriterion<?>...subCriteria) {
whereBuilder = new QueryExpressionWhereBuilder(column, condition, subCriteria);
Expand All @@ -95,6 +94,18 @@ public JoinSpecificationStarter join(SqlTable joinTable, String tableAlias) {
return join(joinTable);
}

public QueryExpressionDSL<R> join(SqlTable joinTable, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
addJoinSpecificationBuilder(joinTable, joinCriterion, JoinType.INNER, joinCriteria);
return this;
}

public QueryExpressionDSL<R> join(SqlTable joinTable, String tableAlias, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
tableAliases.put(joinTable, tableAlias);
return join(joinTable, joinCriterion, joinCriteria);
}

public JoinSpecificationStarter leftJoin(SqlTable joinTable) {
return new JoinSpecificationStarter(joinTable, JoinType.LEFT);
}
Expand All @@ -104,6 +115,18 @@ public JoinSpecificationStarter leftJoin(SqlTable joinTable, String tableAlias)
return leftJoin(joinTable);
}

public QueryExpressionDSL<R> leftJoin(SqlTable joinTable, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
addJoinSpecificationBuilder(joinTable, joinCriterion, JoinType.LEFT, joinCriteria);
return this;
}

public QueryExpressionDSL<R> leftJoin(SqlTable joinTable, String tableAlias, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
tableAliases.put(joinTable, tableAlias);
return leftJoin(joinTable, joinCriterion, joinCriteria);
}

public JoinSpecificationStarter rightJoin(SqlTable joinTable) {
return new JoinSpecificationStarter(joinTable, JoinType.RIGHT);
}
Expand All @@ -113,6 +136,18 @@ public JoinSpecificationStarter rightJoin(SqlTable joinTable, String tableAlias)
return rightJoin(joinTable);
}

public QueryExpressionDSL<R> rightJoin(SqlTable joinTable, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
addJoinSpecificationBuilder(joinTable, joinCriterion, JoinType.RIGHT, joinCriteria);
return this;
}

public QueryExpressionDSL<R> rightJoin(SqlTable joinTable, String tableAlias, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
tableAliases.put(joinTable, tableAlias);
return rightJoin(joinTable, joinCriterion, joinCriteria);
}

public JoinSpecificationStarter fullJoin(SqlTable joinTable) {
return new JoinSpecificationStarter(joinTable, JoinType.FULL);
}
Expand All @@ -122,13 +157,32 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
return fullJoin(joinTable);
}

@Override
public QueryExpressionDSL<R> fullJoin(SqlTable joinTable, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
addJoinSpecificationBuilder(joinTable, joinCriterion, JoinType.FULL, joinCriteria);
return this;
}

public QueryExpressionDSL<R> fullJoin(SqlTable joinTable, String tableAlias, OnJoinCriterion joinCriterion,
AndJoinCriterion...joinCriteria) {
tableAliases.put(joinTable, tableAlias);
return fullJoin(joinTable, joinCriterion, joinCriteria);
}

private void addJoinSpecificationBuilder(SqlTable joinTable, OnJoinCriterion joinCriterion, JoinType joinType,
AndJoinCriterion...joinCriteria) {
joinSpecificationBuilders.add(new JoinSpecification.Builder()
.withJoinTable(joinTable)
.withJoinType(joinType)
.withJoinCriterion(joinCriterion)
.withJoinCriteria(Arrays.asList(joinCriteria)));
}

public GroupByFinisher groupBy(BasicColumn...columns) {
groupByModel = GroupByModel.of(columns);
return new GroupByFinisher();
}

@Override
public SelectDSL<R> orderBy(SortSpecification...columns) {
selectDSL.orderBy(columns);
return selectDSL;
Expand Down Expand Up @@ -160,17 +214,14 @@ private JoinModel buildJoinModel() {
.collect(Collectors.toList()));
}

@Override
public SelectDSL<R>.LimitFinisher limit(long limit) {
return selectDSL.limit(limit);
}

@Override
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
return selectDSL.offset(offset);
}

@Override
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
return selectDSL.fetchFirst(fetchFirstRows);
}
Expand Down Expand Up @@ -298,19 +349,19 @@ public JoinSpecificationFinisher on(BasicColumn joinColumn, JoinCondition joinCo
}

public JoinSpecificationFinisher on(BasicColumn joinColumn, JoinCondition joinCondition,
JoinCriterion...joinCriteria) {
AndJoinCriterion...joinCriteria) {
return new JoinSpecificationFinisher(joinTable, joinColumn, joinCondition, joinType, joinCriteria);
}
}

public class JoinSpecificationFinisher implements CompletableQuery<R> {
public class JoinSpecificationFinisher implements Buildable<R> {
private JoinSpecification.Builder joinSpecificationBuilder;

public JoinSpecificationFinisher(SqlTable table, BasicColumn joinColumn,
JoinCondition joinCondition, JoinType joinType) {
JoinCriterion joinCriterion = JoinCriterion.withJoinColumn(joinColumn)
JoinCriterion joinCriterion = new OnJoinCriterion.Builder()
.withJoinColumn(joinColumn)
.withJoinCondition(joinCondition)
.withConnector("on") //$NON-NLS-1$
.build();

joinSpecificationBuilder = JoinSpecification.withJoinTable(table)
Expand All @@ -321,10 +372,10 @@ public JoinSpecificationFinisher(SqlTable table, BasicColumn joinColumn,
}

public JoinSpecificationFinisher(SqlTable table, BasicColumn joinColumn,
JoinCondition joinCondition, JoinType joinType, JoinCriterion...joinCriteria) {
JoinCriterion joinCriterion = JoinCriterion.withJoinColumn(joinColumn)
JoinCondition joinCondition, JoinType joinType, AndJoinCriterion...joinCriteria) {
JoinCriterion joinCriterion = new OnJoinCriterion.Builder()
.withJoinColumn(joinColumn)
.withJoinCondition(joinCondition)
.withConnector("on") //$NON-NLS-1$
.build();

joinSpecificationBuilder = JoinSpecification.withJoinTable(table)
Expand All @@ -340,26 +391,23 @@ public R build() {
return QueryExpressionDSL.this.build();
}

@Override
public QueryExpressionWhereBuilder where() {
return QueryExpressionDSL.this.where();
}

@Override
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition) {
return QueryExpressionDSL.this.where(column, condition);
}

@Override
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
SqlCriterion<?>...subCriteria) {
return QueryExpressionDSL.this.where(column, condition, subCriteria);
}

public JoinSpecificationFinisher and(BasicColumn joinColumn, JoinCondition joinCondition) {
JoinCriterion joinCriterion = JoinCriterion.withJoinColumn(joinColumn)
JoinCriterion joinCriterion = new AndJoinCriterion.Builder()
.withJoinColumn(joinColumn)
.withJoinCondition(joinCondition)
.withConnector("and") //$NON-NLS-1$
.build();
joinSpecificationBuilder.withJoinCriterion(joinCriterion);
return this;
Expand Down Expand Up @@ -397,7 +445,6 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
return QueryExpressionDSL.this.fullJoin(joinTable, tableAlias);
}

@Override
public GroupByFinisher groupBy(BasicColumn...columns) {
return QueryExpressionDSL.this.groupBy(columns);
}
Expand All @@ -410,22 +457,18 @@ public UnionBuilder unionAll() {
return QueryExpressionDSL.this.unionAll();
}

@Override
public SelectDSL<R> orderBy(SortSpecification...columns) {
return QueryExpressionDSL.this.orderBy(columns);
}

@Override
public SelectDSL<R>.LimitFinisher limit(long limit) {
return QueryExpressionDSL.this.limit(limit);
}

@Override
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
return QueryExpressionDSL.this.offset(offset);
}

@Override
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
return QueryExpressionDSL.this.fetchFirst(fetchFirstRows);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
*/
@FunctionalInterface
public interface SelectDSLCompleter extends
Function<CompletableQuery<SelectModel>, Buildable<SelectModel>> {
Function<QueryExpressionDSL<SelectModel>, Buildable<SelectModel>> {

/**
* Returns a completer that can be used to select every row in a table.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
* Copyright 2016-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.mybatis.dynamic.sql.select.join;

public class AndJoinCriterion extends JoinCriterion {

private AndJoinCriterion(Builder builder) {
super(builder);
}

@Override
public String connector() {
return "and"; //$NON-NLS-1$
}

public static class Builder extends AbstractBuilder<Builder> {
@Override
protected Builder getThis() {
return this;
}

public AndJoinCriterion build() {
return new AndJoinCriterion(this);
}
}
}
Loading