diff --git a/datastore/src/main/java/net/jami/datastore/dao/AbstractDao.java b/datastore/src/main/java/net/jami/datastore/dao/AbstractDao.java index 0470e8a488e3f3c5d479b09abcba436c82bc46df..b5af7748e41a18e62574c293494a9739dcb62f80 100644 --- a/datastore/src/main/java/net/jami/datastore/dao/AbstractDao.java +++ b/datastore/src/main/java/net/jami/datastore/dao/AbstractDao.java @@ -28,6 +28,7 @@ import lombok.extern.slf4j.Slf4j; import net.jami.datastore.main.DataStore; import net.jami.jams.common.dao.DeleteStatementBuilder; import net.jami.jams.common.dao.SelectStatementBuilder; +import net.jami.jams.common.dao.StatementConstraints; import net.jami.jams.common.dao.StatementList; import net.jami.jams.common.dao.UpdateStatementBuilder; import net.jami.jams.common.dao.connectivity.SQLConnection; @@ -51,7 +52,7 @@ public abstract class AbstractDao<T> { List<T> result = new ArrayList<>(); SQLConnection connection = DataStore.connectionPool.getConnection(); try{ - PreparedStatement ps = SelectStatementBuilder.buildStatement(tableName,constraints,connection); + PreparedStatement ps = SelectStatementBuilder.buildStatement(tableName,constraints,null,connection); ResultSet rs = ps.executeQuery(); while(rs.next()){ result.add(tClass.getConstructor(ResultSet.class).newInstance(rs)); @@ -67,6 +68,28 @@ public abstract class AbstractDao<T> { } } + + public List<T> getObjects(StatementList constraints,StatementConstraints statementConstraints){ + List<T> result = new ArrayList<>(); + SQLConnection connection = DataStore.connectionPool.getConnection(); + try{ + PreparedStatement ps = SelectStatementBuilder.buildStatement(tableName,constraints,statementConstraints,connection); + ResultSet rs = ps.executeQuery(); + while(rs.next()){ + result.add(tClass.getConstructor(ResultSet.class).newInstance(rs)); + } + return result; + } + catch (Exception e){ + log.error("An error has occurred while trying to fetch a device: " + e.toString()); + return null; + } + finally { + DataStore.connectionPool.returnConnection(connection); + } + } + + public boolean updateObject(StatementList update, StatementList constraints){ SQLConnection connection = DataStore.connectionPool.getConnection(); try{ diff --git a/jams-common/src/main/java/net/jami/jams/common/dao/SelectStatementBuilder.java b/jams-common/src/main/java/net/jami/jams/common/dao/SelectStatementBuilder.java index fb80dea462edd8424084d87e789879667fd13757..c22c370ee0a8a75377667d056b39d9368083ca7b 100644 --- a/jams-common/src/main/java/net/jami/jams/common/dao/SelectStatementBuilder.java +++ b/jams-common/src/main/java/net/jami/jams/common/dao/SelectStatementBuilder.java @@ -29,6 +29,7 @@ import java.sql.PreparedStatement; public class SelectStatementBuilder { public static PreparedStatement buildStatement(String table, StatementList statementElements, + StatementConstraints statementConstraints, SQLConnection connection) throws Exception { PreparedStatement ps = null; @@ -55,6 +56,10 @@ public class SelectStatementBuilder { } } else{ + if(statementConstraints != null){ + stringBuilder.append(" LIMIT ").append(statementConstraints.getRowCount()) + .append(" OFFSET ").append(statementConstraints.getOffset()); + } ps = connection.getConnection().prepareStatement(stringBuilder.toString()); } return ps; diff --git a/jams-common/src/main/java/net/jami/jams/common/dao/StatementConstraints.java b/jams-common/src/main/java/net/jami/jams/common/dao/StatementConstraints.java new file mode 100644 index 0000000000000000000000000000000000000000..72f35b4895253e563bf0448dda110c8c05d50cc8 --- /dev/null +++ b/jams-common/src/main/java/net/jami/jams/common/dao/StatementConstraints.java @@ -0,0 +1,12 @@ +package net.jami.jams.common.dao; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class StatementConstraints { + + private Long rowCount; + private Long offset; +}