[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
|
* the max amount, or @{@link Integer#MAX_VALUE} for all
|
||||||
* @param offset
|
* @param offset
|
||||||
* if max amount defined, then the offset to start from
|
* if max amount defined, then the offset to start from
|
||||||
|
* @param asc
|
||||||
|
* true for ascending, false for descending
|
||||||
*
|
*
|
||||||
* @return all elements regardless of type
|
* @return all elements regardless of type
|
||||||
*
|
*
|
||||||
* @throws StrolchPersistenceException
|
* @throws StrolchPersistenceException
|
||||||
* if something goes wrong
|
* 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
|
* 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
|
* if max amount defined, then the offset to start from
|
||||||
* @param types
|
* @param types
|
||||||
* the type(s) of element(s) to return
|
* the type(s) of element(s) to return
|
||||||
|
* @param asc
|
||||||
|
* true for ascending, false for descending
|
||||||
*
|
*
|
||||||
* @return all elements of the given type
|
* @return all elements of the given type
|
||||||
*
|
*
|
||||||
* @throws StrolchPersistenceException
|
* @throws StrolchPersistenceException
|
||||||
* if something goes wrong
|
* 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;
|
throws StrolchPersistenceException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,8 @@ public class InMemoryOrderDao implements OrderDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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)
|
return instance.getElements().values().stream().filter(o -> dateRange.contains(o.getDate())).skip(offset)
|
||||||
.limit(limit).collect(toList());
|
.limit(limit).collect(toList());
|
||||||
}
|
}
|
||||||
|
@ -91,7 +92,7 @@ public class InMemoryOrderDao implements OrderDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 {
|
throws StrolchPersistenceException {
|
||||||
return instance.getElements().values().stream().filter(o -> isIn(o, types))
|
return instance.getElements().values().stream().filter(o -> isIn(o, types))
|
||||||
.filter(o -> dateRange.contains(o.getDate())).skip(offset).limit(limit).collect(toList());
|
.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 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 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 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 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 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 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, ?, ?)";
|
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
|
@Override
|
||||||
public List<Order> queryAll(DateRange dateRange) throws StrolchPersistenceException {
|
public List<Order> queryAll(DateRange dateRange) throws StrolchPersistenceException {
|
||||||
return queryAll(dateRange, Integer.MAX_VALUE, 0);
|
return queryAll(dateRange, Integer.MAX_VALUE, 0, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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<>();
|
List<Order> list = new ArrayList<>();
|
||||||
|
|
||||||
String sql = getLimitSql(dateRange, limit, offset, queryAllDrAsXmlSqlS, queryAllDrAsJsonSqlS,
|
String sql = getLimitSql(dateRange, limit, offset, asc, queryAllDrAsXmlSqlS, queryAllDrAsJsonSqlS,
|
||||||
queryAllDrAsXmlLimitSqlS, queryAllDrAsJsonLimitSqlS);
|
queryAllDrAsXmlLimitSqlS, queryAllDrAsJsonLimitSqlS);
|
||||||
|
|
||||||
try (PreparedStatement statement = this.connection.prepareStatement(sql)) {
|
try (PreparedStatement statement = this.connection.prepareStatement(sql)) {
|
||||||
|
@ -317,18 +318,18 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Order> queryAll(DateRange dateRange, String... types) throws StrolchPersistenceException {
|
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
|
@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 {
|
throws StrolchPersistenceException {
|
||||||
if (types.length == 0)
|
if (types.length == 0)
|
||||||
return queryAll(limit, offset);
|
return queryAll(limit, offset);
|
||||||
|
|
||||||
List<Order> list = new ArrayList<>();
|
List<Order> list = new ArrayList<>();
|
||||||
|
|
||||||
String sql = getLimitSql(dateRange, limit, offset, queryAllByTypeDrAsXmlSqlS, queryAllByTypeDrAsJsonSqlS,
|
String sql = getLimitSql(dateRange, limit, offset, asc, queryAllByTypeDrAsXmlSqlS, queryAllByTypeDrAsJsonSqlS,
|
||||||
queryAllByTypeDrAsXmlLimitSqlS, queryAllByTypeDrAsJsonLimitSqlS);
|
queryAllByTypeDrAsXmlLimitSqlS, queryAllByTypeDrAsJsonLimitSqlS);
|
||||||
|
|
||||||
try (PreparedStatement statement = this.connection.prepareStatement(sql)) {
|
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,
|
protected String getLimitSql(DateRange dateRange, long limit, long offset, boolean asc, String xmlSql,
|
||||||
String xmlLimitSql, String jsonLimitSql) {
|
String jsonSql, String xmlLimitSql, String jsonLimitSql) {
|
||||||
|
|
||||||
String sql;
|
String sql;
|
||||||
if (limit == Integer.MAX_VALUE) {
|
if (limit == Integer.MAX_VALUE)
|
||||||
return getSql(dateRange, xmlSql, jsonSql);
|
return getSql(dateRange, xmlSql, jsonSql);
|
||||||
}
|
|
||||||
|
|
||||||
if (this.dataType == DataType.xml)
|
if (this.dataType == DataType.xml)
|
||||||
sql = xmlLimitSql;
|
sql = xmlLimitSql;
|
||||||
|
@ -367,7 +367,7 @@ public class PostgreSqlOrderDao extends PostgresqlDao<Order> implements OrderDao
|
||||||
throw new IllegalStateException("Unhandled DataType " + this.dataType);
|
throw new IllegalStateException("Unhandled DataType " + this.dataType);
|
||||||
|
|
||||||
String dateRangeClause = buildDateRangeClaus(dateRange);
|
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) {
|
protected String getSql(DateRange dateRange, String xmlSql, String jsonSql) {
|
||||||
|
|
|
@ -114,7 +114,8 @@ public class XmlOrderDao extends AbstractDao<Order> implements OrderDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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()");
|
throw new UnsupportedOperationException("Paging not supported! Check first with supportsPaging()");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +125,7 @@ public class XmlOrderDao extends AbstractDao<Order> implements OrderDao {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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 {
|
throws StrolchPersistenceException {
|
||||||
throw new UnsupportedOperationException("Paging not supported! Check first with supportsPaging()");
|
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());
|
assertEquals("Expect 2 Orders from _2017 inc to _20190401 inc", 2, orders.size());
|
||||||
|
|
||||||
if (dao.supportsPaging()) {
|
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 1 Orders from _2017 inc to _20190401 inc offset 1 limit 2", 1, orders.size());
|
||||||
assertEquals("Expect order myTestOrder2", "myTestOrder2", orders.get(0).getId());
|
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 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 myTestOrder2", "myTestOrder2", orders.get(0).getId());
|
||||||
assertEquals("Expect order myTestOrder3", "myTestOrder3", orders.get(1).getId());
|
assertEquals("Expect order myTestOrder3", "myTestOrder3", orders.get(1).getId());
|
||||||
|
|
Loading…
Reference in New Issue