rubeus 0.0.7-java → 0.0.8-java

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,7 +12,7 @@ Kernel.module_eval <<-EOS
12
12
  EOS
13
13
 
14
14
  module Rubeus
15
- VERSION = '0.0.7'
15
+ VERSION = '0.0.8'
16
16
  EMAIL_GROUP = 'rubeus@googlegroups.com'
17
17
  WEB_SITE = 'http://code.google.com/p/rubeus/'
18
18
 
@@ -21,6 +21,7 @@ module Rubeus
21
21
  autoload :Awt, "rubeus/awt"
22
22
  autoload :Swing, "rubeus/swing"
23
23
  autoload :Jdbc, "rubeus/jdbc"
24
+ autoload :Util, "rubeus/util"
24
25
 
25
26
  def self.verbose; @verbose; end
26
27
  def self.verbose=(value); @verbose = value; end
@@ -5,22 +5,19 @@ module Rubeus::Awt
5
5
 
6
6
  def self.included(base)
7
7
  base.module_eval do
8
- alias_method :set_preferred_size_without_rubeus, :set_preferred_size
9
- alias_method :set_preferred_size, :set_preferred_size_with_rubeus
10
- alias_method :preferred_size=, :set_preferred_size_with_rubeus
11
-
12
- alias_method :set_size_without_rubeus, :set_size
13
- alias_method :set_size, :set_size_with_rubeus
14
- alias_method :size=, :set_size_with_rubeus
8
+ alias_method :set_preferred_size, :set_preferred_size_rubeus
9
+ alias_method :preferred_size=, :set_preferred_size_rubeus
10
+ alias_method :set_size, :set_size_rubeus
11
+ alias_method :size=, :set_size_rubeus
15
12
  end
16
13
  end
17
-
18
- def set_preferred_size_with_rubeus(*args)
19
- set_preferred_size_without_rubeus(Rubeus::Awt::Dimension.create(*args))
14
+
15
+ def set_size_rubeus(*args)
16
+ java_send :setSize, [Dimension], Dimension.create(*args)
20
17
  end
21
-
22
- def set_size_with_rubeus(*args)
23
- set_size_without_rubeus(Rubeus::Awt::Dimension.create(*args))
18
+
19
+ def set_preferred_size_rubeus(*args)
20
+ java_send :setPreferredSize, [Dimension], Dimension.create(*args)
24
21
  end
25
22
  end
26
23
  end
@@ -1,9 +1,10 @@
1
1
  Rubeus::Jdbc.depend_on("Statement")
2
+ Rubeus::Jdbc.depend_on("DatabaseMetaData")
2
3
 
3
4
  module Rubeus::Extensions::Java::Sql
4
5
  module Connection
5
6
  include Rubeus::Jdbc::CloseableResource
6
-
7
+
7
8
  def statement(*args, &block)
8
9
  with_close(create_statement(*args), &block)
9
10
  end
@@ -11,5 +12,9 @@ module Rubeus::Extensions::Java::Sql
11
12
  def query(sql, &block)
12
13
  statement{|st| st.query(sql, &block)}
13
14
  end
15
+
16
+ def tables(catalog, schema_pattern, table_name_pattern, options = nil)
17
+ getMetaData.table_objects(catalog, schema_pattern, table_name_pattern, options = nil)
18
+ end
14
19
  end
15
20
  end
