Class: Rubeus::Jdbc::Table

Inherits:
MetaElement show all
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

Attributes inherited from MetaElement

#jdbc_info, #meta_data, #options

Class Method Summary collapse

Instance Method Summary collapse

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

#columnsObject

Returns the value of attribute columns.



30
31
32
# File 'lib/rubeus/jdbc/table.rb', line 30

def columns
  @columns
end

#pluralize_table_nameObject

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_optionsObject

Returns the value of attribute rails_options.



196
197
198
# File 'lib/rubeus/jdbc/table.rb', line 196

def rails_options
  @rails_options
end

#ref_generationObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



25
26
27
# File 'lib/rubeus/jdbc/table.rb', line 25

def ref_generation
  @ref_generation
end

#remarksObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



25
26
27
# File 'lib/rubeus/jdbc/table.rb', line 25

def remarks
  @remarks
end

#self_referencing_col_nameObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



25
26
27
# File 'lib/rubeus/jdbc/table.rb', line 25

def self_referencing_col_name
  @self_referencing_col_name
end

#table_typeObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



25
26
27
# File 'lib/rubeus/jdbc/table.rb', line 25

def table_type
  @table_type
end

#type_catObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



25
26
27
# File 'lib/rubeus/jdbc/table.rb', line 25

def type_cat
  @type_cat
end

#type_nameObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



25
26
27
# File 'lib/rubeus/jdbc/table.rb', line 25

def type_name
  @type_name
end

#type_schemObject

  1. TABLE_CAT String => テーブルカタログ (null の可能性がある)

  2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)

  3. TABLE_NAME String => テーブル名

  4. TABLE_TYPE String => テーブルの型。典型的な型は、“TABLE”、“VIEW”、“SYSTEM TABLE”、“GLOBAL TEMPORARY”、“LOCAL TEMPORARY”、“ALIAS”、“SYNONYM” である

  5. REMARKS String => テーブルに関する説明

  6. TYPE_CAT String => の型のカタログ (null の可能性がある)

  7. TYPE_SCHEM String => の型のスキーマ (null の可能性がある)

  8. TYPE_NAME String => の型名 (null の可能性がある)

  9. SELF_REFERENCING_COL_NAME String => 型付きテーブルの指定された「識別子」列の名前 (null の可能性がある)

  10. REF_GENERATION String => SELF_REFERENCING_COL_NAME の値の作成方法を指定する。値は、“SYSTEM”、“USER”、“DERIVED” (null の可能性がある)

see also: java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String[])



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_keysObject



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, options)
        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(options[:name_case] || :to_s)
      foreign_key.pkcolumn_names << exported_key['PKCOLUMN_NAME'].send(options[:name_case] || :to_s)
    end
  end
  @exported_keys
end

#imported_keysObject 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, options)
        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(options[:name_case] || :to_s)
      foreign_key.pkcolumn_names << imported_key['PKCOLUMN_NAME'].send(options[:name_case] || :to_s)
    end
  end
  @imported_keys
end

#indexesObject



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, options)
        @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, options)
    end
  end
  @indexes
end

#inspectObject



32
33
34
# File 'lib/rubeus/jdbc/table.rb', line 32

def inspect
  "#<#{self.class} #{name}(%s)>" % columns.map(&:name).join(',')
end

#nameObject



36
37
38
# File 'lib/rubeus/jdbc/table.rb', line 36

def name
  self.table_name.send(options[:name_case] || :to_s)
end

#primary_keyObject 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(options[:name_case] || :to_s)}
        },
        options)
    end
  end
  @primary_key
end

#primary_key_columnsObject 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_namesObject 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_nameObject



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