]> source.dussan.org Git - redmine.git/commitdiff
Dangerous query method deprecation warnings (#23630).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 23 Jun 2018 05:19:07 +0000 (05:19 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 23 Jun 2018 05:19:07 +0000 (05:19 +0000)
git-svn-id: http://svn.redmine.org/redmine/trunk@17411 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/query.rb
app/models/version.rb
lib/redmine/field_format.rb
lib/redmine/sort_criteria.rb
test/unit/query_test.rb

index 53a245a8d79df8e926a280aa69512f495f3bee3e..115e1bb7ca308e0e7300f1cdf9ac9152e3ba505b 100644 (file)
@@ -780,14 +780,16 @@ class Query < ActiveRecord::Base
   end
 
   def sort_clause
-    sort_criteria.sort_clause(sortable_columns)
+    if clause = sort_criteria.sort_clause(sortable_columns)
+      clause.map {|c| Arel.sql c}
+    end
   end
 
   # Returns the SQL sort order that should be prepended for grouping
   def group_by_sort_order
     if column = group_by_column
       order = (sort_criteria.order_for(column.name) || column.default_order || 'asc').try(:upcase)
-      Array(column.sortable).map {|s| "#{s} #{order}"}
+      Array(column.sortable).map {|s| Arel.sql("#{s} #{order}")}
     end
   end
 
index 53d1d77587dd7c391b2fdb64d4889014564518f5..5626750f8af9c90368d4320bb61351c726e5376c 100644 (file)
@@ -317,7 +317,7 @@ class Version < ActiveRecord::Base
 
   def self.fields_for_order_statement(table=nil)
     table ||= table_name
-    ["(CASE WHEN #{table}.effective_date IS NULL THEN 1 ELSE 0 END)", "#{table}.effective_date", "#{table}.name", "#{table}.id"]
+    [Arel.sql("(CASE WHEN #{table}.effective_date IS NULL THEN 1 ELSE 0 END)"), "#{table}.effective_date", "#{table}.name", "#{table}.id"]
   end
 
   scope :sorted, lambda { order(fields_for_order_statement) }
index bcf6ccc3d9b7c3fc41273e0cd4e8e8ad5c5b4260..c4960c0f70b5b3f5f62cef2599d07ff71829d391 100644 (file)
@@ -323,7 +323,7 @@ module Redmine
       # Returns nil if the custom field can not be used for sorting.
       def order_statement(custom_field)
         # COALESCE is here to make sure that blank and NULL values are sorted equally
-        "COALESCE(#{join_alias custom_field}.value, '')"
+        Arel.sql "COALESCE(#{join_alias custom_field}.value, '')"
       end
 
       # Returns a GROUP BY clause that can used to group by custom value
@@ -461,7 +461,7 @@ module Redmine
         # Make the database cast values into numeric
         # Postgresql will raise an error if a value can not be casted!
         # CustomValue validations should ensure that it doesn't occur
-        "CAST(CASE #{join_alias custom_field}.value WHEN '' THEN '0' ELSE #{join_alias custom_field}.value END AS decimal(30,3))"
+        Arel.sql "CAST(CASE #{join_alias custom_field}.value WHEN '' THEN '0' ELSE #{join_alias custom_field}.value END AS decimal(30,3))"
       end
 
       # Returns totals for the given scope
@@ -747,7 +747,7 @@ module Redmine
       end
 
       def group_statement(custom_field)
-        "COALESCE(#{join_alias custom_field}.value, '')"
+        Arel.sql "COALESCE(#{join_alias custom_field}.value, '')"
       end
 
       def join_for_order_statement(custom_field)
index 3d440f010dd02d3330e50072f0c82fc58a7d09e1..8193b9b912b6949732106113e675e4cabd9739fd 100644 (file)
@@ -97,7 +97,7 @@ module Redmine
       if criterion =~ / (asc|desc)$/i
         criterion
       else
-        "#{criterion} #{order.to_s.upcase}"
+        Arel.sql "#{criterion} #{order.to_s.upcase}"
       end
     end
   end
index dd5ef36294823681bf1605c6070630be1b8e5b38..5b9886dd99bffd916097581847b48ba60cb018fb 100644 (file)
@@ -1483,7 +1483,8 @@ class QueryTest < ActiveSupport::TestCase
     c = q.available_columns.find {|col| col.is_a?(QueryCustomFieldColumn) && col.custom_field.field_format == 'string' }
     assert c
     assert c.sortable
-    issues = q.issues(:order => "#{c.sortable} ASC")
+    q.sort_criteria = [[c.name.to_s, 'asc']]
+    issues = q.issues
     values = issues.collect {|i| i.custom_value_for(c.custom_field).to_s}
     assert !values.empty?
     assert_equal values.sort, values
@@ -1494,7 +1495,8 @@ class QueryTest < ActiveSupport::TestCase
     c = q.available_columns.find {|col| col.is_a?(QueryCustomFieldColumn) && col.custom_field.field_format == 'string' }
     assert c
     assert c.sortable
-    issues = q.issues(:order => "#{c.sortable} DESC")
+    q.sort_criteria = [[c.name.to_s, 'desc']]
+    issues = q.issues
     values = issues.collect {|i| i.custom_value_for(c.custom_field).to_s}
     assert !values.empty?
     assert_equal values.sort.reverse, values
@@ -1505,7 +1507,8 @@ class QueryTest < ActiveSupport::TestCase
     c = q.available_columns.find {|col| col.is_a?(QueryCustomFieldColumn) && col.custom_field.field_format == 'float' }
     assert c
     assert c.sortable
-    issues = q.issues(:order => "#{c.sortable} ASC")
+    q.sort_criteria = [[c.name.to_s, 'asc']]
+    issues = q.issues
     values = issues.collect {|i| begin; Kernel.Float(i.custom_value_for(c.custom_field).to_s); rescue; nil; end}.compact
     assert !values.empty?
     assert_equal values.sort, values
@@ -1703,9 +1706,9 @@ class QueryTest < ActiveSupport::TestCase
 
   def test_issue_ids
     q = IssueQuery.new(:name => '_')
-    order = "issues.subject, issues.id"
-    issues = q.issues(:order => order)
-    assert_equal issues.map(&:id), q.issue_ids(:order => order)
+    q.sort_criteria = ['subject', 'id']
+    issues = q.issues
+    assert_equal issues.map(&:id), q.issue_ids
   end
 
   def test_label_for