Project

General

Profile

Feature #24013 » issue-24013-r16009-keywords.diff

Toshi MARUYAMA, 2016-11-28 14:13

View differences:

app/helpers/my_helper.rb
82 82
      limit(10).
83 83
      includes(:status, :project, :tracker, :priority).
84 84
      references(:status, :project, :tracker, :priority).
85
      order("#{IssuePriority.table_name}.position DESC, #{Issue.table_name}.updated_on DESC")
85
       order("#{IssuePriority.table_name}.#{'position'.quote_column_name} DESC, #{Issue.table_name}.updated_on DESC")
86 86
  end
87 87

  
88 88
  def issuesreportedbyme_items
......
117 117
      joins(:activity, :project).
118 118
      references(:issue => [:tracker, :status]).
119 119
      includes(:issue => [:tracker, :status]).
120
      order("#{TimeEntry.table_name}.spent_on DESC, #{Project.table_name}.name ASC, #{Tracker.table_name}.position ASC, #{Issue.table_name}.id ASC").
120
        order("#{TimeEntry.table_name}.spent_on DESC, #{Project.table_name}.name ASC, #{Tracker.table_name}.#{'position'.quote_column_name} ASC, #{Issue.table_name}.id ASC").
121 121
      to_a
122 122

  
123 123
    return entries, days
app/models/enumeration.rb
150 150
    super
151 151
    if position_changed?
152 152
      self.class.where.not(:parent_id => nil).update_all(
153
        "position = coalesce((
154
          select position
155
          from (select id, position from enumerations) as parent
153
          "#{'position'.quote_column_name} = coalesce((
154
          select #{'position'.quote_column_name}
155
          from (select id, #{'position'.quote_column_name} from enumerations) as parent
156 156
          where parent_id = parent.id), 1)"
157 157
      )
158 158
    end
app/models/issue.rb
1548 1548
      if p.priority_derived?
1549 1549
        # priority = highest priority of open children
1550 1550
        # priority is left unchanged if all children are closed and there's no default priority defined
1551
        if priority_position = p.children.open.joins(:priority).maximum("#{IssuePriority.table_name}.position")
1551
        if priority_position = p.children.open.joins(:priority).maximum("#{IssuePriority.table_name.quote_table_name}.#{'position'.quote_column_name}")
1552 1552
          p.priority = IssuePriority.find_by_position(priority_position)
1553 1553
        elsif default_priority = IssuePriority.default
1554 1554
          p.priority = default_priority
app/models/issue_query.rb
23 23
  self.available_columns = [
24 24
    QueryColumn.new(:id, :sortable => "#{Issue.table_name}.id", :default_order => 'desc', :caption => '#', :frozen => true),
25 25
    QueryColumn.new(:project, :sortable => "#{Project.table_name}.name", :groupable => true),
26
    QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.position", :groupable => true),
26
    QueryColumn.new(:tracker, :sortable => "#{Tracker.table_name}.#{'position'.quote_column_name}", :groupable => true),
27 27
    QueryColumn.new(:parent, :sortable => ["#{Issue.table_name}.root_id", "#{Issue.table_name}.lft ASC"], :default_order => 'desc', :caption => :field_parent_issue),
28
    QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.position", :groupable => true),
29
    QueryColumn.new(:priority, :sortable => "#{IssuePriority.table_name}.position", :default_order => 'desc', :groupable => true),
28
    QueryColumn.new(:status, :sortable => "#{IssueStatus.table_name}.#{'position'.quote_column_name}", :groupable => true),
29
    QueryColumn.new(:priority, :sortable => "#{IssuePriority.table_name}.#{'position'.quote_column_name}", :default_order => 'desc', :groupable => true),
30 30
    QueryColumn.new(:subject, :sortable => "#{Issue.table_name}.subject"),
31 31
    QueryColumn.new(:author, :sortable => lambda {User.fields_for_order_statement("authors")}, :groupable => true),
32 32
    QueryColumn.new(:assigned_to, :sortable => lambda {User.fields_for_order_statement}, :groupable => true),
app/models/issue_status.rb
95 95
      subselect = "SELECT MAX(j.created_on) FROM #{Journal.table_name} j" +
96 96
        " JOIN #{JournalDetail.table_name} d ON d.journal_id = j.id" +
97 97
        " WHERE j.journalized_type = 'Issue' AND j.journalized_id = #{Issue.table_name}.id" +
98
        " AND d.property = 'attr' AND d.prop_key = 'status_id' AND d.value = :status_id"
98
        " AND d.property = 'attr' AND d.prop_key = 'status_id' AND d.#{'value'.quote_column_name} = :status_id"
99 99
      Issue.where(:status_id => id, :closed_on => nil).
100 100
        update_all(["closed_on = (#{subselect})", {:status_id => id.to_s}])
101 101

  
app/models/time_entry_query.rb
25 25
    QueryColumn.new(:spent_on, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :default_order => 'desc', :groupable => true),
26 26
    QueryColumn.new(:tweek, :sortable => ["#{TimeEntry.table_name}.spent_on", "#{TimeEntry.table_name}.created_on"], :caption => l(:label_week)),
27 27
    QueryColumn.new(:user, :sortable => lambda {User.fields_for_order_statement}, :groupable => true),
28
    QueryColumn.new(:activity, :sortable => "#{TimeEntryActivity.table_name}.position", :groupable => true),
28
    QueryColumn.new(:activity, :sortable => "#{TimeEntryActivity.table_name}.#{'position'.quote_column_name}", :groupable => true),
29 29
    QueryColumn.new(:issue, :sortable => "#{Issue.table_name}.id"),
30
    QueryAssociationColumn.new(:issue, :tracker, :caption => :field_tracker, :sortable => "#{Tracker.table_name}.position"),
31
    QueryAssociationColumn.new(:issue, :status, :caption => :field_status, :sortable => "#{IssueStatus.table_name}.position"),
30
    QueryAssociationColumn.new(:issue, :tracker, :caption => :field_tracker, :sortable => "#{Tracker.table_name}.#{'position'.quote_column_name}"),
31
    QueryAssociationColumn.new(:issue, :status, :caption => :field_status, :sortable => "#{IssueStatus.table_name}.#{'position'.quote_column_name}"),
32 32
    QueryColumn.new(:comments),
33 33
    QueryColumn.new(:hours, :sortable => "#{TimeEntry.table_name}.hours", :totalable => true),
34 34
  ]
