@@ -309,60 +309,69 class Query < ActiveRecord::Base | |||
|
309 | 309 | v.push(User.current.logged? ? User.current.id.to_s : "0") if v.delete("me") |
|
310 | 310 | end |
|
311 | 311 | |
|
312 | sql = sql + sql_for_field(field, v, db_table, db_field, is_custom_filter) | |
|
313 | ||
|
314 | sql << ')' | |
|
315 | filters_clauses << sql | |
|
316 | end if filters and valid? | |
|
317 | ||
|
318 | (filters_clauses << project_statement).join(' AND ') | |
|
319 | end | |
|
320 | ||
|
321 | private | |
|
322 | ||
|
323 | # Helper method to generate the WHERE sql for a +field+ with a value (+v+) | |
|
324 | def sql_for_field(field, v, db_table, db_field, is_custom_filter) | |
|
325 | sql = '' | |
|
312 | 326 |
|
|
313 | 327 |
|
|
314 |
|
|
|
328 | return "#{db_table}.#{db_field} IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + ")" | |
|
315 | 329 |
|
|
316 |
|
|
|
330 | return "(#{db_table}.#{db_field} IS NULL OR #{db_table}.#{db_field} NOT IN (" + v.collect{|val| "'#{connection.quote_string(val)}'"}.join(",") + "))" | |
|
317 | 331 |
|
|
318 |
|
|
|
332 | sql = "#{db_table}.#{db_field} IS NULL" | |
|
319 | 333 |
|
|
334 | return sql | |
|
320 | 335 |
|
|
321 |
|
|
|
336 | sql = "#{db_table}.#{db_field} IS NOT NULL" | |
|
322 | 337 |
|
|
338 | return sql | |
|
323 | 339 |
|
|
324 |
|
|
|
340 | return "#{db_table}.#{db_field} >= #{v.first.to_i}" | |
|
325 | 341 |
|
|
326 |
|
|
|
342 | return "#{db_table}.#{db_field} <= #{v.first.to_i}" | |
|
327 | 343 |
|
|
328 |
|
|
|
344 | return "#{IssueStatus.table_name}.is_closed=#{connection.quoted_false}" if field == "status_id" | |
|
329 | 345 |
|
|
330 |
|
|
|
346 | return "#{IssueStatus.table_name}.is_closed=#{connection.quoted_true}" if field == "status_id" | |
|
331 | 347 |
|
|
332 |
|
|
|
348 | return date_range_clause(db_table, db_field, - v.first.to_i, 0) | |
|
333 | 349 |
|
|
334 |
|
|
|
350 | return date_range_clause(db_table, db_field, nil, - v.first.to_i) | |
|
335 | 351 |
|
|
336 |
|
|
|
352 | return date_range_clause(db_table, db_field, - v.first.to_i, - v.first.to_i) | |
|
337 | 353 |
|
|
338 |
|
|
|
354 | return date_range_clause(db_table, db_field, v.first.to_i, nil) | |
|
339 | 355 |
|
|
340 |
|
|
|
356 | return date_range_clause(db_table, db_field, 0, v.first.to_i) | |
|
341 | 357 |
|
|
342 |
|
|
|
358 | return date_range_clause(db_table, db_field, v.first.to_i, v.first.to_i) | |
|
343 | 359 |
|
|
344 |
|
|
|
360 | return date_range_clause(db_table, db_field, 0, 0) | |
|
345 | 361 |
|
|
346 | 362 |
|
|
347 | 363 |
|
|
348 | 364 |
|
|
349 | 365 |
|
|
350 | 366 |
|
|
351 |
|
|
|
367 | return "#{db_table}.#{db_field} BETWEEN '%s' AND '%s'" % [connection.quoted_date(from), connection.quoted_date(from + 7.days)] | |
|
352 | 368 |
|
|
353 |
|
|
|
369 | return "#{db_table}.#{db_field} LIKE '%#{connection.quote_string(v.first)}%'" | |
|
354 | 370 |
|
|
355 |
|
|
|
371 | return "#{db_table}.#{db_field} NOT LIKE '%#{connection.quote_string(v.first)}%'" | |
|
356 | 372 |
|
|
357 | sql << ')' | |
|
358 | filters_clauses << sql | |
|
359 | end if filters and valid? | |
|
360 | ||
|
361 | (filters_clauses << project_statement).join(' AND ') | |
|
362 | 373 | end |
|
363 | 374 | |
|
364 | private | |
|
365 | ||
|
366 | 375 | def add_custom_fields_filters(custom_fields) |
|
367 | 376 | @available_filters ||= {} |
|
368 | 377 |
General Comments 0
You need to be logged in to leave comments.
Login now