diff roundup/backends/rdbms_common.py @ 1499:8ee69708da0c

added support for searching on ranges of dates
author Andrey Lebedev <kedder@users.sourceforge.net>
date Sat, 08 Mar 2003 20:41:45 +0000
parents e6ac4e074acb
children 7cd110cee870
line wrap: on
line diff
--- a/roundup/backends/rdbms_common.py	Fri Mar 07 22:46:59 2003 +0000
+++ b/roundup/backends/rdbms_common.py	Sat Mar 08 20:41:45 2003 +0000
@@ -1,4 +1,4 @@
-# $Id: rdbms_common.py,v 1.40 2003-03-06 07:33:29 richard Exp $
+# $Id: rdbms_common.py,v 1.41 2003-03-08 20:41:45 kedder Exp $
 ''' Relational database (SQL) backend common code.
 
 Basics:
@@ -34,6 +34,7 @@
 from blobfiles import FileStorage
 from roundup.indexer import Indexer
 from sessions import Sessions, OneTimeKeys
+from roundup.date import Range
 
 # number of rows to keep in memory
 ROW_CACHE_SIZE = 100
@@ -1731,6 +1732,8 @@
 
         cn = self.classname
 
+        timezone = self.db.getUserTimezone()
+        
         # figure the WHERE clause from the filterspec
         props = self.getprops()
         frum = ['_'+cn]
@@ -1796,8 +1799,18 @@
                     where.append('_%s in (%s)'%(k, s))
                     args = args + [date.Date(x).serialise() for x in v]
                 else:
-                    where.append('_%s=%s'%(k, a))
-                    args.append(date.Date(v).serialise())
+                    try:
+                        # Try to filter on range of dates
+                        date_rng = Range(v, date.Date, offset=timezone)
+                        if (date_rng.from_value):
+                            where.append('_%s > %s'%(k, a))                            
+                            args.append(date_rng.from_value.serialise())
+                        if (date_rng.to_value):
+                            where.append('_%s < %s'%(k, a))
+                            args.append(date_rng.to_value.serialise())
+                    except ValueError:
+                        # If range creation fails - ignore that search parameter
+                        pass                        
             elif isinstance(propclass, Interval):
                 if isinstance(v, type([])):
                     s = ','.join([a for x in v])

Roundup Issue Tracker: http://roundup-tracker.org/