Skip to content

Improvements to the Paging Implementation #840

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 1 commit into from
Aug 17, 2024
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
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;
}
}
}