@@ -0,0 +1,63 @@
1
+ Rubeus::Jdbc.depend_on("Statement")
2
+
3
+ module Rubeus::Extensions::Java::Sql
4
+ module DatabaseMetaData
5
+ def included(mod)
6
+ mod.module_eval do
7
+ alias_method :getTables_without_rubeus, :getTables
8
+ alias_method :getTables, :getTables_with_rubeus
9
+ end
10
+ end
11
+
12
+ def getTables_with_rubeus(*args, &block)
13
+ case args.length
14
+ when 0, 1 then table_objects(*args, &block)
15
+ else getTables_without_rubeus(*args, &block)
16
+ end
17
+ end
18
+ alias_method :tables, :getTables_with_rubeus
19
+
20
+ def table_object(table_name, options = nil)
21
+ options = {:table_name_pattern => table_name}.update(options || {})
22
+ table_objects(options).first
23
+ end
24
+ alias_method :table, :table_object
25
+
26
+ def table_objects(options = nil)
27
+ options = {
28
+ :catalog => nil,
29
+ :schema => nil,
30
+ :schema_pattern => nil,
31
+ :table => nil,
32
+ :table_name => nil,
33
+ :table_name_pattern => nil,
34
+ :name_case => nil # nil, :downcase, :upcase
35
+ }.update(options || {})
36
+ catalog = options[:catalog]
37
+ schema_pattern = options[:schema_pattern] || options[:schema]
38
+ table_name_pattern = options[:table_name_pattern] || options[:table_name] || options[:table]
39
+
40
+ @table_objects ||= {}
41
+ unless table_name_pattern.nil?
42
+ key = [catalog, schema_pattern, table_name_pattern].map{|s| s.nil? ? nil : s.to_s.upcase}
43
+ cached = @table_objects[key]
44
+ return [cached] if cached
45
+ end
46
+
47
+ tables = getTables(catalog, schema_pattern, table_name_pattern, nil).map do |rs|
48
+ Rubeus::Jdbc::Table.new(self, rs.to_hash, options)
49
+ end
50
+ tables = Rubeus::Util::NameAccessArray.new(*tables)
51
+
52
+ columns = getColumns(catalog, schema_pattern, table_name_pattern, nil).map{|r| r.to_hash}
53
+ tables.each do |table|
54
+ table.columns = Rubeus::Util::NameAccessArray.new(
55
+ *columns.
56
+ select{|hash|table.same_fqn?(hash)}.
57
+ map{|hash| Rubeus::Jdbc::Column.new(self, table, hash, options)})
58
+ end
59
+ tables.each{|t| @table_objects[t.fqn] = t}
60
+ tables
61
+ end
62
+ end
63
+ end
@@ -26,13 +26,13 @@ module Rubeus::Extensions::Java::Sql
26
26
  private
27
27
  def build_columns
28
28
  result = []
29
- attrs = Rubeus::Jdbc::Column::ATTRIBUTES
29
+ attrs = Rubeus::Jdbc::ResultSetColumn::ATTRIBUTES
30
30
  each do |i|
31
31
  column_hash = attrs.inject({}) do |dest, attr|
32
32
  dest[attr] = send(attr, i)
33
33
  dest
34
34
  end
35
- result << Rubeus::Jdbc::Column.new(i,column_hash)
35
+ result << Rubeus::Jdbc::ResultSetColumn.new(i,column_hash)
36
36
  end
37
37
  result
38
38
  end
@@ -1,19 +1,18 @@
1
- Rubeus::Awt.depend_on("Container")
1
+ Rubeus::Awt.depend_on("Container", "Dimension")
2
2
 
3
3
  module Rubeus::Extensions::Javax::Swing
4
4
  module JComponent
5
5
 
6
6
  def self.included(base)
7
7
  base.module_eval do
8
- alias_method :set_preferred_size_without_rubeus, :set_preferred_size
9
- alias_method :set_preferred_size, :set_preferred_size_with_rubeus
10
- alias_method :preferred_size=, :set_preferred_size_with_rubeus
8
+ alias_method :set_preferred_size, :set_preferred_size_rubeus
9
+ alias_method :preferred_size=, :set_preferred_size_rubeus
11
10
  end
12
11
  end
13
-
14
- def set_preferred_size_with_rubeus(*args)
15
- set_preferred_size_without_rubeus(Rubeus::Awt::Dimension.create(*args))
12
+
13
+ def set_preferred_size_rubeus(*args)
14
+ dimension = Rubeus::Awt::Dimension
15
+ java_send :setPreferredSize, [dimension], dimension.create(*args)
16
16
  end
17
-
18
17
  end
19
18
  end
@@ -11,16 +11,15 @@ module Rubeus::Extensions::Javax::Swing
11
11
  }
12
12
  if ENV_JAVA["java.specification.version"] == "1.6"
13
13
  base.module_eval do
14
- alias_method :set_size_without_rubeus, :set_size
15
- alias_method :set_size, :set_size_with_rubeus
16
- alias_method :size=, :set_size_with_rubeus
14
+ alias_method :size=, :set_size
17
15
  end
18
16
  end
19
17
  end
20
-
18
+
21
19
  if ENV_JAVA["java.specification.version"] == "1.6"
22
- def set_size_with_rubeus(*args)
23
- set_size_without_rubeus(Rubeus::Awt::Dimension.create(*args))
20
+ def set_size(*args)
21
+ java_send :setSize, [java.awt.Dimension],
22
+ Rubeus::Awt::Dimension.create(*args)
24
23
  end
25
24
  end
