Class: Rubeus::Jdbc::Table
- Inherits:
-
MetaElement
- Object
- MetaElement
- Rubeus::Jdbc::Table
- Includes:
- FullyQualifiedNamed
- Defined in:
- lib/rubeus/jdbc/table.rb
Constant Summary collapse
- IMPORTED_KEY_UNIQUE_ATTRS =
%w(PKTABLE_CAT PKTABLE_SCHEM PKTABLE_NAME FK_NAME)
- EXPORTED_KEY_UNIQUE_ATTRS =
%w(FKTABLE_CAT FKTABLE_SCHEM FKTABLE_NAME PK_NAME)
Constants included from FullyQualifiedNamed
FullyQualifiedNamed::FQN_ATTRS, FullyQualifiedNamed::FQN_ATTR_STRS
Instance Attribute Summary collapse
-
#columns ⇒ Object
Returns the value of attribute columns.
-
#pluralize_table_name ⇒ Object
Returns the value of attribute pluralize_table_name.
-
#rails_options ⇒ Object
Returns the value of attribute rails_options.
-
#ref_generation ⇒ Object
1.
-
#remarks ⇒ Object
1.
-
#self_referencing_col_name ⇒ Object
1.
-
#table_type ⇒ Object
1.
-
#type_cat ⇒ Object
1.
-
#type_name ⇒ Object
1.
-
#type_schem ⇒ Object
1.
Attributes inherited from MetaElement
#jdbc_info, #meta_data, #options
Class Method Summary collapse
Instance Method Summary collapse
- #[](column_name) ⇒ Object
- #define_jdbc_model(mod) ⇒ Object
- #define_rails_model(mod) ⇒ Object
- #exported_keys ⇒ Object
- #imported_keys ⇒ Object (also: #foreign_keys, #fks)
- #indexes ⇒ Object
- #inspect ⇒ Object
- #name ⇒ Object
- #primary_key ⇒ Object (also: #pk)
- #primary_key_columns ⇒ Object (also: #pk_columns)
- #primary_key_names ⇒ Object (also: #pk_names)
- #rails_table_name ⇒ Object
- #rails_table_name=(value) ⇒ Object
Methods included from FullyQualifiedNamed
#fully_qualified_name, #same_fqn?
Methods inherited from MetaElement
#initialize, #pretty_print_instance_variables
Constructor Details
This class inherits a constructor from Rubeus::Jdbc::MetaElement
Instance Attribute Details
#columns ⇒ Object
Returns the value of attribute columns.
30 31 32 |
# File 'lib/rubeus/jdbc/table.rb', line 30 def columns @columns end |
#pluralize_table_name ⇒ Object
Returns the value of attribute pluralize_table_name.
29 30 31 |
# File 'lib/rubeus/jdbc/table.rb', line 29 def pluralize_table_name @pluralize_table_name end |
#rails_options ⇒ Object
Returns the value of attribute rails_options.
196 197 198 |
# File 'lib/rubeus/jdbc/table.rb', line 196 def @rails_options end |
#ref_generation ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def ref_generation @ref_generation end |
#remarks ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def remarks @remarks end |
#self_referencing_col_name ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def self_referencing_col_name @self_referencing_col_name end |
#table_type ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def table_type @table_type end |
#type_cat ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def type_cat @type_cat end |
#type_name ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def type_name @type_name end |
#type_schem ⇒ Object
-
TABLE_CAT String => テーブルカタログ (null の可能性がある)
-
TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
-
TABLE_NAME String => テーブル名
-
TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である
-
REMARKS String => テーブルに関する説明
-
TYPE_CAT String => の型のカタログ (null の可能性がある)
-
TYPE_SCHEM String => の型のスキーマ (null の可能性がある)
-
TYPE_NAME String => の型名 (null の可能性がある)
-
SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)
-
REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)
25 26 27 |
# File 'lib/rubeus/jdbc/table.rb', line 25 def type_schem @type_schem end |
Class Method Details
.singular_access_if_possible(method_name, plural_method) ⇒ Object
76 77 78 79 80 81 82 |
# File 'lib/rubeus/jdbc/table.rb', line 76 def self.singular_access_if_possible(method_name, plural_method) define_method(method_name) do values = self.send(plural_method) (values.nil? || values.empty?) ? nil : (values.length == 1) ? values.first : values end end |
Instance Method Details
#[](column_name) ⇒ Object
40 41 42 43 |
# File 'lib/rubeus/jdbc/table.rb', line 40 def [](column_name) column_name = column_name.to_s.upcase columns.detect{|col|col.column_name.upcase == column_name} end |
#define_jdbc_model(mod) ⇒ Object
207 208 209 210 211 212 213 214 215 |
# File 'lib/rubeus/jdbc/table.rb', line 207 def define_jdbc_model(mod) class_name = "Jdbc#{table_name.classify}" class_def = "class #{class_name} < ActiveRecord::Base\n" class_def << " set_table_name('#{table_name}')\n" class_def << " establish_connection('#{.source_db}')\n" class_def << "end" mod.module_eval(class_def) mod.const_get(class_name) end |
#define_rails_model(mod) ⇒ Object
198 199 200 201 202 203 204 205 |
# File 'lib/rubeus/jdbc/table.rb', line 198 def define_rails_model(mod) class_name = "Rails#{rails_table_name.classify}" class_def = "class #{class_name} < ActiveRecord::Base\n" class_def << " set_table_name('#{rails_table_name}')\n" class_def << "end" mod.module_eval(class_def) mod.const_get(class_name) end |
#exported_keys ⇒ Object
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
# File 'lib/rubeus/jdbc/table.rb', line 153 def exported_keys unless @exported_keys @exported_keys = Rubeus::Util::NameAccessArray.new exported_key_hash = {} exported_keys = .getExportedKeys(table_cat, table_schem, table_name).map{|r| r.to_hash} exported_keys.each do |exported_key| unique_key = EXPORTED_KEY_UNIQUE_ATTRS.map{|attr| exported_key[attr]} unless exported_key_hash[unique_key] attrs = Rubeus::Jdbc::ForeignKey::ATTR_NAMES.map{|attr| attr.to_s}. inject({}){|dest, name| dest[name.downcase] = exported_key[name.upcase]; dest} foreign_key = Rubeus::Jdbc::ForeignKey.new(, self, attrs, ) foreign_key.fktable = .table_object(exported_key['FKTABLE_NAME'], :catalog => exported_key['FKTABLE_CAT'], :schema => exported_key['FKTABLE_SCHEM']) foreign_key.pktable = self @exported_keys << foreign_key exported_key_hash[unique_key] = foreign_key end end exported_keys.each do |exported_key| unique_key = EXPORTED_KEY_UNIQUE_ATTRS.map{|attr| exported_key[attr]} foreign_key = exported_key_hash[unique_key] foreign_key.fkcolumn_names ||= [] foreign_key.pkcolumn_names ||= [] foreign_key.fkcolumn_names << exported_key['FKCOLUMN_NAME'].send([:name_case] || :to_s) foreign_key.pkcolumn_names << exported_key['PKCOLUMN_NAME'].send([:name_case] || :to_s) end end @exported_keys end |
#imported_keys ⇒ Object Also known as: foreign_keys, fks
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/rubeus/jdbc/table.rb', line 119 def imported_keys unless @imported_keys @imported_keys = Rubeus::Util::NameAccessArray.new imported_key_hash = {} imported_keys = .getImportedKeys(table_cat, table_schem, table_name).map{|r| r.to_hash} imported_keys.each do |imported_key| unique_key = IMPORTED_KEY_UNIQUE_ATTRS.map{|attr| imported_key[attr]} unless imported_key_hash[unique_key] attrs = Rubeus::Jdbc::ForeignKey::ATTR_NAMES.map{|attr| attr.to_s}. inject({}){|dest, name| dest[name.downcase] = imported_key[name.upcase]; dest} foreign_key = Rubeus::Jdbc::ForeignKey.new(, self, attrs, ) foreign_key.fktable = self foreign_key.pktable = .table_object(imported_key['PKTABLE_NAME'], :catalog => imported_key['PKTABLE_CAT'], :schema => imported_key['PKTABLE_SCHEM']) @imported_keys << foreign_key imported_key_hash[unique_key] = foreign_key end end imported_keys.each do |imported_key| unique_key = IMPORTED_KEY_UNIQUE_ATTRS.map{|attr| imported_key[attr]} foreign_key = imported_key_hash[unique_key] foreign_key.fkcolumn_names ||= [] foreign_key.pkcolumn_names ||= [] foreign_key.fkcolumn_names << imported_key['FKCOLUMN_NAME'].send([:name_case] || :to_s) foreign_key.pkcolumn_names << imported_key['PKCOLUMN_NAME'].send([:name_case] || :to_s) end end @imported_keys end |
#indexes ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/rubeus/jdbc/table.rb', line 89 def indexes unless @indexes @indexes = Rubeus::Util::NameAccessArray.new index_infos = .getIndexInfo(table_cat, table_schem, table_name, false, true).map{|r| r.to_hash} index_hash = {} index_infos.each do |index_info| index_uniq_key = Rubeus::Jdbc::Index::RECORD_UNIQUE_ATTRS. map{|attr| attr.to_s}.map{|attr| attr.upcase}.map{|key| index_info[key]} unless index_hash[index_uniq_key] attrs = Rubeus::Jdbc::Index::ATTR_NAMES.map{|attr| attr.to_s}. inject({}){|dest, name| dest[name.downcase] = index_info[name.upcase]; dest} index = Rubeus::Jdbc::Index.new(, self, attrs, ) @indexes << index index_hash[index_uniq_key] = index end end index_infos.each do |index_info| index_uniq_key = Rubeus::Jdbc::Index::RECORD_UNIQUE_ATTRS. map{|attr| attr.to_s}.map{|attr| attr.upcase}.map{|key| index_info[key]} index = index_hash[index_uniq_key] attrs = Rubeus::Jdbc::Index::Key::ATTR_NAMES.map{|attr| attr.to_s}. inject({}){|dest, name| dest[name.downcase] = index_info[name.upcase]; dest} index.keys << Rubeus::Jdbc::Index::Key.new(, index, attrs, ) end end @indexes end |
#inspect ⇒ Object
32 33 34 |
# File 'lib/rubeus/jdbc/table.rb', line 32 def inspect "#<#{self.class} #{name}(%s)>" % columns.map(&:name).join(',') end |
#name ⇒ Object
36 37 38 |
# File 'lib/rubeus/jdbc/table.rb', line 36 def name self.table_name.send([:name_case] || :to_s) end |
#primary_key ⇒ Object Also known as: pk
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rubeus/jdbc/table.rb', line 45 def primary_key unless defined?(@primary_keys) pk_records = .getPrimaryKeys(table_cat, table_schem, table_name). map{|r| r.to_hash}. select{|hash|self.same_fqn?(hash)}. sort_by{|record| record['KEY_SEQ']} if pk_records.empty? @primary_key = nil else @primary_key = Rubeus::Jdbc::PrimaryKey.new(, self, { :pk_name => pk_records.map{|record| record['PK_NAME']}.uniq.first, :column_names => pk_records.map{|record| record['COLUMN_NAME']. send([:name_case] || :to_s)} }, ) end end @primary_key end |
#primary_key_columns ⇒ Object Also known as: pk_columns
71 72 73 |
# File 'lib/rubeus/jdbc/table.rb', line 71 def primary_key_columns primary_key ? primary_key.columns : [] end |
#primary_key_names ⇒ Object Also known as: pk_names
66 67 68 |
# File 'lib/rubeus/jdbc/table.rb', line 66 def primary_key_names primary_key ? primary_key.column_names : [] end |
#rails_table_name ⇒ Object
185 186 187 188 189 190 191 |
# File 'lib/rubeus/jdbc/table.rb', line 185 def rails_table_name unless @rails_table_name @rails_table_name = table_name.downcase @rails_table_name = @rails_table_name.pluralize if pluralize_table_name end @rails_table_name end |
#rails_table_name=(value) ⇒ Object
193 194 195 |
# File 'lib/rubeus/jdbc/table.rb', line 193 def rails_table_name=(value) @rails_table_name = value end |