Skip to content

Commit

Permalink
Merge pull request #840 from jeffgbutler/paging-improvements
Browse files Browse the repository at this point in the history
Improvements to the Paging Implementation
  • Loading branch information
jeffgbutler authored Aug 17, 2024
2 parents 4215d85 + ffce2bc commit 7f70234
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 44 deletions.
33 changes: 11 additions & 22 deletions src/main/java/org/mybatis/dynamic/sql/select/MultiSelectDSL.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,19 +65,19 @@ public MultiSelectDSL orderBy(Collection<? extends SortSpecification> columns) {
@Override
public LimitFinisher<MultiSelectModel> limitWhenPresent(Long limit) {
this.limit = limit;
return new LF();
return new LocalLimitFinisher();
}

@Override
public OffsetFirstFinisher<MultiSelectModel> offsetWhenPresent(Long offset) {
this.offset = offset;
return new OFF();
return new LocalOffsetFirstFinisher();
}

@Override
public FetchFirstFinisher<MultiSelectModel> fetchFirstWhenPresent(Long fetchFirstRows) {
this.fetchFirstRows = fetchFirstRows;
return new FFF();
return () -> MultiSelectDSL.this;
}

@NotNull
Expand Down Expand Up @@ -106,38 +106,27 @@ public MultiSelectDSL configureStatement(Consumer<StatementConfiguration> consum
return this;
}

class FFF implements FetchFirstFinisher<MultiSelectModel> {
@Override
public Buildable<MultiSelectModel> rowsOnly() {
return MultiSelectDSL.this;
}
}

class LF implements LimitFinisher<MultiSelectModel> {
@Override
public Buildable<MultiSelectModel> offsetWhenPresent(Long offset) {
MultiSelectDSL.this.offset = offset;
return MultiSelectDSL.this;
}

abstract class BaseBuildable implements Buildable<MultiSelectModel> {
@NotNull
@Override
public MultiSelectModel build() {
return MultiSelectDSL.this.build();
}
}

class OFF implements OffsetFirstFinisher<MultiSelectModel> {
class LocalOffsetFirstFinisher extends BaseBuildable implements OffsetFirstFinisher<MultiSelectModel> {
@Override
public FetchFirstFinisher<MultiSelectModel> fetchFirstWhenPresent(Long fetchFirstRows) {
MultiSelectDSL.this.fetchFirstRows = fetchFirstRows;
return new FFF();
return () -> MultiSelectDSL.this;
}
}

@NotNull
class LocalLimitFinisher extends BaseBuildable implements LimitFinisher<MultiSelectModel> {
@Override
public MultiSelectModel build() {
return MultiSelectDSL.this.build();
public Buildable<MultiSelectModel> offsetWhenPresent(Long offset) {
MultiSelectDSL.this.offset = offset;
return MultiSelectDSL.this;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ default FetchFirstFinisher<T> fetchFirst(long fetchFirstRows) {
FetchFirstFinisher<T> fetchFirstWhenPresent(Long fetchFirstRows);
}

@FunctionalInterface
interface FetchFirstFinisher<T> {
Buildable<T> rowsOnly();
}
Expand Down
33 changes: 11 additions & 22 deletions src/main/java/org/mybatis/dynamic/sql/select/SelectDSL.java
Original file line number Diff line number Diff line change
Expand Up @@ -109,17 +109,17 @@ void orderBy(Collection<? extends SortSpecification> columns) {

public LimitFinisher<R> limitWhenPresent(Long limit) {
this.limit = limit;
return new LF();
return new LocalLimitFinisher();
}

public OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
this.offset = offset;
return new OFF();
return new LocalOffsetFirstFinisher();
}

public FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
this.fetchFirstRows = fetchFirstRows;
return new FFF();
return () -> SelectDSL.this;
}

@Override
Expand Down Expand Up @@ -153,38 +153,27 @@ private Optional<PagingModel> buildPagingModel() {
.build();
}

class FFF implements FetchFirstFinisher<R> {
@Override
public Buildable<R> rowsOnly() {
return SelectDSL.this;
}
}

class LF implements LimitFinisher<R> {
@Override
public Buildable<R> offsetWhenPresent(Long offset) {
SelectDSL.this.offset = offset;
return SelectDSL.this;
}

abstract class BaseBuildable implements Buildable<R> {
@NotNull
@Override
public R build() {
return SelectDSL.this.build();
}
}

class OFF implements OffsetFirstFinisher<R> {
class LocalOffsetFirstFinisher extends BaseBuildable implements OffsetFirstFinisher<R> {
@Override
public FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
SelectDSL.this.fetchFirstRows = fetchFirstRows;
return new FFF();
return () -> SelectDSL.this;
}
}

@NotNull
class LocalLimitFinisher extends BaseBuildable implements LimitFinisher<R> {
@Override
public R build() {
return SelectDSL.this.build();
public Buildable<R> offsetWhenPresent(Long offset) {
SelectDSL.this.offset = offset;
return SelectDSL.this;
}
}
}

0 comments on commit 7f70234

Please sign in to comment.