26
25
  end
@@ -5,18 +5,24 @@ module Rubeus
5
5
  Jdbc = ComponentLoader.new("java.sql") do
6
6
  class_to_package.update(
7
7
  # $JAVA_HOME/lib/classlistにないものリスト
8
- 'Connection' => 'java.sql',
9
- 'DriverManager' => 'java.sql',
10
- 'ResultSet' => 'java.sql',
11
- 'ResultSetMetaData' => 'java.sql',
8
+ 'Connection' => 'java.sql',
9
+ 'DatabaseMetaData' => 'java.sql',
10
+ 'DriverManager' => 'java.sql',
11
+ 'ResultSet' => 'java.sql',
12
+ 'ResultSetMetaData' => 'java.sql',
12
13
  'Statement' => 'java.sql'
13
14
  )
14
15
 
15
16
  def self.irb
16
17
  self.extend_with
17
18
  end
19
+
20
+ # auto_load :MetaElement, "rubeus/jdbc/meta_element"
21
+ # auto_load :Table, "rubeus/jdbc/table"
22
+ # auto_load :Column, "rubeus/jdbc/column"
18
23
  end
19
24
  end
20
25
 
21
26
  require "rubeus/jdbc/closeable_resource"
22
- require "rubeus/jdbc/column"
27
+ require "rubeus/jdbc/result_set_column"
28
+ require "rubeus/jdbc/table"
@@ -1,53 +1,86 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'rubeus/jdbc/meta_element'
1
3
  module Rubeus::Jdbc
