ruby-oci8 2.0.6-x86-mingw32 → 2.1.0-x86-mingw32
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/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
|