Fix time zone issues in advanced repository filters [SCI-6467] (#3819)

This commit is contained in:
Alex Kriuchykhin 2022-02-04 10:30:11 +01:00 committed by GitHub
parent ec6886735c
commit cc063a46b7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 61 additions and 60 deletions

View file

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

View file

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

View file

@ -29,20 +29,20 @@ class RepositoryDateTimeValue < RepositoryDateTimeValueBase
when 'this_year'
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_year)
when 'equal_to'
repository_rows.where("#{join_alias}.data = ?", parameters['datetime'])
repository_rows.where("#{join_alias}.data = ?", Time.zone.parse(parameters['datetime']))
when 'unequal_to'
repository_rows.where.not("#{join_alias}.data = ?", parameters['datetime'])
repository_rows.where.not("#{join_alias}.data = ?", Time.zone.parse(parameters['datetime']))
when 'greater_than'
repository_rows.where("#{join_alias}.data > ?", parameters['datetime'])
repository_rows.where("#{join_alias}.data > ?", Time.zone.parse(parameters['datetime']))
when 'greater_than_or_equal_to'
repository_rows.where("#{join_alias}.data >= ?", parameters['datetime'])
repository_rows.where("#{join_alias}.data >= ?", Time.zone.parse(parameters['datetime']))
when 'less_than'
repository_rows.where("#{join_alias}.data < ?", parameters['datetime'])
repository_rows.where("#{join_alias}.data < ?", Time.zone.parse(parameters['datetime']))
when 'less_than_or_equal_to'
repository_rows.where("#{join_alias}.data <= ?", parameters['datetime'])
repository_rows.where("#{join_alias}.data <= ?", Time.zone.parse(parameters['datetime']))
when 'between'
repository_rows.where("#{join_alias}.data > ? AND #{join_alias}.data < ?",
parameters['start_datetime'], parameters['end_datetime'])
Time.zone.parse(parameters['start_datetime']), Time.zone.parse(parameters['end_datetime']))
else
raise ArgumentError, 'Wrong operator for RepositoryDateTimeValue!'
end

View file

@ -14,35 +14,35 @@ class RepositoryDateValue < RepositoryDateTimeValueBase
parameters = filter_element.parameters
case filter_element.operator
when 'today'
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_day)
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.now.beginning_of_day)
when 'yesterday'
repository_rows.where("#{join_alias}.data >= ? AND #{join_alias}.data < ?",
repository_rows.where("#{join_alias}.data::date >= ? AND #{join_alias}.data::date < ?",
Time.zone.now.beginning_of_day - 1.day, Time.zone.now.beginning_of_day)
when 'last_week'
repository_rows.where("#{join_alias}.data >= ? AND #{join_alias}.data < ?",
repository_rows.where("#{join_alias}.data::date >= ? AND #{join_alias}.data::date < ?",
Time.zone.now.beginning_of_week - 1.week, Time.zone.now.beginning_of_week)
when 'this_month'
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_month)
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.now.beginning_of_month)
when 'last_year'
repository_rows.where("#{join_alias}.data >= ? AND #{join_alias}.data < ?",
repository_rows.where("#{join_alias}.data::date >= ? AND #{join_alias}.data::date < ?",
Time.zone.now.beginning_of_year - 1.year, Time.zone.now.beginning_of_year)
when 'this_year'
repository_rows.where("#{join_alias}.data >= ?", Time.zone.now.beginning_of_year)
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.now.beginning_of_year)
when 'equal_to'
repository_rows.where("#{join_alias}.data = ?", parameters['date'])
repository_rows.where("#{join_alias}.data::date = ?", Time.zone.parse(parameters['date']))
when 'unequal_to'
repository_rows.where.not("#{join_alias}.data = ?", parameters['date'])
repository_rows.where.not("#{join_alias}.data::date = ?", Time.zone.parse(parameters['date']))
when 'greater_than'
repository_rows.where("#{join_alias}.data > ?", parameters['date'])
repository_rows.where("#{join_alias}.data::date > ?", Time.zone.parse(parameters['date']))
when 'greater_than_or_equal_to'
repository_rows.where("#{join_alias}.data >= ?", parameters['date'])
repository_rows.where("#{join_alias}.data::date >= ?", Time.zone.parse(parameters['date']))
when 'less_than'
repository_rows.where("#{join_alias}.data < ?", parameters['date'])
repository_rows.where("#{join_alias}.data::date < ?", Time.zone.parse(parameters['date']))
when 'less_than_or_equal_to'
repository_rows.where("#{join_alias}.data <= ?", parameters['date'])
repository_rows.where("#{join_alias}.data::date <= ?", Time.zone.parse(parameters['date']))
when 'between'
repository_rows.where("#{join_alias}.data > ? AND #{join_alias}.data < ?",
parameters['start_date'], parameters['end_date'])
repository_rows.where("#{join_alias}.data::date > ? AND #{join_alias}.data::date < ?",
Time.zone.parse(parameters['start_date']), Time.zone.parse(parameters['end_date']))
else
raise ArgumentError, 'Wrong operator for RepositoryDateValue!'
end

View file

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

View file

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

View file

@ -195,22 +195,22 @@ class RepositoryDatatableService
when 'this_year'
repository_rows.where('created_at >= ?', Time.zone.now.beginning_of_year)
when 'equal_to'
repository_rows.where(created_at: filter_element_params.dig(:parameters, :datetime))
repository_rows.where(created_at: Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
when 'unequal_to'
repository_rows
.where.not(created_at: filter_element_params.dig(:parameters, :datetime))
.where.not(created_at: Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
when 'greater_than'
repository_rows.where('created_at > ?', filter_element_params.dig(:parameters, :datetime))
repository_rows.where('created_at > ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
when 'greater_than_or_equal_to'
repository_rows.where('created_at >= ?', filter_element_params.dig(:parameters, :datetime))
repository_rows.where('created_at >= ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
when 'less_than'
repository_rows.where('created_at < ?', filter_element_params.dig(:parameters, :datetime))
repository_rows.where('created_at < ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
when 'less_than_or_equal_to'
repository_rows.where('created_at <= ?', filter_element_params.dig(:parameters, :datetime))
repository_rows.where('created_at <= ?', Time.zone.parse(filter_element_params.dig(:parameters, :datetime)))
when 'between'
repository_rows.where('created_at > ? AND created_at < ?',
filter_element_params.dig(:parameters, :start_datetime),
filter_element_params.dig(:parameters, :end_datetime))
Time.zone.parse(filter_element_params.dig(:parameters, :start_datetime)),
Time.zone.parse(filter_element_params.dig(:parameters, :end_datetime)))
else
raise ArgumentError, 'Wrong operator for RepositoryRow Added On!'
end