2
- # ResultSetMetaDataから生成されます
3
- class Column
4
- ATTRIBUTES = [
5
- :column_index , #
6
- :catalog_name , # String # 指定された列のテーブルのカタログ名を取得します。
7
- :column_class_name , # String # Java クラスの完全指定された名前を返します。
8
- :column_display_size, # int # 指定された列の通常の最大幅を文字数で示します。
9
- :column_label , # String # 印刷や表示に使用する、指定された列の推奨タイトルを取得します。
10
- :column_name , # String # 指定された列の名前を取得します。
11
- :column_type , # int # 指定された列の SQL 型を取得します。
12
- :column_type_name , # String # 指定された列のデータベース固有の型名を取得します。
13
- :precision , # int # 指定された列の 10 進桁数を取得します。
14
- :scale , # int # 指定された列の小数点以下の桁数を取得します。
15
- :schema_name , # String # 指定された列のテーブルのスキーマを取得します。
16
- :table_name , # String # 指定された列のテーブル名を取得します。
17
- :auto_increment , # boolean # 指定された列が自動的に番号付けされて読み取り専用として扱われるかどうかを示します。
18
- :case_sensitive , # boolean # 列の大文字と小文字が区別されるかどうかを示します。
19
- :currency , # boolean # 指定された列がキャッシュの値かどうかを示します。
20
- :definitely_writable, # boolean # 指定された列の書き込みが必ず成功するかどうかを示します。
21
- :is_nullable , # int # 指定された列に NULL をセットできるかどうかを示します。
22
- :read_only , # boolean # 指定された列が絶対的に書き込み可能でないかどうかを示します。
23
- :searchable , # boolean # 指定された列を where 節で使用できるかどうかを示します。
24
- :signed , # boolean # 指定された列の値が符号付き数値かどうかを示します。
25
- :writable # boolean # 指定された列への書き込みを成功させることができるかどうかを示します。
26
- ]
27
- attr_reader(*ATTRIBUTES)
4
+ class Column < TableElement
5
+ include FullyQualifiedNamed
6
+
7
+ # 1. TABLE_CAT String => テーブルカタログ (null の可能性がある)
8
+ # 2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
9
+ # 3. TABLE_NAME String => テーブル名
10
+ # 4. COLUMN_NAME String => 列名
11
+ # 5. DATA_TYPE short => java.sql.Types からの SQL の型
12
+ # 6. TYPE_NAME String => データソース依存の型名。UDT の場合、型名は完全指定
13
+ # 7. COLUMN_SIZE int => 列サイズ。char や date の型については最大文字数、numeric や decimal の型については精度
14
+ # 8. BUFFER_LENGTH - 未使用
15
+ # 9. DECIMAL_DIGITS int => 小数点以下の桁数
16
+ # 10. NUM_PREC_RADIX int => 基数 (通常は、10 または 2 のどちらか)
17
+ # 11. NULLABLE int => NULL は許されるか
18
+ # * columnNoNulls - NULL 値を許さない可能性がある
19
+ # * columnNullable - 必ず NULL 値を許す
20
+ # * columnNullableUnknown - NULL 値を許すかどうかは不明
21
+ # 12. REMARKS String => コメント記述列 (null の可能性がある)
22
+ # 13. COLUMN_DEF String => デフォルト値 (null の可能性がある)
23
+ # 14. SQL_DATA_TYPE int => 未使用
24
+ # 15. SQL_DATETIME_SUB int => 未使用
25
+ # 16. CHAR_OCTET_LENGTH int => char の型については列の最大バイト数
26
+ # 17. ORDINAL_POSITION int => テーブル中の列のインデックス (1 から始まる)
27
+ # 18. IS_NULLABLE String => "NO" は、列は決して NULL 値を許さないことを意味する。"YES" は NULL 値を許す可能性があることを意味する。空の文字列は不明であることを意味する
28
+ # 19. SCOPE_CATLOG String => 参照属性のスコープであるテーブルのカタログ (DATA_TYPE が REF でない場合は null)
29
+ # 20. SCOPE_SCHEMA String => 参照属性のスコープであるテーブルのスキーマ (DATA_TYPE が REF でない場合は null)
30
+ # 21. SCOPE_TABLE String => 参照属性のスコープであるテーブル名 (DATA_TYPE が REF でない場合は null)
31
+ # 22. SOURCE_DATA_TYPE short => 個別の型またはユーザ生成 Ref 型、java.sql.Types の SQL 型のソースの型 (DATA_TYPE が DISTINCT またはユーザ生成 REF でない場合は null)
32
+ #
33
+ # see also:
34
+ # http://java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getColumns(java.lang.String,%20java.lang.String,%20java.lang.String,%20java.lang.String)
35
+ #
36
+ attr_accessor :column_name, :data_type, :type_name, :column_size,
37
+ :buffer_length, :decimal_digits, :num_prec_radix,
38
+ :nullable, :remarks, :column_def, :sql_data_type,
39
+ :sql_datetime_sub, :char_octet_length,
40
+ :ordinal_position, :is_nullable,
41
+ :scope_catlog, :scope_schema, :scope_table, :scope_data_type
42
+
43
+ alias_method :size, :column_size
44
+
45
+ def name
46
+ column_name.send(options[:name_case] || :to_s)
47
+ end
48
+
49
+ def jdbc_type
50
+ @column_type ||= (TYPE_ID_TO_NAMES[data_type] || type_name || '')
51
+ end
52
+
53
+ def rails_type
54
+ @rails_type ||= (
55
+ (table.primary_key != self.name) ? JDBC_TYPE_TO_RAILS_TYPE[jdbc_type] :
56
+ (/^id$/ =~ self.name) ? nil : :primary_key
57
+ )
58
+ end
59
+
60
+ def rails_type=(value)
61
+ @rails_type = value
62
+ end
28
63
 
29
- alias_method :index , :column_index
30
- alias_method :class_name , :column_class_name
31
- alias_method :display_size, :column_display_size
32
- alias_method :label , :column_label
33
- alias_method :name , :column_name
34
- alias_method :type_name , :column_type_name
35
-
36
- alias_method :auto_increment? , :auto_increment
37
- alias_method :case_sensitive? , :case_sensitive
38
- alias_method :currency? , :currency
39
- alias_method :definitely_writable?, :definitely_writable
40
- # alias_method :nullable?
41
- alias_method :read_only? , :read_only
42
- alias_method :searchable? , :searchable
43
- alias_method :signed? , :signed
44
- alias_method :writable? , :writable
45
-
46
- def initialize(index, attributes = {})
47
- @index = index
48
- attributes.each do |key, value|
49
- instance_variable_set("@#{key.to_s}", value)
50
- end
64
+ attr_accessor :rails_ignored
65
+ attr_accessor :rails_name, :rails_options
66
+ attr_reader :name_changed?
67
+
68
+ def nullable?
69
+ @_nullable ||= (is_nullable != 'NO')
70
+ end
71
+
72
+ def primary_key_index
73
+ @primary_key_index ||= table.primary_key_names.index(self.name)
74
+ end
75
+
76
+ def primary_key?
77
+ !!primary_key_index
78
+ end
79
+ alias_method :pk?, :primary_key?
80
+
81
+ def default
82
+ self.column_def.nil? ? nil :
83
+ /^NULL$/i =~ self.column_def.to_s ? nil : self.column_def
51
84
  end
