ruby-oci8 2.0.6-x86-mingw32 → 2.1.0-x86-mingw32
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +366 -19
- data/Makefile +2 -8
- data/NEWS +111 -0
- data/README +4 -85
- data/VERSION +1 -1
- data/dist-files +9 -2
- data/lib/oci8.rb +19 -13
- data/lib/oci8.rb.in +19 -13
- data/lib/oci8/.document +2 -0
- data/lib/oci8/bindtype.rb +62 -45
- data/lib/oci8/connection_pool.rb +118 -0
- data/lib/oci8/datetime.rb +304 -320
- data/lib/oci8/encoding-init.rb +62 -30
- data/lib/oci8/encoding.yml +3 -3
- data/lib/oci8/metadata.rb +552 -497
- data/lib/oci8/object.rb +9 -9
- data/lib/oci8/oci8.rb +161 -2
- data/lib/oci8/ocihandle.rb +427 -0
- data/lib/oci8/properties.rb +31 -1
- data/lib/oci8lib_18.so +0 -0
- data/lib/oci8lib_191.so +0 -0
- data/ruby-oci8.gemspec +10 -3
- data/test/README +41 -3
- data/test/config.rb +16 -0
- data/test/test_all.rb +3 -0
- data/test/test_bind_string.rb +106 -0
- data/test/test_break.rb +33 -7
- data/test/test_clob.rb +13 -10
- data/test/test_connection_pool.rb +125 -0
- data/test/test_connstr.rb +2 -2
- data/test/test_datetime.rb +26 -66
- data/test/test_encoding.rb +7 -3
- data/test/test_error.rb +88 -0
- data/test/test_metadata.rb +1356 -204
- data/test/test_oci8.rb +27 -8
- data/test/test_oranumber.rb +41 -0
- metadata +10 -5
data/lib/oci8/encoding-init.rb
CHANGED
@@ -2,44 +2,76 @@
|
|
2
2
|
# setup default OCI encoding from NLS_LANG.
|
3
3
|
#
|
4
4
|
|
5
|
-
|
6
|
-
nls_lang = ENV['NLS_LANG']
|
5
|
+
class OCI8
|
7
6
|
|
8
|
-
#
|
9
|
-
|
10
|
-
|
11
|
-
if
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
7
|
+
# get the environment variable NLS_LANG.
|
8
|
+
nls_lang = ENV['NLS_LANG']
|
9
|
+
|
10
|
+
if nls_lang.is_a? String and nls_lang.length == 0
|
11
|
+
nls_lang = nil
|
12
|
+
end
|
13
|
+
|
14
|
+
# if NLS_LANG is not set, get it from the Windows registry.
|
15
|
+
if nls_lang.nil? and defined? OCI8::Win32Util
|
16
|
+
dll_path = OCI8::Win32Util.dll_path.upcase
|
17
|
+
if dll_path =~ %r{\\BIN\\OCI.DLL}
|
18
|
+
oracle_home = $`
|
19
|
+
OCI8::Win32Util.enum_homes do |home, lang|
|
20
|
+
if oracle_home == home.upcase
|
21
|
+
nls_lang = lang
|
22
|
+
break
|
23
|
+
end
|
17
24
|
end
|
18
25
|
end
|
19
26
|
end
|
20
|
-
end
|
21
27
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
28
|
+
# extract the charset name.
|
29
|
+
if nls_lang
|
30
|
+
if nls_lang =~ /\.([[:alnum:]]+)$/
|
31
|
+
@@client_charset_name = $1.upcase
|
32
|
+
else
|
33
|
+
raise "Invalid NLS_LANG format: #{nls_lang}"
|
34
|
+
end
|
26
35
|
else
|
27
|
-
|
36
|
+
warn "Warning: NLS_LANG is not set. fallback to US7ASCII."
|
37
|
+
@@client_charset_name = 'US7ASCII'
|
28
38
|
end
|
29
39
|
|
30
|
-
#
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
40
|
+
# NLS ratio, maximum number of bytes per one chracter
|
41
|
+
case @@client_charset_name
|
42
|
+
when 'UTF8'
|
43
|
+
OCI8.nls_ratio = 3
|
44
|
+
when 'AL16UTF16'
|
45
|
+
OCI8.nls_ratio = 4
|
46
|
+
when /^[[:alpha:]]+(\d+)/
|
47
|
+
# convert maximum number of bits per one chracter to NLS ratio.
|
48
|
+
# charset name max bits max bytes
|
49
|
+
# ------------ -------- ---------
|
50
|
+
# US7ASCII 7 1
|
51
|
+
# WE8ISO8859P1 8 1
|
52
|
+
# JA16SJIS 16 2
|
53
|
+
# AL32UTF8 32 4
|
54
|
+
# ...
|
55
|
+
OCI8.nls_ratio = (($1.to_i + 7) >> 3)
|
56
|
+
else
|
57
|
+
raise "Unknown NLS character set name format: #{@@client_charset_name}"
|
36
58
|
end
|
37
|
-
|
38
|
-
|
39
|
-
|
59
|
+
|
60
|
+
# Ruby encoding name for ruby 1.9.
|
61
|
+
if OCI8.respond_to? :encoding
|
62
|
+
if defined? DEFAULT_OCI8_ENCODING
|
63
|
+
enc = DEFAULT_OCI8_ENCODING
|
64
|
+
else
|
65
|
+
require 'yaml'
|
66
|
+
enc = YAML::load_file(File.dirname(__FILE__) + '/encoding.yml')[@@client_charset_name]
|
67
|
+
if enc.nil?
|
68
|
+
raise "Ruby encoding name is not found in encoding.yml for NLS_LANG #{nls_lang}."
|
69
|
+
end
|
70
|
+
if enc.is_a? Array
|
71
|
+
# Use the first available encoding in the array.
|
72
|
+
enc = enc.find do |e| Encoding.find(e) rescue false; end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
OCI8.encoding = enc
|
40
76
|
end
|
41
|
-
else
|
42
|
-
warn "Warning: NLS_LANG is not set. fallback to US-ASCII."
|
43
|
-
enc = 'US-ASCII'
|
44
77
|
end
|
45
|
-
OCI8.encoding = enc
|
data/lib/oci8/encoding.yml
CHANGED
@@ -40,10 +40,10 @@ ZHS16GBK: GBK
|
|
40
40
|
# MS Windows Code Page 950 with Hong Kong Supplementary Character
|
41
41
|
# Set HKSCS-2001 (character set conversion to and from Unicode is
|
42
42
|
# based on Unicode 3.0)
|
43
|
-
ZHT16HKSCS: [Big5-HKSCS, Big5]
|
43
|
+
ZHT16HKSCS: [CP951, Big5-HKSCS, Big5]
|
44
44
|
|
45
45
|
# MS Windows Code Page 950 Traditional Chinese
|
46
|
-
ZHT16MSWIN950: Big5
|
46
|
+
ZHT16MSWIN950: [CP950, Big5]
|
47
47
|
|
48
48
|
# EUC 32-bit Traditional Chinese
|
49
49
|
ZHT32EUC: EUC-TW # Who use this?
|
@@ -166,7 +166,7 @@ ZHT16DBT: nil # FIXME
|
|
166
166
|
# MS Windows Code Page 950 with Hong Kong Supplementary Character
|
167
167
|
# Set HKSCS-2001 (character set conversion to and from Unicode is
|
168
168
|
# based on Unicode 3.1)
|
169
|
-
ZHT16HKSCS31: [Big5-HKSCS, Big5]
|
169
|
+
ZHT16HKSCS31: [CP951, Big5-HKSCS, Big5]
|
170
170
|
|
171
171
|
# SOPS 32-bit Traditional Chinese
|
172
172
|
ZHT32SOPS: nil # FIXME
|
data/lib/oci8/metadata.rb
CHANGED
@@ -1,264 +1,99 @@
|
|
1
|
-
#
|
1
|
+
# oci8.rb -- implements OCI8::Metadata.
|
2
|
+
#
|
3
|
+
# Copyright (C) 2006-2010 KUBO Takehiro <kubo@jiubao.org>
|
4
|
+
#
|
2
5
|
# See {'Describing Schema Metadata' in Oracle Call Interface Programmer's Guide}
|
3
6
|
# [http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14250/oci06des.htm]
|
4
7
|
|
5
8
|
#
|
6
9
|
class OCI8
|
7
10
|
|
8
|
-
#
|
9
|
-
|
10
|
-
#
|
11
|
-
|
12
|
-
OCI_ATTR_DATA_TYPE = 2 # the SQL type of the column/argument
|
13
|
-
OCI_ATTR_NAME = 4 # the name of the column/argument
|
14
|
-
OCI_ATTR_PRECISION = 5 # precision if number type
|
15
|
-
OCI_ATTR_SCALE = 6 # scale if number type
|
16
|
-
OCI_ATTR_IS_NULL = 7 # is it null ?
|
17
|
-
OCI_ATTR_TYPE_NAME = 8 # name of the named data type or a package name
|
18
|
-
OCI_ATTR_SCHEMA_NAME = 9 # the schema name
|
19
|
-
OCI_ATTR_SUB_NAME = 10 # type name if package private type
|
20
|
-
OCI_ATTR_POSITION = 11 # relative position
|
21
|
-
OCI_ATTR_PDSCL = 16 # packed decimal scale
|
22
|
-
OCI_ATTR_FSPRECISION = OCI_ATTR_PDSCL # fs prec for datetime data types
|
23
|
-
OCI_ATTR_PDPRC = 17 # packed decimal format
|
24
|
-
OCI_ATTR_LFPRECISION = OCI_ATTR_PDPRC # fs prec for datetime data types
|
25
|
-
OCI_ATTR_CHARSET_ID = 31 # Character Set ID
|
26
|
-
OCI_ATTR_CHARSET_FORM = 32 # Character Set Form
|
27
|
-
OCI_ATTR_NUM_COLS = 102 # number of columns
|
28
|
-
OCI_ATTR_LIST_COLUMNS = 103 # parameter of the column list
|
29
|
-
OCI_ATTR_RDBA = 104 # DBA of the segment header
|
30
|
-
OCI_ATTR_CLUSTERED = 105 # whether the table is clustered
|
31
|
-
OCI_ATTR_PARTITIONED = 106 # whether the table is partitioned
|
32
|
-
OCI_ATTR_INDEX_ONLY = 107 # whether the table is index only
|
33
|
-
OCI_ATTR_LIST_ARGUMENTS = 108 # parameter of the argument list
|
34
|
-
OCI_ATTR_LIST_SUBPROGRAMS = 109 # parameter of the subprogram list
|
35
|
-
OCI_ATTR_REF_TDO = 110 # REF to the type descriptor
|
36
|
-
OCI_ATTR_LINK = 111 # the database link name
|
37
|
-
OCI_ATTR_MIN = 112 # minimum value
|
38
|
-
OCI_ATTR_MAX = 113 # maximum value
|
39
|
-
OCI_ATTR_INCR = 114 # increment value
|
40
|
-
OCI_ATTR_CACHE = 115 # number of sequence numbers cached
|
41
|
-
OCI_ATTR_ORDER = 116 # whether the sequence is ordered
|
42
|
-
OCI_ATTR_HW_MARK = 117 # high-water mark
|
43
|
-
OCI_ATTR_TYPE_SCHEMA = 118 # type's schema name
|
44
|
-
OCI_ATTR_TIMESTAMP = 119 # timestamp of the object
|
45
|
-
OCI_ATTR_NUM_PARAMS = 121 # number of parameters
|
46
|
-
OCI_ATTR_OBJID = 122 # object id for a table or view
|
47
|
-
OCI_ATTR_OVERLOAD_ID = 125 # overload ID for funcs and procs
|
48
|
-
OCI_ATTR_TABLESPACE = 126 # table name space
|
49
|
-
OCI_ATTR_LTYPE = 128 # list type
|
50
|
-
OCI_ATTR_IS_TEMPORARY = 130 # whether table is temporary
|
51
|
-
OCI_ATTR_IS_TYPED = 131 # whether table is typed
|
52
|
-
OCI_ATTR_DURATION = 132 # duration of temporary table
|
53
|
-
OCI_ATTR_IS_INVOKER_RIGHTS = 133 # is invoker rights
|
54
|
-
OCI_ATTR_OBJ_NAME = 134 # top level schema obj name
|
55
|
-
OCI_ATTR_OBJ_SCHEMA = 135 # schema name
|
56
|
-
OCI_ATTR_OBJ_ID = 136 # top level schema object id
|
57
|
-
# OCI_ATTR_OVERLOAD = 210 # is this position overloaded
|
58
|
-
OCI_ATTR_LEVEL = 211 # level for structured types
|
59
|
-
OCI_ATTR_HAS_DEFAULT = 212 # has a default value
|
60
|
-
OCI_ATTR_IOMODE = 213 # in, out inout
|
61
|
-
OCI_ATTR_RADIX = 214 # returns a radix
|
62
|
-
# OCI_ATTR_NUM_ARGS = 215 # total number of arguments
|
63
|
-
OCI_ATTR_TYPECODE = 216 # object or collection
|
64
|
-
OCI_ATTR_COLLECTION_TYPECODE = 217 # varray or nested table
|
65
|
-
OCI_ATTR_VERSION = 218 # user assigned version
|
66
|
-
OCI_ATTR_IS_INCOMPLETE_TYPE = 219 # is this an incomplete type
|
67
|
-
OCI_ATTR_IS_SYSTEM_TYPE = 220 # a system type
|
68
|
-
OCI_ATTR_IS_PREDEFINED_TYPE = 221 # a predefined type
|
69
|
-
OCI_ATTR_IS_TRANSIENT_TYPE = 222 # a transient type
|
70
|
-
OCI_ATTR_IS_SYSTEM_GENERATED_TYPE = 223 # system generated type
|
71
|
-
OCI_ATTR_HAS_NESTED_TABLE = 224 # contains nested table attr
|
72
|
-
OCI_ATTR_HAS_LOB = 225 # has a lob attribute
|
73
|
-
OCI_ATTR_HAS_FILE = 226 # has a file attribute
|
74
|
-
OCI_ATTR_COLLECTION_ELEMENT = 227 # has a collection attribute
|
75
|
-
OCI_ATTR_NUM_TYPE_ATTRS = 228 # number of attribute types
|
76
|
-
OCI_ATTR_LIST_TYPE_ATTRS = 229 # list of type attributes
|
77
|
-
OCI_ATTR_NUM_TYPE_METHODS = 230 # number of type methods
|
78
|
-
OCI_ATTR_LIST_TYPE_METHODS = 231 # list of type methods
|
79
|
-
OCI_ATTR_MAP_METHOD = 232 # map method of type
|
80
|
-
OCI_ATTR_ORDER_METHOD = 233 # order method of type
|
81
|
-
OCI_ATTR_NUM_ELEMS = 234 # number of elements
|
82
|
-
OCI_ATTR_ENCAPSULATION = 235 # encapsulation level
|
83
|
-
OCI_ATTR_IS_SELFISH = 236 # method selfish
|
84
|
-
# OCI_ATTR_IS_VIRTUAL = 237 # virtual
|
85
|
-
# OCI_ATTR_IS_INLINE = 238 # inline
|
86
|
-
# OCI_ATTR_IS_CONSTANT = 239 # constant
|
87
|
-
OCI_ATTR_HAS_RESULT = 240 # has result
|
88
|
-
OCI_ATTR_IS_CONSTRUCTOR = 241 # constructor
|
89
|
-
OCI_ATTR_IS_DESTRUCTOR = 242 # destructor
|
90
|
-
# OCI_ATTR_IS_OPERATOR = 243 # operator
|
91
|
-
OCI_ATTR_IS_MAP = 244 # a map method
|
92
|
-
OCI_ATTR_IS_ORDER = 245 # order method
|
93
|
-
OCI_ATTR_IS_RNDS = 246 # read no data state method
|
94
|
-
OCI_ATTR_IS_RNPS = 247 # read no process state
|
95
|
-
OCI_ATTR_IS_WNDS = 248 # write no data state method
|
96
|
-
OCI_ATTR_IS_WNPS = 249 # write no process state
|
97
|
-
OCI_ATTR_IS_SUBTYPE = 258
|
98
|
-
OCI_ATTR_SUPERTYPE_SCHEMA_NAME = 259
|
99
|
-
OCI_ATTR_SUPERTYPE_NAME = 260
|
100
|
-
OCI_ATTR_LIST_OBJECTS = 261 # list of objects in schema
|
101
|
-
OCI_ATTR_NCHARSET_ID = 262 # char set id
|
102
|
-
OCI_ATTR_LIST_SCHEMAS = 263 # list of schemas
|
103
|
-
OCI_ATTR_MAX_PROC_LEN = 264 # max procedure length
|
104
|
-
OCI_ATTR_MAX_COLUMN_LEN = 265 # max column name length
|
105
|
-
OCI_ATTR_CURSOR_COMMIT_BEHAVIOR = 266 # cursor commit behavior
|
106
|
-
OCI_ATTR_MAX_CATALOG_NAMELEN = 267 # catalog namelength
|
107
|
-
OCI_ATTR_CATALOG_LOCATION = 268 # catalog location
|
108
|
-
OCI_ATTR_SAVEPOINT_SUPPORT = 269 # savepoint support
|
109
|
-
OCI_ATTR_NOWAIT_SUPPORT = 270 # nowait support
|
110
|
-
OCI_ATTR_AUTOCOMMIT_DDL = 271 # autocommit DDL
|
111
|
-
OCI_ATTR_LOCKING_MODE = 272 # locking mode
|
112
|
-
# OCI_ATTR_CLIENT_IDENTIFIER = 278 # value of client id to set
|
113
|
-
OCI_ATTR_IS_FINAL_TYPE = 279 # is final type ?
|
114
|
-
OCI_ATTR_IS_INSTANTIABLE_TYPE = 280 # is instantiable type ?
|
115
|
-
OCI_ATTR_IS_FINAL_METHOD = 281 # is final method ?
|
116
|
-
OCI_ATTR_IS_INSTANTIABLE_METHOD = 282 # is instantiable method ?
|
117
|
-
OCI_ATTR_IS_OVERRIDING_METHOD = 283 # is overriding method ?
|
118
|
-
# OCI_ATTR_DESC_SYNBASE = 284 # Describe the base object
|
119
|
-
OCI_ATTR_CHAR_USED = 285 # char length semantics
|
120
|
-
OCI_ATTR_CHAR_SIZE = 286 # char length
|
121
|
-
OCI_ATTR_CONDITION = 342 # rule condition
|
122
|
-
OCI_ATTR_COMMENT = 343 # comment
|
123
|
-
OCI_ATTR_VALUE = 344 # Anydata value
|
124
|
-
OCI_ATTR_EVAL_CONTEXT_OWNER = 345 # eval context owner
|
125
|
-
OCI_ATTR_EVAL_CONTEXT_NAME = 346 # eval context name
|
126
|
-
OCI_ATTR_EVALUATION_FUNCTION = 347 # eval function name
|
127
|
-
OCI_ATTR_VAR_TYPE = 348 # variable type
|
128
|
-
OCI_ATTR_VAR_VALUE_FUNCTION = 349 # variable value function
|
129
|
-
OCI_ATTR_VAR_METHOD_FUNCTION = 350 # variable method function
|
130
|
-
# OCI_ATTR_ACTION_CONTEXT = 351 # action context
|
131
|
-
OCI_ATTR_LIST_TABLE_ALIASES = 352 # list of table aliases
|
132
|
-
OCI_ATTR_LIST_VARIABLE_TYPES = 353 # list of variable types
|
133
|
-
OCI_ATTR_TABLE_NAME = 356 # table name
|
134
|
-
|
135
|
-
# OCI Parameter Types
|
136
|
-
OCI_PTYPE_UNK = 0 # unknown
|
137
|
-
OCI_PTYPE_TABLE = 1 # table
|
138
|
-
OCI_PTYPE_VIEW = 2 # view
|
139
|
-
OCI_PTYPE_PROC = 3 # procedure
|
140
|
-
OCI_PTYPE_FUNC = 4 # function
|
141
|
-
OCI_PTYPE_PKG = 5 # package
|
142
|
-
OCI_PTYPE_TYPE = 6 # user-defined type
|
143
|
-
OCI_PTYPE_SYN = 7 # synonym
|
144
|
-
OCI_PTYPE_SEQ = 8 # sequence
|
145
|
-
OCI_PTYPE_COL = 9 # column
|
146
|
-
OCI_PTYPE_ARG = 10 # argument
|
147
|
-
OCI_PTYPE_LIST = 11 # list
|
148
|
-
OCI_PTYPE_TYPE_ATTR = 12 # user-defined type's attribute
|
149
|
-
OCI_PTYPE_TYPE_COLL = 13 # collection type's element
|
150
|
-
OCI_PTYPE_TYPE_METHOD = 14 # user-defined type's method
|
151
|
-
OCI_PTYPE_TYPE_ARG = 15 # user-defined type method's arg
|
152
|
-
OCI_PTYPE_TYPE_RESULT = 16 # user-defined type method's result
|
153
|
-
OCI_PTYPE_SCHEMA = 17 # schema
|
154
|
-
OCI_PTYPE_DATABASE = 18 # database
|
155
|
-
OCI_PTYPE_RULE = 19 # rule
|
156
|
-
OCI_PTYPE_RULE_SET = 20 # rule set
|
157
|
-
OCI_PTYPE_EVALUATION_CONTEXT = 21 # evaluation context
|
158
|
-
OCI_PTYPE_TABLE_ALIAS = 22 # table alias
|
159
|
-
OCI_PTYPE_VARIABLE_TYPE = 23 # variable type
|
160
|
-
OCI_PTYPE_NAME_VALUE = 24 # name value pair
|
161
|
-
|
162
|
-
# OCI List Types
|
163
|
-
OCI_LTYPE_UNK = 0 # unknown
|
164
|
-
OCI_LTYPE_COLUMN = 1 # column list
|
165
|
-
OCI_LTYPE_ARG_PROC = 2 # procedure argument list
|
166
|
-
OCI_LTYPE_ARG_FUNC = 3 # function argument list
|
167
|
-
OCI_LTYPE_SUBPRG = 4 # subprogram list
|
168
|
-
OCI_LTYPE_TYPE_ATTR = 5 # type attribute
|
169
|
-
OCI_LTYPE_TYPE_METHOD = 6 # type method
|
170
|
-
OCI_LTYPE_TYPE_ARG_PROC = 7 # type method w/o result argument list
|
171
|
-
OCI_LTYPE_TYPE_ARG_FUNC = 8 # type method w/result argument list
|
172
|
-
OCI_LTYPE_SCH_OBJ = 9 # schema object list
|
173
|
-
OCI_LTYPE_DB_SCH = 10 # database schema list
|
174
|
-
OCI_LTYPE_TYPE_SUBTYPE = 11 # subtype list
|
175
|
-
OCI_LTYPE_TABLE_ALIAS = 12 # table alias list
|
176
|
-
OCI_LTYPE_VARIABLE_TYPE = 13 # variable type list
|
177
|
-
OCI_LTYPE_NAME_VALUE = 14 # name value list
|
178
|
-
|
179
|
-
# OBJECT Duration in oro.h
|
180
|
-
OCI_DURATION_INVALID = 0xFFFF
|
181
|
-
OCI_DURATION_BEGIN = 10
|
182
|
-
OCI_DURATION_NULL = OCI_DURATION_BEGIN - 1
|
183
|
-
OCI_DURATION_DEFAULT = OCI_DURATION_BEGIN - 2
|
184
|
-
OCI_DURATION_USER_CALLBACK = OCI_DURATION_BEGIN - 3
|
185
|
-
OCI_DURATION_NEXT = OCI_DURATION_BEGIN - 4
|
186
|
-
OCI_DURATION_SESSION = OCI_DURATION_BEGIN
|
187
|
-
OCI_DURATION_TRANS = OCI_DURATION_BEGIN + 1
|
188
|
-
OCI_DURATION_CALL = OCI_DURATION_BEGIN + 2
|
189
|
-
OCI_DURATION_STATEMENT = OCI_DURATION_BEGIN + 3
|
190
|
-
OCI_DURATION_CALLOUT = OCI_DURATION_BEGIN + 4
|
191
|
-
|
192
|
-
# :startdoc:
|
193
|
-
|
194
|
-
# = OCI8 can describe database object's metadata.
|
195
|
-
# [user objects]
|
196
|
-
# OCI8#describe_any(object_name)
|
197
|
-
# [table or view]
|
198
|
-
# OCI8#describe_table(table_name, table_only = false)
|
199
|
-
# [view]
|
200
|
-
# OCI8#describe_view(view_name)
|
201
|
-
# [procedure]
|
202
|
-
# OCI8#describe_procedure(procedure_name)
|
203
|
-
# [function]
|
204
|
-
# OCI8#describe_function(function_name)
|
205
|
-
# [package]
|
206
|
-
# OCI8#describe_package(package_name)
|
207
|
-
# [type]
|
208
|
-
# OCI8#describe_type(type_name)
|
209
|
-
# [synonym]
|
210
|
-
# OCI8#describe_synonym(synonym_name, check_public_also = false)
|
211
|
-
# [sequence]
|
212
|
-
# OCI8#describe_sequence(sequence_name)
|
213
|
-
# [schema]
|
214
|
-
# OCI8#describe_schema(schema_name)
|
215
|
-
# [database]
|
216
|
-
# OCI8#describe_database(database_name)
|
11
|
+
# OCI8 has methods to obtain information about database objects such
|
12
|
+
# as tables, views, procedures, functions ans so on. The obtained
|
13
|
+
# data are called metadata and retrived as an instance of
|
14
|
+
# OCI8::Metadata::Base's subclass.
|
217
15
|
#
|
218
|
-
#
|
219
|
-
#
|
16
|
+
# List of methods which return OCI8::Metadata::Base.
|
17
|
+
# * OCI8#describe_any(object_name)
|
18
|
+
# * OCI8#describe_table(table_name, table_only = false)
|
19
|
+
# * OCI8#describe_view(view_name)
|
20
|
+
# * OCI8#describe_procedure(procedure_name)
|
21
|
+
# * OCI8#describe_function(function_name)
|
22
|
+
# * OCI8#describe_package(package_name)
|
23
|
+
# * OCI8#describe_type(type_name)
|
24
|
+
# * OCI8#describe_synonym(synonym_name, check_public_also = true)
|
25
|
+
# * OCI8#describe_sequence(sequence_name)
|
26
|
+
# * OCI8#describe_schema(schema_name)
|
27
|
+
# * OCI8#describe_database(database_name)
|
28
|
+
# * OCI8::Metadata::Type#map_method
|
29
|
+
# * OCI8::Metadata::Type#order_method
|
30
|
+
# * OCI8::Metadata::Type#collection_element
|
220
31
|
#
|
221
|
-
#
|
32
|
+
# List of methods which return an array of OCI8::Metadata::Base.
|
33
|
+
# * OCI8::Cursor#column_metadata
|
34
|
+
# * OCI8::Metadata::Database#schemas
|
35
|
+
# * OCI8::Metadata::Schema#all_objects
|
36
|
+
# * OCI8::Metadata::Schema#objects
|
37
|
+
# * OCI8::Metadata::Table#columns
|
38
|
+
# * OCI8::Metadata::Package#subprograms
|
39
|
+
# * OCI8::Metadata::Procedure#arguments
|
40
|
+
# * OCI8::Metadata::Function#arguments
|
41
|
+
# * OCI8::Metadata::Type#type_attrs
|
42
|
+
# * OCI8::Metadata::Type#type_methods
|
43
|
+
# * OCI8::Metadata::TypeMethod#arguments
|
222
44
|
#
|
223
|
-
#
|
224
|
-
#
|
225
|
-
#
|
226
|
-
#
|
227
|
-
#
|
228
|
-
#
|
229
|
-
# col_width = col.data_size
|
230
|
-
# end
|
231
|
-
# end
|
45
|
+
# Example:
|
46
|
+
# conn = OCI8.new('username/passord')
|
47
|
+
# table = conn.describe_table('scott.emp')
|
48
|
+
# table.columns.each do |col|
|
49
|
+
# puts "#{col.name} #{col.data_type_string}"
|
50
|
+
# end
|
232
51
|
module Metadata
|
233
|
-
# Abstract super class
|
52
|
+
# Abstract super class of Metadata classes.
|
234
53
|
class Base
|
235
54
|
# Table 6-1 Attributes Belonging to All Parameters
|
236
55
|
|
237
|
-
#
|
238
|
-
def num_params
|
239
|
-
|
56
|
+
# Returns the number of parameters.
|
57
|
+
def num_params # :nodoc:
|
58
|
+
attr_get_ub2(OCI_ATTR_NUM_PARAMS)
|
240
59
|
end
|
241
60
|
private :num_params
|
242
61
|
|
243
|
-
#
|
62
|
+
# call-seq:
|
63
|
+
# obj_id -> integer or nil
|
64
|
+
#
|
65
|
+
# Returns the object ID, which is the same as the value of the
|
66
|
+
# OBJECT_ID column from ALL_OBJECTS. It returns +nil+
|
67
|
+
# if the database object doesn't have ID.
|
244
68
|
def obj_id
|
245
|
-
|
69
|
+
attr_get_ub4(OCI_ATTR_OBJ_ID)
|
246
70
|
end
|
247
71
|
|
248
|
-
#
|
72
|
+
# call-seq:
|
73
|
+
# obj_name -> string
|
74
|
+
#
|
75
|
+
# Retruns the object name such as table name, view name,
|
76
|
+
# procedure name, and so on.
|
249
77
|
def obj_name
|
250
|
-
|
78
|
+
attr_get_string(OCI_ATTR_OBJ_NAME)
|
251
79
|
end
|
252
80
|
|
253
|
-
#
|
81
|
+
# call-seq:
|
82
|
+
# obj_schema -> string
|
83
|
+
#
|
84
|
+
# Retruns the schema name. It returns +nil+
|
85
|
+
# if the database object is not defined just under a schema.
|
254
86
|
def obj_schema
|
255
|
-
|
87
|
+
attr_get_string(OCI_ATTR_OBJ_SCHEMA)
|
256
88
|
end
|
257
89
|
|
258
90
|
# The timestamp of the object
|
259
|
-
|
260
|
-
|
261
|
-
|
91
|
+
#-
|
92
|
+
# As far as I checked, it is current timestamp, not the object's timestamp. Why?
|
93
|
+
#+
|
94
|
+
#def timestamp
|
95
|
+
# attr_get_oradate(OCI_ATTR_TIMESTAMP)
|
96
|
+
#end
|
262
97
|
|
263
98
|
def inspect # :nodoc:
|
264
99
|
"#<#{self.class.name}:(#{obj_id}) #{obj_schema}.#{obj_name}>"
|
@@ -266,9 +101,9 @@ class OCI8
|
|
266
101
|
private
|
267
102
|
|
268
103
|
def __boolean(idx)
|
269
|
-
|
104
|
+
attr_get_ub1(idx) == 0 ? false : true
|
270
105
|
end
|
271
|
-
alias __word
|
106
|
+
alias __word attr_get_sb4
|
272
107
|
def __anydata(idx); raise NotImplementedError; end
|
273
108
|
|
274
109
|
# SQLT values to name
|
@@ -349,7 +184,7 @@ class OCI8
|
|
349
184
|
# SQLT_REF
|
350
185
|
DATA_TYPE_MAP[110] = [:ref,
|
351
186
|
Proc.new do |p|
|
352
|
-
"#{p.schema_name}.#{p.type_name}"
|
187
|
+
"REF #{p.schema_name}.#{p.type_name}"
|
353
188
|
end]
|
354
189
|
# SQLT_CLOB
|
355
190
|
DATA_TYPE_MAP[112] = [:clob,
|
@@ -418,16 +253,16 @@ class OCI8
|
|
418
253
|
end
|
419
254
|
end]
|
420
255
|
|
421
|
-
def __data_type
|
256
|
+
def __data_type # :nodoc:
|
422
257
|
return @data_type if defined? @data_type
|
423
|
-
entry = DATA_TYPE_MAP[
|
424
|
-
type = entry.nil? ?
|
258
|
+
entry = DATA_TYPE_MAP[attr_get_ub2(OCI_ATTR_DATA_TYPE)]
|
259
|
+
type = entry.nil? ? attr_get_ub2(OCI_ATTR_DATA_TYPE) : entry[0]
|
425
260
|
type = type.call(self) if type.is_a? Proc
|
426
261
|
@data_type = type
|
427
262
|
end
|
428
263
|
|
429
|
-
def __duration
|
430
|
-
case
|
264
|
+
def __duration # :nodoc:
|
265
|
+
case attr_get_ub2(OCI_ATTR_DURATION)
|
431
266
|
when OCI_DURATION_SESSION
|
432
267
|
:session
|
433
268
|
when OCI_DURATION_TRANS
|
@@ -437,8 +272,8 @@ class OCI8
|
|
437
272
|
end
|
438
273
|
end
|
439
274
|
|
440
|
-
def __charset_form
|
441
|
-
case
|
275
|
+
def __charset_form # :nodoc:
|
276
|
+
case attr_get_ub1(OCI_ATTR_CHARSET_FORM)
|
442
277
|
when 1; :implicit # for CHAR, VARCHAR2, CLOB w/o a specified set
|
443
278
|
when 2; :nchar # for NCHAR, NCHAR VARYING, NCLOB
|
444
279
|
when 3; :explicit # for CHAR, etc, with "CHARACTER SET ..." syntax
|
@@ -447,9 +282,9 @@ class OCI8
|
|
447
282
|
end
|
448
283
|
end
|
449
284
|
|
450
|
-
def
|
451
|
-
entry = DATA_TYPE_MAP[
|
452
|
-
type = entry.nil? ? "unknown(#{
|
285
|
+
def __data_type_string # :nodoc:
|
286
|
+
entry = DATA_TYPE_MAP[attr_get_ub2(OCI_ATTR_DATA_TYPE)]
|
287
|
+
type = entry.nil? ? "unknown(#{attr_get_ub2(OCI_ATTR_DATA_TYPE)})" : entry[1]
|
453
288
|
type = type.call(self) if type.is_a? Proc
|
454
289
|
if respond_to?(:nullable?) && !nullable?
|
455
290
|
type + " NOT NULL"
|
@@ -458,8 +293,8 @@ class OCI8
|
|
458
293
|
end
|
459
294
|
end
|
460
295
|
|
461
|
-
def __typecode(idx)
|
462
|
-
case
|
296
|
+
def __typecode(idx) # :nodoc:
|
297
|
+
case attr_get_ub2(idx)
|
463
298
|
when 110; :ref # OCI_TYPECODE_REF
|
464
299
|
when 12; :date # OCI_TYPECODE_DATE
|
465
300
|
when 27; :signed8 # OCI_TYPECODE_SIGNED8
|
@@ -510,18 +345,18 @@ class OCI8
|
|
510
345
|
end
|
511
346
|
end
|
512
347
|
|
513
|
-
#
|
514
|
-
# metadata classes.
|
348
|
+
# Information about database objects which cannot be classified
|
349
|
+
# into other metadata classes.
|
515
350
|
#
|
516
|
-
#
|
351
|
+
# An instance of this class is returned by:
|
517
352
|
# * OCI8::Metadata::Schema#all_objects
|
518
353
|
class Unknown < Base
|
519
354
|
register_ptype OCI_PTYPE_UNK
|
520
355
|
end
|
521
356
|
|
522
|
-
#
|
357
|
+
# Information about tables
|
523
358
|
#
|
524
|
-
#
|
359
|
+
# An instance of this class is returned by:
|
525
360
|
# * OCI8#describe_any(name)
|
526
361
|
# * OCI8#describe_table(name)
|
527
362
|
# * OCI8::Metadata::Schema#all_objects
|
@@ -535,76 +370,126 @@ class OCI8
|
|
535
370
|
|
536
371
|
## Table 6-2 Attributes Belonging to Tables or Views
|
537
372
|
|
538
|
-
#
|
373
|
+
# call-seq:
|
374
|
+
# num_cols -> integer
|
375
|
+
#
|
376
|
+
# Returns number of columns
|
539
377
|
def num_cols
|
540
|
-
|
378
|
+
attr_get_ub2(OCI_ATTR_NUM_COLS)
|
541
379
|
end
|
542
380
|
|
543
381
|
# column list
|
544
|
-
def list_columns
|
382
|
+
def list_columns # :nodoc:
|
545
383
|
__param(OCI_ATTR_LIST_COLUMNS)
|
546
384
|
end
|
547
385
|
private :list_columns
|
548
386
|
|
549
|
-
#
|
387
|
+
# call-seq:
|
388
|
+
# type_metadata -> an OCI8::Metadata::Type or nil
|
389
|
+
#
|
390
|
+
# Retruns an instance of OCI8::Metadata::Type if the table is an
|
391
|
+
# {object table}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjint.htm#sthref61].
|
392
|
+
# Otherwise, +nil+.
|
550
393
|
def type_metadata
|
551
|
-
__type_metadata(OCI8::Metadata::Type)
|
394
|
+
__type_metadata(OCI8::Metadata::Type) if is_typed?
|
552
395
|
end
|
553
396
|
|
554
|
-
#
|
397
|
+
# call-seq:
|
398
|
+
# is_temporary? -> true or false
|
399
|
+
#
|
400
|
+
# Returns +true+ if the table is a
|
401
|
+
# {temporary table}[http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i16096].
|
402
|
+
# Otherwise, +false+.
|
555
403
|
def is_temporary?
|
556
|
-
|
404
|
+
attr_get_ub1(OCI_ATTR_IS_TEMPORARY) != 0
|
557
405
|
end
|
558
406
|
|
559
|
-
#
|
407
|
+
# call-seq:
|
408
|
+
# is_typed? -> true or false
|
409
|
+
#
|
410
|
+
# Returns +true+ if the table is a object table. Otherwise, +false+.
|
560
411
|
def is_typed?
|
561
|
-
|
412
|
+
attr_get_ub1(OCI_ATTR_IS_TYPED) != 0
|
562
413
|
end
|
563
414
|
|
564
|
-
#
|
565
|
-
#
|
415
|
+
# call-seq:
|
416
|
+
# duration -> :transaction, :session or nil
|
417
|
+
#
|
418
|
+
# Retruns +:transaction+ if the table is a
|
419
|
+
# {transaction-specific temporary table}[http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_7002.htm#i2189569].
|
420
|
+
# +:session+ if it is a
|
421
|
+
# {session-specific temporary table}[http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/statements_7002.htm#i2189569].
|
422
|
+
# Otherwise, +nil+.
|
566
423
|
def duration
|
567
424
|
__duration
|
568
425
|
end
|
569
426
|
|
570
427
|
## Table 6-3 Attributes Specific to Tables
|
571
428
|
|
572
|
-
#
|
429
|
+
# call-seq:
|
430
|
+
# dba -> integer
|
431
|
+
#
|
432
|
+
# Returns a Data Block Address(DBA) of the segment header.
|
433
|
+
#
|
434
|
+
# The dba is converted to the file number and the block number
|
435
|
+
# by DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE and
|
436
|
+
# DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK respectively.
|
573
437
|
def dba
|
574
|
-
|
438
|
+
attr_get_ub4(OCI_ATTR_RDBA)
|
575
439
|
end
|
576
440
|
|
577
|
-
#
|
441
|
+
# call-seq:
|
442
|
+
# tablespace -> integer
|
443
|
+
#
|
444
|
+
# Returns a tablespace number the table resides in.
|
578
445
|
def tablespace
|
579
446
|
__word(OCI_ATTR_TABLESPACE)
|
580
447
|
end
|
581
448
|
|
582
|
-
#
|
449
|
+
# call-seq:
|
450
|
+
# clustered? -> true or false
|
451
|
+
#
|
452
|
+
# Returns +true+ if the table is part of a
|
453
|
+
# cluster[http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#CNCPT608].
|
454
|
+
# Otherwise, +false+.
|
583
455
|
def clustered?
|
584
|
-
|
456
|
+
attr_get_ub1(OCI_ATTR_CLUSTERED) != 0
|
585
457
|
end
|
586
458
|
|
587
|
-
#
|
459
|
+
# call-seq:
|
460
|
+
# partitioned? -> true or false
|
461
|
+
#
|
462
|
+
# Returns +true+ if the table is a
|
463
|
+
# {partitioned table}[http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/partconc.htm#i449863].
|
464
|
+
# Otherwise, +false+.
|
588
465
|
def partitioned?
|
589
|
-
|
466
|
+
attr_get_ub1(OCI_ATTR_PARTITIONED) != 0
|
590
467
|
end
|
591
468
|
|
592
|
-
#
|
469
|
+
# call-seq:
|
470
|
+
# index_only? -> true or false
|
471
|
+
#
|
472
|
+
# Returns +true+ if the table is an
|
473
|
+
# {index-organized table}[http://download.oracle.com/docs/cd/B28359_01/server.111/b28318/schema.htm#i23877]
|
474
|
+
# Otherwise, +false+.
|
593
475
|
def index_only?
|
594
|
-
|
476
|
+
attr_get_ub1(OCI_ATTR_INDEX_ONLY) != 0
|
595
477
|
end
|
596
478
|
|
597
|
-
#
|
479
|
+
# call-seq:
|
480
|
+
# columns -> list of column information
|
481
|
+
#
|
482
|
+
# Returns an array of OCI8::Metadata::Column of the table.
|
598
483
|
def columns
|
599
484
|
@columns ||= list_columns.to_a
|
600
485
|
end
|
601
486
|
end
|
602
487
|
|
603
|
-
#
|
488
|
+
# Information about views
|
604
489
|
#
|
605
|
-
#
|
490
|
+
# An instance of this class is returned by:
|
606
491
|
# * OCI8#describe_any(name)
|
607
|
-
# * OCI8#describe_table(name,
|
492
|
+
# * OCI8#describe_table(name, false)
|
608
493
|
# * OCI8#describe_view(name)
|
609
494
|
# * OCI8::Metadata::Schema#all_objects
|
610
495
|
# * OCI8::Metadata::Schema#objects
|
@@ -617,125 +502,163 @@ class OCI8
|
|
617
502
|
|
618
503
|
## Table 6-2 Attributes Belonging to Tables or Views
|
619
504
|
|
620
|
-
#
|
505
|
+
# call-seq:
|
506
|
+
# num_cols -> integer
|
507
|
+
#
|
508
|
+
# Returns number of columns
|
621
509
|
def num_cols
|
622
|
-
|
510
|
+
attr_get_ub2(OCI_ATTR_NUM_COLS)
|
623
511
|
end
|
624
512
|
|
625
513
|
# column list
|
626
|
-
def list_columns
|
514
|
+
def list_columns # :nodoc:
|
627
515
|
__param(OCI_ATTR_LIST_COLUMNS)
|
628
516
|
end
|
629
517
|
private :list_columns
|
630
518
|
|
631
|
-
#
|
632
|
-
def type_metadata
|
633
|
-
|
634
|
-
end
|
519
|
+
# This does't work for view.
|
520
|
+
#def type_metadata
|
521
|
+
# __type_metadata(OCI8::Metadata::Type)
|
522
|
+
#end
|
635
523
|
|
636
|
-
#
|
637
|
-
def is_temporary?
|
638
|
-
|
639
|
-
end
|
524
|
+
# This does't work for view.
|
525
|
+
#def is_temporary?
|
526
|
+
# attr_get_ub1(OCI_ATTR_IS_TEMPORARY) != 0
|
527
|
+
#end
|
640
528
|
|
641
|
-
#
|
642
|
-
def is_typed?
|
643
|
-
|
644
|
-
end
|
529
|
+
# This does't work for view.
|
530
|
+
#def is_typed?
|
531
|
+
# attr_get_ub1(OCI_ATTR_IS_TYPED) != 0
|
532
|
+
#end
|
645
533
|
|
646
|
-
#
|
647
|
-
#
|
648
|
-
|
649
|
-
|
650
|
-
end
|
534
|
+
# This does't work for view.
|
535
|
+
#def duration
|
536
|
+
# __duration
|
537
|
+
#end
|
651
538
|
|
652
|
-
#
|
539
|
+
# call-seq:
|
540
|
+
# columns -> list of column information
|
541
|
+
#
|
542
|
+
# Returns an array of OCI8::Metadata::Column of the table.
|
653
543
|
def columns
|
654
544
|
@columns ||= list_columns.to_a
|
655
545
|
end
|
656
546
|
end
|
657
547
|
|
658
|
-
#
|
548
|
+
# Information about PL/SQL subprograms
|
659
549
|
#
|
660
|
-
|
661
|
-
#
|
662
|
-
|
663
|
-
|
550
|
+
# A PL/SQL subprogram is a named PL/SQL block that can be invoked
|
551
|
+
# with a set of parameters. A subprogram can be either a procedure
|
552
|
+
# or a function.
|
553
|
+
#
|
554
|
+
# This is the abstract base class of OCI8::Metadata::Procedure and
|
555
|
+
# OCI8::Metadata::Function.
|
556
|
+
class Subprogram < Base
|
664
557
|
## Table 6-4 Attribute Belonging to Procedures or Functions
|
665
558
|
|
666
559
|
# Argument list
|
667
|
-
def list_arguments
|
560
|
+
def list_arguments # :nodoc:
|
668
561
|
__param(OCI_ATTR_LIST_ARGUMENTS)
|
669
562
|
end
|
670
563
|
private :list_arguments
|
671
564
|
|
672
|
-
|
565
|
+
def obj_id # :nodoc:
|
566
|
+
super if is_standalone?
|
567
|
+
end
|
568
|
+
|
569
|
+
def obj_name # :nodoc:
|
570
|
+
is_standalone? ? super : attr_get_string(OCI_ATTR_NAME)
|
571
|
+
end
|
572
|
+
|
573
|
+
def obj_schema # :nodoc:
|
574
|
+
super if is_standalone?
|
575
|
+
end
|
576
|
+
|
577
|
+
# call-seq:
|
578
|
+
# is_invoker_rights? -> true or false
|
579
|
+
#
|
580
|
+
# Returns +true+ if the subprogram has
|
581
|
+
# {invoker's rights}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#i18574].
|
582
|
+
# Otherwise, +false+.
|
673
583
|
def is_invoker_rights?
|
674
|
-
|
584
|
+
attr_get_ub1(OCI_ATTR_IS_INVOKER_RIGHTS) != 0
|
675
585
|
end
|
676
586
|
|
677
587
|
## Table 6-5 Attributes Specific to Package Subprograms
|
678
588
|
|
679
|
-
# name of the
|
589
|
+
# name of the subprogram
|
680
590
|
#
|
681
|
-
#
|
682
|
-
|
683
|
-
|
684
|
-
|
591
|
+
#def name
|
592
|
+
# attr_get_string(OCI_ATTR_NAME)
|
593
|
+
#end
|
594
|
+
alias name obj_name # :nodoc: for backward compatibility
|
685
595
|
|
686
|
-
#
|
687
|
-
#
|
688
|
-
# returned may be different from direct query of a PL/SQL
|
689
|
-
# function or procedure. (What this means?)
|
596
|
+
# call-seq:
|
597
|
+
# overload_id -> integer or nil
|
690
598
|
#
|
691
|
-
#
|
599
|
+
# Returns +nil+ for a standalone stored subprogram,
|
600
|
+
# positive integer for a
|
601
|
+
# {overloaded packaged subprogram}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#i12352].
|
602
|
+
# , otherwise zero.
|
692
603
|
def overload_id
|
693
|
-
|
604
|
+
attr_get_ub2(OCI_ATTR_OVERLOAD_ID) unless is_standalone?
|
694
605
|
end
|
695
606
|
|
696
|
-
#
|
607
|
+
# call-seq:
|
608
|
+
# arguments -> list of argument information
|
697
609
|
#
|
698
|
-
#
|
610
|
+
# Returns an array of OCI8::Metadata::Argument of the subprogram.
|
611
|
+
# If it is a function, the first array element is information of its return type.
|
699
612
|
def arguments
|
700
613
|
@arguments ||= list_arguments.to_a
|
701
614
|
end
|
702
615
|
|
616
|
+
# call-seq:
|
617
|
+
# is_standalone? -> true or false
|
618
|
+
#
|
619
|
+
# Returns +true+ if the subprogram is standalone, +false+
|
620
|
+
# if packaged.
|
621
|
+
def is_standalone?
|
622
|
+
@is_standalone = true unless defined? @is_standalone
|
623
|
+
@is_standalone
|
624
|
+
end
|
625
|
+
|
703
626
|
def inspect # :nodoc:
|
704
627
|
"#<#{self.class.name}: #{name}>"
|
705
628
|
end
|
706
629
|
end
|
707
630
|
|
708
|
-
#
|
631
|
+
# Information about procedures
|
709
632
|
#
|
710
|
-
#
|
633
|
+
# An instance of this class is returned by:
|
711
634
|
# * OCI8#describe_any(name)
|
712
635
|
# * OCI8#describe_procedure(name)
|
713
636
|
# * OCI8::Metadata::Schema#all_objects
|
714
637
|
# * OCI8::Metadata::Schema#objects
|
715
638
|
# * OCI8::Metadata::Package#subprograms
|
716
639
|
#
|
717
|
-
# See
|
718
|
-
class Procedure <
|
640
|
+
# See OCI8::Metadata::Subprogram.
|
641
|
+
class Procedure < Subprogram
|
719
642
|
register_ptype OCI_PTYPE_PROC
|
720
643
|
end
|
721
644
|
|
722
|
-
#
|
645
|
+
# Information about functions
|
723
646
|
#
|
724
|
-
#
|
647
|
+
# An instance of this class is returned by:
|
725
648
|
# * OCI8#describe_any(name)
|
726
649
|
# * OCI8#describe_function(name)
|
727
650
|
# * OCI8::Metadata::Schema#all_objects
|
728
651
|
# * OCI8::Metadata::Schema#objects
|
729
652
|
# * OCI8::Metadata::Package#subprograms
|
730
653
|
#
|
731
|
-
# See
|
732
|
-
class Function <
|
654
|
+
# See OCI8::Metadata::Subprogram.
|
655
|
+
class Function < Subprogram
|
733
656
|
register_ptype OCI_PTYPE_FUNC
|
734
657
|
end
|
735
658
|
|
736
|
-
#
|
659
|
+
# Information about packages.
|
737
660
|
#
|
738
|
-
#
|
661
|
+
# An instance of this class is returned by:
|
739
662
|
# * OCI8#describe_any(name)
|
740
663
|
# * OCI8#describe_package(name)
|
741
664
|
# * OCI8::Metadata::Schema#all_objects
|
@@ -746,25 +669,35 @@ class OCI8
|
|
746
669
|
## Table 6-6 Attributes Belonging to Packages
|
747
670
|
|
748
671
|
# subprogram list
|
749
|
-
def list_subprograms
|
672
|
+
def list_subprograms # :nodoc:
|
750
673
|
__param(OCI_ATTR_LIST_SUBPROGRAMS)
|
751
674
|
end
|
752
675
|
private :list_subprograms
|
753
676
|
|
754
|
-
#
|
677
|
+
# call-seq:
|
678
|
+
# is_invoker_rights? -> true or false
|
679
|
+
#
|
680
|
+
# Returns +true+ if the package subprograms have
|
681
|
+
# {invoker's rights}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/subprograms.htm#i18574].
|
682
|
+
# Otherwise, +false+.
|
755
683
|
def is_invoker_rights?
|
756
|
-
|
684
|
+
attr_get_ub1(OCI_ATTR_IS_INVOKER_RIGHTS) != 0
|
757
685
|
end
|
758
686
|
|
759
|
-
#
|
687
|
+
# call-seq:
|
688
|
+
# subprograms -> array
|
689
|
+
#
|
690
|
+
# Returns an array of Function and Procedure defined within the Package.
|
760
691
|
def subprograms
|
761
|
-
@subprograms ||= list_subprograms.to_a
|
692
|
+
@subprograms ||= list_subprograms.to_a.each do |prog|
|
693
|
+
prog.instance_variable_set(:@is_standalone, false)
|
694
|
+
end
|
762
695
|
end
|
763
696
|
end
|
764
697
|
|
765
|
-
#
|
698
|
+
# Information about types
|
766
699
|
#
|
767
|
-
#
|
700
|
+
# An instance of this class is returned by:
|
768
701
|
# * OCI8#describe_any(name)
|
769
702
|
# * OCI8#describe_type(name)
|
770
703
|
# * OCI8::Metadata::Schema#all_objects
|
@@ -779,139 +712,250 @@ class OCI8
|
|
779
712
|
self
|
780
713
|
end
|
781
714
|
|
782
|
-
#
|
715
|
+
# call-seq:
|
716
|
+
# typecode -> :named_type or :named_collection
|
717
|
+
#
|
718
|
+
# Returns +:named_type+ if the type is an object type,
|
719
|
+
# +:named_collection+ if it is a nested table or a varray.
|
783
720
|
def typecode
|
784
721
|
__typecode(OCI_ATTR_TYPECODE)
|
785
722
|
end
|
786
723
|
|
787
|
-
#
|
724
|
+
# call-seq:
|
725
|
+
# collection_typecode -> :table, :varray or nil
|
726
|
+
#
|
727
|
+
# Returns +:table+ if the type is a nested table,
|
728
|
+
# +:varray+ if it is a varray. Otherwise, +nil+.
|
788
729
|
def collection_typecode
|
789
730
|
__typecode(OCI_ATTR_COLLECTION_TYPECODE) if typecode == :named_collection
|
790
731
|
end
|
791
732
|
|
792
|
-
#
|
733
|
+
# call-seq:
|
734
|
+
# is_incomplete_type? -> boolean
|
735
|
+
#
|
736
|
+
# Returns +true+ if the type is an
|
737
|
+
# {incomplete type}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjmng.htm#i1003083],
|
738
|
+
# which is used for {forward declaration}[http://en.wikipedia.org/wiki/Forward_declaration].
|
739
|
+
# Otherwise, +false+.
|
793
740
|
def is_incomplete_type?
|
794
|
-
|
741
|
+
attr_get_ub1(OCI_ATTR_IS_INCOMPLETE_TYPE) != 0
|
795
742
|
end
|
796
743
|
|
797
|
-
#
|
798
|
-
|
799
|
-
|
744
|
+
# call-seq:
|
745
|
+
# is_system_type? -> boolean
|
746
|
+
#
|
747
|
+
# Always returns +false+ because there is no way to create
|
748
|
+
# a type metadata object for a system type such as +NUMBER+,
|
749
|
+
# +CHAR+ and +VARCHAR+.
|
750
|
+
def is_system_type? # :nodoc:
|
751
|
+
attr_get_ub1(OCI_ATTR_IS_SYSTEM_TYPE) != 0
|
800
752
|
end
|
801
753
|
|
802
|
-
#
|
803
|
-
|
804
|
-
|
754
|
+
# call-seq:
|
755
|
+
# is_predefined_type? -> boolean
|
756
|
+
#
|
757
|
+
# Always returns +false+.
|
758
|
+
#--
|
759
|
+
# I don't know the definition of predefined type...
|
760
|
+
def is_predefined_type? # :nodoc:
|
761
|
+
attr_get_ub1(OCI_ATTR_IS_PREDEFINED_TYPE) != 0
|
805
762
|
end
|
806
763
|
|
807
|
-
#
|
808
|
-
|
809
|
-
|
764
|
+
# call-seq:
|
765
|
+
# is_transient_type? -> boolean
|
766
|
+
#
|
767
|
+
# Always returns +false+ because there is no way to create
|
768
|
+
# a type metadata object for a transient type, which is a type
|
769
|
+
# dynamically created by C API.
|
770
|
+
def is_transient_type? # :nodoc:
|
771
|
+
attr_get_ub1(OCI_ATTR_IS_TRANSIENT_TYPE) != 0
|
810
772
|
end
|
811
773
|
|
812
|
-
#
|
813
|
-
|
814
|
-
|
774
|
+
# call-seq:
|
775
|
+
# is_predefined_type? -> boolean
|
776
|
+
#
|
777
|
+
# Always returns +false+.
|
778
|
+
#--
|
779
|
+
# I don't know the definition of system generated type.
|
780
|
+
# What is different with system type and predefined type.
|
781
|
+
def is_system_generated_type? # :nodoc:
|
782
|
+
attr_get_ub1(OCI_ATTR_IS_SYSTEM_GENERATED_TYPE) != 0
|
815
783
|
end
|
816
784
|
|
817
|
-
#
|
785
|
+
# call-seq:
|
786
|
+
# has_nested_table? -> boolean
|
787
|
+
#
|
788
|
+
# Returns +true+ if the type is a nested table or
|
789
|
+
# has a nested table attribute.
|
790
|
+
# Otherwise, +false+.
|
818
791
|
def has_nested_table?
|
819
|
-
|
792
|
+
attr_get_ub1(OCI_ATTR_HAS_NESTED_TABLE) != 0
|
820
793
|
end
|
821
794
|
|
822
|
-
#
|
795
|
+
# call-seq:
|
796
|
+
# has_lob? -> boolean
|
797
|
+
#
|
798
|
+
# Returns +true+ if the type has a CLOB, NCLOB or BLOB
|
799
|
+
# attribute.
|
800
|
+
# Otherwise, +false+.
|
823
801
|
def has_lob?
|
824
|
-
|
802
|
+
attr_get_ub1(OCI_ATTR_HAS_LOB) != 0
|
825
803
|
end
|
826
804
|
|
827
|
-
#
|
805
|
+
# call-seq:
|
806
|
+
# has_file? -> boolean
|
807
|
+
#
|
808
|
+
# Returns +true+ if the type has a BFILE attribute.
|
809
|
+
# Otherwise, +false+.
|
828
810
|
def has_file?
|
829
|
-
|
811
|
+
attr_get_ub1(OCI_ATTR_HAS_FILE) != 0
|
830
812
|
end
|
831
813
|
|
832
|
-
#
|
814
|
+
# call-seq:
|
815
|
+
# collection_element -> element information of the collection type
|
816
|
+
#
|
817
|
+
# Returns an OCI8::Metadata::Collection if the type is a nested
|
818
|
+
# table or a varray.
|
819
|
+
# Otherwise, +nil+.
|
833
820
|
def collection_element
|
834
821
|
__param(OCI_ATTR_COLLECTION_ELEMENT) if typecode == :named_collection
|
835
822
|
end
|
836
823
|
|
837
|
-
#
|
824
|
+
# call-seq:
|
825
|
+
# num_type_attrs -> integer
|
826
|
+
#
|
827
|
+
# Returns number of type attributes.
|
838
828
|
def num_type_attrs
|
839
|
-
|
829
|
+
attr_get_ub2(OCI_ATTR_NUM_TYPE_ATTRS)
|
840
830
|
end
|
841
831
|
|
842
832
|
# list of type attributes
|
843
|
-
def list_type_attrs
|
833
|
+
def list_type_attrs # :nodoc:
|
844
834
|
__param(OCI_ATTR_LIST_TYPE_ATTRS)
|
845
835
|
end
|
846
836
|
private :list_type_attrs
|
847
837
|
|
848
|
-
#
|
838
|
+
# call-seq:
|
839
|
+
# num_type_methods -> integer
|
840
|
+
#
|
841
|
+
# Returns number of type methods.
|
849
842
|
def num_type_methods
|
850
|
-
|
843
|
+
attr_get_ub2(OCI_ATTR_NUM_TYPE_METHODS)
|
851
844
|
end
|
852
845
|
|
853
846
|
# list of type methods
|
854
|
-
def list_type_methods
|
847
|
+
def list_type_methods # :nodoc:
|
855
848
|
__param(OCI_ATTR_LIST_TYPE_METHODS)
|
856
849
|
end
|
857
850
|
private :list_type_methods
|
858
851
|
|
859
|
-
#
|
852
|
+
# call-seq:
|
853
|
+
# map_method -> map method information
|
854
|
+
#
|
855
|
+
# Returns an instance of OCI8::Metadata::TypeMethod of a
|
856
|
+
# {map method}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#sthref180]
|
857
|
+
# if it is defined in the type. Otherwise, +nil+.
|
860
858
|
def map_method
|
861
859
|
__param(OCI_ATTR_MAP_METHOD)
|
862
860
|
end
|
863
861
|
|
864
|
-
#
|
862
|
+
# call-seq:
|
863
|
+
# order_method -> order method information
|
864
|
+
#
|
865
|
+
# Returns an instance of OCI8::Metadata::TypeMethod of a
|
866
|
+
# {order method}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#sthref185]
|
867
|
+
# if it is defined in the type. Otherwise, +nil+.
|
865
868
|
def order_method
|
866
869
|
__param(OCI_ATTR_ORDER_METHOD)
|
867
870
|
end
|
868
871
|
|
869
|
-
#
|
872
|
+
# call-seq:
|
873
|
+
# is_invoker_rights? -> boolean
|
874
|
+
#
|
875
|
+
# Returns +true+ if the type has
|
876
|
+
# {invoker's rights}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/appdev.111/b28371/adobjdes.htm#ADOBJ00810].
|
877
|
+
# Otherwise, +false+.
|
870
878
|
def is_invoker_rights?
|
871
|
-
|
879
|
+
attr_get_ub1(OCI_ATTR_IS_INVOKER_RIGHTS) != 0
|
872
880
|
end
|
873
881
|
|
874
|
-
#
|
882
|
+
# call-seq:
|
883
|
+
# name -> string
|
884
|
+
#
|
885
|
+
# Returns the type name.
|
875
886
|
def name
|
876
|
-
|
887
|
+
attr_get_string(OCI_ATTR_NAME)
|
877
888
|
end
|
878
889
|
|
879
|
-
#
|
890
|
+
# call-seq:
|
891
|
+
# schema_name -> string
|
892
|
+
#
|
893
|
+
# Returns the schema name where the type has been created.
|
880
894
|
def schema_name
|
881
|
-
|
895
|
+
attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
882
896
|
end
|
883
897
|
|
884
|
-
#
|
898
|
+
# call-seq:
|
899
|
+
# is_final_type? -> boolean
|
900
|
+
#
|
901
|
+
# Returns +true+ if the type is a
|
902
|
+
# {final type}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#CIHFBHFC];
|
903
|
+
# in other words, subtypes cannot be derived from the type.
|
904
|
+
# Otherwise, +false+.
|
885
905
|
def is_final_type?
|
886
|
-
|
906
|
+
attr_get_ub1(OCI_ATTR_IS_FINAL_TYPE) != 0
|
887
907
|
end
|
888
908
|
|
889
|
-
#
|
909
|
+
# call-seq:
|
910
|
+
# is_instantiable_type? -> boolean
|
911
|
+
#
|
912
|
+
# Returns +true+ if the type is not declared without
|
913
|
+
# {<tt>NOT INSTANTIABLE</tt>}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#i456586].
|
914
|
+
# Otherwise, +false+.
|
890
915
|
def is_instantiable_type?
|
891
|
-
|
916
|
+
attr_get_ub1(OCI_ATTR_IS_INSTANTIABLE_TYPE) != 0
|
892
917
|
end
|
893
918
|
|
894
|
-
#
|
919
|
+
# call-seq:
|
920
|
+
# is_subtype? -> boolean
|
921
|
+
#
|
922
|
+
# Returns +true+ if the type is a
|
923
|
+
# {subtype}[http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28371/adobjbas.htm#BCFJJADG].
|
924
|
+
# Otherwise, +false+.
|
895
925
|
def is_subtype?
|
896
|
-
|
926
|
+
attr_get_ub1(OCI_ATTR_IS_SUBTYPE) != 0
|
897
927
|
end
|
898
928
|
|
899
|
-
#
|
929
|
+
# call-seq:
|
930
|
+
# supertype_schema_name -> string or nil
|
931
|
+
#
|
932
|
+
# Returns the supertype's schema name if the type is a subtype.
|
933
|
+
# Otherwise, +nil+.
|
900
934
|
def supertype_schema_name
|
901
|
-
|
935
|
+
attr_get_string(OCI_ATTR_SUPERTYPE_SCHEMA_NAME) if is_subtype?
|
902
936
|
end
|
903
937
|
|
904
|
-
#
|
938
|
+
# call-seq:
|
939
|
+
# supertype_name -> string or nil
|
940
|
+
#
|
941
|
+
# Returns the supertype's name if the type is a subtype.
|
942
|
+
# Otherwise, +nil+.
|
905
943
|
def supertype_name
|
906
|
-
|
944
|
+
attr_get_string(OCI_ATTR_SUPERTYPE_NAME) if is_subtype?
|
907
945
|
end
|
908
946
|
|
909
|
-
#
|
947
|
+
# call-seq:
|
948
|
+
# type_attrs -> list of attribute information
|
949
|
+
#
|
950
|
+
# Returns an array of OCI8::Metadata::TypeAttr which the type has.
|
910
951
|
def type_attrs
|
911
952
|
@type_attrs ||= list_type_attrs.to_a
|
912
953
|
end
|
913
954
|
|
914
|
-
#
|
955
|
+
# call-seq:
|
956
|
+
# type_methods -> list of method information
|
957
|
+
#
|
958
|
+
# Returns an array of OCI8::Metadata::TypeMethod which the type has.
|
915
959
|
def type_methods
|
916
960
|
@type_methods ||= list_type_methods.to_a
|
917
961
|
end
|
@@ -934,7 +978,7 @@ class OCI8
|
|
934
978
|
# returned in bytes and not characters for strings and raws. It
|
935
979
|
# returns 22 for NUMBERs.
|
936
980
|
def data_size
|
937
|
-
|
981
|
+
attr_get_ub2(OCI_ATTR_DATA_SIZE)
|
938
982
|
end
|
939
983
|
|
940
984
|
# typecode
|
@@ -949,7 +993,7 @@ class OCI8
|
|
949
993
|
|
950
994
|
# the type attribute name
|
951
995
|
def name
|
952
|
-
|
996
|
+
attr_get_string(OCI_ATTR_NAME)
|
953
997
|
end
|
954
998
|
|
955
999
|
# The precision of numeric type attributes. If the precision is
|
@@ -957,7 +1001,7 @@ class OCI8
|
|
957
1001
|
# NUMBER(precision, scale). For the case when precision is 0,
|
958
1002
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
959
1003
|
def precision
|
960
|
-
__is_implicit? ?
|
1004
|
+
__is_implicit? ? attr_get_sb2(OCI_ATTR_PRECISION) : attr_get_ub1(OCI_ATTR_PRECISION)
|
961
1005
|
end
|
962
1006
|
|
963
1007
|
# The scale of numeric type attributes. If the precision is
|
@@ -965,7 +1009,7 @@ class OCI8
|
|
965
1009
|
# NUMBER(precision, scale). For the case when precision is 0,
|
966
1010
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
967
1011
|
def scale
|
968
|
-
|
1012
|
+
attr_get_sb1(OCI_ATTR_SCALE)
|
969
1013
|
end
|
970
1014
|
|
971
1015
|
# A string which is the type name. The returned value will
|
@@ -975,12 +1019,12 @@ class OCI8
|
|
975
1019
|
# is <tt>:ref</tt>, the type name of the named datatype pointed
|
976
1020
|
# to by the REF is returned.
|
977
1021
|
def type_name
|
978
|
-
|
1022
|
+
attr_get_string(OCI_ATTR_TYPE_NAME)
|
979
1023
|
end
|
980
1024
|
|
981
1025
|
# schema name where the type has been created.
|
982
1026
|
def schema_name
|
983
|
-
|
1027
|
+
attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
984
1028
|
end
|
985
1029
|
|
986
1030
|
# to type metadata if possible
|
@@ -990,7 +1034,7 @@ class OCI8
|
|
990
1034
|
|
991
1035
|
# character set id if the type attribute is of a string/character type.
|
992
1036
|
def charset_id
|
993
|
-
|
1037
|
+
attr_get_ub2(OCI_ATTR_CHARSET_ID)
|
994
1038
|
end
|
995
1039
|
|
996
1040
|
# character set form, if the type attribute is of a string/character type.
|
@@ -1003,24 +1047,24 @@ class OCI8
|
|
1003
1047
|
#
|
1004
1048
|
# (unavailable on Oracle 8.1 or lower)
|
1005
1049
|
def fsprecision
|
1006
|
-
|
1050
|
+
attr_get_ub1(OCI_ATTR_FSPRECISION)
|
1007
1051
|
end
|
1008
1052
|
|
1009
1053
|
# The leading field precision of an interval
|
1010
1054
|
#
|
1011
1055
|
# (unavailable on Oracle 8.1 or lower)
|
1012
1056
|
def lfprecision
|
1013
|
-
|
1057
|
+
attr_get_ub1(OCI_ATTR_LFPRECISION)
|
1014
1058
|
end
|
1015
1059
|
end
|
1016
1060
|
|
1017
1061
|
# character set name if the type attribute is of a string/character type.
|
1018
1062
|
def charset_name
|
1019
|
-
|
1063
|
+
__con.charset_id2name(charset_id)
|
1020
1064
|
end
|
1021
1065
|
|
1022
1066
|
def inspect # :nodoc:
|
1023
|
-
"#<#{self.class.name}: #{name} #{
|
1067
|
+
"#<#{self.class.name}: #{name} #{__data_type_string}>"
|
1024
1068
|
end
|
1025
1069
|
end
|
1026
1070
|
|
@@ -1041,13 +1085,13 @@ class OCI8
|
|
1041
1085
|
|
1042
1086
|
# Name of method (procedure or function)
|
1043
1087
|
def name
|
1044
|
-
|
1088
|
+
attr_get_string(OCI_ATTR_NAME)
|
1045
1089
|
end
|
1046
1090
|
|
1047
1091
|
# encapsulation level of the method. Values are <tt>:public</tt>
|
1048
1092
|
# or <tt>:private</tt>.
|
1049
1093
|
def encapsulation
|
1050
|
-
case
|
1094
|
+
case attr_get_ub4(OCI_ATTR_ENCAPSULATION)
|
1051
1095
|
when 0; :private
|
1052
1096
|
when 1; :public
|
1053
1097
|
end
|
@@ -1154,7 +1198,7 @@ class OCI8
|
|
1154
1198
|
# returned in bytes and not characters for strings and raws. It
|
1155
1199
|
# returns 22 for NUMBERs.
|
1156
1200
|
def data_size
|
1157
|
-
|
1201
|
+
attr_get_ub2(OCI_ATTR_DATA_SIZE)
|
1158
1202
|
end
|
1159
1203
|
|
1160
1204
|
# typecode
|
@@ -1170,7 +1214,7 @@ class OCI8
|
|
1170
1214
|
# the number of elements in an array. It is only valid for
|
1171
1215
|
# collections that are arrays.
|
1172
1216
|
def num_elems
|
1173
|
-
|
1217
|
+
attr_get_ub4(OCI_ATTR_NUM_ELEMS)
|
1174
1218
|
end
|
1175
1219
|
|
1176
1220
|
# The precision of numeric type attributes. If the precision is
|
@@ -1178,7 +1222,7 @@ class OCI8
|
|
1178
1222
|
# NUMBER(precision, scale). For the case when precision is 0,
|
1179
1223
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
1180
1224
|
def precision
|
1181
|
-
__is_implicit? ?
|
1225
|
+
__is_implicit? ? attr_get_sb2(OCI_ATTR_PRECISION) : attr_get_ub1(OCI_ATTR_PRECISION)
|
1182
1226
|
end
|
1183
1227
|
|
1184
1228
|
# The scale of numeric type attributes. If the precision is
|
@@ -1186,7 +1230,7 @@ class OCI8
|
|
1186
1230
|
# NUMBER(precision, scale). For the case when precision is 0,
|
1187
1231
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
1188
1232
|
def scale
|
1189
|
-
|
1233
|
+
attr_get_sb1(OCI_ATTR_SCALE)
|
1190
1234
|
end
|
1191
1235
|
|
1192
1236
|
# A string which is the type name. The returned value will
|
@@ -1195,12 +1239,12 @@ class OCI8
|
|
1195
1239
|
# type is returned. If the datatype is <tt>:ref</tt>, the type name
|
1196
1240
|
# of the named datatype pointed to by the REF is returned.
|
1197
1241
|
def type_name
|
1198
|
-
|
1242
|
+
attr_get_string(OCI_ATTR_TYPE_NAME)
|
1199
1243
|
end
|
1200
1244
|
|
1201
1245
|
# schema name where the type has been created.
|
1202
1246
|
def schema_name
|
1203
|
-
|
1247
|
+
attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
1204
1248
|
end
|
1205
1249
|
|
1206
1250
|
# to type metadata if possible
|
@@ -1210,7 +1254,7 @@ class OCI8
|
|
1210
1254
|
|
1211
1255
|
# character set id if the type attribute is of a string/character type.
|
1212
1256
|
def charset_id
|
1213
|
-
|
1257
|
+
attr_get_ub2(OCI_ATTR_CHARSET_ID)
|
1214
1258
|
end
|
1215
1259
|
|
1216
1260
|
# character set form, if the type attribute is of a string/character type.
|
@@ -1224,7 +1268,7 @@ class OCI8
|
|
1224
1268
|
end
|
1225
1269
|
|
1226
1270
|
def inspect # :nodoc:
|
1227
|
-
"#<#{self.class.name}: #{
|
1271
|
+
"#<#{self.class.name}: #{__data_type_string}>"
|
1228
1272
|
end
|
1229
1273
|
end
|
1230
1274
|
|
@@ -1242,22 +1286,22 @@ class OCI8
|
|
1242
1286
|
|
1243
1287
|
# object id
|
1244
1288
|
def objid
|
1245
|
-
@objid ||=
|
1289
|
+
@objid ||= attr_get_ub4(OCI_ATTR_OBJID)
|
1246
1290
|
end
|
1247
1291
|
|
1248
1292
|
# schema name of the synonym translation
|
1249
1293
|
def schema_name
|
1250
|
-
@schema_name ||=
|
1294
|
+
@schema_name ||= attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
1251
1295
|
end
|
1252
1296
|
|
1253
1297
|
# object name of the synonym translation
|
1254
1298
|
def name
|
1255
|
-
@name ||=
|
1299
|
+
@name ||= attr_get_string(OCI_ATTR_NAME)
|
1256
1300
|
end
|
1257
1301
|
|
1258
1302
|
# database link name of the synonym translation or nil
|
1259
1303
|
def link
|
1260
|
-
@link ||=
|
1304
|
+
@link ||= attr_get_string(OCI_ATTR_LINK)
|
1261
1305
|
@link.size == 0 ? nil : @link
|
1262
1306
|
end
|
1263
1307
|
|
@@ -1289,7 +1333,7 @@ class OCI8
|
|
1289
1333
|
|
1290
1334
|
# object id
|
1291
1335
|
def objid
|
1292
|
-
|
1336
|
+
attr_get_ub4(OCI_ATTR_OBJID)
|
1293
1337
|
end
|
1294
1338
|
|
1295
1339
|
# minimum value
|
@@ -1339,14 +1383,14 @@ class OCI8
|
|
1339
1383
|
#
|
1340
1384
|
# (unavailable on Oracle 8.1 or lower)
|
1341
1385
|
def char_used?
|
1342
|
-
|
1386
|
+
attr_get_ub1(OCI_ATTR_CHAR_USED) != 0
|
1343
1387
|
end
|
1344
1388
|
|
1345
1389
|
# returns the column character length which is the number of
|
1346
1390
|
# characters allowed in the column. It is the counterpart of
|
1347
1391
|
# OCI8::Metadata::Column#data_size which gets the byte length.
|
1348
1392
|
def char_size
|
1349
|
-
|
1393
|
+
attr_get_ub2(OCI_ATTR_CHAR_SIZE)
|
1350
1394
|
end
|
1351
1395
|
else
|
1352
1396
|
def char_used?
|
@@ -1364,7 +1408,7 @@ class OCI8
|
|
1364
1408
|
# character-length semantics columns when using Oracle 9i
|
1365
1409
|
# or upper.
|
1366
1410
|
def data_size
|
1367
|
-
|
1411
|
+
attr_get_ub2(OCI_ATTR_DATA_SIZE)
|
1368
1412
|
end
|
1369
1413
|
|
1370
1414
|
# the datatype of the column.
|
@@ -1374,7 +1418,7 @@ class OCI8
|
|
1374
1418
|
|
1375
1419
|
# column name
|
1376
1420
|
def name
|
1377
|
-
|
1421
|
+
attr_get_string(OCI_ATTR_NAME)
|
1378
1422
|
end
|
1379
1423
|
|
1380
1424
|
# The precision of numeric columns. If the precision is nonzero
|
@@ -1382,7 +1426,7 @@ class OCI8
|
|
1382
1426
|
# NUMBER(precision, scale). For the case when precision is 0,
|
1383
1427
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
1384
1428
|
def precision
|
1385
|
-
__is_implicit? ?
|
1429
|
+
__is_implicit? ? attr_get_sb2(OCI_ATTR_PRECISION) : attr_get_ub1(OCI_ATTR_PRECISION)
|
1386
1430
|
end
|
1387
1431
|
|
1388
1432
|
# The scale of numeric columns. If the precision is nonzero and
|
@@ -1390,7 +1434,7 @@ class OCI8
|
|
1390
1434
|
# NUMBER(precision, scale). For the case when precision is 0,
|
1391
1435
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
1392
1436
|
def scale
|
1393
|
-
|
1437
|
+
attr_get_sb1(OCI_ATTR_SCALE)
|
1394
1438
|
end
|
1395
1439
|
|
1396
1440
|
# Returns 0 if null values are not permitted for the column
|
@@ -1405,19 +1449,19 @@ class OCI8
|
|
1405
1449
|
# type name of the named datatype pointed to by the REF is
|
1406
1450
|
# returned
|
1407
1451
|
def type_name
|
1408
|
-
rv =
|
1452
|
+
rv = attr_get_string(OCI_ATTR_TYPE_NAME)
|
1409
1453
|
rv.length == 0 ? nil : rv
|
1410
1454
|
end
|
1411
1455
|
|
1412
1456
|
# Returns a string with the schema name under which the type has been created
|
1413
1457
|
def schema_name
|
1414
|
-
rv =
|
1458
|
+
rv = attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
1415
1459
|
rv.length == 0 ? nil : rv
|
1416
1460
|
end
|
1417
1461
|
|
1418
1462
|
# to type metadata if possible
|
1419
1463
|
def type_metadata
|
1420
|
-
case
|
1464
|
+
case attr_get_ub2(OCI_ATTR_DATA_TYPE)
|
1421
1465
|
when 108, 110 # named_type or ref
|
1422
1466
|
__type_metadata(OCI8::Metadata::Type)
|
1423
1467
|
else
|
@@ -1427,7 +1471,7 @@ class OCI8
|
|
1427
1471
|
|
1428
1472
|
# The character set id, if the column is of a string/character type
|
1429
1473
|
def charset_id
|
1430
|
-
|
1474
|
+
attr_get_ub2(OCI_ATTR_CHARSET_ID)
|
1431
1475
|
end
|
1432
1476
|
|
1433
1477
|
# The character set form, if the column is of a string/character type
|
@@ -1443,14 +1487,14 @@ class OCI8
|
|
1443
1487
|
#
|
1444
1488
|
# (unavailable on Oracle 8.1 or lower)
|
1445
1489
|
def fsprecision
|
1446
|
-
|
1490
|
+
attr_get_ub1(OCI_ATTR_FSPRECISION)
|
1447
1491
|
end
|
1448
1492
|
|
1449
1493
|
# The leading field precision of an interval
|
1450
1494
|
#
|
1451
1495
|
# (unavailable on Oracle 8.1 or lower)
|
1452
1496
|
def lfprecision
|
1453
|
-
|
1497
|
+
attr_get_ub1(OCI_ATTR_LFPRECISION)
|
1454
1498
|
end
|
1455
1499
|
end
|
1456
1500
|
|
@@ -1459,16 +1503,17 @@ class OCI8
|
|
1459
1503
|
__charset_name(charset_id)
|
1460
1504
|
end
|
1461
1505
|
|
1462
|
-
def
|
1463
|
-
|
1506
|
+
def data_type_string
|
1507
|
+
__data_type_string
|
1464
1508
|
end
|
1509
|
+
alias :type_string :data_type_string # :nodoc: old name of data_type_string
|
1465
1510
|
|
1466
1511
|
def to_s
|
1467
|
-
%Q{"#{name}" #{
|
1512
|
+
%Q{"#{name}" #{__data_type_string}}
|
1468
1513
|
end
|
1469
1514
|
|
1470
1515
|
def inspect # :nodoc:
|
1471
|
-
"#<#{self.class.name}: #{name} #{
|
1516
|
+
"#<#{self.class.name}: #{name} #{__data_type_string}>"
|
1472
1517
|
end
|
1473
1518
|
end
|
1474
1519
|
|
@@ -1478,12 +1523,12 @@ class OCI8
|
|
1478
1523
|
|
1479
1524
|
# the argument name
|
1480
1525
|
def name
|
1481
|
-
|
1526
|
+
attr_get_string(OCI_ATTR_NAME)
|
1482
1527
|
end
|
1483
1528
|
|
1484
1529
|
# the position of the argument in the argument list.
|
1485
1530
|
def position
|
1486
|
-
|
1531
|
+
attr_get_ub2(OCI_ATTR_POSITION)
|
1487
1532
|
end
|
1488
1533
|
|
1489
1534
|
# typecode
|
@@ -1500,7 +1545,7 @@ class OCI8
|
|
1500
1545
|
# returned in bytes and not characters for strings and raws. It
|
1501
1546
|
# returns 22 for NUMBERs.
|
1502
1547
|
def data_size
|
1503
|
-
|
1548
|
+
attr_get_ub2(OCI_ATTR_DATA_SIZE)
|
1504
1549
|
end
|
1505
1550
|
|
1506
1551
|
# The precision of numeric arguments. If the precision is
|
@@ -1508,7 +1553,7 @@ class OCI8
|
|
1508
1553
|
# NUMBER(precision, scale). For the case when precision is 0,
|
1509
1554
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
1510
1555
|
def precision
|
1511
|
-
__is_implicit? ?
|
1556
|
+
__is_implicit? ? attr_get_sb2(OCI_ATTR_PRECISION) : attr_get_ub1(OCI_ATTR_PRECISION)
|
1512
1557
|
end
|
1513
1558
|
|
1514
1559
|
# The scale of numeric arguments. If the precision is nonzero
|
@@ -1516,17 +1561,17 @@ class OCI8
|
|
1516
1561
|
# NUMBER(precision, scale). For the case when precision is 0,
|
1517
1562
|
# NUMBER(precision, scale) can be represented simply as NUMBER.
|
1518
1563
|
def scale
|
1519
|
-
|
1564
|
+
attr_get_sb1(OCI_ATTR_SCALE)
|
1520
1565
|
end
|
1521
1566
|
|
1522
1567
|
# The datatype levels. This attribute always returns zero.
|
1523
1568
|
def level
|
1524
|
-
|
1569
|
+
attr_get_ub2(OCI_ATTR_LEVEL)
|
1525
1570
|
end
|
1526
1571
|
|
1527
1572
|
# Indicates whether an argument has a default
|
1528
1573
|
def has_default
|
1529
|
-
|
1574
|
+
attr_get_ub1(OCI_ATTR_HAS_DEFAULT)
|
1530
1575
|
end
|
1531
1576
|
|
1532
1577
|
# The list of arguments at the next level (when the argument is
|
@@ -1539,7 +1584,7 @@ class OCI8
|
|
1539
1584
|
# Indicates the argument mode. Values are <tt>:in</tt>,
|
1540
1585
|
# <tt>:out</tt> or <tt>:inout</tt>
|
1541
1586
|
def iomode
|
1542
|
-
case
|
1587
|
+
case attr_get_ub4(OCI_ATTR_IOMODE)
|
1543
1588
|
when 0; :in
|
1544
1589
|
when 1; :out
|
1545
1590
|
when 2; :inout
|
@@ -1548,7 +1593,7 @@ class OCI8
|
|
1548
1593
|
|
1549
1594
|
# Returns a radix (if number type)
|
1550
1595
|
def radix
|
1551
|
-
|
1596
|
+
attr_get_ub1(OCI_ATTR_RADIX)
|
1552
1597
|
end
|
1553
1598
|
|
1554
1599
|
# doesn't work.
|
@@ -1563,20 +1608,20 @@ class OCI8
|
|
1563
1608
|
# datatype's type is returned. If the datatype is <tt>:ref</tt>, the type
|
1564
1609
|
# name of the named datatype pointed to by the REF is returned.
|
1565
1610
|
def type_name
|
1566
|
-
|
1611
|
+
attr_get_string(OCI_ATTR_TYPE_NAME)
|
1567
1612
|
end
|
1568
1613
|
|
1569
1614
|
# For <tt>:named_type</tt> or <tt>:ref</tt>, returns a string with the schema name
|
1570
1615
|
# under which the type was created, or under which the package
|
1571
1616
|
# was created in the case of package local types
|
1572
1617
|
def schema_name
|
1573
|
-
|
1618
|
+
attr_get_string(OCI_ATTR_SCHEMA_NAME)
|
1574
1619
|
end
|
1575
1620
|
|
1576
1621
|
# For <tt>:named_type</tt> or <tt>:ref</tt>, returns a string with the type name,
|
1577
1622
|
# in the case of package local types
|
1578
1623
|
def sub_name
|
1579
|
-
|
1624
|
+
attr_get_string(OCI_ATTR_SUB_NAME)
|
1580
1625
|
end
|
1581
1626
|
|
1582
1627
|
# For <tt>:named_type</tt> or <tt>:ref</tt>, returns a string with the database
|
@@ -1584,7 +1629,7 @@ class OCI8
|
|
1584
1629
|
# happen only in the case of package local types, when the
|
1585
1630
|
# package is remote.
|
1586
1631
|
def link
|
1587
|
-
|
1632
|
+
attr_get_string(OCI_ATTR_LINK)
|
1588
1633
|
end
|
1589
1634
|
|
1590
1635
|
# to type metadata if possible
|
@@ -1595,7 +1640,7 @@ class OCI8
|
|
1595
1640
|
# Returns the character set ID if the argument is of a
|
1596
1641
|
# string/character type
|
1597
1642
|
def charset_id
|
1598
|
-
|
1643
|
+
attr_get_ub2(OCI_ATTR_CHARSET_ID)
|
1599
1644
|
end
|
1600
1645
|
|
1601
1646
|
# Returns the character set form if the argument is of a
|
@@ -1617,7 +1662,7 @@ class OCI8
|
|
1617
1662
|
end
|
1618
1663
|
|
1619
1664
|
def inspect # :nodoc:
|
1620
|
-
"#<#{self.class.name}: #{name} #{
|
1665
|
+
"#<#{self.class.name}: #{name} #{__data_type_string}>"
|
1621
1666
|
end
|
1622
1667
|
end
|
1623
1668
|
|
@@ -1664,7 +1709,7 @@ class OCI8
|
|
1664
1709
|
end
|
1665
1710
|
else
|
1666
1711
|
def ltype
|
1667
|
-
|
1712
|
+
attr_get_ub2(OCI_ATTR_LTYPE)
|
1668
1713
|
end
|
1669
1714
|
end
|
1670
1715
|
|
@@ -1715,41 +1760,51 @@ class OCI8
|
|
1715
1760
|
# array of objects in the schema.
|
1716
1761
|
# This includes unusable objects.
|
1717
1762
|
def all_objects
|
1718
|
-
|
1763
|
+
@all_objects ||=
|
1719
1764
|
begin
|
1720
|
-
|
1721
|
-
|
1722
|
-
|
1723
|
-
|
1765
|
+
begin
|
1766
|
+
objs = list_objects
|
1767
|
+
rescue OCIError => exc
|
1768
|
+
if exc.code != -1
|
1769
|
+
raise
|
1770
|
+
end
|
1771
|
+
# describe again.
|
1772
|
+
objs = __con.describe_schema(obj_schema).list_objects
|
1724
1773
|
end
|
1725
|
-
|
1726
|
-
|
1774
|
+
objs.to_a.collect! do |elem|
|
1775
|
+
case elem
|
1776
|
+
when OCI8::Metadata::Type
|
1777
|
+
# to avoid a segmentation fault
|
1778
|
+
begin
|
1779
|
+
__con.describe_type(elem.obj_schema + '.' + elem.obj_name)
|
1780
|
+
rescue OCIError
|
1781
|
+
# ignore ORA-24372: invalid object for describe
|
1782
|
+
raise if $!.code != 24372
|
1783
|
+
end
|
1784
|
+
else
|
1785
|
+
elem
|
1786
|
+
end
|
1787
|
+
end.compact
|
1727
1788
|
end
|
1728
|
-
@all_objects = objs.to_a
|
1729
|
-
end
|
1730
|
-
@all_objects
|
1731
1789
|
end
|
1732
1790
|
|
1733
1791
|
# array of objects in the schema.
|
1734
1792
|
def objects
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
|
1742
|
-
obj.objid
|
1743
|
-
false
|
1744
|
-
rescue OCIError
|
1745
|
-
true
|
1746
|
-
end
|
1747
|
-
else
|
1793
|
+
@objects ||= all_objects.reject do |obj|
|
1794
|
+
case obj
|
1795
|
+
when Unknown
|
1796
|
+
true
|
1797
|
+
when Synonym
|
1798
|
+
begin
|
1799
|
+
obj.objid
|
1748
1800
|
false
|
1801
|
+
rescue OCIError
|
1802
|
+
true
|
1749
1803
|
end
|
1804
|
+
else
|
1805
|
+
false
|
1750
1806
|
end
|
1751
1807
|
end
|
1752
|
-
@objects
|
1753
1808
|
end
|
1754
1809
|
|
1755
1810
|
def inspect # :nodoc:
|
@@ -1768,17 +1823,17 @@ class OCI8
|
|
1768
1823
|
|
1769
1824
|
# database version
|
1770
1825
|
def version
|
1771
|
-
|
1826
|
+
attr_get_string(OCI_ATTR_VERSION)
|
1772
1827
|
end
|
1773
1828
|
|
1774
1829
|
# database character set Id
|
1775
1830
|
def charset_id
|
1776
|
-
|
1831
|
+
attr_get_ub2(OCI_ATTR_CHARSET_ID)
|
1777
1832
|
end
|
1778
1833
|
|
1779
1834
|
# database national language support character set Id
|
1780
1835
|
def ncharset_id
|
1781
|
-
|
1836
|
+
attr_get_ub2(OCI_ATTR_NCHARSET_ID)
|
1782
1837
|
end
|
1783
1838
|
|
1784
1839
|
# List of schemas in the database
|
@@ -1789,12 +1844,12 @@ class OCI8
|
|
1789
1844
|
|
1790
1845
|
# Maximum length of a procedure name
|
1791
1846
|
def max_proc_len
|
1792
|
-
|
1847
|
+
attr_get_ub4(OCI_ATTR_MAX_PROC_LEN)
|
1793
1848
|
end
|
1794
1849
|
|
1795
1850
|
# Maximum length of a column name
|
1796
1851
|
def max_column_len
|
1797
|
-
|
1852
|
+
attr_get_ub4(OCI_ATTR_MAX_COLUMN_LEN)
|
1798
1853
|
end
|
1799
1854
|
|
1800
1855
|
# How a COMMIT operation affects cursors and prepared statements in
|
@@ -1805,7 +1860,7 @@ class OCI8
|
|
1805
1860
|
# application can still re-execute the
|
1806
1861
|
# statement without re-preparing it
|
1807
1862
|
def cursor_commit_behavior
|
1808
|
-
case
|
1863
|
+
case attr_get_ub1(OCI_ATTR_CURSOR_COMMIT_BEHAVIOR)
|
1809
1864
|
when 0; :cusror_open
|
1810
1865
|
when 1; :cursor_closed
|
1811
1866
|
end
|
@@ -1813,13 +1868,13 @@ class OCI8
|
|
1813
1868
|
|
1814
1869
|
# Maximum length of a catalog (database) name
|
1815
1870
|
def max_catalog_namelen
|
1816
|
-
|
1871
|
+
attr_get_ub1(OCI_ATTR_MAX_CATALOG_NAMELEN)
|
1817
1872
|
end
|
1818
1873
|
|
1819
1874
|
# Position of the catalog in a qualified table. Values are
|
1820
1875
|
# <tt>:cl_start</tt> and <tt>:cl_end</tt>
|
1821
1876
|
def catalog_location
|
1822
|
-
case
|
1877
|
+
case attr_get_ub1(OCI_ATTR_CATALOG_LOCATION)
|
1823
1878
|
when 0; :cl_start
|
1824
1879
|
when 1; :cl_end
|
1825
1880
|
end
|
@@ -1828,7 +1883,7 @@ class OCI8
|
|
1828
1883
|
# Does database support savepoints? Values are
|
1829
1884
|
# <tt>:sp_supported</tt> and <tt>:sp_unsupported</tt>
|
1830
1885
|
def savepoint_support
|
1831
|
-
case
|
1886
|
+
case attr_get_ub1(OCI_ATTR_SAVEPOINT_SUPPORT)
|
1832
1887
|
when 0; :sp_supported
|
1833
1888
|
when 1; :sp_unsupported
|
1834
1889
|
end
|
@@ -1837,7 +1892,7 @@ class OCI8
|
|
1837
1892
|
# Does database support the nowait clause? Values are
|
1838
1893
|
# <tt>:nw_supported</tt> and <tt>:nw_unsupported</tt>
|
1839
1894
|
def nowait_support
|
1840
|
-
case
|
1895
|
+
case attr_get_ub1(OCI_ATTR_NOWAIT_SUPPORT)
|
1841
1896
|
when 0; :nw_supported
|
1842
1897
|
when 1; :nw_unsupported
|
1843
1898
|
end
|
@@ -1846,7 +1901,7 @@ class OCI8
|
|
1846
1901
|
# Is autocommit mode required for DDL statements? Values are
|
1847
1902
|
# <tt>:ac_ddl</tt> and <tt>:no_ac_ddl</tt>
|
1848
1903
|
def autocommit_ddl
|
1849
|
-
case
|
1904
|
+
case attr_get_ub1(OCI_ATTR_AUTOCOMMIT_DDL)
|
1850
1905
|
when 0; :ac_ddl
|
1851
1906
|
when 1; :no_ac_ddl
|
1852
1907
|
end
|
@@ -1855,7 +1910,7 @@ class OCI8
|
|
1855
1910
|
# Locking mode for the database. Values are <tt>:lock_immediate</tt> and
|
1856
1911
|
# <tt>:lock_delayed</tt>
|
1857
1912
|
def locking_mode
|
1858
|
-
case
|
1913
|
+
case attr_get_ub1(OCI_ATTR_LOCKING_MODE)
|
1859
1914
|
when 0; :lock_immediate
|
1860
1915
|
when 1; :lock_delayed
|
1861
1916
|
end
|
@@ -1888,19 +1943,19 @@ class OCI8
|
|
1888
1943
|
# Table 6-18 Attributes Specific to Rules
|
1889
1944
|
|
1890
1945
|
def condition
|
1891
|
-
|
1946
|
+
attr_get_string(OCI_ATTR_CONDITION)
|
1892
1947
|
end
|
1893
1948
|
|
1894
1949
|
def eval_context_owner
|
1895
|
-
|
1950
|
+
attr_get_string(OCI_ATTR_EVAL_CONTEXT_OWNER)
|
1896
1951
|
end
|
1897
1952
|
|
1898
1953
|
def eval_context_name
|
1899
|
-
|
1954
|
+
attr_get_string(OCI_ATTR_EVAL_CONTEXT_NAME)
|
1900
1955
|
end
|
1901
1956
|
|
1902
1957
|
def comment
|
1903
|
-
|
1958
|
+
attr_get_string(OCI_ATTR_COMMENT)
|
1904
1959
|
end
|
1905
1960
|
|
1906
1961
|
# def list_action_context
|
@@ -1914,15 +1969,15 @@ class OCI8
|
|
1914
1969
|
# Table 6-19 Attributes Specific to Rule Sets
|
1915
1970
|
|
1916
1971
|
def eval_context_owner
|
1917
|
-
|
1972
|
+
attr_get_string(OCI_ATTR_EVAL_CONTEXT_OWNER)
|
1918
1973
|
end
|
1919
1974
|
|
1920
1975
|
def eval_context_name
|
1921
|
-
|
1976
|
+
attr_get_string(OCI_ATTR_EVAL_CONTEXT_NAME)
|
1922
1977
|
end
|
1923
1978
|
|
1924
1979
|
def comment
|
1925
|
-
|
1980
|
+
attr_get_string(OCI_ATTR_COMMENT)
|
1926
1981
|
end
|
1927
1982
|
|
1928
1983
|
# def list_rules
|
@@ -1936,11 +1991,11 @@ class OCI8
|
|
1936
1991
|
# Table 6-20 Attributes Specific to Evaluation Contexts
|
1937
1992
|
|
1938
1993
|
def evaluation_function
|
1939
|
-
|
1994
|
+
attr_get_string(OCI_ATTR_EVALUATION_FUNCTION)
|
1940
1995
|
end
|
1941
1996
|
|
1942
1997
|
def comment
|
1943
|
-
|
1998
|
+
attr_get_string(OCI_ATTR_COMMENT)
|
1944
1999
|
end
|
1945
2000
|
|
1946
2001
|
def list_table_aliases
|
@@ -1958,11 +2013,11 @@ class OCI8
|
|
1958
2013
|
# Table 6-21 Attributes Specific to Table Aliases
|
1959
2014
|
|
1960
2015
|
def name
|
1961
|
-
|
2016
|
+
attr_get_string(OCI_ATTR_NAME)
|
1962
2017
|
end
|
1963
2018
|
|
1964
2019
|
def table_name
|
1965
|
-
|
2020
|
+
attr_get_string(OCI_ATTR_TABLE_NAME)
|
1966
2021
|
end
|
1967
2022
|
end
|
1968
2023
|
|
@@ -1972,19 +2027,19 @@ class OCI8
|
|
1972
2027
|
# Table 6-22 Attributes Specific to Variable Types
|
1973
2028
|
|
1974
2029
|
def name
|
1975
|
-
|
2030
|
+
attr_get_string(OCI_ATTR_NAME)
|
1976
2031
|
end
|
1977
2032
|
|
1978
2033
|
def var_type
|
1979
|
-
|
2034
|
+
attr_get_string(OCI_ATTR_VAR_TYPE)
|
1980
2035
|
end
|
1981
2036
|
|
1982
2037
|
def var_value_function
|
1983
|
-
|
2038
|
+
attr_get_string(OCI_ATTR_VAR_VALUE_FUNCTION)
|
1984
2039
|
end
|
1985
2040
|
|
1986
2041
|
def var_method_function
|
1987
|
-
|
2042
|
+
attr_get_string(OCI_ATTR_VAR_METHOD_FUNCTION)
|
1988
2043
|
end
|
1989
2044
|
end
|
1990
2045
|
|
@@ -1994,7 +2049,7 @@ class OCI8
|
|
1994
2049
|
# Table 6-23 Attributes Specific to Name Value Pair
|
1995
2050
|
|
1996
2051
|
def name
|
1997
|
-
|
2052
|
+
attr_get_string(OCI_ATTR_NAME)
|
1998
2053
|
end
|
1999
2054
|
|
2000
2055
|
# not implemented
|