Class: MySQLExpectations::Key
- Inherits:
-
Object
- Object
- MySQLExpectations::Key
- Defined in:
- lib/mysql_expectations/key.rb
Overview
An table key has a name and a sequence of index fields.
Constant Summary collapse
- UNIQUE =
true
- NON_UNIQUE =
false
Instance Attribute Summary collapse
-
#fields ⇒ Object
readonly
Returns the value of attribute fields.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#unique ⇒ Object
readonly
Returns the value of attribute unique.
Class Method Summary collapse
- .collation_from_s(collation) ⇒ Object
- .find_key_element(table_element, index_name, field_index) ⇒ Object
- .key?(table_element, key_name) ⇒ Boolean
- .load_all_keys(table_element) ⇒ Object
- .load_key(table_element, key_name) ⇒ Object
- .load_key_field(key_element) ⇒ Object
- .load_key_fields(table_element, key_name) ⇒ Object
- .load_uniqueness(table_element, key_name) ⇒ Object
Instance Method Summary collapse
- #==(other) ⇒ Object
-
#initialize(name, unique = nil, fields) ⇒ Key
constructor
A new instance of Key.
- #to_s ⇒ Object
- #uniqueness_to_s ⇒ Object
Constructor Details
#initialize(name, unique = nil, fields) ⇒ Key
Returns a new instance of Key.
16 17 18 19 20 21 22 23 24 |
# File 'lib/mysql_expectations/key.rb', line 16 def initialize(name, unique = nil, fields) @name = name @unique = unique @fields = [] fields.each do |field| field = KeyField.new(field) unless field.instance_of?(KeyField) @fields << field end end |
Instance Attribute Details
#fields ⇒ Object (readonly)
Returns the value of attribute fields.
11 12 13 |
# File 'lib/mysql_expectations/key.rb', line 11 def fields @fields end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
11 12 13 |
# File 'lib/mysql_expectations/key.rb', line 11 def name @name end |
#unique ⇒ Object (readonly)
Returns the value of attribute unique.
11 12 13 |
# File 'lib/mysql_expectations/key.rb', line 11 def unique @unique end |
Class Method Details
.collation_from_s(collation) ⇒ Object
77 78 79 80 |
# File 'lib/mysql_expectations/key.rb', line 77 def self.collation_from_s(collation) return KeyField::ORDER_DESC if collation == 'D' KeyField::ORDER_ASC end |
.find_key_element(table_element, index_name, field_index) ⇒ Object
71 72 73 74 75 |
# File 'lib/mysql_expectations/key.rb', line 71 def self.find_key_element(table_element, index_name, field_index) query = "key[@Key_name='#{index_name}' and " \ "@Seq_in_index='#{field_index + 1}']" table_element.elements[query] end |
.key?(table_element, key_name) ⇒ Boolean
46 47 48 49 |
# File 'lib/mysql_expectations/key.rb', line 46 def self.key?(table_element, key_name) result = table_element.elements["key[@Key_name='#{key_name}']"] !result.nil? end |
.load_all_keys(table_element) ⇒ Object
60 61 62 63 64 65 66 67 68 69 |
# File 'lib/mysql_expectations/key.rb', line 60 def self.load_all_keys(table_element) keys = {} table_element.elements.each('key') do |e| key_name = e.attributes['Key_name'] unless keys.key? key_name keys[key_name] = load_key(table_element, key_name) end end keys.values end |
.load_key(table_element, key_name) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/mysql_expectations/key.rb', line 51 def self.load_key(table_element, key_name) if key?(table_element, key_name) key_fields = load_key_fields(table_element, key_name) unique = load_uniqueness(table_element, key_name) return Key.new(key_name, unique, key_fields) end nil end |
.load_key_field(key_element) ⇒ Object
82 83 84 85 86 87 88 |
# File 'lib/mysql_expectations/key.rb', line 82 def self.load_key_field(key_element) name = key_element.attributes['Column_name'] collation = key_element.attributes['Collation'] collation = collation_from_s(collation) length = key_element.attributes['Length'] KeyField.new(name, collation, length) end |
.load_key_fields(table_element, key_name) ⇒ Object
96 97 98 99 100 101 102 103 104 |
# File 'lib/mysql_expectations/key.rb', line 96 def self.load_key_fields(table_element, key_name) key_fields = [] (0..1000).each do |field_index| key_element = find_key_element(table_element, key_name, field_index) break if key_element.nil? key_fields << load_key_field(key_element) end key_fields end |
.load_uniqueness(table_element, key_name) ⇒ Object
90 91 92 93 94 |
# File 'lib/mysql_expectations/key.rb', line 90 def self.load_uniqueness(table_element, key_name) key_element = find_key_element(table_element, key_name, 0) return nil if key_element.nil? (key_element.attributes['Non_unique'] == '0') end |
Instance Method Details
#==(other) ⇒ Object
26 27 28 |
# File 'lib/mysql_expectations/key.rb', line 26 def ==(other) name == other.name && unique == other.unique && fields == other.fields end |
#to_s ⇒ Object
30 31 32 33 34 35 36 37 38 |
# File 'lib/mysql_expectations/key.rb', line 30 def to_s result = "{ '#{name}', #{uniqueness_to_s}, [" fields.each_with_index do |field, index| result << ', ' if index > 0 result << field.to_s end result << '] }' result end |
#uniqueness_to_s ⇒ Object
40 41 42 43 44 |
# File 'lib/mysql_expectations/key.rb', line 40 def uniqueness_to_s return 'nil' if unique.nil? return 'UNIQUE' if unique == true return 'NON_UNIQUE' if unique == false end |