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.
- data/lib/rubeus.rb +2 -1
- data/lib/rubeus/awt/setters.rb +10 -13
- data/lib/rubeus/extensions/java/sql/connection.rb +6 -1
- data/lib/rubeus/extensions/java/sql/database_meta_data.rb +63 -0
- data/lib/rubeus/extensions/java/sql/result_set_meta_data.rb +2 -2
- data/lib/rubeus/extensions/javax/swing/j_component.rb +7 -8
- data/lib/rubeus/extensions/javax/swing/j_frame.rb +5 -6
- data/lib/rubeus/jdbc.rb +11 -5
- data/lib/rubeus/jdbc/column.rb +81 -48
- data/lib/rubeus/jdbc/foreign_key.rb +66 -0
- data/lib/rubeus/jdbc/index.rb +68 -0
- data/lib/rubeus/jdbc/meta_element.rb +58 -0
- data/lib/rubeus/jdbc/primary_key.rb +25 -0
- data/lib/rubeus/jdbc/result_set_column.rb +54 -0
- data/lib/rubeus/jdbc/table.rb +207 -0
- data/lib/rubeus/util.rb +5 -0
- data/lib/rubeus/util/name_access_array.rb +34 -0
- data/test/rubeus/extensions/java/sql/test_connection.rb +6 -14
- data/test/rubeus/extensions/java/sql/test_database_meta_data.rb +257 -0
- data/test/rubeus/extensions/java/sql/test_result_set.rb +6 -18
- data/test/rubeus/extensions/java/sql/test_result_set_meta_data.rb +6 -16
- data/test/rubeus/extensions/java/sql/test_sql_helper.rb +43 -0
- data/test/rubeus/extensions/java/sql/test_statement.rb +5 -3
- metadata +141 -128
data/lib/rubeus.rb
CHANGED
@@ -12,7 +12,7 @@ Kernel.module_eval <<-EOS
|
|
12
12
|
EOS
|
13
13
|
|
14
14
|
module Rubeus
|
15
|
-
VERSION = '0.0.
|
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
|
data/lib/rubeus/awt/setters.rb
CHANGED
@@ -5,22 +5,19 @@ module Rubeus::Awt
|
|
5
5
|
|
6
6
|
def self.included(base)
|
7
7
|
base.module_eval do
|
8
|
-
alias_method :
|
9
|
-
alias_method :
|
10
|
-
alias_method :
|
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
|
19
|
-
|
14
|
+
|
15
|
+
def set_size_rubeus(*args)
|
16
|
+
java_send :setSize, [Dimension], Dimension.create(*args)
|
20
17
|
end
|
21
|
-
|
22
|
-
def
|
23
|
-
|
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::
|
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::
|
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 :
|
9
|
-
alias_method :
|
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
|
15
|
-
|
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 :
|
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
|
23
|
-
|
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
|
data/lib/rubeus/jdbc.rb
CHANGED
@@ -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
|
-
'
|
10
|
-
'
|
11
|
-
'
|
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/
|
27
|
+
require "rubeus/jdbc/result_set_column"
|
28
|
+
require "rubeus/jdbc/table"
|
data/lib/rubeus/jdbc/column.rb
CHANGED
@@ -1,53 +1,86 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'rubeus/jdbc/meta_element'
|
1
3
|
module Rubeus::Jdbc
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
alias_method :
|
45
|
-
|
46
|
-
def
|
47
|
-
|
48
|
-
|
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
|