Fix time range advanced filtering [SCI-6585] (#3922)

This commit is contained in:
Alex Kriuchykhin 2022-03-08 10:20:53 +01:00 committed by GitHub
parent 732977b80d
commit 96e6cd3c1d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -17,22 +17,23 @@ class RepositoryTimeRangeValue < RepositoryDateTimeRangeValueBase
parameters = filter_element.parameters
case filter_element.operator
when 'equal_to'
repository_rows.where("#{join_alias}.start_time::time = ? AND #{join_alias}.end_time::time = ?",
Time.zone.parse(parameters['start_time']), Time.zone.parse(parameters['end_time']))
repository_rows.where("#{join_alias}.start_time::time = (?)::time AND #{join_alias}.end_time::time = (?)::time",
parameters['start_time'], parameters['end_time'])
when 'unequal_to'
repository_rows.where.not("#{join_alias}.start_time::time = ? AND #{join_alias}.end_time::time = ?",
Time.zone.parse(parameters['start_time']), Time.zone.parse(parameters['end_time']))
repository_rows
.where.not("#{join_alias}.start_time::time = (?)::time AND #{join_alias}.end_time::time = (?)::time",
parameters['start_time'], parameters['end_time'])
when 'greater_than'
repository_rows.where("#{join_alias}.start_time::time > ?", Time.zone.parse(parameters['end_time']))
repository_rows.where("#{join_alias}.start_time::time > (?)::time", parameters['end_time'])
when 'greater_than_or_equal_to'
repository_rows.where("#{join_alias}.start_time::time >= ?", Time.zone.parse(parameters['end_time']))
repository_rows.where("#{join_alias}.start_time::time >= (?)::time", parameters['end_time'])
when 'less_than'
repository_rows.where("#{join_alias}.end_time::time < ?", Time.zone.parse(parameters['start_time']))
repository_rows.where("#{join_alias}.end_time::time < (?)::time", parameters['start_time'])
when 'less_than_or_equal_to'
repository_rows.where("#{join_alias}.end_time::time <= ?", Time.zone.parse(parameters['start_time']))
repository_rows.where("#{join_alias}.end_time::time <= (?)::time", parameters['start_time'])
when 'between'
repository_rows.where("#{join_alias}.start_time::time > ? AND #{join_alias}.end_time::time < ?",
Time.zone.parse(parameters['start_time']), Time.zone.parse(parameters['end_time']))
repository_rows.where("#{join_alias}.start_time::time > (?)::time AND #{join_alias}.end_time::time < (?)::time",
parameters['start_time'], parameters['end_time'])
else
raise ArgumentError, 'Wrong operator for RepositoryTimeRangeValue!'
end