Class: Gitlab::Database::BulkUpdate::Setter

Inherits:
Object
  • Object
show all
Includes:
Utils::StrongMemoize
Defined in:
lib/gitlab/database/bulk_update.rb

Class Method Summary collapse

Instance Method Summary collapse

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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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

Raises:

  • (ArgumentError)


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