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