[Major] Added ordering to OrderDao.queryAll() with asc/desc
This commit is contained in:
parent
648a47890c
commit
42b54b3da3
|
@ -66,13 +66,15 @@ public interface OrderDao extends StrolchDao<Order> {
|
|||
* the max amount, or @{@link Integer#MAX_VALUE} for all
|
||||
* @param offset
|
||||
* if max amount defined, then the offset to start from
|
||||
* @param asc
|
||||
* true for ascending, false for descending
|
||||
*
|
||||
* @return all elements regardless of type
|
||||
*
|
||||
* @throws StrolchPersistenceException
|
||||
* if something goes wrong
|
||||
*/
|
||||
List<Order> queryAll(DateRange dateRange, long limit, long offset) throws StrolchPersistenceException;
|
||||
List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc) throws StrolchPersistenceException;
|
||||
|
||||
/**
|
||||
* Queries and returns all elements of the given type
|
||||
|
@ -100,13 +102,14 @@ public interface OrderDao extends StrolchDao<Order> {
|
|||
* if max amount defined, then the offset to start from
|
||||
* @param types
|
||||
* the type(s) of element(s) to return
|
||||
* @param asc
|
||||
* true for ascending, false for descending
|
||||
*
|
||||
* @return all elements of the given type
|
||||
*
|
||||
* @throws StrolchPersistenceException
|
||||
* if something goes wrong
|
||||
*/
|
||||
List<Order> queryAll(DateRange dateRange, long limit, long offset, String... types)
|
||||
List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc, String... types)
|
||||
throws StrolchPersistenceException;
|
||||
|
||||
}
|
||||
|
|
|
@ -69,7 +69,8 @@ public class InMemoryOrderDao implements OrderDao {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset) throws StrolchPersistenceException {
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc)
|
||||
throws StrolchPersistenceException {
|
||||
return instance.getElements().values().stream().filter(o -> dateRange.contains(o.getDate())).skip(offset)
|
||||
.limit(limit).collect(toList());
|
||||
}
|
||||
|
@ -91,7 +92,7 @@ public class InMemoryOrderDao implements OrderDao {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, String... types)
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc, String... types)
|
||||
throws StrolchPersistenceException {
|
||||
return instance.getElements().values().stream().filter(o -> isIn(o, types))
|
||||
.filter(o -> dateRange.contains(o.getDate())).skip(offset).limit(limit).collect(toList());
|
||||
|
|
|
@ -49,14 +49,14 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
|||
private static final String querySizeOfTypeDrSqlS = "select count(*) from {0} where type = ANY(?) and latest = true {1}";
|
||||
|
||||
private static final String queryAllDrAsXmlSqlS = "select id, type, asxml from {0} where latest = true {1}";
|
||||
private static final String queryAllDrAsXmlLimitSqlS = "select id, type, asxml from {0} where latest = true {1} order by id limit {2} offset {3}";
|
||||
private static final String queryAllDrAsXmlLimitSqlS = "select id, type, asxml from {0} where latest = true {1} order by date {2} limit {3} offset {4}";
|
||||
private static final String queryAllDrAsJsonSqlS = "select id, type, asjson from {0} where latest = true {1}";
|
||||
private static final String queryAllDrAsJsonLimitSqlS = "select id, type, asjson from {0} where latest = true {1} order by id limit {2} offset {3}";
|
||||
private static final String queryAllDrAsJsonLimitSqlS = "select id, type, asjson from {0} where latest = true {1} order by date {2} limit {3} offset {4}";
|
||||
|
||||
private static final String queryAllByTypeDrAsXmlSqlS = "select id, type, asxml from {0} where type = ANY(?) and latest = true {1}";
|
||||
private static final String queryAllByTypeDrAsXmlLimitSqlS = "select id, type, asxml from {0} where type = ANY(?) and latest = true {1} order by id limit {2,number,#} offset {3,number,#}";
|
||||
private static final String queryAllByTypeDrAsXmlLimitSqlS = "select id, type, asxml from {0} where type = ANY(?) and latest = true {1} order by date {2} limit {3,number,#} offset {4,number,#}";
|
||||
private static final String queryAllByTypeDrAsJsonSqlS = "select id, type, asjson from {0} where type = ANY(?) and latest = true {1}";
|
||||
private static final String queryAllByTypeDrAsJsonLimitSqlS = "select id, type, asjson from {0} where type = ANY(?) and latest = true {1} order by id limit {2,number,#} offset {3,number,#}";
|
||||
private static final String queryAllByTypeDrAsJsonLimitSqlS = "select id, type, asjson from {0} where type = ANY(?) and latest = true {1} order by date {2} limit {3,number,#} offset {4,number,#}";
|
||||
|
||||
private static final String insertAsXmlSqlS = "insert into {0} (id, version, created_by, created_at, updated_at, deleted, latest, name, type, state, date, asxml) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?::order_state, ?, ?)";
|
||||
private static final String insertAsJsonSqlS = "insert into {0} (id, version, created_by, created_at, updated_at, deleted, latest, name, type, state, date, asjson) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?::order_state, ?, ?)";
|
||||
|
@ -287,15 +287,16 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
|||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange) throws StrolchPersistenceException {
|
||||
return queryAll(dateRange, Integer.MAX_VALUE, 0);
|
||||
return queryAll(dateRange, Integer.MAX_VALUE, 0, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset) throws StrolchPersistenceException {
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc)
|
||||
throws StrolchPersistenceException {
|
||||
|
||||
List<Order> list = new ArrayList<>();
|
||||
|
||||
String sql = getLimitSql(dateRange, limit, offset, queryAllDrAsXmlSqlS, queryAllDrAsJsonSqlS,
|
||||
String sql = getLimitSql(dateRange, limit, offset, asc, queryAllDrAsXmlSqlS, queryAllDrAsJsonSqlS,
|
||||
queryAllDrAsXmlLimitSqlS, queryAllDrAsJsonLimitSqlS);
|
||||
|
||||
try (PreparedStatement statement = this.connection.prepareStatement(sql)) {
|
||||
|
@ -317,18 +318,18 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
|||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, String... types) throws StrolchPersistenceException {
|
||||
return queryAll(dateRange, Integer.MAX_VALUE, 0, types);
|
||||
return queryAll(dateRange, Integer.MAX_VALUE, 0, true, types);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, String... types)
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc, String... types)
|
||||
throws StrolchPersistenceException {
|
||||
if (types.length == 0)
|
||||
return queryAll(limit, offset);
|
||||
|
||||
List<Order> list = new ArrayList<>();
|
||||
|
||||
String sql = getLimitSql(dateRange, limit, offset, queryAllByTypeDrAsXmlSqlS, queryAllByTypeDrAsJsonSqlS,
|
||||
String sql = getLimitSql(dateRange, limit, offset, asc, queryAllByTypeDrAsXmlSqlS, queryAllByTypeDrAsJsonSqlS,
|
||||
queryAllByTypeDrAsXmlLimitSqlS, queryAllByTypeDrAsJsonLimitSqlS);
|
||||
|
||||
try (PreparedStatement statement = this.connection.prepareStatement(sql)) {
|
||||
|
@ -351,13 +352,12 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
|||
}
|
||||
}
|
||||
|
||||
protected String getLimitSql(DateRange dateRange, long limit, long offset, String xmlSql, String jsonSql,
|
||||
String xmlLimitSql, String jsonLimitSql) {
|
||||
protected String getLimitSql(DateRange dateRange, long limit, long offset, boolean asc, String xmlSql,
|
||||
String jsonSql, String xmlLimitSql, String jsonLimitSql) {
|
||||
|
||||
String sql;
|
||||
if (limit == Integer.MAX_VALUE) {
|
||||
if (limit == Integer.MAX_VALUE)
|
||||
return getSql(dateRange, xmlSql, jsonSql);
|
||||
}
|
||||
|
||||
if (this.dataType == DataType.xml)
|
||||
sql = xmlLimitSql;
|
||||
|
@ -367,7 +367,7 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
|||
throw new IllegalStateException("Unhandled DataType " + this.dataType);
|
||||
|
||||
String dateRangeClause = buildDateRangeClaus(dateRange);
|
||||
return MessageFormat.format(sql, getTableName(), dateRangeClause, limit, offset);
|
||||
return MessageFormat.format(sql, getTableName(), dateRangeClause, asc ? "ASC" : "DESC", limit, offset);
|
||||
}
|
||||
|
||||
protected String getSql(DateRange dateRange, String xmlSql, String jsonSql) {
|
||||
|
|
|
@ -114,7 +114,8 @@ public class XmlOrderDao extends AbstractDao<Order> implements OrderDao {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset) throws StrolchPersistenceException {
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc)
|
||||
throws StrolchPersistenceException {
|
||||
throw new UnsupportedOperationException("Paging not supported! Check first with supportsPaging()");
|
||||
}
|
||||
|
||||
|
@ -124,7 +125,7 @@ public class XmlOrderDao extends AbstractDao<Order> implements OrderDao {
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, String... types)
|
||||
public List<Order> queryAll(DateRange dateRange, long limit, long offset, boolean asc, String... types)
|
||||
throws StrolchPersistenceException {
|
||||
throw new UnsupportedOperationException("Paging not supported! Check first with supportsPaging()");
|
||||
}
|
||||
|
|
|
@ -160,11 +160,11 @@ public class OrderModelTestRunner {
|
|||
assertEquals("Expect 2 Orders from _2017 inc to _20190401 inc", 2, orders.size());
|
||||
|
||||
if (dao.supportsPaging()) {
|
||||
orders = dao.queryAll(dateRange, 2, 1);
|
||||
orders = dao.queryAll(dateRange, 2, 1, true);
|
||||
assertEquals("Expect 1 Orders from _2017 inc to _20190401 inc offset 1 limit 2", 1, orders.size());
|
||||
assertEquals("Expect order myTestOrder2", "myTestOrder2", orders.get(0).getId());
|
||||
|
||||
orders = dao.queryAll(new DateRange().from(_2017, true).to(_2020, true), 2, 1);
|
||||
orders = dao.queryAll(new DateRange().from(_2017, true).to(_2020, true), 2, 1, true);
|
||||
assertEquals("Expect 2 Orders from _2017 inc to _2020 inc offset 1 limit 2", 2, orders.size());
|
||||
assertEquals("Expect order myTestOrder2", "myTestOrder2", orders.get(0).getId());
|
||||
assertEquals("Expect order myTestOrder3", "myTestOrder3", orders.get(1).getId());
|
||||
|
|
Loading…
Reference in New Issue