Refactor column_exists? in SchemaStatements

This commit is contained in:
Ryuta Kamizono 2016-01-30 20:26:19 +09:00
parent 6162c49e40
commit 617a693458

@ -110,13 +110,14 @@ def columns(table_name) end
#
def column_exists?(table_name, column_name, type = nil, options = {})
column_name = column_name.to_s
columns(table_name).any?{ |c| c.name == column_name &&
(!type || c.type == type) &&
(!options.key?(:limit) || c.limit == options[:limit]) &&
(!options.key?(:precision) || c.precision == options[:precision]) &&
(!options.key?(:scale) || c.scale == options[:scale]) &&
(!options.key?(:default) || c.default == options[:default]) &&
(!options.key?(:null) || c.null == options[:null]) }
checks = []
checks << lambda { |c| c.name == column_name }
checks << lambda { |c| c.type == type } if type
[:limit, :precision, :scale, :default, :null].each do |attr|
checks << lambda { |c| c.send(attr) == options[attr] } if options.key?(attr)
end
columns(table_name).any? { |c| checks.all? { |check| check[c] } }
end
# Returns just a table's primary key