Skip to content

Add Missing Select Statement Features #126

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 8 commits into from
Aug 9, 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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,5 @@ buildNumber.properties
/bin/
.mvn/wrapper/maven-wrapper.jar
.DS_Store
.idea
*.iml
8 changes: 4 additions & 4 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<junit.jupiter.version>5.5.0</junit.jupiter.version>
<junit.platform.version>1.5.0</junit.platform.version>
<junit.jupiter.version>5.5.1</junit.jupiter.version>
<junit.platform.version>1.5.1</junit.platform.version>
<spring.batch.version>4.1.2.RELEASE</spring.batch.version>
<clirr.comparisonVersion>1.1.0</clirr.comparisonVersion>
<module.name>org.mybatis.dynamic.sql</module.name>
Expand Down Expand Up @@ -120,7 +120,7 @@
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.12.2</version>
<version>3.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
Expand All @@ -144,7 +144,7 @@
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.8.RELEASE</version>
<version>5.1.9.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
57 changes: 57 additions & 0 deletions src/main/java/org/mybatis/dynamic/sql/select/CompletableQuery.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/**
* 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;

import org.mybatis.dynamic.sql.BasicColumn;
import org.mybatis.dynamic.sql.BindableColumn;
import org.mybatis.dynamic.sql.SortSpecification;
import org.mybatis.dynamic.sql.SqlCriterion;
import org.mybatis.dynamic.sql.VisitableCondition;
import org.mybatis.dynamic.sql.util.Buildable;
import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3SelectListHelper;
import org.mybatis.dynamic.sql.util.mybatis3.MyBatis3SelectOneHelper;

/**
* This interface describes operations allowed for a select statement after the from and join clauses. This is
* primarily to support the {@link MyBatis3SelectListHelper} and {@link MyBatis3SelectOneHelper} classes.
*
* @author Jeff Butler
*
* @param <R> the model type created by these operations
*
* @see MyBatis3SelectListHelper
* @see MyBatis3SelectOneHelper
*
*/
public interface CompletableQuery<R> extends Buildable<R> {
QueryExpressionDSL<R>.QueryExpressionWhereBuilder where();

<T> QueryExpressionDSL<R>.QueryExpressionWhereBuilder where(BindableColumn<T> column,
VisitableCondition<T> condition);

<T> QueryExpressionDSL<R>.QueryExpressionWhereBuilder where(BindableColumn<T> column,
VisitableCondition<T> condition, SqlCriterion<?>... subCriteria);

QueryExpressionDSL<R>.GroupByFinisher groupBy(BasicColumn...columns);

SelectDSL<R> orderBy(SortSpecification...columns);

SelectDSL<R>.LimitFinisher limit(long limit);

SelectDSL<R>.OffsetFirstFinisher offset(long offset);

SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows);
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
import org.mybatis.dynamic.sql.where.AbstractWhereDSL;
import org.mybatis.dynamic.sql.where.WhereModel;

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

private String connector;
private SelectDSL<R> selectDSL;
Expand Down Expand Up @@ -82,14 +82,17 @@ public static <R> FromGatherer<R> selectDistinct(SelectDSL<R> selectDSL, BasicCo
.build();
}

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

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

@Override
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
SqlCriterion<?>...subCriteria) {
return new QueryExpressionWhereBuilder(column, condition, subCriteria);
Expand Down Expand Up @@ -141,12 +144,14 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
return fullJoin(joinTable);
}

@Override
public GroupByFinisher groupBy(BasicColumn...columns) {
groupByModel = GroupByModel.of(columns);
selectDSL.addQueryExpression(buildModel());
return new GroupByFinisher();
}

