This is the fix we are looking for regarding time-range queries.

This commit is contained in:
Andrew McMillan 2011-09-19 11:08:44 +12:00
parent cdc23ea732
commit eaeec0bc02

View File

@ -148,18 +148,19 @@ function SqlFilterFragment( $filter, $components, $property = null, $parameter =
// } // }
if ( isset($start) && isset($finish) ) { if ( isset($start) && isset($finish) ) {
$sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL'; $sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL';
$sql .= ' OR (dtstart < :time_range_end AND (dtend > :time_range_start '; $sql .= ' OR (dtstart < :time_range_end AND (dtend > :time_range_start OR (dtend IS NULL AND dtstart > :time_range_start))))';
$sql .= ' OR (dtend IS NULL AND dtstart < :time_range_end)))) ';
$params[':time_range_start'] = $start; $params[':time_range_start'] = $start;
$params[':time_range_end'] = $finish; $params[':time_range_end'] = $finish;
} }
elseif ( isset($start) ) { elseif ( isset($start) ) {
$sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL'; $sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL';
$sql .= ' OR (dtstart > :time_range_start)) '; $sql .= ' OR (dtend IS NULL AND dtstart > :time_range_start)';
$sql .= ' OR dtend > :time_range_start) ';
$params[':time_range_start'] = $start; $params[':time_range_start'] = $start;
} }
elseif ( isset($finish) ) { elseif ( isset($finish) ) {
$sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL OR dtstart < :time_range_end) '; $sql .= ' AND (rrule IS NOT NULL OR dtstart IS NULL';
$sql .= ' OR dtstart < :time_range_end) ';
$params[':time_range_end'] = $finish; $params[':time_range_end'] = $finish;
} }
$need_range_filter = array(new RepeatRuleDateTime($start),new RepeatRuleDateTime($finish)); $need_range_filter = array(new RepeatRuleDateTime($start),new RepeatRuleDateTime($finish));