class DBLeftovers::Index
Just a struct to hold all the info for one index:
Attributes
column_names[RW]
index_function[RW]
index_name[RW]
table_name[RW]
unique[RW]
using_clause[RW]
where_clause[RW]
Public Class Methods
new(table_name, column_names, opts={})
click to toggle source
# File lib/db_leftovers/index.rb, line 8 def initialize(table_name, column_names, opts={}) opts = { :where => nil, :function => nil, :unique => false, :using => nil }.merge(opts) opts.keys.each do |k| raise "Unknown option: #{k}" unless [:where, :function, :unique, :using, :name].include?(k) end if column_names.is_a?(String) and opts[:function].nil? opts[:function] = column_names column_names = [] end @table_name = table_name.to_s @column_names = [column_names].flatten.map{|x| x.to_s} @where_clause = opts[:where] @index_function = opts[:function] @using_clause = opts[:using] @unique = !!opts[:unique] @index_name = (opts[:name] || choose_name(@table_name, @column_names, @index_function)).to_s raise "Indexes need a table!" unless @table_name raise "Indexes need at least column or an expression!" unless (@column_names.any? or @index_function) raise "Can't have both columns and an expression!" if (@column_names.size > 0 and @index_function) end
Public Instance Methods
equals(other)
click to toggle source
# File lib/db_leftovers/index.rb, line 39 def equals(other) other.table_name == table_name and other.column_names == column_names and other.index_name == index_name and other.where_clause == where_clause and other.index_function == index_function and other.using_clause == using_clause and other.unique == unique end
to_s()
click to toggle source
# File lib/db_leftovers/index.rb, line 49 def to_s "<#{@index_name}: #{@table_name}.[#{column_names.join(",")}] unique=#{@unique}, where=#{@where_clause}, function=#{@index_function}, using=#{@using_clause}>" end
unique?()
click to toggle source
# File lib/db_leftovers/index.rb, line 35 def unique? !!@unique end
Private Instance Methods
choose_name(table_name, column_names, index_function)
click to toggle source
# File lib/db_leftovers/index.rb, line 55 def choose_name(table_name, column_names, index_function) topic = if column_names.any? column_names.join("_and_") else index_function end ret = "index_#{table_name}_on_#{topic}" ret = ret.gsub(/[^a-zA-Z0-9]/, '_'). gsub(/__+/, '_'). gsub(/^_/, ''). gsub(/_$/, '') # Max length in Postgres is 63; in MySQL 64: ret[0,63] end