@Override
public SelectDSL<R> orderBy(SortSpecification...columns) {
buildDelegateMethod = selectDSL::build;
selectDSL.addQueryExpression(buildModel());
Expand All @@ -156,12 +161,12 @@ public SelectDSL<R> orderBy(SortSpecification...columns) {

public UnionBuilder union() {
selectDSL.addQueryExpression(buildModel());
return new UnionBuilder("union"); //$NON-NLS-1$
return new UnionBuilder();
}

public UnionBuilder unionAll() {
selectDSL.addQueryExpression(buildModel());
return new UnionBuilder("union all"); //$NON-NLS-1$
return new UnionAllBuilder();
}

protected QueryExpressionModel buildModel() {
Expand All @@ -176,18 +181,21 @@ protected QueryExpressionModel buildModel() {
.build();
}

@Override
public SelectDSL<R>.LimitFinisher limit(long limit) {
buildDelegateMethod = selectDSL::build;
selectDSL.addQueryExpression(buildModel());
return selectDSL.limit(limit);
}

@Override
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
buildDelegateMethod = selectDSL::build;
selectDSL.addQueryExpression(buildModel());
return selectDSL.offset(offset);
}

@Override
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
buildDelegateMethod = selectDSL::build;
selectDSL.addQueryExpression(buildModel());
Expand Down Expand Up @@ -283,13 +291,13 @@ private <T> QueryExpressionWhereBuilder(BindableColumn<T> column, VisitableCondi
public UnionBuilder union() {
whereModel = buildWhereModel();
selectDSL.addQueryExpression(buildModel());
return new UnionBuilder("union"); //$NON-NLS-1$
return new UnionBuilder();
}

public UnionBuilder unionAll() {
whereModel = buildWhereModel();
selectDSL.addQueryExpression(buildModel());
return new UnionBuilder("union all"); //$NON-NLS-1$
return new UnionAllBuilder();
}

public SelectDSL<R> orderBy(SortSpecification...columns) {
Expand Down Expand Up @@ -364,7 +372,7 @@ public JoinSpecificationFinisher on(BasicColumn joinColumn, JoinCondition joinCo
}
}

public class JoinSpecificationFinisher implements Buildable<R> {
public class JoinSpecificationFinisher implements CompletableQuery<R> {
private SqlTable joinTable;
private List<JoinCriterion> joinCriteria = new ArrayList<>();
private JoinType joinType;
Expand Down Expand Up @@ -420,17 +428,20 @@ private R internalbuild() {
selectDSL.addQueryExpression(buildModel());
return selectDSL.build();
}


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

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

@Override
public <T> QueryExpressionWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
SqlCriterion<?>...subCriteria) {
joinModel = buildJoinModel();
Expand Down Expand Up @@ -486,33 +497,44 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
return fullJoin(joinTable);
}

@Override
public GroupByFinisher groupBy(BasicColumn...columns) {
joinModel = buildJoinModel();
return QueryExpressionDSL.this.groupBy(columns);
}

public UnionBuilder union() {
joinModel = buildJoinModel();
return QueryExpressionDSL.this.union();
}

public UnionBuilder unionAll() {
joinModel = buildJoinModel();
return QueryExpressionDSL.this.unionAll();
}

@Override
public SelectDSL<R> orderBy(SortSpecification...columns) {
buildDelegateMethod = selectDSL::build;
joinModel = buildJoinModel();
selectDSL.addQueryExpression(buildModel());
selectDSL.setOrderByModel(OrderByModel.of(columns));
return selectDSL;
return QueryExpressionDSL.this.orderBy(columns);
}

@Override
public SelectDSL<R>.LimitFinisher limit(long limit) {
buildDelegateMethod = selectDSL::build;
joinModel = buildJoinModel();
selectDSL.addQueryExpression(buildModel());
return selectDSL.limit(limit);
return QueryExpressionDSL.this.limit(limit);
}

@Override
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
buildDelegateMethod = selectDSL::build;
joinModel = buildJoinModel();
selectDSL.addQueryExpression(buildModel());
return selectDSL.offset(offset);
return QueryExpressionDSL.this.offset(offset);
}

@Override
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
buildDelegateMethod = selectDSL::build;
joinModel = buildJoinModel();
selectDSL.addQueryExpression(buildModel());
return selectDSL.fetchFirst(fetchFirstRows);
return QueryExpressionDSL.this.fetchFirst(fetchFirstRows);
}
}

Expand All @@ -536,6 +558,14 @@ private R internalBuild() {
return selectDSL.build();
}

public UnionBuilder union() {
return new UnionBuilder();
}

public UnionBuilder unionAll() {
return new UnionAllBuilder();
}

public SelectDSL<R>.LimitFinisher limit(long limit) {
buildDelegateMethod = selectDSL::build;
return selectDSL.limit(limit);
Expand All @@ -553,10 +583,10 @@ public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
}

public class UnionBuilder {
private String connector;
protected String connector;

public UnionBuilder(String connector) {
this.connector = Objects.requireNonNull(connector);
public UnionBuilder() {
this.connector = "union"; //$NON-NLS-1$
}

public FromGatherer<R> select(BasicColumn...selectList) {
Expand All @@ -578,4 +608,10 @@ public FromGatherer<R> selectDistinct(BasicColumn...selectList) {
.build();
}
}

public class UnionAllBuilder extends UnionBuilder {
public UnionAllBuilder() {
connector = "union all"; //$NON-NLS-1$
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@
import java.util.function.Function;

import org.mybatis.dynamic.sql.SortSpecification;
import org.mybatis.dynamic.sql.select.CompletableQuery;
import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter;
import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
import org.mybatis.dynamic.sql.util.Buildable;

/**
Expand Down Expand Up @@ -74,7 +74,7 @@
*/
@FunctionalInterface
public interface MyBatis3SelectListHelper<T> extends
Function<QueryExpressionDSL<MyBatis3SelectModelAdapter<List<T>>>,
Function<CompletableQuery<MyBatis3SelectModelAdapter<List<T>>>,
Buildable<MyBatis3SelectModelAdapter<List<T>>>> {

/**
Expand All @@ -96,7 +96,7 @@ static <T> MyBatis3SelectListHelper<T> allRows() {
*
* @return the helper that will select every row in a table in the specified order
*/
static <T> MyBatis3SelectListHelper<T> allRowsOrderdBy(SortSpecification...columns) {
static <T> MyBatis3SelectListHelper<T> allRowsOrderedBy(SortSpecification...columns) {
return h -> h.orderBy(columns);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
import java.util.Optional;
import java.util.function.Function;

import org.mybatis.dynamic.sql.select.CompletableQuery;
import org.mybatis.dynamic.sql.select.MyBatis3SelectModelAdapter;
import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
import org.mybatis.dynamic.sql.util.Buildable;

/**
Expand Down Expand Up @@ -53,6 +53,6 @@
*/
@FunctionalInterface
public interface MyBatis3SelectOneHelper<T> extends
Function<QueryExpressionDSL<MyBatis3SelectModelAdapter<Optional<T>>>,
Function<CompletableQuery<MyBatis3SelectModelAdapter<Optional<T>>>,
Buildable<MyBatis3SelectModelAdapter<Optional<T>>>> {
}
Loading