Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
b527ee2
Add ModelSetup to unify setup codes
TimothyGillespie Mar 21, 2021
480b883
Merge branch 'master' into TimothyGillespie/addOrderByTests
TimothyGillespie Mar 31, 2021
49e4fa0
Add assertOrderByContains method
TimothyGillespie Mar 31, 2021
8aaedb2
Add SectionIndexOutOfBoundException
TimothyGillespie Mar 31, 2021
1ae8ac8
Add retrieval methods for the sections
TimothyGillespie Mar 31, 2021
5d4e233
Add JavaDocs for getSectionList too
TimothyGillespie Mar 31, 2021
89c48dc
Add JavaDocs for getSectionList too
TimothyGillespie Mar 31, 2021
51907a4
Reorder methods more logically
TimothyGillespie Mar 31, 2021
ac7140e
Add assertSectionEquals method
TimothyGillespie Mar 31, 2021
5491a48
Remove OrderBy specific contains method
TimothyGillespie Mar 31, 2021
6f97433
Make assertion methods chainable
TimothyGillespie Mar 31, 2021
b73d7db
Add better fitting internal assert for the equal assertion
TimothyGillespie Mar 31, 2021
710b6c5
Add tests for OrderBy Clauses
TimothyGillespie Mar 31, 2021
9e857cf
Merge branch 'TimothyGillespie/addOrderByTests' of github.com:JavaWeb…
TimothyGillespie Mar 31, 2021
e4d3fc0
Remove explicit ASC as discussed
TimothyGillespie Apr 1, 2021
abdab9e
Add JavaDocs for QueryGroup
TimothyGillespie Apr 2, 2021
0a684f9
Add equals and hashcode overwrite to QueryColumn
TimothyGillespie Apr 2, 2021
17a7060
Add multiple order by capability
TimothyGillespie Apr 2, 2021
0037a3a
Merge branch 'TimothyGillespie/enableMultipleOrderBy' into TimothyGil…
TimothyGillespie Apr 2, 2021
fb00e4d
Adjust MySQL Query Building for the new OrderBy and fix OrderBy test
TimothyGillespie Apr 2, 2021
018ce02
Add test to assert the correct sort priority
TimothyGillespie Apr 2, 2021
c8e9a40
Add error case for calling order on same column twice
TimothyGillespie Apr 2, 2021
37ed312
Add note of purpose of OrderByClauseTest
TimothyGillespie Apr 2, 2021
5a74b53
Add JavaDocs to QueryOrderBy
TimothyGillespie Apr 2, 2021
5210447
Add JavaDocs to QueryOrderByElement
TimothyGillespie Apr 2, 2021
3bff425
Add JavaDocs to the order method on Query
TimothyGillespie Apr 2, 2021
e88bd3f
Merge pull request #21 from JavaWebStack/TimothyGillespie/addOrderByT…
TimothyGillespie Apr 2, 2021
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
Add multiple order by capability
  • Loading branch information
TimothyGillespie committed Apr 2, 2021
commit 17a7060b030a00a596acea5da21b2eca6534a3e5
29 changes: 16 additions & 13 deletions src/main/java/org/javawebstack/orm/query/Query.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ public class Query<T extends Model> {
private final QueryGroup<T> where;
private Integer offset;
private Integer limit;
private QueryColumn order;
private boolean desc = false;
private QueryOrderBy order;
private boolean withDeleted = false;
private final List<QueryWith> withs = new ArrayList<>();

Expand All @@ -37,6 +36,7 @@ public Query(Repo<T> repo, Class<T> model) {
this.repo = repo;
this.model = model;
this.where = new QueryGroup<>();
this.order = new QueryOrderBy();
}

public boolean isWithDeleted() {
Expand All @@ -59,14 +59,10 @@ public Integer getOffset() {
return offset;
}

public QueryColumn getOrder() {
public QueryOrderBy getOrder() {
return order;
}

public boolean isDescOrder() {
return desc;
}

public Repo<T> getRepo() {
return repo;
}
Expand Down Expand Up @@ -300,18 +296,25 @@ public Query<T> search(String search) {
return this;
}

public Query<T> order(String orderBy) {
return order(orderBy, false);
}

public Query<T> order(String orderBy, boolean desc) {
return order(new QueryColumn(orderBy), desc);
}

public Query<T> order(QueryColumn orderBy, boolean desc) {
this.order = orderBy;
this.desc = desc;
return this;
}
boolean success = this.order.add(orderBy, desc);
if(!success) {
throw new ORMQueryException(String.format(
"The column %s could not be ordered %s. This is probably caused by calling .order() on this column twice.",
orderBy.toString(),
desc ? "descendingly" : "ascendingly"
));
}

public Query<T> order(String orderBy) {
return order(orderBy, false);
return this;
}

public Query<T> limit(int offset, int limit) {
Expand Down
28 changes: 28 additions & 0 deletions src/main/java/org/javawebstack/orm/query/QueryOrderBy.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package org.javawebstack.orm.query;

import java.util.LinkedList;
import java.util.List;

public class QueryOrderBy extends LinkedList<QueryOrderByElement>{

public boolean add(String columnName, boolean desc) {
return this.add(new QueryColumn(columnName), desc);
}

public boolean add(QueryColumn column, boolean desc) {
return this.add(new QueryOrderByElement(column, desc));
}

@Override
public boolean add(QueryOrderByElement element) {
boolean hasBeenAdded = false;
if(!willOverwrite(element))
hasBeenAdded = super.add(element);

return hasBeenAdded;
}

private boolean willOverwrite(QueryOrderByElement element) {
return this.stream().anyMatch(element::hasEqualColumn);
}
}
53 changes: 53 additions & 0 deletions src/main/java/org/javawebstack/orm/query/QueryOrderByElement.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package org.javawebstack.orm.query;

import java.util.Objects;

public class QueryOrderByElement {
private QueryColumn queryColumn;
private boolean desc;

QueryOrderByElement(String columnName, boolean desc) {
queryColumn = new QueryColumn(columnName);
this.desc = desc;
}

QueryOrderByElement(QueryColumn column, boolean desc) {
this.queryColumn = column;
this.desc = desc;
}

public QueryColumn getQueryColumn() {
return queryColumn;
}

public boolean isDesc() {
return desc;
}

public boolean hasEqualColumn(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
QueryOrderByElement that = (QueryOrderByElement) o;
return getQueryColumn().equals(that.getQueryColumn());
}

public boolean hasEqualOrderDirection(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
QueryOrderByElement that = (QueryOrderByElement) o;
return isDesc() == that.isDesc();
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
QueryOrderByElement that = (QueryOrderByElement) o;
return isDesc() == that.isDesc() && getQueryColumn().equals(that.getQueryColumn());
}

@Override
public int hashCode() {
return Objects.hash(getQueryColumn(), isDesc());
}
}