Class: Gitlab::Database::BulkUpdate::Setter
- Inherits:
-
Object
- Object
- Gitlab::Database::BulkUpdate::Setter
- Includes:
- Utils::StrongMemoize
- Defined in:
- lib/gitlab/database/bulk_update.rb
Class Method Summary collapse
- .column_definition(model, name) ⇒ Object
- .column_definitions(model, columns) ⇒ Object
- .value_mapping(mapping) ⇒ Object
Instance Method Summary collapse
-
#initialize(model, columns, mapping) ⇒ Setter
constructor
A new instance of Setter.
- #update! ⇒ Object
Constructor Details
#initialize(model, columns, mapping) ⇒ Setter
Returns a new instance of Setter.
38 39 40 41 42 43 |
# File 'lib/gitlab/database/bulk_update.rb', line 38 def initialize(model, columns, mapping) @table_name = model.table_name @connection = model.connection @columns = self.class.column_definitions(model, columns) @mapping = self.class.value_mapping(mapping) end |
Class Method Details
.column_definition(model, name) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/gitlab/database/bulk_update.rb', line 56 def self.column_definition(model, name) definition = model.column_for_attribute(name) raise ArgumentError, "Unknown column: #{name}" unless definition.type definition end |
.column_definitions(model, columns) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/gitlab/database/bulk_update.rb', line 49 def self.column_definitions(model, columns) raise ArgumentError, 'invalid columns' if columns.blank? || columns.any? { |c| !c.is_a?(Symbol) } raise ArgumentError, 'cannot set ID' if columns.include?(:id) ([:id] | columns).map { |name| column_definition(model, name) } end |
.value_mapping(mapping) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/gitlab/database/bulk_update.rb', line 63 def self.value_mapping(mapping) raise ArgumentError, 'invalid mapping' if mapping.blank? raise ArgumentError, 'invalid mapping value' if mapping.any? { |_k, v| !v.is_a?(Hash) } mapping end |
Instance Method Details
#update! ⇒ Object
45 46 47 |
# File 'lib/gitlab/database/bulk_update.rb', line 45 def update! connection.exec_update(sql, log_name, params) end |