Class: DbDiff::Key

Inherits:
TableElement show all
Defined in:
lib/dbdiff/key.rb

Instance Attribute Summary collapse

Attributes inherited from TableElement

#name, #table_name

Instance Method Summary collapse

Methods inherited from TableElement

#deep_clone

Constructor Details

#initialize(table_name, info = {}) ⇒ Key

Returns a new instance of Key.



5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/dbdiff/key.rb', line 5

def initialize(table_name, info= {})
   @table_name = table_name


  # XXX need to work on tihs
  @name = info['Key_name']

  @primary = (@name == 'PRIMARY' ? true : false) 
  seq_index = info['Seq_in_index'].to_i - 1
  @unique = (info['Non_unique'].to_i == 1 ? false : true)
  @column_data = {}
  @column_data[seq_index] = info['Column_name']
end

Instance Attribute Details

#column_dataObject (readonly)

Returns the value of attribute column_data.



3
4
5
# File 'lib/dbdiff/key.rb', line 3

def column_data
  @column_data
end

#primaryObject (readonly)

Returns the value of attribute primary.



3
4
5
# File 'lib/dbdiff/key.rb', line 3

def primary
  @primary
end

#uniqueObject (readonly)

Returns the value of attribute unique.



3
4
5
# File 'lib/dbdiff/key.rb', line 3

def unique
  @unique
end

Instance Method Details

#==(other) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/dbdiff/key.rb', line 60

def ==(other)
  self.columns == other.columns && 
  self.table_name == other.table_name && 
  self.primary == other.primary && 
  self.unique == other.unique &&
  self.name == other.name
end

#add_deltaObject



56
57
58
# File 'lib/dbdiff/key.rb', line 56

def add_delta
  Delta::AddKey.new(self)
end

#columnsObject



19
20
21
# File 'lib/dbdiff/key.rb', line 19

def columns
  @column_data.keys.sort.map {|k| @column_data[k]}
end

#definitionObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/dbdiff/key.rb', line 32

def definition

  sql = ""
  if @primary
    sql += " PRIMARY KEY "
  elsif @unique 
    sql += " UNIQUE KEY `%s`" % self.name
  else
    sql += " KEY `%s`" % self.name
  end

  sql += " (" + self.columns.map{|c| '`' + c + '`' }.join(",") + " )"

  sql
end

#drop_deltaObject



52
53
54
# File 'lib/dbdiff/key.rb', line 52

def drop_delta
  Delta::DropKey.new(self)
end

#merge(key) ⇒ Object



23
24
25
26
27
28
29
30
# File 'lib/dbdiff/key.rb', line 23

def merge(key)

  unless key.name == self.name
    raise "Error - names don't match #{key.name} #{self.name}"
  end

  @column_data.merge!(key.column_data)
end

#modify_delta(new_element) ⇒ Object



48
49
50
# File 'lib/dbdiff/key.rb', line 48

def modify_delta(new_element)
  Delta::ModifyKey.new(new_element)
end