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.
43 44 45 46 47 48 |
# File 'lib/gitlab/database/bulk_update.rb', line 43 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
61 62 63 64 65 66 |
# File 'lib/gitlab/database/bulk_update.rb', line 61 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
54 55 56 57 58 59 |
# File 'lib/gitlab/database/bulk_update.rb', line 54 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
68 69 70 71 72 73 |
# File 'lib/gitlab/database/bulk_update.rb', line 68 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
50 51 52 |
# File 'lib/gitlab/database/bulk_update.rb', line 50 def update! connection.exec_update(sql, log_name, params) end |