comparison roundup/backends/rdbms_common.py @ 6118:e6073c2291c6

Better Date filtering Allow filtering by multiple date ranges or empty date. Date ranges are separated by comma, an empty date is represented by '-'.
author Ralf Schlatterbeck <rsc@runtux.com>
date Mon, 02 Mar 2020 19:02:16 +0100
parents 1ec4aa670b0c
children e7cb0147e6fe
comparison
equal deleted inserted replaced
6117:bfb30ed10297 6118:e6073c2291c6
2607 s = ','.join([a for x in v]) 2607 s = ','.join([a for x in v])
2608 where.append('_%s._%s in (%s)'%(pln, k, s)) 2608 where.append('_%s._%s in (%s)'%(pln, k, s))
2609 args = args + [dc(date.Date(x)) for x in v] 2609 args = args + [dc(date.Date(x)) for x in v]
2610 else: 2610 else:
2611 try: 2611 try:
2612 # Try to filter on range of dates 2612 wh = []
2613 date_rng = propclass.range_from_raw(v, self.db) 2613 ar = []
2614 if date_rng.from_value: 2614 for d in v.split(','):
2615 where.append('_%s._%s >= %s'%(pln, k, a)) 2615 w1 = []
2616 args.append(dc(date_rng.from_value)) 2616 if d == '-':
2617 if date_rng.to_value: 2617 wh.append('_%s._%s is NULL'%(pln, k))
2618 where.append('_%s._%s <= %s'%(pln, k, a)) 2618 continue
2619 args.append(dc(date_rng.to_value)) 2619 # Try to filter on range of dates
2620 date_rng = propclass.range_from_raw(d, self.db)
2621 if date_rng.from_value:
2622 w1.append('_%s._%s >= %s'%(pln, k, a))
2623 ar.append(dc(date_rng.from_value))
2624 if date_rng.to_value:
2625 w1.append('_%s._%s <= %s'%(pln, k, a))
2626 ar.append(dc(date_rng.to_value))
2627 wh.append (' and '.join (w1))
2628 where.append ('(' + ' or '.join (wh) + ')')
2629 args.extend (ar)
2620 except ValueError: 2630 except ValueError:
2621 # If range creation fails - ignore that search parameter 2631 # If range creation fails - ignore that search parameter
2622 pass 2632 pass
2623 elif isinstance(propclass, Interval): 2633 elif isinstance(propclass, Interval):
2624 # filter/sort using the __<prop>_int__ column 2634 # filter/sort using the __<prop>_int__ column

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