Mercurial > p > roundup > code
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 |
