rubeus 0.0.7-java → 0.0.8-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|