lib/plugins/acts_as_searchable/lib/acts_as_searchable.rb
112 112
                    search_scope(user, projects, options).
113 113
                    joins(:custom_values).
114 114
                    where(visibility).
115
                    where(search_tokens_condition(["#{CustomValue.table_name}.value"], tokens, options[:all_words])),
115
                    where(search_tokens_condition(["#{CustomValue.table_name}.#{'value'.quote_column_name}"], tokens, options[:all_words])),
116 116
                    options[:limit]
117 117
                  )
118 118
                  queries += 1
lib/redmine/acts/positioned.rb
84 84
          end
85 85
        end
86 86

  
87
        def position_column
88
          'position'.quote_column_name
89
        end
90

  
87 91
        def insert_position
88
          position_scope.where("position >= ? AND id <> ?", position, id).update_all("position = position + 1")
92
          position_scope.where("#{position_column} >= ? AND id <> ?", position, id).update_all("#{position_column} = #{position_column} + 1")
89 93
        end
90 94

  
91 95
        def remove_position
92
          position_scope_was.where("position >= ? AND id <> ?", position_was, id).update_all("position = position - 1")
96
          position_scope_was.where("#{position_column} >= ? AND id <> ?", position_was, id).update_all("#{position_column} = #{position_column} - 1")
93 97
        end
94 98

  
95 99
        def position_scope_changed?
......
99 103
        def shift_positions
100 104
          offset = position_was <=> position
101 105
          min, max = [position, position_was].sort
102
          r = position_scope.where("id <> ? AND position BETWEEN ? AND ?", id, min, max).update_all("position = position + #{offset}")
106
          r = position_scope.where("id <> ? AND #{position_column} BETWEEN ? AND ?", id, min, max).update_all("#{position_column} = #{position_column} + #{offset}")
103 107
          if r != max - min
104 108
            reset_positions_in_list
105 109
          end
lib/redmine/core_ext/string.rb
8 8
  def is_binary_data?
9 9
    ( self.count( "^ -~", "^\r\n" ).fdiv(self.size) > 0.3 || self.index( "\x00" ) ) unless empty?
10 10
  end
11

  
12
  def quote_column_name
13
    ActiveRecord::Base.connection.quote_column_name(self)
14
  end
15

  
16
  def quote_table_name
17
    ActiveRecord::Base.connection.quote_table_name(self)
18
  end
11 19
end
test/unit/query_test.rb
161 161
    query = IssueQuery.new(:project => Project.find(1), :name => '_')
162 162
    query.add_filter('fixed_version_id', '!*', [''])
163 163
    query.add_filter('cf_1', '!*', [''])
164
    value_col = 'value'.quote_column_name
164 165
    assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NULL")
165
    assert query.statement.include?("#{CustomValue.table_name}.value IS NULL OR #{CustomValue.table_name}.value = ''")
166
    assert query.statement.include?("#{CustomValue.table_name}.#{value_col} IS NULL OR #{CustomValue.table_name}.#{value_col} = ''")
166 167
    find_issues_with_query(query)
167 168
  end
168 169

  
......
196 197
    query = IssueQuery.new(:project => Project.find(1), :name => '_')
197 198
    query.add_filter('fixed_version_id', '*', [''])
198 199
    query.add_filter('cf_1', '*', [''])
200
    value_col = 'value'.quote_column_name
199 201
    assert query.statement.include?("#{Issue.table_name}.fixed_version_id IS NOT NULL")
200
    assert query.statement.include?("#{CustomValue.table_name}.value IS NOT NULL AND #{CustomValue.table_name}.value <> ''")
202
    assert query.statement.include?("#{CustomValue.table_name}.#{value_col} IS NOT NULL AND #{CustomValue.table_name}.#{value_col} <> ''")
201 203
    find_issues_with_query(query)
202 204
  end
203 205

  
(7-7/11)