From 90a694ca4aced0cd3ea93a923a2476d06527b0d4 Mon Sep 17 00:00:00 2001 From: Felix Sidokhine <felix.sidokhine@randstad.ca> Date: Fri, 12 Jun 2020 21:42:01 +0300 Subject: [PATCH] added fix for offset and row count Change-Id: I5265dd77a23ecd11a692dce706c94cebd1a2a0c7 --- .../net/jami/datastore/dao/AbstractDao.java | 25 ++++++++++++++++++- .../common/dao/SelectStatementBuilder.java | 5 ++++ .../jams/common/dao/StatementConstraints.java | 12 +++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 jams-common/src/main/java/net/jami/jams/common/dao/StatementConstraints.java 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 0470e8a4..b5af7748 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 fb80dea4..c22c370e 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 00000000..72f35b48 --- /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; +} -- GitLab