52
85
  end
53
86
  end
@@ -0,0 +1,66 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Rubeus::Jdbc
3
+ class ForeignKey < TableElement
4
+ # 1. PKTABLE_CAT String => インポートされた主キーテーブルカタログ (null の可能性がある)
5
+ # 2. PKTABLE_SCHEM String => インポートされた主キーテーブルスキーマ (null の可能性がある)
6
+ # 3. PKTABLE_NAME String => インポートされた主キーテーブル名
7
+ # 4. PKCOLUMN_NAME String => インポートされた主キー列名
8
+ # 5. FKTABLE_CAT String => 外部キーテーブルカタログ (null の可能性がある)
9
+ # 6. FKTABLE_SCHEM String => 外部キーテーブルスキーマ (null の可能性がある)
10
+ # 7. FKTABLE_NAME String => 外部キーテーブル名
11
+ # 8. FKCOLUMN_NAME String => 外部キー列名
12
+ # 9. KEY_SEQ short => 外部キー中の連番
13
+ # 10. UPDATE_RULE short => 主キーが更新されるときに、外部キーに起こる内容は次のとおりである
14
+ # * importedNoAction - 主キーがインポートされたら、更新できない
15
+ # * importedKeyCascade - 主キーの更新に合致するように、インポートされたキーを変更する
16
+ # * importedKeySetNull - インポートされたキーの主キーが更新されたら、NULL に変更する
17
+ # * importedKeySetDefault - インポートされたキーの主キーが更新されたら、デフォルト値に変更する
18
+ # * importedKeyRestrict - importedKeyNoAction と同じ (ODBC 2.x との互換性のため)
19
+ # 11. DELETE_RULE short => 主キーが削除されると、外部キーに起こる内容は次のとおりである
20
+ # * importedKeyNoAction - 主キーがインポートされたら、削除できない
21
+ # * importedKeyCascade - 削除されたキーをインポートする行を、削除する
22
+ # * importedKeySetNull - インポートされたキーの主キーが削除されたら、NULL に変更する
23
+ # * importedKeyRestrict - importedKeyNoAction と同じ (ODBC 2.x との互換性のため)
24
+ # * importedKeySetDefault - インポートされたキーの主キーが削除されたら、デフォルト値に変更する
25
+ # 12. FK_NAME String => 外部キー名 (null の可能性がある)
26
+ # 13. PK_NAME String => 主キー名 (null の可能性がある)
27
+ # 14. DEFERRABILITY short => 外部キーの制限の評価はコミットまで延期できる
28
+ # * importedKeyInitiallyDeferred - 定義については SQL92 を参照
29
+ # * importedKeyInitiallyImmediate - 定義については SQL92 を参照
30
+ # * importedKeyNotDeferrable - 定義については SQL92 を参照
31
+ #
32
+ # see also:
33
+ # http://java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getExportedKeys(java.lang.String,%20java.lang.String,%20java.lang.String)
34
+ # http://java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getImportedKeys(java.lang.String,%20java.lang.String,%20java.lang.String)
35
+
36
+ ATTR_NAMES = [:pktable_cat, :pktable_schem, :pktable_name, # :pkcolumn_name,
37
+ :fktable_cat, :fktable_schem, :fktable_name, # :fkcolumn_name,
38
+ :key_seq, :update_rule, :delete_rule, :fk_name, :pk_name, :deferrability]
39
+ attr_accessor *ATTR_NAMES
40
+
41
+ attr_accessor :fkcolumn_names, :pkcolumn_names
42
+ attr_accessor :fktable, :pktable
43
+
44
+ def name
45
+ fk_name.send(options[:name_case] || :to_s)
46
+ end
47
+
48
+ def pretty_print_instance_variables
49
+ super - [:@fktable, :@pktable]
50
+ end
51
+
52
+ def length
53
+ pkcolumn_names.length
54
+ end
55
+ alias_method :size, :length
56
+
57
+ def fkcolumns
58
+ @fkcolumns ||= fkcolumn_names.map{|name| fktable.columns[name]}
59
+ end
60
+
61
+ def pkcolumns
62
+ @pkcolumns ||= pkcolumn_names.map{|name| pktable.columns[name]}
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,68 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'rubeus/jdbc/meta_element'
3
+ module Rubeus::Jdbc
4
+ class Index < TableElement
5
+ include FullyQualifiedNamed
6
+
7
+ # 1. TABLE_CAT String => テーブルカタログ (null の可能性がある)
8
+ # 2. TABLE_SCHEM String => テーブルスキーマ (null の可能性がある)
9
+ # 3. TABLE_NAME String => テーブル名
10
+ # 4. NON_UNIQUE boolean => インデックス値は一意でない値にできるか。TYPE が tableIndexStatistic の場合は false
11
+ # 5. INDEX_QUALIFIER String => インデックスカタログ (null の可能性がある)。TYPE が tableIndexStatistic の場合は null
12
+ # 6. INDEX_NAME String => インデックス名。TYPE が tableIndexStatistic の場合は null
13
+ # 7. TYPE short => インデックスの型
14
+ # * tableIndexStatistic - テーブルのインデックスの記述に連動して返されるテーブルの統計情報を識別する
15
+ # * tableIndexClustered - クラスタ化されたインデックス
16
+ # * tableIndexHashed - ハッシュ化されたインデックス
17
+ # * tableIndexOther - インデックスのその他のスタイル
18
+ # 8. ORDINAL_POSITION short => インデックス中の列シーケンス。TYPE が tableIndexStatistic の場合は 0
19
+ # 9. COLUMN_NAME String => 列名。TYPE が tableIndexStatistic の場合は null
20
+ # 10. ASC_OR_DESC String => 列ソートシーケンス、「A」=> 昇順、「D」=> 降順、ソートシーケンスがサポートされていない場合は、null の可能性がある。TYPE が tableIndexStatistic の場合は null
21
+ # 11. CARDINALITY int => TYPE が tableIndexStatistic の場合、テーブル中の列数。そうでない場合は、インデックス中の一意の値の数
22
+ # 12. PAGES int => TYPE が tableIndexStatistic の場合、テーブルで使用されるページ数。そうでない場合は、現在のインデックスで使用されるページ数
23
+ # 13. FILTER_CONDITION String => もしあれば、フィルタ条件 (null の可能性がある)
24
+ #
25
+ # see also:
26
+ # http://java.sun.com/javase/ja/6/docs/ja/api/java/sql/DatabaseMetaData.html#getIndexInfo(java.lang.String,%20java.lang.String,%20java.lang.String,%20boolean,%20boolean)
27
+ #
28
+ RECORD_UNIQUE_ATTRS = [:table_cat, :table_schem, :table_name, :non_unique, :index_qualifier, :index_name]
29
+ ATTR_NAMES = [:table_cat, :table_schem, :table_name, :non_unique, :index_qualifier, :index_name, :type,
30
+ # :orinal_position, :column_name, :asc_or_desc, :cardinality,
31
+ :pages, :filter_condition]
32
+ attr_accessor(*(ATTR_NAMES - [:table_cat, :table_schem, :table_name]))
33
+
34
+ def name
35
+ index_name.send(options[:name_case] || :to_s)
36
+ end
37
+
38
+ def keys
39
+ @key ||= Rubeus::Util::NameAccessArray.new
40
+ end
41
+
42
+ class Key < MetaElement
43
+ # 8. ORDINAL_POSITION short => インデックス中の列シーケンス。TYPE が tableIndexStatistic の場合は 0
44
+ # 9. COLUMN_NAME String => 列名。TYPE が tableIndexStatistic の場合は null
45
+ # 10. ASC_OR_DESC String => 列ソートシーケンス、「A」=> 昇順、「D」=> 降順、ソートシーケンスがサポートされていない場合は、null の可能性がある。TYPE が tableIndexStatistic の場合は null
46
+ # 11. CARDINALITY int => TYPE が tableIndexStatistic の場合、テーブル中の列数。そうでない場合は、インデックス中の一意の値の数
47
+
48
+ ATTR_NAMES = [:orinal_position, :column_name, :asc_or_desc, :cardinality] #, :pages, :filter_condition
49
+ attr_accessor(*(ATTR_NAMES - [:table_cat, :table_schem, :table_name]))
50
+
51
+ def initialize(meta_data, index, *args, &block)
52
+ super(meta_data, *args, &block)
53
+ @index = index
54
+ end
55
+
56
+ def name
57
+ column_name.send(options[:name_case] || :to_s)
58
+ end
59
+
60
+ def pretty_print_instance_variables
61
+ super - [:@index]
62
+ end
63
+
64
+ def desc?; asc_or_desc == 'D' end
65
+ def asc?; !desc? end
66
+ end
67
+ end
68
+ end