From 81fda38bf1ce9ef78899610b43e395d4efbe767c Mon Sep 17 00:00:00 2001
From: Jorrit Schaap <schaap@astron.nl>
Date: Mon, 19 Oct 2015 14:49:29 +0000
Subject: [PATCH] Task #8291: made several query methods optionally
 date_bounded

---
 LTA/ltastorageoverview/lib/store.py | 86 ++++++++++++++++++++---------
 1 file changed, 60 insertions(+), 26 deletions(-)

diff --git a/LTA/ltastorageoverview/lib/store.py b/LTA/ltastorageoverview/lib/store.py
index 86e40874d6b..11042cc1c63 100644
--- a/LTA/ltastorageoverview/lib/store.py
+++ b/LTA/ltastorageoverview/lib/store.py
@@ -206,54 +206,88 @@ class LTAStorageDb:
                 order by depth desc
                 ''', [directory_id]).fetchall()
 
-    def filesInDirectory(self, directory_id):
+    def _date_bounded(self, query, args, from_date=None, to_date=None):
+        result_query = query
+        result_args = args
+        if from_date:
+            result_query += ' and fileinfo.creation_date >= ?'
+            result_args += (from_date,)
+
+        if to_date:
+            result_query += ' and fileinfo.creation_date <= ?'
+            result_args += (to_date,)
+
+        return result_query, result_args
+
+    def filesInDirectory(self, directory_id, from_date=None, to_date=None):
         with sqlite3.connect(self.db_filename) as conn:
-            return conn.execute('''
-                SELECT * FROM fileinfo
-                where directory_id = ?
-                ''', [directory_id]).fetchall()
+            query = '''SELECT * FROM fileinfo
+            where directory_id = ?'''
+
+            args = (directory_id,)
+
+            query, args = self._date_bounded(query, args, from_date, to_date)
 
-    def numFilesInDirectory(self, directory_id):
+            return conn.execute(query, args).fetchall()
+
+    def numFilesInDirectory(self, directory_id, from_date=None, to_date=None):
         with sqlite3.connect(self.db_filename) as conn:
-            result = conn.execute('''
-                SELECT count(id) FROM fileinfo
-                where directory_id = ?
-                ''', [directory_id]).fetchone()
+            query = '''SELECT count(id) FROM fileinfo
+            where directory_id = ?'''
+
+            args = (directory_id,)
+
+            query, args = self._date_bounded(query, args, from_date, to_date)
+
+            result = conn.execute(query, args).fetchone()
 
             if result:
                 return result[0]
 
             return 0
 
-    def filesInTree(self, base_directory_id):
+    def filesInTree(self, base_directory_id, from_date=None, to_date=None):
         with sqlite3.connect(self.db_filename) as conn:
-            return conn.execute('''
-                SELECT dir.id, dir.name, dc.depth, fileinfo.id, fileinfo.name, fileinfo.size, fileinfo.creation_date FROM directory_closure dc
-                join directory dir on dir.id = dc.descendant_id
-                join fileinfo on fileinfo.directory_id = dc.descendant_id
-                where dc.ancestor_id = ?
-                ''', [base_directory_id]).fetchall()
+            query = '''SELECT dir.id, dir.name, dc.depth, fileinfo.id, fileinfo.name, fileinfo.size, fileinfo.creation_date FROM directory_closure dc
+            join directory dir on dir.id = dc.descendant_id
+            join fileinfo on fileinfo.directory_id = dc.descendant_id
+            where dc.ancestor_id = ?'''
+
+            args = (base_directory_id,)
 
-    def numFilesInTree(self, base_directory_id):
+            query, args = self._date_bounded(query, args, from_date, to_date)
+
+            return conn.execute(query, args).fetchall()
+
+    def numFilesInTree(self, base_directory_id, from_date=None, to_date=None):
         with sqlite3.connect(self.db_filename) as conn:
-            result = conn.execute('''
-                SELECT count(fileinfo.id) FROM directory_closure dc
-                join fileinfo on fileinfo.directory_id = dc.descendant_id
-                where dc.ancestor_id = ?
-                ''', [base_directory_id]).fetchone()
+            query = '''SELECT count(fileinfo.id) FROM directory_closure dc
+            join fileinfo on fileinfo.directory_id = dc.descendant_id
+            where dc.ancestor_id = ?'''
+
+            args = (base_directory_id,)
+
+            query, args = self._date_bounded(query, args, from_date, to_date)
+
+            result = conn.execute(query, args).fetchone()
 
             if result:
                 return result[0]
 
             return 0
 
-    def totalFileSizeInTree(self, base_directory_id):
+    def totalFileSizeInTree(self, base_directory_id, from_date=None, to_date=None):
         with sqlite3.connect(self.db_filename) as conn:
-            result = conn.execute('''
+            query = '''
                 SELECT sum(fileinfo.size) FROM fileinfo
                 join directory_closure dc on dc.descendant_id = fileinfo.directory_id
                 where ancestor_id = ?
-                ''', [base_directory_id]).fetchone()
+                '''
+            args = (base_directory_id,)
+
+            query, args = self._date_bounded(query, args, from_date, to_date)
+
+            result = conn.execute(query, args).fetchone()
 
             if result[0]:
                 return result[0]
-- 
GitLab